diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/build-appimage.sh nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/build-appimage.sh --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/build-appimage.sh 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/build-appimage.sh 2022-01-03 12:25:12.000000000 +0000 @@ -2,88 +2,78 @@ set -xe -export APPNAME=${APPNAME:-nextcloud} -export BUILD_UPDATER=${BUILD_UPDATER:-OFF} -export BUILDNR=${BUILDNR:-0000} -export DESKTOP_CLIENT_ROOT=${DESKTOP_CLIENT_ROOT:-/home/user} - -#Set Qt-5.15 -export QT_BASE_DIR=/opt/qt5.15 +mkdir /app +mkdir /build +#Set Qt-5.12 +export QT_BASE_DIR=/opt/qt5.12.10 export QTDIR=$QT_BASE_DIR export PATH=$QT_BASE_DIR/bin:$PATH export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH -# Set defaults +#Set APPID for .desktop file processing +export LINUX_APPLICATION_ID=com.nextcloud.desktopclient.nextcloud + +#set defaults export SUFFIX=${DRONE_PULL_REQUEST:=master} if [ $SUFFIX != "master" ]; then SUFFIX="PR-$SUFFIX" fi -if [ "$BUILD_UPDATER" != "OFF" ]; then - BUILD_UPDATER=ON -fi - -mkdir /app -# QtKeyChain +#QtKeyChain v0.10.0 +cd /build git clone https://github.com/frankosterfeld/qtkeychain.git cd qtkeychain git checkout v0.10.0 mkdir build cd build -cmake -G Ninja -D CMAKE_INSTALL_PREFIX=/app/usr .. -cmake --build . --target all -cmake --build . --target install - +cmake -D CMAKE_INSTALL_PREFIX=/usr ../ +make -j4 +make install -# Build client +#Build client +cd /build mkdir build-client cd build-client -cmake \ - -G Ninja \ - -D CMAKE_INSTALL_PREFIX=/app/usr \ +cmake -D CMAKE_INSTALL_PREFIX=/usr \ -D BUILD_TESTING=OFF \ - -D BUILD_UPDATER=$BUILD_UPDATER \ - -D MIRALL_VERSION_BUILD=$BUILDNR \ - -D MIRALL_VERSION_SUFFIX="$VERSION_SUFFIX" \ - ${DESKTOP_CLIENT_ROOT} -cmake --build . --target all -cmake --build . --target install + -D BUILD_UPDATER=ON \ + -DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \ + -DMIRALL_VERSION_BUILD=$DRONE_BUILD_NUMBER \ + $DRONE_WORKSPACE +make -j4 +make DESTDIR=/app install # Move stuff around cd /app -mv usr/lib/x86_64-linux-gnu/* usr/lib/ - -mkdir usr/plugins -mv usr/lib/${APPNAME}sync_vfs_suffix.so usr/plugins -mv usr/lib/${APPNAME}sync_vfs_xattr.so usr/plugins +mv ./usr/lib/x86_64-linux-gnu/* ./usr/lib/ +rm -rf ./usr/lib/cmake +rm -rf ./usr/include +rm -rf ./usr/mkspecs +rm -rf ./usr/lib/x86_64-linux-gnu/ - -rm -rf usr/lib/cmake -rm -rf usr/include -rm -rf usr/mkspecs -rm -rf usr/lib/x86_64-linux-gnu/ +# Don't bundle nextcloudcmd as we don't run it anyway +rm -rf ./usr/bin/nextcloudcmd # Don't bundle the explorer extentions as we can't do anything with them in the AppImage -rm -rf usr/share/caja-python/ -rm -rf usr/share/nautilus-python/ -rm -rf usr/share/nemo-python/ +rm -rf ./usr/share/caja-python/ +rm -rf ./usr/share/nautilus-python/ +rm -rf ./usr/share/nemo-python/ # Move sync exclude to right location -mv usr/etc/*/sync-exclude.lst usr/bin/ -rm -rf etc +mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/ +rm -rf ./etc -# com.nextcloud.desktopclient.nextcloud.desktop -DESKTOP_FILE=$(ls /app/usr/share/applications/*.desktop) +DESKTOP_FILE=/app/usr/share/applications/${LINUX_APPLICATION_ID}.desktop sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' ${DESKTOP_FILE} # Bug in desktop file? cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME # Because distros need to get their shit together -cp -R /usr/lib/x86_64-linux-gnu/libssl.so* ./usr/lib/ -cp -R /usr/lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/ +cp -R /lib/x86_64-linux-gnu/libssl.so* ./usr/lib/ +cp -R /lib/x86_64-linux-gnu/libcrypto.so* ./usr/lib/ cp -P /usr/local/lib/libssl.so* ./usr/lib/ cp -P /usr/local/lib/libcrypto.so* ./usr/lib/ @@ -91,23 +81,19 @@ cp -P -r /usr/lib/x86_64-linux-gnu/nss ./usr/lib/ # Use linuxdeployqt to deploy -wget --ca-directory=/etc/ssl/certs -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" +cd /build +wget --ca-directory=/etc/ssl/certs/ -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" chmod a+x linuxdeployqt*.AppImage ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract rm ./linuxdeployqt-continuous-x86_64.AppImage unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH export LD_LIBRARY_PATH=/app/usr/lib/ -./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs -qmldir=${DESKTOP_CLIENT_ROOT}/src/gui +./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs -qmldir=$DRONE_WORKSPACE/src/gui # Set origin -./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/lib${APPNAME}sync.so.0 +./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0 # Build AppImage -./squashfs-root/AppRun ${DESKTOP_FILE} -appimage -updateinformation="gh-releases-zsync|nextcloud-releases|desktop|latest|Nextcloud-*-x86_64.AppImage.zsync" +./squashfs-root/AppRun ${DESKTOP_FILE} -appimage -#move AppImage -if [ ! -z "$DRONE_COMMIT" ] -then - mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage -fi -mv *.AppImage ${DESKTOP_CLIENT_ROOT}/ +mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/count_compiler_warnings.py nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/count_compiler_warnings.py --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/count_compiler_warnings.py 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/count_compiler_warnings.py 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +# Small script that counts the warnings which the compiler emits +# and takes care that not more warnings are added. + +import sys +import re +import requests + + +if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} REPOSITORY_PATH") + sys.exit(1) + +repository_path = sys.argv[1] +warning_regex = re.compile(r'warning:', re.M) +max_allowed_warnings_count_response = requests.get( + "https://nextclouddesktopwarningscount.felixweilbach.de") + +if max_allowed_warnings_count_response.status_code != 200: + print('Can not get maximum number of allowed warnings') + sys.exit(1) + +max_allowed_warnings_count = int(max_allowed_warnings_count_response.content) + +print("Max number of allowed warnings:", max_allowed_warnings_count) + +warnings_count = 0 + +for line in sys.stdin: + if warning_regex.findall(line): + warnings_count += 1 + + print(line, end="") + + if warnings_count > max_allowed_warnings_count: + print("Error: Too many warnings! You probably introduced a new warning!") + sys.exit(1) + +print("Total number of warnings:", warnings_count) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/upload-appimage.sh nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/upload-appimage.sh --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/linux/upload-appimage.sh 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/linux/upload-appimage.sh 2022-01-03 12:25:12.000000000 +0000 @@ -24,7 +24,6 @@ # AppImage export APPIMAGE=$(readlink -f ./Nextcloud*.AppImage) -export UPDATE=$(readlink -f ./Nextcloud*.AppImage.zsync) export BASENAME=$(basename ${APPIMAGE}) if ! test -e $APPIMAGE ; then @@ -71,7 +70,6 @@ { uploadUrl=$1 echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $APPIMAGE) - echo $(curl --max-time 900 -u $GIT_USERNAME:$GIT_TOKEN -X POST $uploadUrl --header "Content-Type: application/octet-stream" --upload-file $UPDATE) } delete_release_asset() @@ -134,4 +132,4 @@ fi echo -echo "AppImage link: $browserDownloadUrl" +echo "AppImage link: $browserDownloadUrl" \ No newline at end of file diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -9,7 +9,7 @@ set(MAC_INSTALLER_DO_CUSTOM_BACKGROUND "0") endif() -find_package(Qt5 5.15 COMPONENTS Core REQUIRED) +find_package(Qt5 5.12 COMPONENTS Core REQUIRED) configure_file(create_mac.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/create_mac.sh) configure_file(macosx.pkgproj.cmake ${CMAKE_CURRENT_BINARY_DIR}/macosx.pkgproj) configure_file(pre_install.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/pre_install.sh) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/macosx.pkgproj.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/macosx.pkgproj.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/macosx.pkgproj.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/macosx.pkgproj.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -695,12 +695,7 @@ PROJECT_SETTINGS ADVANCED_OPTIONS - - installer-script.options:hostArchitectures - - x86_64,arm64 - - + BUILD_FORMAT 0 BUILD_PATH diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/make_universal.py nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/make_universal.py --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/admin/osx/make_universal.py 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/admin/osx/make_universal.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -#!/usr/bin/env python - -import sys -import os -import subprocess - - -# A general note: We first produce a x86_64 and a arm64 app package -# and then merge them together instead of compiling the desktop client -# with the CMake option CMAKE_OSX_ARCHITECTURES="x86_64;arm64" because -# macdeployqt can not handle universal binaries well. In the future -# with Qt6 this might change and this script will become obsolete. - - -def usage(program_name): - print("Creates a universal app package from a x86_64 and a arm64 app package.") - print("Usage: {} x86_64_app_file arm64_app_file output_directory".format(program_name)) - print("Example: {} some_dir/Nextcloud.app some_other_dir/Nextcloud.app output_dir".format(program_name)) - - -def execute(command): - return subprocess.check_output(command) - - -def path_relative_to_package(app_package_file_path, file_path): - if file_path.startswith(app_package_file_path): - relative_path = file_path[len(app_package_file_path):] - if relative_path.startswith("/"): - return relative_path[1:] - return relative_path - return file_path - - -def is_executable(file_path): - output = str(execute(["file", file_path])) - if (("Mach-O 64-bit dynamically linked shared library" in output) - or ("Mach-O 64-bit executable" in output)): - return True - return False - - -if __name__ == "__main__": - if len(sys.argv) != 4: - usage(sys.argv[0]) - sys.exit(1) - - x86_64_app_file = sys.argv[1] - if not os.path.exists(x86_64_app_file): - print("Can't create universal: Path {} already exists".format(x86_64_app_file)) - sys.exit(1) - arm64_app_file = sys.argv[2] - if not os.path.exists(arm64_app_file): - print("Can't create universal: Path {} already exists".format(arm64_app_file)) - sys.exit(1) - output_dir = sys.argv[3] - - # Copy the Arm64 variant to the output location if possible - if not os.path.exists(output_dir): - os.makedirs(output_dir) - app_file_name = os.path.basename(arm64_app_file) - universal_app_file = os.path.join(output_dir, app_file_name) - if os.path.exists(universal_app_file): - print("Can't create universal: Path {} already exists".format(universal_app_file)) - sys.exit(1) - - execute(["cp", "-a", arm64_app_file, output_dir]) - - # Now walk through the copied arm64 version and replace the binaries - for root, dirs, files in os.walk(universal_app_file): - for f in files: - absoulte_file_path = os.path.join(root, f) - root_relative = path_relative_to_package(universal_app_file, root) - x86_64_absolute_path = os.path.join(x86_64_app_file, root_relative, f) - arm64_absolute_path = os.path.join(arm64_app_file, root_relative, f) - if os.path.islink(absoulte_file_path) or not is_executable(absoulte_file_path): - continue - try: - execute(["lipo", "-create", "-output", absoulte_file_path, arm64_absolute_path, x86_64_absolute_path]) - except: - print("Could not merge {} with {} into {}!".format(arm64_absolute_path, x86_64_absolute_path, absoulte_file_path)) - - print("Finished :)") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/appveyor.yml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/appveyor.yml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/appveyor.yml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/appveyor.yml 2022-01-03 12:25:12.000000000 +0000 @@ -32,6 +32,9 @@ build_script: - ps: | craft --src-dir $env:APPVEYOR_BUILD_FOLDER nextcloud-client + craft --package --src-dir $env:APPVEYOR_BUILD_FOLDER nextcloud-client + cp C:\CraftMaster\windows-msvc2019_64-cl\tmp\*.7z $env:APPVEYOR_BUILD_FOLDER + cp C:\CraftMaster\windows-msvc2019_64-cl\tmp\*.exe $env:APPVEYOR_BUILD_FOLDER test_script: - ps: | @@ -40,3 +43,7 @@ environment: matrix: - TARGET: windows-msvc2019_64-cl + +artifacts: + - path: '*.7z' + - path: '*.exe' diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.clang-format nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.clang-format --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.clang-format 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.clang-format 2022-01-03 12:25:12.000000000 +0000 @@ -12,7 +12,7 @@ BasedOnStyle: WebKit Standard: Cpp11 -ColumnLimit: 120 +ColumnLimit: 0 # Disable reflow of qdoc comments: indentation rules are different. # Translation comments are also excluded @@ -61,5 +61,3 @@ MaxEmptyLinesToKeep: 2 KeepEmptyLinesAtTheStartOfBlocks: false -SpaceBeforeCpp11BracedList: false -Cpp11BracedListStyle: true diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.clang-tidy nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.clang-tidy --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.clang-tidy 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.clang-tidy 2022-01-03 12:25:12.000000000 +0000 @@ -24,7 +24,7 @@ modernize-use-nodiscard, modernize-use-equals-default, modernize-use-noexcept, - modernize-use-override, + modernize-user-override, modernize-use-nullptr, modernize-use-transparent-functors, modernize-use-uncaught-exceptions, diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/ECMAddAppIcon.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/ECMAddAppIcon.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/ECMAddAppIcon.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/ECMAddAppIcon.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -41,7 +41,7 @@ # target does not have the ``WIN32_EXECUTABLE`` property set. # * One of the tools png2ico (See :find-module:`FindPng2Ico`) or # icotool (see :find-module:`FindIcoTool`) is required. -# * Supported sizes: 16, 20, 24, 32, 40, 48, 64, 128, 256, 512 and 1024. +# * Supported sizes: 16, 24, 32, 48, 64, 128, 256, 512 and 1024. # # Mac OS X notes # * The executable target must have the ``MACOSX_BUNDLE`` property set. @@ -102,12 +102,9 @@ function(ecm_add_app_icon appsources) set(options) - set(oneValueArgs OUTFILE_BASENAME ICON_INDEX) - set(multiValueArgs ICONS SIDEBAR_ICONS RC_DEPENDENCIES) + set(oneValueArgs OUTFILE_BASENAME) + set(multiValueArgs ICONS SIDEBAR_ICONS) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if (NOT ARG_ICON_INDEX) - set(ARG_ICON_INDEX 1) - endif() if(NOT ARG_ICONS) message(FATAL_ERROR "No ICONS argument given to ecm_add_app_icon") @@ -141,11 +138,8 @@ endforeach() endif() - if (WIN32) - _ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;20;24;32;40;48;64;128;256;512;1024") - else() - _ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;24;32;48;64;128;256;512;1024") - endif() + + _ecm_add_app_icon_categorize_icons("${ARG_ICONS}" "icons" "16;24;32;48;64;128;256;512;1024") if(ARG_SIDEBAR_ICONS) _ecm_add_app_icon_categorize_icons("${ARG_SIDEBAR_ICONS}" "sidebar_icons" "16;32;64;128;256") endif() @@ -174,10 +168,8 @@ set(windows_icons ${icons_at_16px} - ${icons_at_20px} ${icons_at_24px} ${icons_at_32px} - ${icons_at_40px} ${icons_at_48px} ${icons_at_64px} ${icons_at_128px} @@ -212,12 +204,12 @@ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) # this bit's a little hacky to make the dependency stuff work - file(WRITE "${_outfilename}.rc.in" "IDI_ICON${ARG_ICON_INDEX} ICON DISCARDABLE \"${_outfilename}.ico\"\n") + file(WRITE "${_outfilename}.rc.in" "IDI_ICON1 ICON DISCARDABLE \"${_outfilename}.ico\"\n") add_custom_command( OUTPUT "${_outfilename}.rc" COMMAND ${CMAKE_COMMAND} ARGS -E copy "${_outfilename}.rc.in" "${_outfilename}.rc" - DEPENDS ${ARG_RC_DEPENDENCIES} "${_outfilename}.ico" + DEPENDS "${_outfilename}.ico" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) endfunction() @@ -234,7 +226,7 @@ endif() endforeach() - foreach(size 16 20 24 32 40 48 64 128 ${maxSize}) + foreach(size 16 24 32 48 64 128 ${maxSize}) if(NOT icons_at_${size}px) continue() endif() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/GNUInstallDirs.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/GNUInstallDirs.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/GNUInstallDirs.cmake 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/GNUInstallDirs.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,253 @@ +#.rst: +# GNUInstallDirs +# -------------- +# +# Define GNU standard installation directories +# +# Provides install directory variables as defined for GNU software: +# +# :: +# +# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html +# +# Inclusion of this module defines the following variables: +# +# :: +# +# CMAKE_INSTALL_ - destination for files of a given type +# CMAKE_INSTALL_FULL_ - corresponding absolute path +# +# where is one of: +# +# :: +# +# BINDIR - user executables (bin) +# SBINDIR - system admin executables (sbin) +# LIBEXECDIR - program executables (libexec) +# SYSCONFDIR - read-only single-machine data (etc) +# SHAREDSTATEDIR - modifiable architecture-independent data (com) +# LOCALSTATEDIR - modifiable single-machine data (var) +# LIBDIR - object code libraries (lib or lib64 or lib/ on Debian) +# INCLUDEDIR - C header files (include) +# OLDINCLUDEDIR - C header files for non-gcc (/usr/include) +# DATAROOTDIR - read-only architecture-independent data root (share) +# DATADIR - read-only architecture-independent data (DATAROOTDIR) +# INFODIR - info documentation (DATAROOTDIR/info) +# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) +# MANDIR - man documentation (DATAROOTDIR/man) +# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) +# +# Each CMAKE_INSTALL_ value may be passed to the DESTINATION +# options of install() commands for the corresponding file type. If the +# includer does not define a value the above-shown default will be used +# and the value will appear in the cache for editing by the user. Each +# CMAKE_INSTALL_FULL_ value contains an absolute path constructed +# from the corresponding destination by prepending (if necessary) the +# value of CMAKE_INSTALL_PREFIX. + +#============================================================================= +# Copyright 2011 Nikita Krupen'ko +# Copyright 2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Installation directories +# +if(NOT DEFINED CMAKE_INSTALL_BINDIR) + set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SBINDIR) + set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR) + set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) + set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR) + set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR) + set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)") +endif() + +# We check if the variable was manually set and not cached, in order to +# allow projects to set the values as normal variables before including +# GNUInstallDirs to avoid having the entries cached or user-editable. It +# replaces the "if(NOT DEFINED CMAKE_INSTALL_XXX)" checks in all the +# other cases. +# If CMAKE_INSTALL_LIBDIR is defined, if _libdir_set is false, then the +# variable is a normal one, otherwise it is a cache one. +get_property(_libdir_set CACHE CMAKE_INSTALL_LIBDIR PROPERTY TYPE SET) +if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set + AND DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX + AND NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL "${CMAKE_INSTALL_PREFIX}")) + # If CMAKE_INSTALL_LIBDIR is not defined, it is always executed. + # Otherwise: + # * if _libdir_set is false it is not executed (meaning that it is + # not a cache variable) + # * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is not defined it is + # not executed + # * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX and + # CMAKE_INSTALL_PREFIX are the same string it is not executed. + # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is updated after the + # execution, of this part of code, therefore at the next inclusion + # of the file, CMAKE_INSTALL_LIBDIR is defined, and the 2 strings + # are equal, meaning that the if is not executed the code the + # second time. + + set(_LIBDIR_DEFAULT "lib") + # Override this default 'lib' with 'lib64' iff: + # - we are on Linux system but NOT cross-compiling + # - we are NOT on debian + # - we are on a 64 bits system + # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf + # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if + # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu" + # and CMAKE_INSTALL_PREFIX is "/usr" + # See http://wiki.debian.org/Multiarch + if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX) + set(__LAST_LIBDIR_DEFAULT "lib") + # __LAST_LIBDIR_DEFAULT is the default value that we compute from + # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX, not a cache entry for + # the value that was last used as the default. + # This value is used to figure out whether the user changed the + # CMAKE_INSTALL_LIBDIR value manually, or if the value was the + # default one. When CMAKE_INSTALL_PREFIX changes, the value is + # updated to the new default, unless the user explicitly changed it. + endif() + if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$" + AND NOT CMAKE_CROSSCOMPILING) + if (EXISTS "/etc/debian_version") # is this a debian system ? + if(CMAKE_LIBRARY_ARCHITECTURE) + set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + endif() + else() # not debian, rely on CMAKE_SIZEOF_VOID_P: + if(NOT DEFINED CMAKE_SIZEOF_VOID_P) + message(AUTHOR_WARNING + "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. " + "Please enable at least one language before including GNUInstallDirs.") + else() + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(_LIBDIR_DEFAULT "lib64") + if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX) + set(__LAST_LIBDIR_DEFAULT "lib64") + endif() + endif() + endif() + endif() + endif() + if(NOT DEFINED CMAKE_INSTALL_LIBDIR) + set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})") + elseif(DEFINED __LAST_LIBDIR_DEFAULT + AND "${__LAST_LIBDIR_DEFAULT}" STREQUAL "${CMAKE_INSTALL_LIBDIR}") + set_property(CACHE CMAKE_INSTALL_LIBDIR PROPERTY VALUE "${_LIBDIR_DEFAULT}") + endif() +endif() +# Save for next run +set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run") +unset(_libdir_set) +unset(__LAST_LIBDIR_DEFAULT) + + +if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR) + set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR) + set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) + set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") +endif() + +#----------------------------------------------------------------------------- +# Values whose defaults are relative to DATAROOTDIR. Store empty values in +# the cache and store the defaults in local variables if the cache values are +# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. + +if(NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") + set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}") +endif() + +if(NOT CMAKE_INSTALL_INFODIR) + set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)") + set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info") +endif() + +if(NOT CMAKE_INSTALL_LOCALEDIR) + set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") + set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale") +endif() + +if(NOT CMAKE_INSTALL_MANDIR) + set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)") + set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man") +endif() + +if(NOT CMAKE_INSTALL_DOCDIR) + set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") + set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}") +endif() + +#----------------------------------------------------------------------------- + +mark_as_advanced( + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_SBINDIR + CMAKE_INSTALL_LIBEXECDIR + CMAKE_INSTALL_SYSCONFDIR + CMAKE_INSTALL_SHAREDSTATEDIR + CMAKE_INSTALL_LOCALSTATEDIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_OLDINCLUDEDIR + CMAKE_INSTALL_DATAROOTDIR + CMAKE_INSTALL_DATADIR + CMAKE_INSTALL_INFODIR + CMAKE_INSTALL_LOCALEDIR + CMAKE_INSTALL_MANDIR + CMAKE_INSTALL_DOCDIR + ) + +# Result directories +# +foreach(dir + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + LOCALEDIR + MANDIR + DOCDIR + ) + if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}") + else() + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}") + endif() +endforeach() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/Warnings.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/Warnings.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/cmake/modules/Warnings.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/cmake/modules/Warnings.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -27,4 +27,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") endif() + if(DEFINED MIRALL_FATAL_WARNINGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif(DEFINED MIRALL_FATAL_WARNINGS) endif() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -42,13 +42,10 @@ set(CRASHREPORTER_EXECUTABLE "${APPLICATION_EXECUTABLE}_crash_reporter") endif() -include(Warnings) +set(synclib_NAME "${APPLICATION_EXECUTABLE}sync") +set(csync_NAME "${APPLICATION_EXECUTABLE}_csync") -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - add_compile_options(-fdiagnostics-color=always) -elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - add_compile_options(-fcolor-diagnostics) -endif() +include(Warnings) include(${CMAKE_SOURCE_DIR}/VERSION.cmake) # For config.h @@ -77,9 +74,9 @@ get_git_head_revision(GIT_REFSPEC GIT_SHA1) add_definitions( - -DQT_DISABLE_DEPRECATED_BEFORE=0x000000 -DQT_USE_QSTRINGBUILDER -DQT_MESSAGELOGCONTEXT #enable function name and line number in debug output + -DQT_DEPRECATED_WARNINGS ) # if we cannot get it from git, directly try .tag (packages) @@ -96,15 +93,30 @@ message(STATUS "GIT_SHA1 ${GIT_SHA1}") set(SYSCONFDIR ${SYSCONF_INSTALL_DIR}) -set(SHAREDIR ${CMAKE_INSTALL_DATADIR}) - -# Build MacOS app bundle if wished -if(APPLE AND BUILD_OWNCLOUD_OSX_BUNDLE) - message(STATUS "Build MacOS app bundle") +set(DATADIR ${DATA_INSTALL_DIR}) +if(WIN32) +set(DATADIR "share") +endif(WIN32) +set(SHAREDIR ${DATADIR}) + +##### +## handle BUILD_OWNCLOUD_OSX_BUNDLE +# BUILD_OWNCLOUD_OSX_BUNDLE was not initialized OR set to true on OSX +if(APPLE AND (NOT DEFINED BUILD_OWNCLOUD_OSX_BUNDLE OR BUILD_OWNCLOUD_OSX_BUNDLE)) + set(BUILD_OWNCLOUD_OSX_BUNDLE ON) set(OWNCLOUD_OSX_BUNDLE "${APPLICATION_NAME}.app") set(LIB_INSTALL_DIR "${APPLICATION_NAME}.app/Contents/MacOS") set(BIN_INSTALL_DIR "${APPLICATION_NAME}.app/Contents/MacOS") + +# BUILD_OWNCLOUD_OSX_BUNDLE was disabled on OSX +elseif(APPLE AND NOT BUILD_OWNCLOUD_OSX_BUNDLE) + message(FATAL_ERROR "Building in non-bundle mode on OSX is currently not supported. Comment this error out if you want to work on/test it.") + +# any other platform +else() + set(BUILD_OWNCLOUD_OSX_BUNDLE OFF) endif() +##### # this option removes Http authentication, keychain, shibboleth etc and is intended for # external authentication mechanisms diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/config.h.in nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/config.h.in --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/config.h.in 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/config.h.in 2022-01-03 12:25:12.000000000 +0000 @@ -29,10 +29,7 @@ #cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@" #cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@" #cmakedefine APPLICATION_VIRTUALFILE_SUFFIX "@APPLICATION_VIRTUALFILE_SUFFIX@" -#cmakedefine APPLICATION_OCSP_STAPLING_ENABLED "@APPLICATION_OCSP_STAPLING_ENABLED@" -#cmakedefine APPLICATION_FORBID_BAD_SSL "@APPLICATION_FORBID_BAD_SSL@" #define APPLICATION_DOTVIRTUALFILE_SUFFIX "." APPLICATION_VIRTUALFILE_SUFFIX -#cmakedefine01 ENFORCE_VIRTUAL_FILES_SYNC_FOLDER #cmakedefine ZLIB_FOUND @ZLIB_FOUND@ diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/changelog nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/changelog --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/changelog 2021-12-27 06:25:50.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/changelog 2022-01-03 12:26:02.000000000 +0000 @@ -1,3578 +1,878 @@ -nextcloud-desktop (3.4.1-20211227.062515.fa32c1001-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.6-20220103.122531.6d3270dd2-1.0~hirsute1) hirsute; urgency=medium - * Merge tag 'v3.4.1' into HEAD + * Merge tag 'v3.3.6' into HEAD - -- Drone User Mon, 27 Dec 2021 06:25:50 +0000 + -- Drone User Mon, 3 Jan 2022 12:26:02 +0000 -nextcloud-desktop (3.4.1-20211217.155251.fa32c1001-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.6-20211028.092540.6d3270dd2-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #4097 from nextcloud/bumpVersion + * Merge pull request #3934 from nextcloud/bump-version-3.3.6 - -- Matthieu Gallien Fri, 17 Dec 2021 16:52:51 +0100 + -- allexzander Thu, 28 Oct 2021 12:25:40 +0300 -nextcloud-desktop (3.4.1-20211217.154428.fe67d66d3-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.6-20211028.091105.680ab3754-1.0~hirsute1) hirsute; urgency=medium - * Release 3.4.1 + * Bump version to 3.3.6 - -- Matthieu Gallien Fri, 17 Dec 2021 16:44:28 +0100 + -- alex-z Thu, 28 Oct 2021 12:11:05 +0300 -nextcloud-desktop (3.4.0-20211217.035543.3a3a6dd6b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211028.090414.b59ec4a0b-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 17 Dec 2021 03:55:43 +0000 - -nextcloud-desktop (3.4.0-20211216.175203.328c673c2-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4094 from nextcloud/backport/4092/stable-3.4 + * Merge pull request #3931 from nextcloud/backport/3901/stable-3.3 - -- Matthieu Gallien Thu, 16 Dec 2021 18:52:03 +0100 + -- allexzander Thu, 28 Oct 2021 12:04:14 +0300 -nextcloud-desktop (3.4.0-20211216.142846.49afad047-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211018.123044.9f74f8521-1.0~hirsute1) hirsute; urgency=medium - * ensure any errors after calling FileSystem::getModTime are handled + * Windows. Remove CWD from DLL search paths. - -- Matthieu Gallien Thu, 16 Dec 2021 15:28:46 +0100 + -- alex-z Mon, 18 Oct 2021 15:30:44 +0300 -nextcloud-desktop (3.4.0-20211216.133707.7c3e91202-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211028.090036.e9a945587-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #4083 from nextcloud/backport/4058/stable-3.4 + * Merge pull request #3932 from nextcloud/backport/3844/stable-3.3 - -- allexzander Thu, 16 Dec 2021 15:37:07 +0200 + -- allexzander Thu, 28 Oct 2021 12:00:36 +0300 -nextcloud-desktop (3.4.0-20211209.111659.e94b18f97-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20211009.152717.43fd6ebf8-1.0~hirsute1) hirsute; urgency=medium - * Added sync stop when failed to cancel delete jobs. + * Fixed the VFS plugin install path - -- alex-z Thu, 9 Dec 2021 13:16:59 +0200 + -- István Váradi Sat, 9 Oct 2021 17:27:17 +0200 -nextcloud-desktop (3.4.0-20211209.091102.79a0b937f-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20210929.132505.4584e8fa0-1.0~hirsute1) hirsute; urgency=medium - * Do not crash on findAndCancelDeletedJob. + * Remove Temporary solution for file restoration issue due to failing to set the data-fingerprint. - -- alex-z Thu, 9 Dec 2021 11:11:02 +0200 + -- alex-z Wed, 29 Sep 2021 16:25:05 +0300 -nextcloud-desktop (3.4.0-20211216.035122.e5fbc8c2d-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211028.034830.39831da3b-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 16 Dec 2021 03:51:22 +0000 - -nextcloud-desktop (3.4.0-20211215.105155.3632cc659-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4080 from nextcloud/backport/4076/stable-3.4 - - -- Matthieu Gallien Wed, 15 Dec 2021 11:51:55 +0100 - -nextcloud-desktop (3.4.0-20211214.113725.1731bf7c8-1.0~hirsute1) hirsute; urgency=medium - - * fix review comment - - -- Matthieu Gallien Tue, 14 Dec 2021 12:37:25 +0100 - -nextcloud-desktop (3.4.0-20211214.102414.936d37fd0-1.0~hirsute1) hirsute; urgency=medium - - * ensure bulk upload jobs finished after an error - - -- Matthieu Gallien Tue, 14 Dec 2021 11:24:14 +0100 + -- Nextcloud bot Thu, 28 Oct 2021 03:48:30 +0000 -nextcloud-desktop (3.4.0-20211215.035048.7259a0bc0-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211027.035238.33e71a248-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Wed, 15 Dec 2021 03:50:48 +0000 - -nextcloud-desktop (3.4.0-20211214.205939.06de878b4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4081 from nextcloud/backport/4079/stable-3.4 - - -- allexzander Tue, 14 Dec 2021 22:59:39 +0200 - -nextcloud-desktop (3.4.0-20211214.154513.179ff27ab-1.0~hirsute1) hirsute; urgency=medium - - * Fix CMake error in ECMAddAppIcon for mac. - - -- alex-z Tue, 14 Dec 2021 17:45:13 +0200 - -nextcloud-desktop (3.4.0-20211214.162056.44da2f2ce-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4078 from nextcloud/backport/4073/stable-3.4 - - -- allexzander Tue, 14 Dec 2021 18:20:56 +0200 - -nextcloud-desktop (3.4.0-20211214.102611.92b302fb3-1.0~hirsute1) hirsute; urgency=medium - - * Save folder settings to config when force-switching VFS. - - -- alex-z Tue, 14 Dec 2021 12:26:11 +0200 + -- Nextcloud bot Wed, 27 Oct 2021 03:52:38 +0000 -nextcloud-desktop (3.4.0-20211213.150729.d2febdf17-1.0~hirsute1) hirsute; urgency=medium - - * Enforce VFS. Disable 'Make always available locally'. - - -- alex-z Mon, 13 Dec 2021 17:07:29 +0200 - -nextcloud-desktop (3.4.0-20211214.152731.9c4b4c618-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4075 from nextcloud/backport/4074/stable-3.4 - - -- Matthieu Gallien Tue, 14 Dec 2021 16:27:31 +0100 - -nextcloud-desktop (3.4.0-20211214.080925.45029e901-1.0~hirsute1) hirsute; urgency=medium - - * force download from server for local files that have invalid dates - - -- Matthieu Gallien Tue, 14 Dec 2021 09:09:25 +0100 - -nextcloud-desktop (3.4.0-20211214.035021.969b0e8e2-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211026.034757.44970c84f-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Tue, 14 Dec 2021 03:50:21 +0000 + -- Nextcloud bot Tue, 26 Oct 2021 03:47:57 +0000 -nextcloud-desktop (3.4.0-20211213.035036.4b46da937-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211025.034438.0f81d4193-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Mon, 13 Dec 2021 03:50:36 +0000 + -- Nextcloud bot Mon, 25 Oct 2021 03:44:38 +0000 -nextcloud-desktop (3.4.0-20211212.035244.8b5dd5351-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211024.034644.c264a6025-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 12 Dec 2021 03:52:44 +0000 + -- Nextcloud bot Sun, 24 Oct 2021 03:46:44 +0000 -nextcloud-desktop (3.4.0-20211211.035131.5ee5b1940-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211023.035042.e0ead91e5-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 11 Dec 2021 03:51:31 +0000 - -nextcloud-desktop (3.4.0-20211210.140100.8e1c62cc7-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4066 from nextcloud/backport/4064/stable-3.4 - - -- Matthieu Gallien Fri, 10 Dec 2021 15:01:00 +0100 + -- Nextcloud bot Sat, 23 Oct 2021 03:50:42 +0000 -nextcloud-desktop (3.4.0-20211210.093933.151e9300c-1.0~hirsute1) hirsute; urgency=medium - - * do not get stuck forever in sync in case of errors - - -- Matthieu Gallien Fri, 10 Dec 2021 10:39:33 +0100 - -nextcloud-desktop (3.4.0-20211210.035452.efc3116f3-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211022.034706.c63421cea-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 10 Dec 2021 03:54:52 +0000 - -nextcloud-desktop (3.4.0-20211209.111311.4296a6041-1.0~hirsute1) hirsute; urgency=medium + -- Nextcloud bot Fri, 22 Oct 2021 03:47:06 +0000 - * Merge pull request #4057 from nextcloud/backport/4055/stable-3.4 - - -- Matthieu Gallien Thu, 9 Dec 2021 12:13:11 +0100 - -nextcloud-desktop (3.4.0-20211208.173356.0d1e0057b-1.0~hirsute1) hirsute; urgency=medium - - * remove files which gets downloaded with an invalid modified time - - -- Matthieu Gallien Wed, 8 Dec 2021 18:33:56 +0100 - -nextcloud-desktop (3.4.0-20211209.035443.5aadc7a62-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211021.035008.4ecd861ae-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 9 Dec 2021 03:54:43 +0000 - -nextcloud-desktop (3.4.0-20211208.124112.3c28e3808-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4050 from nextcloud/backport/4014/stable-3.4 - - -- allexzander Wed, 8 Dec 2021 14:41:12 +0200 - -nextcloud-desktop (3.4.0-20211124.140941.dba8fd7c7-1.0~hirsute1) hirsute; urgency=medium - - * Use different icon for a sync folder on Windows depending on zoom level. - - -- alex-z Wed, 24 Nov 2021 16:09:41 +0200 - -nextcloud-desktop (3.4.0-20211208.101539.39c2bb555-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4051 from nextcloud/backport/4031/stable-3.4 - - -- Camila Wed, 8 Dec 2021 11:15:39 +0100 - -nextcloud-desktop (3.4.0-20211203.084133.39fc86cbc-1.0~hirsute1) hirsute; urgency=medium - - * Always prefill username from Windows login name based on server version + -- Nextcloud bot Thu, 21 Oct 2021 03:50:08 +0000 - -- alex-z Fri, 3 Dec 2021 10:41:33 +0200 - -nextcloud-desktop (3.4.0-20211208.081025.8d574c11e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4049 from nextcloud/backport/4045/stable-3.4 - - -- Matthieu Gallien Wed, 8 Dec 2021 09:10:25 +0100 - -nextcloud-desktop (3.4.0-20211207.144415.c02d87f28-1.0~hirsute1) hirsute; urgency=medium - - * add log statements for each new assert about invalid modified time - - -- Matthieu Gallien Tue, 7 Dec 2021 15:44:15 +0100 - -nextcloud-desktop (3.4.0-20211207.141638.ddb5375c6-1.0~hirsute1) hirsute; urgency=medium - - * recover from local invalid modifie time: force download from server - - -- Matthieu Gallien Tue, 7 Dec 2021 15:16:38 +0100 - -nextcloud-desktop (3.4.0-20211207.140652.bd7860446-1.0~hirsute1) hirsute; urgency=medium - - * prevent cases where desktop client would store invalid modified time - - -- Matthieu Gallien Tue, 7 Dec 2021 15:06:52 +0100 - -nextcloud-desktop (3.4.0-20211207.134408.4920b4d4a-1.0~hirsute1) hirsute; urgency=medium - - * prevent injecting invalid modified time through CfApi calls - - -- Matthieu Gallien Tue, 7 Dec 2021 14:44:08 +0100 - -nextcloud-desktop (3.4.0-20211207.104813.d12d00562-1.0~hirsute1) hirsute; urgency=medium - - * do not consider that a file has changed if its mtime is invalid - - -- Matthieu Gallien Tue, 7 Dec 2021 11:48:13 +0100 - -nextcloud-desktop (3.4.0-20211207.103343.b17bbb2b2-1.0~hirsute1) hirsute; urgency=medium - - * avoid downloading a file from server when modified time is invalid - - -- Matthieu Gallien Tue, 7 Dec 2021 11:33:43 +0100 - -nextcloud-desktop (3.4.0-20211207.102543.fc64edba1-1.0~hirsute1) hirsute; urgency=medium - - * prevent invalid modified time from being propagated - - -- Matthieu Gallien Tue, 7 Dec 2021 11:25:43 +0100 - -nextcloud-desktop (3.4.0-20211206.140757.b6c758141-1.0~hirsute1) hirsute; urgency=medium - - * assert on invalid modtime - - -- Matthieu Gallien Mon, 6 Dec 2021 15:07:57 +0100 - -nextcloud-desktop (3.4.0-20211208.040304.962850f30-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211020.040811.6b2d6abbe-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Wed, 8 Dec 2021 04:03:04 +0000 + -- Nextcloud bot Wed, 20 Oct 2021 04:08:11 +0000 -nextcloud-desktop (3.4.0-20211207.152807.88ab5557b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211019.123549.f751c951c-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #4046 from nextcloud/backport/4033/stable-3.4 + * Merge pull request #3904 from nextcloud/backport/3885/stable-3.3 - -- Matthieu Gallien Tue, 7 Dec 2021 16:28:07 +0100 + -- Matthieu Gallien Tue, 19 Oct 2021 14:35:49 +0200 -nextcloud-desktop (3.4.0-20211203.104345.e3fb3bbe7-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211008.150010.68cb6a4d4-1.0~hirsute1) hirsute; urgency=medium - * do not forget the path when renaming files with invalid names - - -- Matthieu Gallien Fri, 3 Dec 2021 11:43:45 +0100 - -nextcloud-desktop (3.4.0-20211203.114133.a86a1b4c1-1.0~hirsute1) hirsute; urgency=medium - - * test files that should be renamed in sub-directory + * Only use basic authentication if needed - -- Matthieu Gallien Fri, 3 Dec 2021 12:41:33 +0100 + -- Felix Weilbach Fri, 8 Oct 2021 17:00:10 +0200 -nextcloud-desktop (3.4.0-20211207.050703.4326a70ed-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211019.034843.c207231dd-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Tue, 7 Dec 2021 05:07:03 +0000 + -- Nextcloud bot Tue, 19 Oct 2021 03:48:43 +0000 -nextcloud-desktop (3.4.0-20211206.035901.2880bd62c-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211018.034858.c82b07a3f-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Mon, 6 Dec 2021 03:59:01 +0000 + -- Nextcloud bot Mon, 18 Oct 2021 03:48:58 +0000 -nextcloud-desktop (3.4.0-20211205.040608.b49633a9f-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211017.034809.3ec9b62c1-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 5 Dec 2021 04:06:08 +0000 + -- Nextcloud bot Sun, 17 Oct 2021 03:48:09 +0000 -nextcloud-desktop (3.4.0-20211204.040104.adfe7ad95-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211016.034820.3d9f2a2d8-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 4 Dec 2021 04:01:04 +0000 + -- Nextcloud bot Sat, 16 Oct 2021 03:48:20 +0000 -nextcloud-desktop (3.4.0-20211203.035648.e45a01bc0-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211015.035357.52cf1b1db-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 3 Dec 2021 03:56:48 +0000 + -- Nextcloud bot Fri, 15 Oct 2021 03:53:57 +0000 -nextcloud-desktop (3.4.0-20211202.035635.9bcbc1583-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211014.034818.ac96c05a1-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 2 Dec 2021 03:56:35 +0000 + -- Nextcloud bot Thu, 14 Oct 2021 03:48:18 +0000 -nextcloud-desktop (3.4.0-20211201.184548.b4a19bb6d-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211013.034726.d9b53527d-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Wed, 1 Dec 2021 18:45:48 +0000 + -- Nextcloud bot Wed, 13 Oct 2021 03:47:26 +0000 -nextcloud-desktop (3.4.0-20211201.035902.52db45c2b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211012.035009.fc101f01c-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Wed, 1 Dec 2021 03:59:02 +0000 + -- Nextcloud bot Tue, 12 Oct 2021 03:50:09 +0000 -nextcloud-desktop (3.4.0-20211130.035641.b3d8cacf8-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211011.034741.f6487b65a-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Tue, 30 Nov 2021 03:56:41 +0000 - -nextcloud-desktop (3.4.0-20211129.172600.c004db207-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4013 from nextcloud/backport/4012/stable-3.4 - - -- Camila Mon, 29 Nov 2021 18:26:00 +0100 - -nextcloud-desktop (3.4.0-20211129.164344.48ada55e7-1.0~hirsute1) hirsute; urgency=medium - - * fix random error when updating CfApi metadata - - -- Matthieu Gallien Mon, 29 Nov 2021 17:43:44 +0100 - -nextcloud-desktop (3.4.0-20211129.134629.fd60e6054-1.0~hirsute1) hirsute; urgency=medium + -- Nextcloud bot Mon, 11 Oct 2021 03:47:41 +0000 - * Merge pull request #4010 from nextcloud/bump-version - - -- Camila Mon, 29 Nov 2021 14:46:29 +0100 - -nextcloud-desktop (3.4.0-20211129.133329.fb833ed31-1.0~hirsute1) hirsute; urgency=medium - - * Bump VERSION.cmake to 3.4.0. - - -- Camila Mon, 29 Nov 2021 14:33:29 +0100 - -nextcloud-desktop (3.4.0-20211129.035209.1440c53ed-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211010.034903.78612ae03-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Mon, 29 Nov 2021 03:52:09 +0000 + -- Nextcloud bot Sun, 10 Oct 2021 03:49:03 +0000 -nextcloud-desktop (3.4.0-20211128.035040.bd42c35e8-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211009.040550.80017d9eb-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 28 Nov 2021 03:50:40 +0000 + -- Nextcloud bot Sat, 9 Oct 2021 04:05:50 +0000 -nextcloud-desktop (3.4.0-20211127.035351.a5c82670c-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211008.034847.7887e3144-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 27 Nov 2021 03:53:51 +0000 - -nextcloud-desktop (3.4.0-20211126.165001.3c966a77d-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4006 from nextcloud/bugfix/speedUpBulkUpload - - -- Matthieu Gallien Fri, 26 Nov 2021 17:50:01 +0100 - -nextcloud-desktop (3.4.0-20211125.215812.1a9aade28-1.0~hirsute1) hirsute; urgency=medium - - * use the error message sent by the server for bulk upload - - -- Matthieu Gallien Thu, 25 Nov 2021 22:58:12 +0100 - -nextcloud-desktop (3.4.0-20211125.211159.34c4c2887-1.0~hirsute1) hirsute; urgency=medium - - * allow sending parallel batch of files: curretly disabled - - -- Matthieu Gallien Thu, 25 Nov 2021 22:11:59 +0100 - -nextcloud-desktop (3.4.0-20211125.154920.a272b3480-1.0~hirsute1) hirsute; urgency=medium - - * really check that this is a valid answer when receiving batch upload - - -- Matthieu Gallien Thu, 25 Nov 2021 16:49:20 +0100 - -nextcloud-desktop (3.4.0-20211125.154810.05b8d1e40-1.0~hirsute1) hirsute; urgency=medium - - * batch upload: only handle file that are in the reply - - -- Matthieu Gallien Thu, 25 Nov 2021 16:48:10 +0100 - -nextcloud-desktop (3.4.0-20211125.154610.18ef47133-1.0~hirsute1) hirsute; urgency=medium - - * let auto tests of batch upload return proper file paths - - -- Matthieu Gallien Thu, 25 Nov 2021 16:46:10 +0100 - -nextcloud-desktop (3.4.0-20211125.154519.e14502606-1.0~hirsute1) hirsute; urgency=medium + -- Nextcloud bot Fri, 8 Oct 2021 03:48:47 +0000 - * make sure we do not start a new batch when the previous one is not sent - - -- Matthieu Gallien Thu, 25 Nov 2021 16:45:19 +0100 - -nextcloud-desktop (3.4.0-20211125.154457.59953d857-1.0~hirsute1) hirsute; urgency=medium - - * use a proper constant for the size of batch - - -- Matthieu Gallien Thu, 25 Nov 2021 16:44:57 +0100 - -nextcloud-desktop (3.4.0-20211126.143115.436eced9f-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4003 from nextcloud/bugfix/errorBulkUpload - - -- Matthieu Gallien Fri, 26 Nov 2021 15:31:15 +0100 - -nextcloud-desktop (3.4.0-20211125.091747.f56985938-1.0~hirsute1) hirsute; urgency=medium - - * if BulkPropagatorJob abort after an error emit finished signal - - -- Matthieu Gallien Thu, 25 Nov 2021 10:17:47 +0100 - -nextcloud-desktop (3.4.0-20211126.041439.56f4198b2-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211007.035025.ae319a1b1-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 26 Nov 2021 04:14:39 +0000 + -- Nextcloud bot Thu, 7 Oct 2021 03:50:25 +0000 -nextcloud-desktop (3.4.0-20211125.035256.6b22081f6-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211006.034722.90e89a7f9-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 25 Nov 2021 03:52:56 +0000 - -nextcloud-desktop (3.4.0-20211124.170418.a5fa53c46-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #4001 from nextcloud/bumpVersion - - -- Matthieu Gallien Wed, 24 Nov 2021 18:04:18 +0100 - -nextcloud-desktop (3.3.82-20211124.164610.426e0af8c-1.0~hirsute1) hirsute; urgency=medium - - * release 3.4.0 RC2 - - -- Matthieu Gallien Wed, 24 Nov 2021 17:46:10 +0100 - -nextcloud-desktop (3.3.81-20211124.164225.e2f1854b1-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3887 from nextcloud/feature/bulkUpload - - -- Matthieu Gallien Wed, 24 Nov 2021 17:42:25 +0100 - -nextcloud-desktop (2.7.0-20211009.152717.1627ce768-1.0~hirsute1) hirsute; urgency=medium - - * Fixed the VFS plugin install path - - -- István Váradi Sat, 9 Oct 2021 17:27:17 +0200 - -nextcloud-desktop (2.7.0-20210923.174457.ca3530055-1.0~hirsute1) hirsute; urgency=medium - - * Updated sane CMake patch - - -- István Váradi Thu, 23 Sep 2021 19:44:57 +0200 - -nextcloud-desktop (3.4.0-20210908.101001.c194605c3-1.0~hirsute1) hirsute; urgency=medium - - * implement bulk upload - - -- Matthieu Gallien Wed, 8 Sep 2021 12:10:01 +0200 - -nextcloud-desktop (3.4.0-20211028.145527.112be1863-1.0~hirsute1) hirsute; urgency=medium - - * read capabilities for bulk upload from server - - -- Matthieu Gallien Thu, 28 Oct 2021 16:55:27 +0200 - -nextcloud-desktop (3.4.0-20211025.142957.802c7ac90-1.0~hirsute1) hirsute; urgency=medium - - * make AbstractNetworkJob::errorString virtual: it is already overriden - - -- Matthieu Gallien Mon, 25 Oct 2021 16:29:57 +0200 - -nextcloud-desktop (3.4.0-20211124.112629.f575cc186-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3930 from nextcloud/feature/additional-features-for-initial-setup-config - - -- allexzander Wed, 24 Nov 2021 13:26:29 +0200 - -nextcloud-desktop (3.4.0-20211027.155508.b03bf1c1f-1.0~hirsute1) hirsute; urgency=medium - - * Pass username from Windows to login page. - - -- alex-z Wed, 27 Oct 2021 18:55:08 +0300 - -nextcloud-desktop (3.4.0-20211123.161107.9bebda057-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3993 from nextcloud/bugfix/variousVfsFixes - - -- Matthieu Gallien Tue, 23 Nov 2021 17:11:07 +0100 - -nextcloud-desktop (3.4.0-20211122.122858.83a8058b5-1.0~hirsute1) hirsute; urgency=medium - - * improve logging for CfApi - - -- Matthieu Gallien Mon, 22 Nov 2021 13:28:58 +0100 - -nextcloud-desktop (3.4.0-20211122.122700.072e9d44b-1.0~hirsute1) hirsute; urgency=medium - - * gracefully handle one case of invalid handles - - -- Matthieu Gallien Mon, 22 Nov 2021 13:27:00 +0100 - -nextcloud-desktop (3.4.0-20211122.122555.a3013de6e-1.0~hirsute1) hirsute; urgency=medium - - * fix OCC::CfApiWrapper::handleForPath when path does not exist - - -- Matthieu Gallien Mon, 22 Nov 2021 13:25:55 +0100 - -nextcloud-desktop (3.4.0-20211122.122450.9eed62a85-1.0~hirsute1) hirsute; urgency=medium - - * remove too noisy log print - - -- Matthieu Gallien Mon, 22 Nov 2021 13:24:50 +0100 - -nextcloud-desktop (3.4.0-20211123.131345.79282a8df-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3983 from nextcloud/bugfix/only-build-app-bundle-if-needed - - -- Camila Tue, 23 Nov 2021 14:13:45 +0100 - -nextcloud-desktop (3.4.0-20211117.105247.ec64246dc-1.0~hirsute1) hirsute; urgency=medium - - * Only build app bundle if requested - - -- Felix Weilbach Wed, 17 Nov 2021 11:52:47 +0100 + -- Nextcloud bot Wed, 6 Oct 2021 03:47:22 +0000 -nextcloud-desktop (3.4.0-20211123.095806.c89d2abf5-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211005.034747.840c5dcaa-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3994 from nextcloud/bugfix/reset-syncfolder-icon - - -- Matthieu Gallien Tue, 23 Nov 2021 10:58:06 +0100 - -nextcloud-desktop (3.4.0-20211119.140309.b3914f627-1.0~hirsute1) hirsute; urgency=medium - - * Cleanup system bindings from Windows when removing a local sync folder + * [tx-robot] updated from transifex - -- alex-z Fri, 19 Nov 2021 16:03:09 +0200 + -- Nextcloud bot Tue, 5 Oct 2021 03:47:47 +0000 -nextcloud-desktop (3.4.0-20211123.035550.998236dcc-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211004.035120.71133a3ab-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Tue, 23 Nov 2021 03:55:50 +0000 + -- Nextcloud bot Mon, 4 Oct 2021 03:51:20 +0000 -nextcloud-desktop (3.4.0-20211122.145219.d9626bf31-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211003.035303.cfa4ac994-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3989 from nextcloud/bugfix/forceVFS + * [tx-robot] updated from transifex - -- Matthieu Gallien Mon, 22 Nov 2021 15:52:19 +0100 + -- Nextcloud bot Sun, 3 Oct 2021 03:53:03 +0000 -nextcloud-desktop (3.4.0-20211119.174905.684d70985-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20211001.035110.5de9fb3cd-1.0~hirsute1) hirsute; urgency=medium - * fix button that should be disabled when force VFS + * [tx-robot] updated from transifex - -- Matthieu Gallien Fri, 19 Nov 2021 18:49:05 +0100 + -- Nextcloud bot Fri, 1 Oct 2021 03:51:10 +0000 -nextcloud-desktop (3.4.0-20211122.125155.e92842d83-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20210930.111339.0d9a6987e-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3982 from nextcloud/addUserAgentQml + * Merge pull request #3857 from nextcloud/bump-version-3.3.5 - -- Matthieu Gallien Mon, 22 Nov 2021 13:51:55 +0100 + -- Felix Weilbach Thu, 30 Sep 2021 13:13:39 +0200 -nextcloud-desktop (3.4.0-20211117.093605.12c6d6e3b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.5-20210930.111053.229bd8a74-1.0~hirsute1) hirsute; urgency=medium - * add a network access factory to qml engine + * Bump version to 3.3.5 - -- Matthieu Gallien Wed, 17 Nov 2021 10:36:05 +0100 + -- Felix Weilbach Thu, 30 Sep 2021 13:10:53 +0200 -nextcloud-desktop (3.4.0-20211122.122027.1d704d935-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210930.103933.2ded349f9-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3971 from nextcloud/fix/scrolling-activiy-list + * Merge pull request #3851 from nextcloud/backport/3827/stable-3.3 - -- Matthieu Gallien Mon, 22 Nov 2021 13:20:27 +0100 + -- Felix Weilbach Thu, 30 Sep 2021 12:39:33 +0200 -nextcloud-desktop (3.4.0-20211112.200258.38ac585e7-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210923.121334.b27eb606e-1.0~hirsute1) hirsute; urgency=medium - * Add WheelHandler to the Search result list too + * Don't log encryption data in release mode - -- Carl Schwan Fri, 12 Nov 2021 21:02:58 +0100 + -- Felix Weilbach Thu, 23 Sep 2021 14:13:34 +0200 -nextcloud-desktop (3.4.0-20211112.172200.892d289f3-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210930.101058.412be7792-1.0~hirsute1) hirsute; urgency=medium - * [tray] Makes scrolling with a touchpad in activiy list more natural + * Merge pull request #3850 from nextcloud/backport/3832/stable-3.3 - -- Carl Schwan Fri, 12 Nov 2021 18:22:00 +0100 + -- Matthieu Gallien Thu, 30 Sep 2021 12:10:58 +0200 -nextcloud-desktop (3.4.0-20211122.103901.5294c5135-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210925.085912.8d1aa2f38-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3987 from nextcloud/bugfix/upload-new-folder-with-vfs + * Fix review comments + also check against trailing bakslash. - -- allexzander Mon, 22 Nov 2021 12:39:01 +0200 + -- alex-z Sat, 25 Sep 2021 11:59:12 +0300 -nextcloud-desktop (3.4.0-20211118.141314.8e6896ba0-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210924.103301.823313189-1.0~hirsute1) hirsute; urgency=medium - * Quick fix! Disable VFS folders removal for non-Windows VFS. + * Fix incorrect db name for nextcloud command line client. - -- alex-z Thu, 18 Nov 2021 16:13:14 +0200 + -- alex-z Fri, 24 Sep 2021 12:33:01 +0200 -nextcloud-desktop (3.4.0-20211121.035224.b2e86c2ea-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210930.041549.e7e111423-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 21 Nov 2021 03:52:24 +0000 + -- Nextcloud bot Thu, 30 Sep 2021 04:15:49 +0000 -nextcloud-desktop (3.4.0-20211120.041229.8cc58dd8b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210929.035311.25b7f8f1f-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 20 Nov 2021 04:12:29 +0000 - -nextcloud-desktop (3.4.0-20211119.133803.ca1620ef4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3988 from nextcloud/bugfix/runVfsFixOnlyOnce - - -- Matthieu Gallien Fri, 19 Nov 2021 14:38:03 +0100 - -nextcloud-desktop (3.4.0-20211118.144704.f1d834df8-1.0~hirsute1) hirsute; urgency=medium + -- Nextcloud bot Wed, 29 Sep 2021 03:53:11 +0000 - * properly query sync journal DB to know when to run fix for VFS - - -- Matthieu Gallien Thu, 18 Nov 2021 15:47:04 +0100 - -nextcloud-desktop (3.4.0-20211119.094805.502ffc62e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3984 from nextcloud/bugfix/vfs-folder-upload-conflict - - -- allexzander Fri, 19 Nov 2021 11:48:05 +0200 - -nextcloud-desktop (3.4.0-20211102.142106.73db63636-1.0~hirsute1) hirsute; urgency=medium - - * Added more logs to 'postProcessLocalNew'. - - -- alex-z Tue, 2 Nov 2021 16:21:06 +0200 - -nextcloud-desktop (3.4.0-20211119.043547.b222785dc-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210928.035436.d23264f25-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 19 Nov 2021 04:35:47 +0000 + -- Nextcloud bot Tue, 28 Sep 2021 03:54:36 +0000 -nextcloud-desktop (3.4.0-20211118.133740.5454004ef-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210927.035514.c5099f913-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 18 Nov 2021 13:37:40 +0000 + -- Nextcloud bot Mon, 27 Sep 2021 03:55:14 +0000 -nextcloud-desktop (3.4.0-20211118.095850.ed9671c2a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3985 from nextcloud/bugfix/unified-search-open-local-file - - -- Matthieu Gallien Thu, 18 Nov 2021 10:58:50 +0100 - -nextcloud-desktop (3.4.0-20211115.122404.911e35bc5-1.0~hirsute1) hirsute; urgency=medium - - * Use QUrl::fromLocalFile to open local files in Unified Search results. - - -- alex-z Mon, 15 Nov 2021 14:24:04 +0200 - -nextcloud-desktop (3.4.0-20211118.090838.898949d1b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210926.035616.529534064-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 18 Nov 2021 09:08:38 +0000 - -nextcloud-desktop (3.4.0-20211117.103129.ef8fe5824-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3978 from nextcloud/bugfix/correct-placeholder-files + -- Nextcloud bot Sun, 26 Sep 2021 03:56:16 +0000 - -- Matthieu Gallien Wed, 17 Nov 2021 11:31:29 +0100 +nextcloud-desktop (3.3.4-20210925.035453.0be98b161-1.0~hirsute1) hirsute; urgency=medium -nextcloud-desktop (3.4.0-20211116.111108.9e792369b-1.0~hirsute1) hirsute; urgency=medium - - * Refactor key-value store query code - - -- Felix Weilbach Tue, 16 Nov 2021 12:11:08 +0100 - -nextcloud-desktop (3.4.0-20211116.105043.c76a77e43-1.0~hirsute1) hirsute; urgency=medium - - * Correct virtual files placeholder files if needed - - -- Felix Weilbach Tue, 16 Nov 2021 11:50:43 +0100 - -nextcloud-desktop (3.4.0-20211117.091727.2308c9da4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3979 from nextcloud/bugfix/avoidUselessIconDownloads - - -- Felix Weilbach Wed, 17 Nov 2021 10:17:27 +0100 - -nextcloud-desktop (3.4.0-20211116.151144.c59f88ca8-1.0~hirsute1) hirsute; urgency=medium - - * avoid adding icon data in a cache we never use - - -- Matthieu Gallien Tue, 16 Nov 2021 16:11:44 +0100 - -nextcloud-desktop (3.4.0-20211116.135335.3edfcff1a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3972 from nextcloud/fix/accessibility-keyboard - - -- Matthieu Gallien Tue, 16 Nov 2021 14:53:35 +0100 - -nextcloud-desktop (3.4.0-20211112.191715.d84673376-1.0~hirsute1) hirsute; urgency=medium - - * More fixes to the menu implementation + * [tx-robot] updated from transifex - -- Carl Schwan Fri, 12 Nov 2021 20:17:15 +0100 + -- Nextcloud bot Sat, 25 Sep 2021 03:54:53 +0000 -nextcloud-desktop (3.4.0-20211112.175933.69def04ec-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210924.035839.12557272f-1.0~hirsute1) hirsute; urgency=medium - * Fix focus indicator + * [tx-robot] updated from transifex - -- Carl Schwan Fri, 12 Nov 2021 18:59:33 +0100 + -- Nextcloud bot Fri, 24 Sep 2021 03:58:39 +0000 -nextcloud-desktop (3.4.0-20211116.092558.3e1a46f2d-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210923.041256.c66659214-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3969 from nextcloud/bugfix/finder-arch + * [tx-robot] updated from transifex - -- Matthieu Gallien Tue, 16 Nov 2021 10:25:58 +0100 + -- Nextcloud bot Thu, 23 Sep 2021 04:12:56 +0000 -nextcloud-desktop (3.4.0-20211112.120335.113ba716e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210922.035703.bf865f930-1.0~hirsute1) hirsute; urgency=medium - * Compile finder extensions for arm and x86 + * [tx-robot] updated from transifex - -- Felix Weilbach Fri, 12 Nov 2021 13:03:35 +0100 + -- Nextcloud bot Wed, 22 Sep 2021 03:57:03 +0000 -nextcloud-desktop (3.4.0-20211116.085337.703037cbf-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210921.035732.9e932c9af-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3968 from nextcloud/bugfix/user-status-disabled + * [tx-robot] updated from transifex - -- Matthieu Gallien Tue, 16 Nov 2021 09:53:37 +0100 + -- Nextcloud bot Tue, 21 Sep 2021 03:57:32 +0000 -nextcloud-desktop (3.4.0-20211112.105516.07a8e8c91-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210920.125107.dcc0fa9f9-1.0~hirsute1) hirsute; urgency=medium - * Check if the server has user status app enabled + * Merge pull request #3817 from nextcloud/bump-3.3.4 - -- Felix Weilbach Fri, 12 Nov 2021 11:55:16 +0100 + -- allexzander Mon, 20 Sep 2021 15:51:07 +0300 -nextcloud-desktop (3.4.0-20211115.161924.df745ef39-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.4-20210920.123743.26dfa3983-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3970 from nextcloud/updateDoc + * Bump version to 3.3.4 - -- Matthieu Gallien Mon, 15 Nov 2021 17:19:24 +0100 + -- alex-z Mon, 20 Sep 2021 14:37:43 +0200 -nextcloud-desktop (3.4.0-20211112.141853.2665c8fc1-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210920.035321.ed99ffaee-1.0~hirsute1) hirsute; urgency=medium - * we run on Windows 8.1+ + * [tx-robot] updated from transifex - -- Matthieu Gallien Fri, 12 Nov 2021 15:18:53 +0100 + -- Nextcloud bot Mon, 20 Sep 2021 03:53:21 +0000 -nextcloud-desktop (3.4.0-20211115.121830.cb34fec59-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210919.035352.adf8f4bdb-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3959 from Minoru/bugifx/detect-missing-guiprivate + * [tx-robot] updated from transifex - -- Matthieu Gallien Mon, 15 Nov 2021 13:18:30 +0100 + -- Nextcloud bot Sun, 19 Sep 2021 03:53:52 +0000 -nextcloud-desktop (3.4.0-20211108.123150.d8560dcb1-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210918.035832.524eeac10-1.0~hirsute1) hirsute; urgency=medium - * CMake: fail if `Qt5::GuiPrivate` is not found + * [tx-robot] updated from transifex - -- Alexander Batischev Mon, 8 Nov 2021 15:31:50 +0300 + -- Nextcloud bot Sat, 18 Sep 2021 03:58:32 +0000 -nextcloud-desktop (3.4.0-20211115.084355.0e5f1d9a3-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210917.035324.45830fbf0-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3966 from nextcloud/bugfix/macos-installer-universal + * [tx-robot] updated from transifex - -- Felix Weilbach Mon, 15 Nov 2021 09:43:55 +0100 + -- Nextcloud bot Fri, 17 Sep 2021 03:53:24 +0000 -nextcloud-desktop (3.4.0-20211112.002246.ad814f175-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210916.035620.ac0cf0933-1.0~hirsute1) hirsute; urgency=medium - * Let the macOS installer know that the application can run on Arm64 + * [tx-robot] updated from transifex - -- Felix Weilbach Fri, 12 Nov 2021 01:22:46 +0100 + -- Nextcloud bot Thu, 16 Sep 2021 03:56:20 +0000 -nextcloud-desktop (3.4.0-20211111.084218.94dec9d9b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210915.035559.5c77aacfe-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3964 from nextcloud/bump-3.4.0-rc1 + * [tx-robot] updated from transifex - -- Felix Weilbach Thu, 11 Nov 2021 09:42:18 +0100 + -- Nextcloud bot Wed, 15 Sep 2021 03:55:59 +0000 -nextcloud-desktop (3.3.81-20211111.093951.56bb3e793-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210914.164923.cc2548bcc-1.0~hirsute1) hirsute; urgency=medium - * Bump to version 3.4.0-rc1 + * Merge pull request #3791 from nextcloud/backport/3773/stable-3.3 - -- Felix Weilbach Thu, 11 Nov 2021 10:39:51 +0100 + -- Matthieu Gallien Tue, 14 Sep 2021 18:49:23 +0200 -nextcloud-desktop (3.3.50-20211110.175340.263cdd3c8-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210910.065822.63aaa8419-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3956 from nextcloud/feature/macos-universal + * Accept nc scheme in provider page - -- Felix Weilbach Wed, 10 Nov 2021 18:53:40 +0100 + -- Felix Weilbach Fri, 10 Sep 2021 08:58:22 +0200 -nextcloud-desktop (3.3.50-20211105.125254.6d5597e93-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210914.040036.6db202872-1.0~hirsute1) hirsute; urgency=medium - * Add a script to create a universal app package + * [tx-robot] updated from transifex - -- Felix Weilbach Fri, 5 Nov 2021 13:52:54 +0100 + -- Nextcloud bot Tue, 14 Sep 2021 04:00:36 +0000 -nextcloud-desktop (3.3.50-20211110.133255.41b2d7744-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210913.035612.8dcc0a3cb-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3961 from nextcloud/bugfix/examplecloud + * [tx-robot] updated from transifex - -- Matthieu Gallien Wed, 10 Nov 2021 14:32:55 +0100 + -- Nextcloud bot Mon, 13 Sep 2021 03:56:12 +0000 -nextcloud-desktop (3.3.50-20211110.141325.7e45dd9d1-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210912.035752.fee7801f9-1.0~hirsute1) hirsute; urgency=medium - * Take branding for vfs plugins into account + * [tx-robot] updated from transifex - -- Felix Weilbach Wed, 10 Nov 2021 15:13:25 +0100 + -- Nextcloud bot Sun, 12 Sep 2021 03:57:52 +0000 -nextcloud-desktop (3.3.50-20211110.130223.48a808545-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3935 from nextcloud/feature/profile-page - - -- Felix Weilbach Wed, 10 Nov 2021 14:02:23 +0100 - -nextcloud-desktop (3.3.50-20211109.105833.3e368ee4d-1.0~hirsute1) hirsute; urgency=medium - - * IconJob: Send request through the accounts NAS - - -- Felix Weilbach Tue, 9 Nov 2021 11:58:33 +0100 - -nextcloud-desktop (3.3.50-20211022.091638.db337c445-1.0~hirsute1) hirsute; urgency=medium - - * Add profile page - - -- Felix Weilbach Fri, 22 Oct 2021 11:16:38 +0200 - -nextcloud-desktop (3.3.50-20211108.132632.4bd9972d4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3955 from nextcloud/feature/enforceVFS - - -- Matthieu Gallien Mon, 8 Nov 2021 14:26:32 +0100 - -nextcloud-desktop (3.3.50-20211104.102016.5ab13b2ad-1.0~hirsute1) hirsute; urgency=medium - - * add an option to enforce use of virtual files sync folder - - -- Matthieu Gallien Thu, 4 Nov 2021 11:20:16 +0100 - -nextcloud-desktop (3.3.50-20211105.102531.845e25803-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3945 from nextcloud/rakekniven-patch-1 - - -- Matthieu Gallien Fri, 5 Nov 2021 11:25:31 +0100 - -nextcloud-desktop (3.3.50-20211102.093426.416d98716-1.0~hirsute1) hirsute; urgency=medium - - * Make argument singular to fix i18n issue - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Tue, 2 Nov 2021 10:34:26 +0100 - -nextcloud-desktop (3.3.50-20211104.213644.30d4a6270-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3938 from nextcloud/bugfix/unified-search-bug-fixes - - -- Matthieu Gallien Thu, 4 Nov 2021 22:36:44 +0100 - -nextcloud-desktop (3.3.50-20211103.080033.2f3c58daa-1.0~hirsute1) hirsute; urgency=medium - - * Fix review comments. Use QImage for QML and QPixmap for rest of code. Do not cache images for QML. Fix tests. Use signal in QML. - - -- alex-z Wed, 3 Nov 2021 10:00:33 +0200 - -nextcloud-desktop (3.3.50-20211029.070551.0b8ab5c07-1.0~hirsute1) hirsute; urgency=medium - - * Use SvgRenderer for Unified Search input icons. Refactor IconUtils. Extend unit tests. - - -- alex-z Fri, 29 Oct 2021 10:05:51 +0300 - -nextcloud-desktop (3.3.50-20211028.112936.0d8375e79-1.0~hirsute1) hirsute; urgency=medium - - * Clear Unified Search Input Field in a proper way - - -- alex-z Thu, 28 Oct 2021 14:29:36 +0300 - -nextcloud-desktop (3.3.50-20211104.204928.7dd09b8d8-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3948 from nextcloud/bugfix/pn-connection-check - - -- Matthieu Gallien Thu, 4 Nov 2021 21:49:28 +0100 - -nextcloud-desktop (3.3.50-20211103.125345.d661e91a5-1.0~hirsute1) hirsute; urgency=medium - - * Don't do a connection checks when using push notifications - - -- Felix Weilbach Wed, 3 Nov 2021 13:53:45 +0100 - -nextcloud-desktop (3.3.50-20211104.175325.d11935b6f-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3612 from nextcloud/bugfix/fixVfsPinState - - -- Matthieu Gallien Thu, 4 Nov 2021 18:53:25 +0100 - -nextcloud-desktop (3.3.50-20211104.140917.650578ee6-1.0~hirsute1) hirsute; urgency=medium - - * Don't convert exclude file to placeholder file - - -- Felix Weilbach Thu, 4 Nov 2021 15:09:17 +0100 - -nextcloud-desktop (2.7.0-20210907.172446.b56eb3eb4-1.0~hirsute1) hirsute; urgency=medium - - * Updated 'sane' CMake patch to avoid fuzz with the latest CMakeLists.txt - - -- István Váradi Tue, 7 Sep 2021 19:24:46 +0200 - -nextcloud-desktop (3.3.50-20210709.104609.43ec429fe-1.0~hirsute1) hirsute; urgency=medium - - * improve logs when place holder info cannot be read - - -- Matthieu Gallien Fri, 9 Jul 2021 12:46:09 +0200 - -nextcloud-desktop (3.3.50-20210709.102341.9658aea96-1.0~hirsute1) hirsute; urgency=medium - - * on switch to VFS real plugin, convert existing files to placeholders - - -- Matthieu Gallien Fri, 9 Jul 2021 12:23:41 +0200 - -nextcloud-desktop (3.3.50-20211103.112330.6ad63fb77-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3946 from nextcloud/feature/implement-expiration-date-for-federated-shares - - -- allexzander Wed, 3 Nov 2021 13:23:30 +0200 - -nextcloud-desktop (3.3.50-20211102.090100.d88e086b9-1.0~hirsute1) hirsute; urgency=medium - - * ShareLinkWidget. Fix incorrect calendar mindate. - - -- alex-z Tue, 2 Nov 2021 11:01:00 +0200 - -nextcloud-desktop (3.3.50-20211101.153723.6c3c45dad-1.0~hirsute1) hirsute; urgency=medium - - * Implement expiration date for federated shares - - -- alex-z Mon, 1 Nov 2021 17:37:23 +0200 - -nextcloud-desktop (3.3.50-20211103.034921.f3af4ce09-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 3 Nov 2021 03:49:21 +0000 - -nextcloud-desktop (3.3.50-20211102.092125.511da0f3c-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3940 from nextcloud/refactoring/replace-deprecated-qregexp - - -- allexzander Tue, 2 Nov 2021 11:21:25 +0200 - -nextcloud-desktop (3.3.50-20211029.145629.c52718c10-1.0~hirsute1) hirsute; urgency=medium - - * Replace deprecated QRegExp with QRegularExpression. - - -- alex-z Fri, 29 Oct 2021 17:56:29 +0300 - -nextcloud-desktop (3.3.50-20211102.084638.e4eaf9d88-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3928 from nextcloud/bugfix/fixE2EEMetaData - - -- Matthieu Gallien Tue, 2 Nov 2021 09:46:38 +0100 - -nextcloud-desktop (3.3.50-20211027.105609.a62905f17-1.0~hirsute1) hirsute; urgency=medium - - * properly extract the file id when querying server - - -- Matthieu Gallien Wed, 27 Oct 2021 12:56:09 +0200 - -nextcloud-desktop (3.3.50-20211102.034808.3a98abb6b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 2 Nov 2021 03:48:08 +0000 - -nextcloud-desktop (3.3.50-20211101.034652.dd4d7e316-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 1 Nov 2021 03:46:52 +0000 - -nextcloud-desktop (3.3.50-20211031.034737.ce062aeb3-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 31 Oct 2021 03:47:37 +0000 - -nextcloud-desktop (3.3.50-20211030.034910.78301c6f8-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 30 Oct 2021 03:49:10 +0000 - -nextcloud-desktop (3.3.50-20211029.034826.487cc7e9c-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 29 Oct 2021 03:48:26 +0000 - -nextcloud-desktop (3.3.50-20211028.150133.7dacabf07-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3929 from nextcloud/bugfix/debugLogsByDefault - - -- Matthieu Gallien Thu, 28 Oct 2021 17:01:33 +0200 - -nextcloud-desktop (3.3.50-20211027.121016.8226c30d8-1.0~hirsute1) hirsute; urgency=medium - - * by default we produce debug logs because we need them - - -- Matthieu Gallien Wed, 27 Oct 2021 14:10:16 +0200 - -nextcloud-desktop (3.3.50-20211028.134737.9281350b4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3863 from nextcloud/bugfix/share-dialog - - -- Matthieu Gallien Thu, 28 Oct 2021 15:47:37 +0200 - -nextcloud-desktop (3.3.50-20211002.132519.d68b8604a-1.0~hirsute1) hirsute; urgency=medium - - * Refactor toggleButtonAnimation function. - - -- Camila Sat, 2 Oct 2021 15:25:19 +0200 - -nextcloud-desktop (3.3.50-20210930.185031.ab524d239-1.0~hirsute1) hirsute; urgency=medium - - * Fix display of deleted note. - - -- Camila Thu, 30 Sep 2021 20:50:31 +0200 - -nextcloud-desktop (3.3.50-20210922.151441.72c91362f-1.0~hirsute1) hirsute; urgency=medium - - * Refactor ShareLinkWidget show/hide widgets functions. - - -- Camila Wed, 22 Sep 2021 17:14:41 +0200 - -nextcloud-desktop (3.3.50-20211028.125709.c13668c0e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #2723 from nextcloud/fix-issue-2632 - - -- Matthieu Gallien Thu, 28 Oct 2021 14:57:09 +0200 - -nextcloud-desktop (3.3.50-20211026.203743.5decbd0b2-1.0~hirsute1) hirsute; urgency=medium - - * Expand ExcludedFiles tests. - - -- Camila Tue, 26 Oct 2021 22:37:43 +0200 - -nextcloud-desktop (2.7.0-20210708.142224.630a99124-1.0~hirsute1) hirsute; urgency=medium - - * Install VFS plugins - - -- István Váradi Thu, 8 Jul 2021 16:22:24 +0200 - -nextcloud-desktop (2.7.0-20210625.043405.a3d4bbe3e-1.0~hirsute1) hirsute; urgency=medium - - * Added inkscape to the build dependencies - - -- István Váradi Fri, 25 Jun 2021 06:34:05 +0200 - -nextcloud-desktop (2.7.0-20210622.151138.1fdfc22c8-1.0~hirsute1) hirsute; urgency=medium - - * Updated the sane CMake patch to follow changes in patched files - - -- István Váradi Tue, 22 Jun 2021 17:11:38 +0200 - -nextcloud-desktop (2.7.0-20210422.142134.3708cbc5b-1.0~hirsute1) hirsute; urgency=medium - - * Disable LTO build - - -- István Váradi Thu, 22 Apr 2021 16:21:34 +0200 - -nextcloud-desktop (2.7.0-20210218.151807.4ff11a2e8-1.0~hirsute1) hirsute; urgency=medium - - * Fixed the branch in gbp.conf - - -- István Váradi Thu, 18 Feb 2021 16:18:07 +0100 - -nextcloud-desktop (2.7.0-20210126.153245.d7bb87c27-1.0~hirsute1) hirsute; urgency=medium - - * Added build dependency on Qt5 WebSockets - - -- István Váradi Tue, 26 Jan 2021 16:32:45 +0100 - -nextcloud-desktop (3.3.50-20201209.155910.5788f35e8-1.0~hirsute1) hirsute; urgency=medium - - * Skip sync exclude file from list of exclude files if it doesn't exist. - - -- Camila Wed, 9 Dec 2020 16:59:10 +0100 - -nextcloud-desktop (3.3.50-20211028.034934.5d08936e3-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 28 Oct 2021 03:49:34 +0000 - -nextcloud-desktop (3.3.50-20211027.073610.acd8553be-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3924 from nextcloud/feature/request-ocsp-data-for-peer-certificates - - -- allexzander Wed, 27 Oct 2021 10:36:10 +0300 - -nextcloud-desktop (3.3.50-20211026.112722.db4e54025-1.0~hirsute1) hirsute; urgency=medium - - * Forbid trusting the untrusted certificate. - - -- alex-z Tue, 26 Oct 2021 14:27:22 +0300 - -nextcloud-desktop (3.3.50-20211025.150429.907ebc195-1.0~hirsute1) hirsute; urgency=medium - - * Request OCSP validation data from the server during the SSL handshake. - - -- alex-z Mon, 25 Oct 2021 18:04:29 +0300 - -nextcloud-desktop (3.3.50-20211027.035342.f760d610e-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 27 Oct 2021 03:53:42 +0000 - -nextcloud-desktop (3.3.50-20211026.140610.2a108b86c-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3785 from nextcloud/feature/nextGenerationPropagator - - -- Matthieu Gallien Tue, 26 Oct 2021 16:06:10 +0200 - -nextcloud-desktop (3.3.50-20210908.101001.87c583dcb-1.0~hirsute1) hirsute; urgency=medium - - * schedule files upload after all other jobs have been completed - - -- Matthieu Gallien Wed, 8 Sep 2021 12:10:01 +0200 - -nextcloud-desktop (3.3.50-20210909.122906.c6344c05b-1.0~hirsute1) hirsute; urgency=medium - - * add test to check the order of actions when uploading new files - - -- Matthieu Gallien Thu, 9 Sep 2021 14:29:06 +0200 - -nextcloud-desktop (3.3.50-20210909.101056.24428d998-1.0~hirsute1) hirsute; urgency=medium - - * add missing Q_ENUM macro to improve logging - - -- Matthieu Gallien Thu, 9 Sep 2021 12:10:56 +0200 - -nextcloud-desktop (3.3.50-20210908.101103.b0ef5e063-1.0~hirsute1) hirsute; urgency=medium - - * no oneliner if: a bug waiting to happen - - -- Matthieu Gallien Wed, 8 Sep 2021 12:11:03 +0200 - -nextcloud-desktop (3.3.50-20211026.100111.51a77bac2-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3920 from nextcloud/rakekniven-patch-1 - - -- allexzander Tue, 26 Oct 2021 13:01:11 +0300 - -nextcloud-desktop (3.3.50-20211026.084407.c39b97adb-1.0~hirsute1) hirsute; urgency=medium - - * Update UnifiedSearchInputContainer.qml - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Tue, 26 Oct 2021 10:44:07 +0200 - -nextcloud-desktop (3.3.50-20211026.053547.beffd6351-1.0~hirsute1) hirsute; urgency=medium - - * Changed triple dot to ellipsis - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Tue, 26 Oct 2021 07:35:47 +0200 - -nextcloud-desktop (3.3.50-20211026.034859.856d26965-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 26 Oct 2021 03:48:59 +0000 - -nextcloud-desktop (3.3.50-20211025.143352.28248f333-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3919 from nextcloud/ci/lowerCaseSouceCodeFileNames - - -- Matthieu Gallien Mon, 25 Oct 2021 16:33:52 +0200 - -nextcloud-desktop (3.3.50-20211025.093758.69d6f4ace-1.0~hirsute1) hirsute; urgency=medium - - * our source code files have lower case names - - -- Matthieu Gallien Mon, 25 Oct 2021 11:37:58 +0200 - -nextcloud-desktop (3.3.50-20211025.123500.a71bf73e4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3807 from nextcloud/feature/unified-search - - -- allexzander Mon, 25 Oct 2021 15:35:00 +0300 - -nextcloud-desktop (3.3.50-20211007.134354.1b8448402-1.0~hirsute1) hirsute; urgency=medium - - * Fix JsonApiJob incorrect 'statuscode' parsing. - - -- alex-z Thu, 7 Oct 2021 16:43:54 +0300 - -nextcloud-desktop (3.3.50-20210909.113357.c1dab7e4c-1.0~hirsute1) hirsute; urgency=medium - - * Unified Search via Tray window - - -- alex-z Thu, 9 Sep 2021 14:33:57 +0300 - -nextcloud-desktop (3.3.50-20211025.034548.b8e2dc24f-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 25 Oct 2021 03:45:48 +0000 - -nextcloud-desktop (3.3.50-20211024.034752.31e278ffb-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 24 Oct 2021 03:47:52 +0000 - -nextcloud-desktop (3.3.50-20211023.075747.a444eb8d4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3898 from nextcloud/rakekniven-patch-1 - - -- allexzander Sat, 23 Oct 2021 10:57:47 +0300 - -nextcloud-desktop (3.3.50-20211019.075405.91884eef4-1.0~hirsute1) hirsute; urgency=medium - - * Changed wording to suggestion - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Tue, 19 Oct 2021 09:54:05 +0200 - -nextcloud-desktop (3.3.50-20211016.191518.fb3c74012-1.0~hirsute1) hirsute; urgency=medium - - * Changed wording of status message - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Sat, 16 Oct 2021 21:15:18 +0200 - -nextcloud-desktop (3.3.50-20211023.035147.359d85dd6-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 23 Oct 2021 03:51:47 +0000 - -nextcloud-desktop (3.3.50-20211022.104227.b5462e105-1.0~hirsute1) hirsute; urgency=medium - - * Merge branch 'Thatoo-AutoUpdateAppImage' - - -- Matthieu Gallien Fri, 22 Oct 2021 12:42:27 +0200 - -nextcloud-desktop (3.3.50-20211021.183919.37a64ab19-1.0~hirsute1) hirsute; urgency=medium - - * upload-appimage.sh correction - - -- Thatoo Thu, 21 Oct 2021 20:39:19 +0200 - -nextcloud-desktop (3.3.50-20211022.034808.0ee6eb8bb-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 22 Oct 2021 03:48:08 +0000 - -nextcloud-desktop (3.3.50-20211021.035117.4e48837b9-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 21 Oct 2021 03:51:17 +0000 - -nextcloud-desktop (3.3.50-20211020.211114.33cb02e41-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3908 from nextcloud/bugfix/fix-folder-creation-issues - - -- allexzander Thu, 21 Oct 2021 00:11:14 +0300 - -nextcloud-desktop (3.3.50-20211019.093034.da03acc65-1.0~hirsute1) hirsute; urgency=medium - - * Fix folder creation issues. - - -- alex-z Tue, 19 Oct 2021 12:30:34 +0300 - -nextcloud-desktop (3.3.50-20211020.140046.ed7abc4a9-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3736 from Thatoo/AutoUpdateAppImage - - -- Felix Weilbach Wed, 20 Oct 2021 16:00:46 +0200 - -nextcloud-desktop (3.3.50-20211015.211420.3ab698a0c-1.0~hirsute1) hirsute; urgency=medium - - * To allow auto update of AppImage package - - -- Thatoo Fri, 15 Oct 2021 23:14:20 +0200 - -nextcloud-desktop (3.3.50-20211020.131256.c2dd75df1-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3891 from nextcloud/bugfix/update-sync-state-no-folders - - -- Matthieu Gallien Wed, 20 Oct 2021 15:12:56 +0200 - -nextcloud-desktop (3.3.50-20211014.083734.9f35fa6d3-1.0~hirsute1) hirsute; urgency=medium - - * Also update sync state summary based on connectivity - - -- Felix Weilbach Thu, 14 Oct 2021 10:37:34 +0200 - -nextcloud-desktop (3.3.50-20211020.101451.d14be7c2c-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3903 from nextcloud/feature/codeCoverageSonarCloud - - -- Matthieu Gallien Wed, 20 Oct 2021 12:14:51 +0200 - -nextcloud-desktop (3.3.50-20211018.100922.7a6bc830d-1.0~hirsute1) hirsute; urgency=medium - - * let sonarcloud takes automated tests into account and report coverage - - -- Matthieu Gallien Mon, 18 Oct 2021 12:09:22 +0200 - -nextcloud-desktop (3.3.50-20211020.040916.a10ffb167-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 20 Oct 2021 04:09:16 +0000 - -nextcloud-desktop (3.3.50-20211019.193322.597e29ebe-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3902 from nextcloud/feature/log-filename-linenum - - -- Matthieu Gallien Tue, 19 Oct 2021 21:33:22 +0200 - -nextcloud-desktop (3.3.50-20211018.125221.1156d8259-1.0~hirsute1) hirsute; urgency=medium - - * Log file name and line number - - -- Felix Weilbach Mon, 18 Oct 2021 14:52:21 +0200 - -nextcloud-desktop (3.3.50-20211019.170915.6b32d9a69-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3892 from nextcloud/sonarcloud-improvements - - -- Felix Weilbach Tue, 19 Oct 2021 19:09:15 +0200 - -nextcloud-desktop (3.3.50-20211014.132947.3d795b054-1.0~hirsute1) hirsute; urgency=medium - - * SonarCloud: Change workflow name - - -- Felix Weilbach Thu, 14 Oct 2021 15:29:47 +0200 - -nextcloud-desktop (3.3.50-20211014.132550.daa205bce-1.0~hirsute1) hirsute; urgency=medium - - * Sonarcloud: Enable caching - - -- Felix Weilbach Thu, 14 Oct 2021 15:25:50 +0200 - -nextcloud-desktop (3.3.50-20211014.131603.4008bdd29-1.0~hirsute1) hirsute; urgency=medium - - * Sonarcloud: Ignore 3rdparty folder - - -- Felix Weilbach Thu, 14 Oct 2021 15:16:03 +0200 - -nextcloud-desktop (3.3.50-20211019.072728.426fd2238-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3901 from nextcloud/bugfix/win-remove-cwd-from-dll-search-path - - -- allexzander Tue, 19 Oct 2021 10:27:28 +0300 - -nextcloud-desktop (3.3.50-20211018.123044.bd731a9cd-1.0~hirsute1) hirsute; urgency=medium - - * Windows. Remove CWD from DLL search paths. - - -- alex-z Mon, 18 Oct 2021 15:30:44 +0300 - -nextcloud-desktop (3.3.50-20211019.034947.fb74fdf11-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 19 Oct 2021 03:49:47 +0000 - -nextcloud-desktop (3.3.50-20211018.133811.3c749bd38-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3885 from nextcloud/bugfix/saml-login - - -- Felix Weilbach Mon, 18 Oct 2021 15:38:11 +0200 - -nextcloud-desktop (3.3.50-20211008.150010.24f6bc520-1.0~hirsute1) hirsute; urgency=medium - - * Only use basic authentication if needed - - -- Felix Weilbach Fri, 8 Oct 2021 17:00:10 +0200 - -nextcloud-desktop (3.3.50-20211018.092946.e5b3e9ed1-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #2724 from nextcloud/aborted - - -- Matthieu Gallien Mon, 18 Oct 2021 11:29:46 +0200 - -nextcloud-desktop (3.3.50-20201215.181504.c6e629c30-1.0~hirsute1) hirsute; urgency=medium - - * Give the user a more descriptive error message when syncing is aborted. - - -- Camila Tue, 15 Dec 2020 19:15:04 +0100 - -nextcloud-desktop (3.3.50-20211018.035000.62af1fa4e-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 18 Oct 2021 03:50:00 +0000 - -nextcloud-desktop (3.3.50-20211017.034912.101c2ba10-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 17 Oct 2021 03:49:12 +0000 - -nextcloud-desktop (3.3.50-20211016.034921.d8d0886d4-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 16 Oct 2021 03:49:21 +0000 - -nextcloud-desktop (3.3.50-20211015.133041.3b1f1952a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3897 from nextcloud/fixBrandedMacOS - - -- Matthieu Gallien Fri, 15 Oct 2021 15:30:41 +0200 - -nextcloud-desktop (3.3.50-20211015.132229.f8a8e3f2f-1.0~hirsute1) hirsute; urgency=medium - - * target names are not changed in branded builds only the output filenames - - -- Matthieu Gallien Fri, 15 Oct 2021 15:22:29 +0200 - -nextcloud-desktop (3.3.50-20211015.084039.2a68abfc6-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3895 from nextcloud/Valdnet-patch-2 - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Fri, 15 Oct 2021 10:40:39 +0200 - -nextcloud-desktop (3.3.50-20211015.064402.22b0a2e19-1.0~hirsute1) hirsute; urgency=medium - - * i18n: Correct typo and remove apostrophe - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Fri, 15 Oct 2021 08:44:02 +0200 - -nextcloud-desktop (3.3.50-20211015.035502.00dab13b3-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 15 Oct 2021 03:55:02 +0000 - -nextcloud-desktop (3.3.50-20211014.213716.bc53c3454-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3884 from nextcloud/bugfix/user-status-selector-dialog-resize - - -- Matthieu Gallien Thu, 14 Oct 2021 23:37:16 +0200 - -nextcloud-desktop (3.3.50-20211014.084517.d51bfec61-1.0~hirsute1) hirsute; urgency=medium - - * Remove unnecessary braces - - -- Felix Weilbach Thu, 14 Oct 2021 10:45:17 +0200 - -nextcloud-desktop (3.3.50-20211012.085637.f27ef0227-1.0~hirsute1) hirsute; urgency=medium - - * Set dialog max and min width and height before width and height - - -- Felix Weilbach Tue, 12 Oct 2021 10:56:37 +0200 - -nextcloud-desktop (3.3.50-20211014.195227.7206d626e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3882 from nextcloud/bugfix/sync-exclude - - -- Matthieu Gallien Thu, 14 Oct 2021 21:52:27 +0200 - -nextcloud-desktop (3.3.50-20211011.122705.a663d235e-1.0~hirsute1) hirsute; urgency=medium - - * Add .sync-exclude.lst to exclude files - - -- Felix Weilbach Mon, 11 Oct 2021 14:27:05 +0200 - -nextcloud-desktop (3.3.50-20211014.140015.f2811ea02-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3778 from nextcloud/feature/trim-trailing-spaces - - -- Matthieu Gallien Thu, 14 Oct 2021 16:00:15 +0200 - -nextcloud-desktop (3.3.50-20210916.140719.df1142459-1.0~hirsute1) hirsute; urgency=medium - - * Trim trailing spaces before uploading files - - -- Felix Weilbach Thu, 16 Sep 2021 16:07:19 +0200 - -nextcloud-desktop (3.3.50-20211014.112147.af3021913-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3861 from nextcloud/feature/sonarcloud - - -- Matthieu Gallien Thu, 14 Oct 2021 13:21:47 +0200 - -nextcloud-desktop (3.3.50-20211001.154149.51b6d5e28-1.0~hirsute1) hirsute; urgency=medium - - * Enable Sonarcloud - - -- Felix Weilbach Fri, 1 Oct 2021 17:41:49 +0200 - -nextcloud-desktop (3.3.50-20211014.034924.81c5c81cb-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 14 Oct 2021 03:49:24 +0000 - -nextcloud-desktop (3.3.50-20211013.185924.ddf2dd657-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3886 from nextcloud/bugfix/betterLogsOnSslErrors - - -- Matthieu Gallien Wed, 13 Oct 2021 20:59:24 +0200 - -nextcloud-desktop (3.3.50-20211012.161410.46bc0452c-1.0~hirsute1) hirsute; urgency=medium - - * provide logs of SSL errors including the certificate chain - - -- Matthieu Gallien Tue, 12 Oct 2021 18:14:10 +0200 - -nextcloud-desktop (3.3.50-20211013.151844.4296eb357-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3888 from nextcloud/bugfix/crash-sync-summary - - -- Matthieu Gallien Wed, 13 Oct 2021 17:18:44 +0200 - -nextcloud-desktop (3.3.50-20211013.092513.0792dc36c-1.0~hirsute1) hirsute; urgency=medium - - * Check if current user exists before getting it's account state - - -- Felix Weilbach Wed, 13 Oct 2021 11:25:13 +0200 - -nextcloud-desktop (3.3.50-20211013.034831.1fb5eadbd-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 13 Oct 2021 03:48:31 +0000 - -nextcloud-desktop (3.3.50-20211012.163009.0861be093-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3811 from nextcloud/feature/sync-progress-in-main-dialog - - -- Matthieu Gallien Tue, 12 Oct 2021 18:30:09 +0200 - -nextcloud-desktop (3.3.50-20210914.111703.4c11f6763-1.0~hirsute1) hirsute; urgency=medium - - * Show sync progress in main dialog - - -- Felix Weilbach Tue, 14 Sep 2021 13:17:03 +0200 - -nextcloud-desktop (3.3.50-20211012.161231.375dc9245-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3880 from madpilot78/Fix_Test_Build_Non_Linux - - -- Matthieu Gallien Tue, 12 Oct 2021 18:12:31 +0200 - -nextcloud-desktop (3.3.50-20211008.215256.5667a6aad-1.0~hirsute1) hirsute; urgency=medium - - * Fix BUILD_TESTING on non Linux unices - - -- Guido Falsi Fri, 8 Oct 2021 23:52:56 +0200 - -nextcloud-desktop (3.3.50-20211012.113932.bfc7c862e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3842 from philips/ignore-Spotlight-V100 - - -- Matthieu Gallien Tue, 12 Oct 2021 13:39:32 +0200 - -nextcloud-desktop (3.3.50-20211012.035117.34b12b742-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 12 Oct 2021 03:51:17 +0000 - -nextcloud-desktop (3.3.50-20211011.135235.de2b25b56-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3876 from nextcloud/bugfix/macOsBuildFailure - - -- Matthieu Gallien Mon, 11 Oct 2021 15:52:35 +0200 - -nextcloud-desktop (3.3.50-20211007.105652.d76778e3e-1.0~hirsute1) hirsute; urgency=medium - - * fix macOs build after targets name are not changed by branding - - -- Matthieu Gallien Thu, 7 Oct 2021 12:56:52 +0200 - -nextcloud-desktop (3.3.50-20211011.034847.59b3971d3-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 11 Oct 2021 03:48:47 +0000 - -nextcloud-desktop (3.3.50-20211010.035002.57a74eabc-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 10 Oct 2021 03:50:02 +0000 - -nextcloud-desktop (3.3.50-20211009.040655.b6530a399-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 9 Oct 2021 04:06:55 +0000 - -nextcloud-desktop (3.3.50-20211008.154327.14e294e57-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3878 from nextcloud/bugfix/missing-copyright-headers - - -- Matthieu Gallien Fri, 8 Oct 2021 17:43:27 +0200 - -nextcloud-desktop (3.3.50-20211008.111910.2da6dab40-1.0~hirsute1) hirsute; urgency=medium - - * Add missing copyright headers - - -- Felix Weilbach Fri, 8 Oct 2021 13:19:10 +0200 - -nextcloud-desktop (3.3.50-20211008.034952.18b8693c4-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 8 Oct 2021 03:49:52 +0000 - -nextcloud-desktop (3.3.50-20210928.045151.98a3682ac-1.0~hirsute1) hirsute; urgency=medium - - * sync-exclude: add .Spotlight-V100 - - -- Brandon Philips Mon, 27 Sep 2021 21:51:51 -0700 - -nextcloud-desktop (3.3.50-20211007.035125.0b2a055c7-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 7 Oct 2021 03:51:25 +0000 - -nextcloud-desktop (3.3.50-20211006.111236.91a9e82fc-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3871 from nextcloud/display_proper_endpoint_in_warning - - -- Kevin Ottens Wed, 6 Oct 2021 13:12:36 +0200 - -nextcloud-desktop (3.3.50-20211005.211327.5fe63a4d9-1.0~hirsute1) hirsute; urgency=medium - - * Display the right endpoint in the warning in case of error - - -- Kevin Ottens Tue, 5 Oct 2021 23:13:27 +0200 - -nextcloud-desktop (3.3.50-20211006.095109.820ca3827-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3870 from nextcloud/bugfix/brandedDllNames - - -- Matthieu Gallien Wed, 6 Oct 2021 11:51:09 +0200 - -nextcloud-desktop (3.3.50-20211005.100022.833237b2e-1.0~hirsute1) hirsute; urgency=medium - - * use alias target for internal libraries - - -- Matthieu Gallien Tue, 5 Oct 2021 12:00:22 +0200 - -nextcloud-desktop (3.3.50-20211005.092949.c751fd567-1.0~hirsute1) hirsute; urgency=medium - - * ensure DLL are generated with branded names - - -- Matthieu Gallien Tue, 5 Oct 2021 11:29:49 +0200 - -nextcloud-desktop (3.3.50-20211006.034828.f7a34b8bd-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 6 Oct 2021 03:48:28 +0000 - -nextcloud-desktop (3.3.50-20211005.130845.a2a08ebd2-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3737 from nextcloud/feature/file-activity-dialog - - -- Matthieu Gallien Tue, 5 Oct 2021 15:08:45 +0200 - -nextcloud-desktop (3.3.50-20210820.131706.0c9dce115-1.0~hirsute1) hirsute; urgency=medium - - * Add file activity dialog - - -- Felix Weilbach Fri, 20 Aug 2021 15:17:06 +0200 - -nextcloud-desktop (3.3.50-20211005.034852.883c78ea6-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 5 Oct 2021 03:48:52 +0000 - -nextcloud-desktop (3.3.50-20211004.133658.db3a38751-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3682 from nextcloud/bugfix/use-build-app-image-from-brander - - -- Felix Weilbach Mon, 4 Oct 2021 15:36:58 +0200 - -nextcloud-desktop (3.3.50-20210817.071348.ae3d10d3a-1.0~hirsute1) hirsute; urgency=medium - - * Use build-appimage.sh from Brander - - -- Felix Weilbach Tue, 17 Aug 2021 09:13:48 +0200 - -nextcloud-desktop (3.3.50-20211004.035227.087b90844-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 4 Oct 2021 03:52:27 +0000 - -nextcloud-desktop (3.3.50-20211003.035404.40ffc3fd4-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 3 Oct 2021 03:54:04 +0000 - -nextcloud-desktop (3.3.50-20211001.035213.d86f349da-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 1 Oct 2021 03:52:13 +0000 - -nextcloud-desktop (3.3.50-20210930.114033.19f3f11b8-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3844 from nextcloud/bugfix/remove-temporary-solution-for-file-restoration-via-datafingerprint - - -- Matthieu Gallien Thu, 30 Sep 2021 13:40:33 +0200 - -nextcloud-desktop (3.3.50-20210929.132505.6cafcc112-1.0~hirsute1) hirsute; urgency=medium - - * Remove Temporary solution for file restoration issue due to failing to set the data-fingerprint. - - -- alex-z Wed, 29 Sep 2021 16:25:05 +0300 - -nextcloud-desktop (3.3.50-20210930.072119.a7be4044b-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3823 from madpilot78/argp_cleanup - - -- Matthieu Gallien Thu, 30 Sep 2021 09:21:19 +0200 - -nextcloud-desktop (3.3.50-20210930.041700.b566f1953-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 30 Sep 2021 04:17:00 +0000 - -nextcloud-desktop (3.3.50-20210929.134228.b0b70d1e7-1.0~hirsute1) hirsute; urgency=medium - - * Check for argp library before depending on it. - - -- Guido Falsi Wed, 29 Sep 2021 15:42:28 +0200 - -nextcloud-desktop (3.3.50-20210923.154352.5f036641b-1.0~hirsute1) hirsute; urgency=medium - - * Add -largp on non linux systems. - - -- Guido Falsi Thu, 23 Sep 2021 17:43:52 +0200 - -nextcloud-desktop (3.3.50-20210929.035418.5fa082872-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 29 Sep 2021 03:54:18 +0000 - -nextcloud-desktop (3.3.50-20210928.092141.fe344462a-1.0~hirsute1) hirsute; urgency=medium - - * Merge branch 'Trafo-fix/WindowsPlaceholderShortCutMenu' - - -- Matthieu Gallien Tue, 28 Sep 2021 11:21:41 +0200 - -nextcloud-desktop (3.3.50-20210916.105104.51cfe76d6-1.0~hirsute1) hirsute; urgency=medium - - * add ContextMenuOptIn to COM registration, to allow Placeholder support. Issue #3584 - - -- Mathias Eggert Thu, 16 Sep 2021 12:51:04 +0200 - -nextcloud-desktop (3.3.50-20210928.035551.155f686c4-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 28 Sep 2021 03:55:51 +0000 - -nextcloud-desktop (3.3.50-20210927.213543.739a5f5fd-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3841 from nextcloud/bugfix/vfs-docs - - -- Matthieu Gallien Mon, 27 Sep 2021 23:35:43 +0200 - -nextcloud-desktop (3.3.50-20210927.115715.b6108cb9f-1.0~hirsute1) hirsute; urgency=medium - - * Make virtual files feature documentation more understandable - - -- Felix Weilbach Mon, 27 Sep 2021 13:57:15 +0200 - -nextcloud-desktop (3.3.50-20210927.202833.6f03a9ffe-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3827 from nextcloud/bugfix/dont-log-encryption - - -- Matthieu Gallien Mon, 27 Sep 2021 22:28:33 +0200 - -nextcloud-desktop (3.3.50-20210923.121334.d6e60cd8d-1.0~hirsute1) hirsute; urgency=medium - - * Don't log encryption data in release mode - - -- Felix Weilbach Thu, 23 Sep 2021 14:13:34 +0200 - -nextcloud-desktop (3.3.50-20210927.194924.26a361973-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3825 from nextcloud/clang-format-cpp11-uni - - -- Matthieu Gallien Mon, 27 Sep 2021 21:49:24 +0200 - -nextcloud-desktop (3.3.50-20210922.133845.b10be3e52-1.0~hirsute1) hirsute; urgency=medium - - * Set maximum line length in clang-format - - -- Felix Weilbach Wed, 22 Sep 2021 15:38:45 +0200 - -nextcloud-desktop (3.3.50-20210922.133606.2a6886dc7-1.0~hirsute1) hirsute; urgency=medium - - * Use C++11 brace style in clang-format - - -- Felix Weilbach Wed, 22 Sep 2021 15:36:06 +0200 - -nextcloud-desktop (3.3.50-20210927.105231.8af4d905f-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3713 from nextcloud/feature/share-server-permissions - - -- Matthieu Gallien Mon, 27 Sep 2021 12:52:31 +0200 - -nextcloud-desktop (3.3.50-20210921.140546.1de38a13f-1.0~hirsute1) hirsute; urgency=medium - - * Extend TestCapabilities with shareDefaultPermissions tests. - - -- Camila Tue, 21 Sep 2021 16:05:46 +0200 - -nextcloud-desktop (3.3.50-20210825.100642.df38e5c08-1.0~hirsute1) hirsute; urgency=medium - - * Apply server default permissions for federated file sharing too. - - -- Camila Wed, 25 Aug 2021 12:06:42 +0200 - -nextcloud-desktop (3.3.50-20210824.124736.8f847906c-1.0~hirsute1) hirsute; urgency=medium - - * Check server capabilities for file sharing default permissions. - - -- Camila Tue, 24 Aug 2021 14:47:36 +0200 - -nextcloud-desktop (3.3.50-20210927.083616.c521ca094-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3832 from nextcloud/bugfix/incorrect-cmd-client-dbname - - -- Matthieu Gallien Mon, 27 Sep 2021 10:36:16 +0200 - -nextcloud-desktop (3.3.50-20210925.085912.dc22307a4-1.0~hirsute1) hirsute; urgency=medium - - * Fix review comments + also check against trailing bakslash. - - -- alex-z Sat, 25 Sep 2021 11:59:12 +0300 - -nextcloud-desktop (3.3.50-20210924.103301.e16402a10-1.0~hirsute1) hirsute; urgency=medium - - * Fix incorrect db name for nextcloud command line client. - - -- alex-z Fri, 24 Sep 2021 12:33:01 +0200 - -nextcloud-desktop (3.3.50-20210927.081213.ef3afd741-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3833 from nextcloud/rakekniven-patch-1 - - -- Matthieu Gallien Mon, 27 Sep 2021 10:12:13 +0200 - -nextcloud-desktop (3.3.50-20210924.122413.68e02bc62-1.0~hirsute1) hirsute; urgency=medium - - * Fixed context - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Fri, 24 Sep 2021 14:24:13 +0200 - -nextcloud-desktop (3.3.50-20210924.122135.49e1b12eb-1.0~hirsute1) hirsute; urgency=medium - - * Fixed grammar - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Fri, 24 Sep 2021 14:21:35 +0200 - -nextcloud-desktop (3.3.50-20210927.035628.e1b9d7ecd-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 27 Sep 2021 03:56:28 +0000 - -nextcloud-desktop (3.3.50-20210926.035720.dcf7905bc-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 26 Sep 2021 03:57:20 +0000 - -nextcloud-desktop (3.3.50-20210925.035604.295a5a376-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 25 Sep 2021 03:56:04 +0000 - -nextcloud-desktop (3.3.50-20210924.035947.da076cf6b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 24 Sep 2021 03:59:47 +0000 - -nextcloud-desktop (3.3.50-20210923.130335.3caef6e1a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3760 from nextcloud/feature/invalid-filenames-dialog - - -- Felix Weilbach Thu, 23 Sep 2021 15:03:35 +0200 - -nextcloud-desktop (3.3.50-20210906.130929.d3d8b1c63-1.0~hirsute1) hirsute; urgency=medium - - * Add dialog to resolve invalid filenames - - -- Felix Weilbach Mon, 6 Sep 2021 15:09:29 +0200 - -nextcloud-desktop (3.3.50-20210923.041424.8a411bd64-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 23 Sep 2021 04:14:24 +0000 - -nextcloud-desktop (3.3.50-20210922.091915.71a5e2d47-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3805 from nextcloud/bugfix/fixQmlContextLossEvents - - -- Matthieu Gallien Wed, 22 Sep 2021 11:19:15 +0200 - -nextcloud-desktop (3.3.50-20210917.075425.ac28cc1cf-1.0~hirsute1) hirsute; urgency=medium - - * set default format for QSurface to handle NVidia context loss events - - -- Matthieu Gallien Fri, 17 Sep 2021 09:54:25 +0200 - -nextcloud-desktop (3.3.50-20210922.035814.ae5b1e9d1-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 22 Sep 2021 03:58:14 +0000 - -nextcloud-desktop (3.3.50-20210921.204946.856f64a76-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3821 from nextcloud/feature/general-settings-open-update-url-in-browser - - -- allexzander Tue, 21 Sep 2021 23:49:46 +0300 - -nextcloud-desktop (3.3.50-20210921.100408.59199fc90-1.0~hirsute1) hirsute; urgency=medium - - * General Settings window. Allow opening the update URL via mouse. - - -- alex-z Tue, 21 Sep 2021 12:04:08 +0200 - -nextcloud-desktop (3.3.50-20210921.120805.499297716-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3793 from nextcloud/feature/link-share-label - - -- Matthieu Gallien Tue, 21 Sep 2021 14:08:05 +0200 - -nextcloud-desktop (3.3.50-20210920.133103.db447c467-1.0~hirsute1) hirsute; urgency=medium - - * Refactor OcsShareJob creation. - - -- Camila Mon, 20 Sep 2021 15:31:03 +0200 - -nextcloud-desktop (3.3.50-20210914.121044.ba8ec56e6-1.0~hirsute1) hirsute; urgency=medium - - * Add option to create label for share link. - - -- Camila Tue, 14 Sep 2021 14:10:44 +0200 - -nextcloud-desktop (3.3.50-20210921.095935.d0d4b08a0-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3815 from nextcloud/selectStatusTextByMouse - - -- Matthieu Gallien Tue, 21 Sep 2021 11:59:35 +0200 - -nextcloud-desktop (3.3.50-20210920.122356.19b77416d-1.0~hirsute1) hirsute; urgency=medium - - * TextInput by default do not allow selecting text by mouse - - -- Matthieu Gallien Mon, 20 Sep 2021 14:23:56 +0200 - -nextcloud-desktop (3.3.50-20210921.035840.634245193-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 21 Sep 2021 03:58:40 +0000 - -nextcloud-desktop (3.3.50-20210920.145502.76a80fc97-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3813 from nextcloud/rakekniven-patch-1 - - -- Felix Weilbach Mon, 20 Sep 2021 16:55:02 +0200 - -nextcloud-desktop (3.3.50-20210920.093951.af49a7993-1.0~hirsute1) hirsute; urgency=medium - - * Fixed placeholder numbering - - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Mon, 20 Sep 2021 11:39:51 +0200 - -nextcloud-desktop (3.3.50-20210920.035426.63a5f7e34-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 20 Sep 2021 03:54:26 +0000 - -nextcloud-desktop (3.3.50-20210919.035501.039b579d3-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 19 Sep 2021 03:55:01 +0000 - -nextcloud-desktop (3.3.50-20210918.035936.be0d7a644-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 18 Sep 2021 03:59:36 +0000 - -nextcloud-desktop (3.3.50-20210917.140931.b816c0e50-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3780 from nextcloud/bugfix/more-warnings - - -- Felix Weilbach Fri, 17 Sep 2021 16:09:31 +0200 - -nextcloud-desktop (3.3.50-20210910.140344.88e786123-1.0~hirsute1) hirsute; urgency=medium - - * Enable warnings as errors when compiling with Clang and GCC - - -- Felix Weilbach Fri, 10 Sep 2021 16:03:44 +0200 - -nextcloud-desktop (3.3.50-20210910.135947.0074d6c40-1.0~hirsute1) hirsute; urgency=medium - - * Disable Qt deprecation warnings - - -- Felix Weilbach Fri, 10 Sep 2021 15:59:47 +0200 - -nextcloud-desktop (3.3.50-20210910.135148.fb1b3481d-1.0~hirsute1) hirsute; urgency=medium - - * Fix warnings - - -- Felix Weilbach Fri, 10 Sep 2021 15:51:48 +0200 - -nextcloud-desktop (3.3.50-20210917.090509.1eb9c6f99-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3779 from nextcloud/feature/add-user-status-docs - - -- Felix Weilbach Fri, 17 Sep 2021 11:05:09 +0200 - -nextcloud-desktop (3.3.50-20210910.132801.65f2fd245-1.0~hirsute1) hirsute; urgency=medium - - * Add documentation for user status selector dialog - - -- Felix Weilbach Fri, 10 Sep 2021 15:28:01 +0200 - -nextcloud-desktop (3.3.50-20210917.072333.c1b404952-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3794 from nextcloud/bugfix/share-note - - -- allexzander Fri, 17 Sep 2021 10:23:33 +0300 - -nextcloud-desktop (3.3.50-20210914.185728.e4e74ff38-1.0~hirsute1) hirsute; urgency=medium - - * Display share note when there is one associated with a share link. - - -- Camila Tue, 14 Sep 2021 20:57:28 +0200 - -nextcloud-desktop (3.3.50-20210914.185657.4581279d2-1.0~hirsute1) hirsute; urgency=medium - - * Fix indentation sharelinkwidget.h. - - -- Camila Tue, 14 Sep 2021 20:56:57 +0200 - -nextcloud-desktop (3.3.50-20210917.035428.0d5084468-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 17 Sep 2021 03:54:28 +0000 - -nextcloud-desktop (3.3.50-20210916.035724.cdbea182b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 16 Sep 2021 03:57:24 +0000 - -nextcloud-desktop (3.3.50-20210915.035708.dc0954d65-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 15 Sep 2021 03:57:08 +0000 - -nextcloud-desktop (3.3.50-20210914.143318.cc05e474c-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3773 from nextcloud/bugfix/provider-page-accept-nc - - -- Matthieu Gallien Tue, 14 Sep 2021 16:33:18 +0200 - -nextcloud-desktop (3.3.50-20210910.065822.8370c9c1c-1.0~hirsute1) hirsute; urgency=medium - - * Accept nc scheme in provider page - - -- Felix Weilbach Fri, 10 Sep 2021 08:58:22 +0200 - -nextcloud-desktop (3.3.50-20210914.082705.5dabb3a36-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3777 from nextcloud/bugfix/clear-user-status-main-dialog - - -- Felix Weilbach Tue, 14 Sep 2021 10:27:05 +0200 - -nextcloud-desktop (3.3.50-20210910.094358.86da74908-1.0~hirsute1) hirsute; urgency=medium - - * Emit user status changed after clear user status - - -- Felix Weilbach Fri, 10 Sep 2021 11:43:58 +0200 - -nextcloud-desktop (3.3.50-20210910.094345.9aee46b3a-1.0~hirsute1) hirsute; urgency=medium - - * Remove unnecessary logging statements - - -- Felix Weilbach Fri, 10 Sep 2021 11:43:45 +0200 - -nextcloud-desktop (3.3.50-20210914.040145.be8f60fa8-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 14 Sep 2021 04:01:45 +0000 - -nextcloud-desktop (3.3.50-20210913.150609.d3ea46ece-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3331 from Dimon4eg/fix_warnings - - -- Matthieu Gallien Mon, 13 Sep 2021 17:06:09 +0200 - -nextcloud-desktop (3.3.50-20210517.233918.cffceaae1-1.0~hirsute1) hirsute; urgency=medium - - * Fixed warning: extra ';' in Q_ENUM_NS(PinState); - - -- Dmytro Korchynskyi Tue, 18 May 2021 02:39:18 +0300 - -nextcloud-desktop (3.3.50-20210517.213935.5f232c30b-1.0~hirsute1) hirsute; urgency=medium - - * Fixed warnings from ntstatus.h on Windows - - -- Dmytro Korchynskyi Tue, 18 May 2021 00:39:35 +0300 - -nextcloud-desktop (3.3.50-20210517.213242.8351c398b-1.0~hirsute1) hirsute; urgency=medium - - * Fixed warnings in RemotePathChecker on Windows - - -- Dmytro Korchynskyi Tue, 18 May 2021 00:32:42 +0300 - -nextcloud-desktop (3.3.50-20210517.213005.608fc5fb3-1.0~hirsute1) hirsute; urgency=medium - - * Fixed warnings by using static_cast - - -- Dmytro Korchynskyi Tue, 18 May 2021 00:30:05 +0300 - -nextcloud-desktop (3.3.50-20210913.035715.229aefba2-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 13 Sep 2021 03:57:15 +0000 - -nextcloud-desktop (3.3.50-20210912.035857.4aba80e58-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 12 Sep 2021 03:58:57 +0000 - -nextcloud-desktop (3.3.50-20210911.035552.53c2516ba-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 11 Sep 2021 03:55:52 +0000 - -nextcloud-desktop (3.3.50-20210910.120726.a5c9b80ad-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3775 from nextcloud/Valdnet-patch-1 - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Fri, 10 Sep 2021 14:07:26 +0200 - -nextcloud-desktop (3.3.50-20210910.070535.a441d733d-1.0~hirsute1) hirsute; urgency=medium - - * l10n: Correct two typo - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Fri, 10 Sep 2021 09:05:35 +0200 - -nextcloud-desktop (3.3.50-20210910.040718.06f37234d-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 10 Sep 2021 04:07:18 +0000 - -nextcloud-desktop (3.3.50-20210909.110357.49f41b813-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3765 from Dimon4eg/remove_theme.qrc - - -- Felix Weilbach Thu, 9 Sep 2021 13:03:57 +0200 - -nextcloud-desktop (3.3.50-20210908.190735.bccca235a-1.0~hirsute1) hirsute; urgency=medium - - * remove theme.qrc as it will be generated during build - - -- Dmytro Korchynskyi Wed, 8 Sep 2021 22:07:35 +0300 - -nextcloud-desktop (3.3.50-20210909.095227.ea6a56d9f-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3639 from nextcloud/feature/set-user-status - - -- Felix Weilbach Thu, 9 Sep 2021 11:52:27 +0200 - -nextcloud-desktop (3.3.50-20210909.091822.8a8d48845-1.0~hirsute1) hirsute; urgency=medium - - * Add dialog to set user status - - -- Felix Weilbach Thu, 9 Sep 2021 11:18:22 +0200 - -nextcloud-desktop (3.3.50-20210909.074340.f34d66302-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3764 from nextcloud/bugfix/stuck-with-no-explorer-after-autoupdate - - -- Matthieu Gallien Thu, 9 Sep 2021 09:43:40 +0200 - -nextcloud-desktop (3.3.50-20210908.131322.4018f8d55-1.0~hirsute1) hirsute; urgency=medium - - * Prompt reboot when runing the auto update. - - -- alex-z Wed, 8 Sep 2021 16:13:22 +0300 - -nextcloud-desktop (3.3.50-20210909.035602.d649865bc-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 9 Sep 2021 03:56:02 +0000 - -nextcloud-desktop (3.3.50-20210908.125912.3fd4d5cd4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3747 from nextcloud/bugfix/deprecated-warnings - - -- Felix Weilbach Wed, 8 Sep 2021 14:59:12 +0200 - -nextcloud-desktop (3.3.50-20210903.201523.5622c33f4-1.0~hirsute1) hirsute; urgency=medium - - * Fix various deprecated warnings - - -- Felix Weilbach Fri, 3 Sep 2021 22:15:23 +0200 - -nextcloud-desktop (3.3.50-20210903.200919.93f590c6d-1.0~hirsute1) hirsute; urgency=medium - - * Replace deprecated use of QProcess::execute() - - -- Felix Weilbach Fri, 3 Sep 2021 22:09:19 +0200 - -nextcloud-desktop (3.3.50-20210903.195541.c9863dc22-1.0~hirsute1) hirsute; urgency=medium - - * Use QRecursiveMutex - - -- Felix Weilbach Fri, 3 Sep 2021 21:55:41 +0200 - -nextcloud-desktop (3.3.50-20210903.195138.45f59e7ec-1.0~hirsute1) hirsute; urgency=medium - - * Use QDateTime::startOfDay() - - -- Felix Weilbach Fri, 3 Sep 2021 21:51:38 +0200 - -nextcloud-desktop (3.3.50-20210903.194740.b6e3c6d71-1.0~hirsute1) hirsute; urgency=medium - - * Replace deprecated use of QProcess::start() - - -- Felix Weilbach Fri, 3 Sep 2021 21:47:40 +0200 - -nextcloud-desktop (3.3.50-20210903.193746.0af83dd1b-1.0~hirsute1) hirsute; urgency=medium - - * Use QRandomGenerator instead of qrand - - -- Felix Weilbach Fri, 3 Sep 2021 21:37:46 +0200 - -nextcloud-desktop (3.3.50-20210821.101133.2fe3a7947-1.0~hirsute1) hirsute; urgency=medium - - * endl has been deprecated - - -- Felix Weilbach Sat, 21 Aug 2021 12:11:33 +0200 - -nextcloud-desktop (3.3.50-20210908.035301.c7c05173b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 8 Sep 2021 03:53:01 +0000 - -nextcloud-desktop (3.3.50-20210907.073309.127b8c0b2-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3746 from nextcloud/bugfix/doNotCrashPushNotifications - - -- Matthieu Gallien Tue, 7 Sep 2021 09:33:09 +0200 - -nextcloud-desktop (3.3.50-20210903.180104.95e3ecfd3-1.0~hirsute1) hirsute; urgency=medium - - * prevent infinte recursion when closing a websocket in case of SSL errors - - -- Matthieu Gallien Fri, 3 Sep 2021 20:01:04 +0200 - -nextcloud-desktop (3.3.50-20210907.070809.46f7d0788-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3753 from nextcloud/bugfix/close-wizard-after-done - - -- Matthieu Gallien Tue, 7 Sep 2021 09:08:09 +0200 - -nextcloud-desktop (3.3.50-20210906.103751.6fd0adda5-1.0~hirsute1) hirsute; urgency=medium - - * Close wizard if done - - -- Felix Weilbach Mon, 6 Sep 2021 12:37:51 +0200 - -nextcloud-desktop (3.3.50-20210907.035634.68a433d9b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 7 Sep 2021 03:56:34 +0000 - -nextcloud-desktop (3.3.50-20210906.155458.17044317b-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3754 from nextcloud/bugfix/remove-assert - - -- allexzander Mon, 6 Sep 2021 18:54:58 +0300 - -nextcloud-desktop (3.3.50-20210906.110028.031b2e068-1.0~hirsute1) hirsute; urgency=medium - - * Remove assert that caues crashes - - -- Felix Weilbach Mon, 6 Sep 2021 13:00:28 +0200 - -nextcloud-desktop (3.3.50-20210906.155331.8385eeeab-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3688 from nextcloud/feature/share-via-talk - - -- allexzander Mon, 6 Sep 2021 18:53:31 +0300 - -nextcloud-desktop (3.3.50-20210906.131235.24ad43a20-1.0~hirsute1) hirsute; urgency=medium - - * Enable Xvfb for graphical tests on Linux. - - -- alex-z Mon, 6 Sep 2021 16:12:35 +0300 - -nextcloud-desktop (3.3.50-20210817.133918.a3fc81253-1.0~hirsute1) hirsute; urgency=medium - - * Enable share to Talk and Email. Display correct icon. Added unit tests. - - -- allexzander Tue, 17 Aug 2021 16:39:18 +0300 - -nextcloud-desktop (3.3.50-20210906.132627.3f6defe59-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3750 from nextcloud/remove-autoupdate-section-macos - - -- allexzander Mon, 6 Sep 2021 16:26:27 +0300 - -nextcloud-desktop (3.3.50-20210906.070518.41ecb2c16-1.0~hirsute1) hirsute; urgency=medium - - * macOS client is not able to do auto updates - - -- Felix Weilbach Mon, 6 Sep 2021 09:05:18 +0200 - -nextcloud-desktop (3.3.50-20210906.035531.e5517c343-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 6 Sep 2021 03:55:31 +0000 - -nextcloud-desktop (3.3.50-20210905.035500.e56e9acf7-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 5 Sep 2021 03:55:00 +0000 - -nextcloud-desktop (3.3.50-20210904.035311.0b14c340f-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 4 Sep 2021 03:53:11 +0000 - -nextcloud-desktop (3.3.50-20210903.182626.127495943-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3689 from nextcloud/bugfix/removeObsoleteWizardPage - - -- Felix Weilbach Fri, 3 Sep 2021 20:26:26 +0200 - -nextcloud-desktop (3.3.50-20210810.101812.02bb5db54-1.0~hirsute1) hirsute; urgency=medium - - * Remove wizard page that has been dead for 4 years - - -- Hannah von Reth Tue, 10 Aug 2021 12:18:12 +0200 - -nextcloud-desktop (3.3.50-20210903.120327.f396c58b5-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3701 from nextcloud/bugfix/fix-qml-warnings - - -- Felix Weilbach Fri, 3 Sep 2021 14:03:27 +0200 - -nextcloud-desktop (3.3.50-20210820.222648.fa37f5c2b-1.0~hirsute1) hirsute; urgency=medium - - * Don't create binding loop - - -- Felix Weilbach Sat, 21 Aug 2021 00:26:48 +0200 - -nextcloud-desktop (3.3.50-20210820.162725.8a2097e7b-1.0~hirsute1) hirsute; urgency=medium - - * Implicitly defined onFoo properties in Connections are deprecated - - -- Felix Weilbach Fri, 20 Aug 2021 18:27:25 +0200 - -nextcloud-desktop (3.3.50-20210903.092337.c07aec320-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3727 from nextcloud/bugfix/only-set-dav-user-after-login - - -- Matthieu Gallien Fri, 3 Sep 2021 11:23:37 +0200 - -nextcloud-desktop (3.3.50-20210830.112553.ba2d8e820-1.0~hirsute1) hirsute; urgency=medium - - * Only set dav user after login. - - -- Felix Weilbach Mon, 30 Aug 2021 13:25:53 +0200 - -nextcloud-desktop (3.3.50-20210903.035630.9e6e4095a-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 3 Sep 2021 03:56:30 +0000 - -nextcloud-desktop (3.3.50-20210902.035342.d8618d244-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 2 Sep 2021 03:53:42 +0000 - -nextcloud-desktop (3.3.50-20210901.131621.19ee6560a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3729 from nextcloud/cmakecleanup - - -- Felix Weilbach Wed, 1 Sep 2021 15:16:21 +0200 - -nextcloud-desktop (3.3.50-20210415.000550.bc3eb7845-1.0~hirsute1) hirsute; urgency=medium - - * Remove unneeded target_link_libraries - - -- Nicolas Fella Thu, 15 Apr 2021 02:05:50 +0200 - -nextcloud-desktop (3.3.50-20210414.231338.72277726a-1.0~hirsute1) hirsute; urgency=medium - - * Remove unneeded include_directories - - -- Nicolas Fella Thu, 15 Apr 2021 01:13:38 +0200 - -nextcloud-desktop (3.3.50-20210414.230652.18ddb9df4-1.0~hirsute1) hirsute; urgency=medium - - * Use CMAKE_INSTALL_DATADIR instead of custom DATADIR - - -- Nicolas Fella Thu, 15 Apr 2021 01:06:52 +0200 - -nextcloud-desktop (3.3.50-20210414.230515.d247e4791-1.0~hirsute1) hirsute; urgency=medium - - * Remove copy of GNUInstallDirs - - -- Nicolas Fella Thu, 15 Apr 2021 01:05:15 +0200 - -nextcloud-desktop (3.3.50-20210901.035321.49a3a7d7c-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 1 Sep 2021 03:53:21 +0000 - -nextcloud-desktop (3.3.50-20210831.133032.9ce161679-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3719 from pprkut/svg - - -- Felix Weilbach Tue, 31 Aug 2021 15:30:32 +0200 - -nextcloud-desktop (3.3.50-20210826.140725.727de3487-1.0~hirsute1) hirsute; urgency=medium - - * Allow using rsvg-convert to generate pngs instead of inkscape - - -- Heinz Wiesinger Thu, 26 Aug 2021 16:07:25 +0200 - -nextcloud-desktop (3.3.50-20210831.093819.8b71a1f30-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3683 from nextcloud/ci/fixClangTidyConfigFile - - -- Matthieu Gallien Tue, 31 Aug 2021 11:38:19 +0200 - -nextcloud-desktop (3.3.50-20210825.140836.d17d83120-1.0~hirsute1) hirsute; urgency=medium - - * switch from Q_DECL_OVERRIDE to plain override - - -- Matthieu Gallien Wed, 25 Aug 2021 16:08:36 +0200 - -nextcloud-desktop (3.3.50-20210817.103931.25669938f-1.0~hirsute1) hirsute; urgency=medium - - * let clang-tidy add missing override after enabling again the check - - -- Matthieu Gallien Tue, 17 Aug 2021 12:39:31 +0200 - -nextcloud-desktop (3.3.50-20210817.102827.0c3f5cde1-1.0~hirsute1) hirsute; urgency=medium - - * fix name of one clang-tidy check - - -- Matthieu Gallien Tue, 17 Aug 2021 12:28:27 +0200 - -nextcloud-desktop (3.3.50-20210831.035433.843b9d45f-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 31 Aug 2021 03:54:33 +0000 - -nextcloud-desktop (3.3.50-20210830.035326.494e100b0-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 30 Aug 2021 03:53:26 +0000 - -nextcloud-desktop (3.3.50-20210829.035222.02e518381-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sun, 29 Aug 2021 03:52:22 +0000 - -nextcloud-desktop (3.3.50-20210828.042443.1d4f6ab19-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Sat, 28 Aug 2021 04:24:43 +0000 - -nextcloud-desktop (3.3.50-20210827.035502.6ae83c25e-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Fri, 27 Aug 2021 03:55:02 +0000 - -nextcloud-desktop (3.3.50-20210826.164412.e83d441d4-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3697 from nextcloud/bugfix/warnings2 - - -- Matthieu Gallien Thu, 26 Aug 2021 18:44:12 +0200 - -nextcloud-desktop (3.3.50-20210813.114732.44df9283f-1.0~hirsute1) hirsute; urgency=medium - - * Handle every enum value in switch statement - - -- Felix Weilbach Fri, 13 Aug 2021 13:47:32 +0200 - -nextcloud-desktop (3.3.50-20210813.114333.23fca8019-1.0~hirsute1) hirsute; urgency=medium - - * Add parens around && in || statement - - -- Felix Weilbach Fri, 13 Aug 2021 13:43:33 +0200 - -nextcloud-desktop (3.3.50-20210813.102556.4d72d375f-1.0~hirsute1) hirsute; urgency=medium - - * Fix warnings related to wrong ordering of ctor init - - -- Felix Weilbach Fri, 13 Aug 2021 12:25:56 +0200 - -nextcloud-desktop (3.3.50-20210826.155104.210e736bf-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3715 from nextcloud/i18n/fixUnecessaryTrCall - - -- Matthieu Gallien Thu, 26 Aug 2021 17:51:04 +0200 - -nextcloud-desktop (3.3.50-20210825.111519.601c4fb3c-1.0~hirsute1) hirsute; urgency=medium - - * remove a tr call where translator cannot do anything meaningful - - -- Matthieu Gallien Wed, 25 Aug 2021 13:15:19 +0200 - -nextcloud-desktop (3.3.50-20210826.074837.fbe39db77-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3698 from nextcloud/bugfix/nextcloud-cmd-documentation-update - - -- Matthieu Gallien Thu, 26 Aug 2021 09:48:37 +0200 - -nextcloud-desktop (3.3.50-20210820.154638.4927e48bf-1.0~hirsute1) hirsute; urgency=medium - - * Update nextcloudcmd documentation. - - -- allexzander Fri, 20 Aug 2021 18:46:38 +0300 - -nextcloud-desktop (3.3.50-20210826.035445.3feba0896-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Thu, 26 Aug 2021 03:54:45 +0000 - -nextcloud-desktop (3.3.50-20210825.145552.c263c8b8c-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3712 from nextcloud/ci/fixMacCompilation - - -- Matthieu Gallien Wed, 25 Aug 2021 16:55:52 +0200 - -nextcloud-desktop (3.3.50-20210824.152809.23bd4675f-1.0~hirsute1) hirsute; urgency=medium - - * fix build socket api Mac specific file is now in a subdirectory - - -- Matthieu Gallien Tue, 24 Aug 2021 17:28:09 +0200 - -nextcloud-desktop (3.3.50-20210825.094808.99c022cb0-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3627 from nextcloud/Valdnet-patch-1 - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Wed, 25 Aug 2021 11:48:08 +0200 - -nextcloud-desktop (3.3.50-20210804.121401.86cb56757-1.0~hirsute1) hirsute; urgency=medium - - * l10n: Remove line break - - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Wed, 4 Aug 2021 14:14:01 +0200 - -nextcloud-desktop (3.3.50-20210825.035244.89cb1f437-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Wed, 25 Aug 2021 03:52:44 +0000 - -nextcloud-desktop (3.3.50-20210824.144803.df36c97bb-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3709 from nextcloud/bugfix/updateServerSupportedVersions - - -- Matthieu Gallien Tue, 24 Aug 2021 16:48:03 +0200 - -nextcloud-desktop (3.3.50-20210824.125131.ecb13d36f-1.0~hirsute1) hirsute; urgency=medium - - * support server versions for one year after it is end of life - - -- Matthieu Gallien Tue, 24 Aug 2021 14:51:31 +0200 - -nextcloud-desktop (3.3.50-20210824.035334.df1bc519b-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Tue, 24 Aug 2021 03:53:34 +0000 - -nextcloud-desktop (3.3.50-20210823.130209.9c0198937-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3705 from nextcloud/bugfix/removeBrokenAssert - - -- Matthieu Gallien Mon, 23 Aug 2021 15:02:09 +0200 - -nextcloud-desktop (3.3.50-20210823.121358.22a5fadc1-1.0~hirsute1) hirsute; urgency=medium - - * remove broken assert that is not needed and break account setup - - -- Matthieu Gallien Mon, 23 Aug 2021 14:13:58 +0200 - -nextcloud-desktop (3.3.50-20210823.101955.1bbb09a7e-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3619 from nextcloud/feat/workflow-auto-update-command-rebase.yml - - -- Matthieu Gallien Mon, 23 Aug 2021 12:19:55 +0200 - -nextcloud-desktop (3.3.50-20210802.084452.f00c27b4f-1.0~hirsute1) hirsute; urgency=medium - - * Updating command-rebase.yml workflow from template - - -- Nextcloud bot Mon, 2 Aug 2021 08:44:52 +0000 - -nextcloud-desktop (3.3.50-20210823.084032.138323b79-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3669 from nextcloud/bugfix/variousFixesV2 - - -- Matthieu Gallien Mon, 23 Aug 2021 10:40:32 +0200 - -nextcloud-desktop (3.3.50-20210816.165336.0456cacd7-1.0~hirsute1) hirsute; urgency=medium - - * fix clang-tidy check for usage of =default - - -- Matthieu Gallien Mon, 16 Aug 2021 18:53:36 +0200 - -nextcloud-desktop (3.3.50-20210219.150032.c273c8f71-1.0~hirsute1) hirsute; urgency=medium - - * Ensure the socket listener still exists - - -- Hannah von Reth Fri, 19 Feb 2021 16:00:32 +0100 - -nextcloud-desktop (3.3.50-20210217.144132.4b0122093-1.0~hirsute1) hirsute; urgency=medium - - * Add socket command to upload a selection of files based on a regex - - -- Hannah von Reth Wed, 17 Feb 2021 15:41:32 +0100 - -nextcloud-desktop (2.7.0-20200915.135203.511a2da4b-1.0~hirsute1) hirsute; urgency=medium - - * Make the nextcloud-dekstop package depend on qml-module-qtqml - - -- István Váradi Tue, 15 Sep 2020 15:52:03 +0200 - -nextcloud-desktop (2.7.0-20200828.170520.19211d675-1.0~hirsute1) hirsute; urgency=medium - - * nemo-nextcloud depends on either nemo-python or python-name (for #2329) - - -- István Váradi Fri, 28 Aug 2020 19:05:20 +0200 - -nextcloud-desktop (2.7.0-20201216.094812.a31dffba6-1.0~hirsute1) hirsute; urgency=medium - - * usr/share/mime/packages/nextcloud.xml is installed - - -- István Váradi Wed, 16 Dec 2020 10:48:12 +0100 - -nextcloud-desktop (2.7.0-20201216.090537.59fa008ee-1.0~hirsute1) hirsute; urgency=medium - - * Renamed libocsync.so to libnextcloud_csync.so - - -- István Váradi Wed, 16 Dec 2020 10:05:37 +0100 - -nextcloud-desktop (2.7.0-20201216.082312.4d4f988ca-1.0~hirsute1) hirsute; urgency=medium - - * Updated the CMake sanitizer patch for the latest updates on master - - -- István Váradi Wed, 16 Dec 2020 09:23:12 +0100 - -nextcloud-desktop (2.7.0-20201214.162321.cf8e939b9-1.0~hirsute1) hirsute; urgency=medium - - * Sanitized the 'sane CMake' patch to not include the version components - - -- István Váradi Mon, 14 Dec 2020 17:23:21 +0100 - -nextcloud-desktop (2.7.0-20201210.181824.ad7d6b795-1.0~hirsute1) hirsute; urgency=medium - - * Updated CMake patch for version 3.1.50 - - -- István Váradi Thu, 10 Dec 2020 19:18:24 +0100 - -nextcloud-desktop (2.7.0-20201126.190844.678e0a1e2-1.0~hirsute1) hirsute; urgency=medium - - * Updated CMake patch for version 3.0.82 - - -- István Váradi Thu, 26 Nov 2020 20:08:44 +0100 - -nextcloud-desktop (2.7.0-20201116.181301.9bc217f6a-1.0~hirsute1) hirsute; urgency=medium - - * Updated CMake patch for version 3.0.81 - - -- István Váradi Mon, 16 Nov 2020 19:13:01 +0100 - -nextcloud-desktop (2.7.0-20201007.170023.f6bd2fc2e-1.0~hirsute1) hirsute; urgency=medium - - * Added dependency on qtbase5-private-dev for Qt5::GuiPrivate - - -- István Váradi Wed, 7 Oct 2020 19:00:23 +0200 - -nextcloud-desktop (2.7.0-20200807.175959.2ade5a5aa-1.0~hirsute1) hirsute; urgency=medium - - * nextcloud-desktop suggests the file system plugins - - -- István Váradi Fri, 7 Aug 2020 19:59:59 +0200 - -nextcloud-desktop (2.7.0-20200807.175525.a5c8e4505-1.0~hirsute1) hirsute; urgency=medium - - * Updated CMake patch for version 3.1.0 - - -- István Váradi Fri, 7 Aug 2020 19:55:25 +0200 - -nextcloud-desktop (2.7.0-20200806.181542.d46fab81f-1.0~hirsute1) hirsute; urgency=medium - - * Updated CMake patch for version 3.0.0 - - -- István Váradi Thu, 6 Aug 2020 20:15:42 +0200 - -nextcloud-desktop (2.7.0-20200803.165042.0dab7232c-1.0~hirsute1) hirsute; urgency=medium - - * Revert "Change version to 2.8.0 in the CMake patch" - - -- István Váradi Mon, 3 Aug 2020 18:50:42 +0200 - -nextcloud-desktop (2.7.0-20200730.174336.94a42e8cd-1.0~hirsute1) hirsute; urgency=medium - - * Change version to 2.8.0 in the CMake patch - - -- István Váradi Thu, 30 Jul 2020 19:43:36 +0200 - -nextcloud-desktop (2.7.0-20200719.122631.f12751977-1.0~hirsute1) hirsute; urgency=medium - - * Added missing QML module dependencies - - -- István Váradi Sun, 19 Jul 2020 14:26:31 +0200 - -nextcloud-desktop (3.3.50-20200714.121922.010fccb4f-1.0~hirsute1) hirsute; urgency=medium - - * Remove dead code - - -- Hannah von Reth Tue, 14 Jul 2020 14:19:22 +0200 - -nextcloud-desktop (2.7.0-20200712.091120.a265a209c-1.0~hirsute1) hirsute; urgency=medium - - * Transitional package for nextcloud-client-l10n - - -- István Váradi Sun, 12 Jul 2020 11:11:20 +0200 - -nextcloud-desktop (2.7.0-20200712.070318.72d700622-1.0~hirsute1) hirsute; urgency=medium - - * Added further Replaces directives to handle package name transitions better - - -- István Váradi Sun, 12 Jul 2020 09:03:18 +0200 - -nextcloud-desktop (2.7.0-20200507.145930.ff14d5382-1.0~hirsute1) hirsute; urgency=medium - - * Added qtquickcontrols2-5-dev as a build dependency - - -- István Váradi Thu, 7 May 2020 16:59:30 +0200 - -nextcloud-desktop (2.7.0-20200427.171556.658c38177-1.0~hirsute1) hirsute; urgency=medium - - * Updated gbp.conf to groovy - - -- István Váradi Mon, 27 Apr 2020 19:15:56 +0200 - -nextcloud-desktop (2.7.0-20200427.171404.04d537870-1.0~hirsute1) hirsute; urgency=medium - - * Updated changelog to groovy - - -- István Váradi Mon, 27 Apr 2020 19:14:04 +0200 - -nextcloud-desktop (2.7.0-20200325.190302.acb160fab-1.0~hirsute1) hirsute; urgency=medium - - * Debian changelog updated to 2.7.0 - - -- István Váradi Wed, 25 Mar 2020 20:03:02 +0100 - -nextcloud-desktop (2.7.0-20200321.134920.14615d29e-1.0~hirsute1) hirsute; urgency=medium - - * Update Debian files for Focal - - -- István Váradi Sat, 21 Mar 2020 14:49:20 +0100 - -nextcloud-desktop (2.7.0-20200325.122432.dd8b7bc93-1.0~hirsute1) hirsute; urgency=medium - - * Merge branch 'debian/base' into debian/dist/focal/master - - -- István Váradi Wed, 25 Mar 2020 13:24:32 +0100 - -nextcloud-desktop (3.3.50-20200322.181153.58bb65e10-1.0~hirsute1) hirsute; urgency=medium - - * Modifications needed for all distributions - - -- István Váradi Sun, 22 Mar 2020 19:11:53 +0100 - -nextcloud-desktop (3.3.50-20200314.091427.031d68c70-1.0~hirsute1) hirsute; urgency=medium - - * Transitional packages for the old PPA package names - - -- István Váradi Sat, 14 Mar 2020 10:14:27 +0100 - -nextcloud-desktop (3.3.50-20200314.075544.be02b077f-1.0~hirsute1) hirsute; urgency=medium - - * The upstream branch is master - - -- István Váradi Sat, 14 Mar 2020 08:55:44 +0100 - -nextcloud-desktop (3.3.50-20200314.075154.df7696266-1.0~hirsute1) hirsute; urgency=medium - - * Copied the debian control directory from salsa - - -- István Váradi Sat, 14 Mar 2020 08:51:54 +0100 - -nextcloud-desktop (3.3.50-20190402.113536.ebaa98fa7-1.0~hirsute1) hirsute; urgency=medium - - * owncloudcmd: Use env vars for chunk sizes #7078 - - -- Christian Kamm Tue, 2 Apr 2019 13:35:36 +0200 - -nextcloud-desktop (3.3.50-20210304.092917.10e02b003-1.0~hirsute1) hirsute; urgency=medium - - * Don't create QStringList copy first - - -- Hannah von Reth Thu, 4 Mar 2021 10:29:17 +0100 - -nextcloud-desktop (3.3.50-20210304.092853.44fa4aad8-1.0~hirsute1) hirsute; urgency=medium - - * Always call doLog to ensure we get a crash log - - -- Hannah von Reth Thu, 4 Mar 2021 10:28:53 +0100 - -nextcloud-desktop (3.3.50-20210304.102741.d16b2bd36-1.0~hirsute1) hirsute; urgency=medium - - * Send crash log as comment - - -- Hannah von Reth Thu, 4 Mar 2021 11:27:41 +0100 - -nextcloud-desktop (3.3.50-20210304.122547.1ff3a0f8b-1.0~hirsute1) hirsute; urgency=medium - - * Remove anchient debug msg that mutated to a warning over the year - - -- Hannah von Reth Thu, 4 Mar 2021 13:25:47 +0100 - -nextcloud-desktop (3.3.50-20210304.090007.6324ac9ca-1.0~hirsute1) hirsute; urgency=medium - - * Cleanup members - - -- Hannah von Reth Thu, 4 Mar 2021 10:00:07 +0100 - -nextcloud-desktop (3.3.50-20210304.085542.df567efd3-1.0~hirsute1) hirsute; urgency=medium - - * Remove dead code - - -- Hannah von Reth Thu, 4 Mar 2021 09:55:42 +0100 - -nextcloud-desktop (3.3.50-20210303.154735.990ce6ed0-1.0~hirsute1) hirsute; urgency=medium - - * Dump the last 20 lines of logs to a file when we crash - - -- Hannah von Reth Wed, 3 Mar 2021 16:47:35 +0100 - -nextcloud-desktop (3.3.50-20210302.095807.48f4c1e9e-1.0~hirsute1) hirsute; urgency=medium - - * Log fallback result - - -- Hannah von Reth Tue, 2 Mar 2021 10:58:07 +0100 - -nextcloud-desktop (3.3.50-20210226.110252.acd83a299-1.0~hirsute1) hirsute; urgency=medium - - * Ensure unit test are using absolute paths - - -- Hannah von Reth Fri, 26 Feb 2021 12:02:52 +0100 - -nextcloud-desktop (3.3.50-20210225.140741.1eee5c849-1.0~hirsute1) hirsute; urgency=medium - - * Add assert to ensure we used _remotePath as base - - -- Hannah von Reth Thu, 25 Feb 2021 15:07:41 +0100 - -nextcloud-desktop (3.3.50-20210226.110206.6c1073db9-1.0~hirsute1) hirsute; urgency=medium - - * Fix another url for etag request - - -- Hannah von Reth Fri, 26 Feb 2021 12:02:06 +0100 - -nextcloud-desktop (3.3.50-20210225.134223.5b457a166-1.0~hirsute1) hirsute; urgency=medium - - * Use byte array for etag - - -- Hannah von Reth Thu, 25 Feb 2021 14:42:23 +0100 - -nextcloud-desktop (3.3.50-20210217.115003.5a7fd3f31-1.0~hirsute1) hirsute; urgency=medium - - * testlockedfiles use long file path - - -- Hannah von Reth Wed, 17 Feb 2021 12:50:03 +0100 - -nextcloud-desktop (3.3.50-20210217.133026.d16befd1f-1.0~hirsute1) hirsute; urgency=medium - - * Align MkColJob finish signal with the other jobs - - -- Hannah von Reth Wed, 17 Feb 2021 14:30:26 +0100 - -nextcloud-desktop (3.3.50-20210216.134213.c4f4fb48a-1.0~hirsute1) hirsute; urgency=medium - - * Minor cleanup of socket api - - -- Hannah von Reth Tue, 16 Feb 2021 14:42:13 +0100 - -nextcloud-desktop (3.3.50-20210217.133924.cb57d8e54-1.0~hirsute1) hirsute; urgency=medium - - * Add missing Q_EMIT - - -- Hannah von Reth Wed, 17 Feb 2021 14:39:24 +0100 - -nextcloud-desktop (3.3.50-20210216.085616.baa571018-1.0~hirsute1) hirsute; urgency=medium - - * Log invocation, useful for debugging startup issues - - -- Hannah von Reth Tue, 16 Feb 2021 09:56:16 +0100 - -nextcloud-desktop (3.3.50-20210212.134432.8ca5035c4-1.0~hirsute1) hirsute; urgency=medium - - * Add test for csync_vio_local_stat with long path - - -- Hannah von Reth Fri, 12 Feb 2021 14:44:32 +0100 - -nextcloud-desktop (3.3.50-20210212.120613.789e0e45d-1.0~hirsute1) hirsute; urgency=medium - - * Fix Windows long path issue introduced in dd641fae997d71c8396b77def2fa25ad96fdf47f - - -- Hannah von Reth Fri, 12 Feb 2021 13:06:13 +0100 - -nextcloud-desktop (3.3.50-20210107.163750.56364f1c7-1.0~hirsute1) hirsute; urgency=medium - - * Fix unittests - - -- Hannah von Reth Thu, 7 Jan 2021 17:37:50 +0100 - -nextcloud-desktop (3.3.50-20210107.163715.a72ff9ea7-1.0~hirsute1) hirsute; urgency=medium - - * Set permissions for new folder - - -- Hannah von Reth Thu, 7 Jan 2021 17:37:15 +0100 - -nextcloud-desktop (3.3.50-20210127.113957.90b733801-1.0~hirsute1) hirsute; urgency=medium - - * Simplify uuid handling - - -- Hannah von Reth Wed, 27 Jan 2021 12:39:57 +0100 - -nextcloud-desktop (3.3.50-20210121.121005.73549a052-1.0~hirsute1) hirsute; urgency=medium - - * Ignore the desktop.ini file in every directory, not only in top dir. (#8299) - - -- Klaas Freitag Thu, 21 Jan 2021 13:10:05 +0100 - -nextcloud-desktop (3.3.50-20210119.132851.7715583b1-1.0~hirsute1) hirsute; urgency=medium - - * Correctly use indexOf - - -- Hannah von Reth Tue, 19 Jan 2021 14:28:51 +0100 - -nextcloud-desktop (3.3.50-20210119.132804.3a8706734-1.0~hirsute1) hirsute; urgency=medium - - * Cleanup - - -- Hannah von Reth Tue, 19 Jan 2021 14:28:04 +0100 - -nextcloud-desktop (3.3.50-20210119.114258.557b11aca-1.0~hirsute1) hirsute; urgency=medium - - * Include os version 'windows-10.0.19042' in about dialog - - -- Hannah von Reth Tue, 19 Jan 2021 12:42:58 +0100 - -nextcloud-desktop (3.3.50-20210119.080927.324d5a04c-1.0~hirsute1) hirsute; urgency=medium - - * Align type used for getPHash - - -- Hannah von Reth Tue, 19 Jan 2021 09:09:27 +0100 - -nextcloud-desktop (3.3.50-20210118.133633.de2d11125-1.0~hirsute1) hirsute; urgency=medium - - * Move Prepared sql queries to seperate class to manage access - - -- Hannah von Reth Mon, 18 Jan 2021 14:36:33 +0100 - -nextcloud-desktop (3.3.50-20210823.035043.5e6ab8209-1.0~hirsute1) hirsute; urgency=medium - - * [tx-robot] updated from transifex - - -- Nextcloud bot Mon, 23 Aug 2021 03:50:43 +0000 - -nextcloud-desktop (3.3.50-20210821.035558.ad06b8ca6-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210911.035442.735179047-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 21 Aug 2021 03:55:58 +0000 - -nextcloud-desktop (3.3.50-20210820.144340.f522cd66a-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3692 from nextcloud/feature/color-compile-output-ninja - - -- Felix Weilbach Fri, 20 Aug 2021 16:43:40 +0200 - -nextcloud-desktop (3.3.50-20210820.092200.b5b235c75-1.0~hirsute1) hirsute; urgency=medium - - * Color compile ouput when using Ninja build file generator - - -- Felix Weilbach Fri, 20 Aug 2021 11:22:00 +0200 - -nextcloud-desktop (3.3.50-20210820.130720.fce4e8ced-1.0~hirsute1) hirsute; urgency=medium - - * Merge pull request #3348 from nextcloud/feature/vfs-hydration-with-decrypt-file - - -- allexzander Fri, 20 Aug 2021 16:07:20 +0300 - -nextcloud-desktop (3.3.50-20210714.123625.ba73b6d91-1.0~hirsute1) hirsute; urgency=medium - - * VFS + E2EE. Improved data alignment and unit tests for StreamingDecryptor. Refactoring and renaming for readability. - - -- allexzander Wed, 14 Jul 2021 15:36:25 +0300 - -nextcloud-desktop (3.3.50-20210713.135631.289df252b-1.0~hirsute1) hirsute; urgency=medium - - * VFS + E2EE. Handle scenario of sync journal deleted. - - -- allexzander Tue, 13 Jul 2021 16:56:31 +0300 - -nextcloud-desktop (3.3.50-20210713.121904.c28cac847-1.0~hirsute1) hirsute; urgency=medium - - * VFS + E2EE placeholder size migration from old versions. - - -- allexzander Tue, 13 Jul 2021 15:19:04 +0300 - -nextcloud-desktop (3.3.50-20210519.065208.2c78925ac-1.0~hirsute1) hirsute; urgency=medium - - * VFS + E2EE VFS implicit hydration of E2EE files. - - -- allexzander Wed, 19 May 2021 09:52:08 +0300 + -- Nextcloud bot Sat, 11 Sep 2021 03:54:42 +0000 -nextcloud-desktop (3.3.50-20210820.120834.154d47565-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210910.040613.1badf7955-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3621 from nextcloud/bugfix/nextcloud-cmd-dav-fix + * [tx-robot] updated from transifex - -- Matthieu Gallien Fri, 20 Aug 2021 14:08:34 +0200 + -- Nextcloud bot Fri, 10 Sep 2021 04:06:13 +0000 -nextcloud-desktop (3.3.50-20210802.120830.b6d216b79-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210909.035452.5dd18690a-1.0~hirsute1) hirsute; urgency=medium - * Use separate arguments for a remote root and do not use dav or webdav in the server's URL + * [tx-robot] updated from transifex - -- allexzander Mon, 2 Aug 2021 15:08:30 +0300 + -- Nextcloud bot Thu, 9 Sep 2021 03:54:52 +0000 -nextcloud-desktop (3.3.50-20210820.035344.0b2b07671-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210907.102445.c4b188cae-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Merge pull request #3757 from nextcloud/backport/3746/stable-3.3 - -- Nextcloud bot Fri, 20 Aug 2021 03:53:44 +0000 + -- Matthieu Gallien Tue, 7 Sep 2021 12:24:45 +0200 -nextcloud-desktop (3.3.50-20210819.125923.ef6bd0e7a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210903.180104.5dccbbf34-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3671 from nextcloud/feature/update-qt5.15 + * prevent infinte recursion when closing a websocket in case of SSL errors - -- Felix Weilbach Thu, 19 Aug 2021 14:59:23 +0200 + -- Matthieu Gallien Fri, 3 Sep 2021 20:01:04 +0200 -nextcloud-desktop (3.3.50-20210813.093350.332a48e6a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210907.102319.5ec5e2f03-1.0~hirsute1) hirsute; urgency=medium - * Update to Qt 5.15 + * Merge pull request #3756 from nextcloud/backport/3750/stable-3.3 - -- Felix Weilbach Fri, 13 Aug 2021 11:33:50 +0200 + -- Matthieu Gallien Tue, 7 Sep 2021 12:23:19 +0200 -nextcloud-desktop (3.3.50-20210819.110414.748521e4f-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210906.070518.62ec748f5-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3583 from nextcloud/targetname + * macOS client is not able to do auto updates - -- Felix Weilbach Thu, 19 Aug 2021 13:04:14 +0200 + -- Felix Weilbach Mon, 6 Sep 2021 09:05:18 +0200 -nextcloud-desktop (3.3.50-20210728.081158.3d72e24bb-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210907.035529.d515337e3-1.0~hirsute1) hirsute; urgency=medium - * Brand name of vfs plugins + * [tx-robot] updated from transifex - -- Felix Weilbach Wed, 28 Jul 2021 10:11:58 +0200 + -- Nextcloud bot Tue, 7 Sep 2021 03:55:29 +0000 -nextcloud-desktop (3.3.50-20210413.103910.43cccb0a7-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210906.035421.8237f0085-1.0~hirsute1) hirsute; urgency=medium - * Don't use variables for CMake target identifiers + * [tx-robot] updated from transifex - -- Nicolas Fella Tue, 13 Apr 2021 12:39:10 +0200 + -- Nextcloud bot Mon, 6 Sep 2021 03:54:21 +0000 -nextcloud-desktop (3.3.50-20210819.035140.3d5d78f7a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210905.035355.7841de3be-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 19 Aug 2021 03:51:40 +0000 + -- Nextcloud bot Sun, 5 Sep 2021 03:53:55 +0000 -nextcloud-desktop (3.3.50-20210818.075200.079a4f65d-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210904.035209.2c3cef1c2-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3680 from znerol-forks/bug/master/macos-packaging-scripts-capitalization + * [tx-robot] updated from transifex - -- Felix Weilbach Wed, 18 Aug 2021 09:52:00 +0200 + -- Nextcloud bot Sat, 4 Sep 2021 03:52:09 +0000 -nextcloud-desktop (3.3.50-20210816.143937.547c1f57d-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210903.094046.2d54bc4d1-1.0~hirsute1) hirsute; urgency=medium - * Fix macOS app bundle name in packaging scripts + * Merge pull request #3742 from nextcloud/bump-3.3.3 - -- znerol Mon, 16 Aug 2021 16:39:37 +0200 + -- Felix Weilbach Fri, 3 Sep 2021 11:40:46 +0200 -nextcloud-desktop (3.3.50-20210818.035343.b808a4e08-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.3-20210903.093901.664ab345f-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Bump version to 3.3.3 - -- Nextcloud bot Wed, 18 Aug 2021 03:53:43 +0000 + -- Felix Weilbach Fri, 3 Sep 2021 11:39:01 +0200 -nextcloud-desktop (3.3.50-20210817.111424.d241c21c2-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210903.093355.2eee656de-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3681 from nextcloud/bugfix/fixVfsPluginsAppimage + * Merge pull request #3739 from nextcloud/backport/3727/stable-3.3 - -- Matthieu Gallien Tue, 17 Aug 2021 13:14:24 +0200 + -- Felix Weilbach Fri, 3 Sep 2021 11:33:55 +0200 -nextcloud-desktop (3.3.50-20210816.164623.65d22c08b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210830.112553.28c135c26-1.0~hirsute1) hirsute; urgency=medium - * put VFS plugins into the correct path + * Only set dav user after login. - -- Matthieu Gallien Mon, 16 Aug 2021 18:46:23 +0200 + -- Felix Weilbach Mon, 30 Aug 2021 13:25:53 +0200 -nextcloud-desktop (3.3.50-20210817.035428.473553b3e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210903.035524.01fdd229a-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Tue, 17 Aug 2021 03:54:28 +0000 + -- Nextcloud bot Fri, 3 Sep 2021 03:55:24 +0000 -nextcloud-desktop (3.3.50-20210816.035255.440a32b69-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210902.035239.c1fefa325-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Mon, 16 Aug 2021 03:52:55 +0000 + -- Nextcloud bot Thu, 2 Sep 2021 03:52:39 +0000 -nextcloud-desktop (3.3.50-20210815.035229.ef78b9d9e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210901.035214.dcbb7847d-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 15 Aug 2021 03:52:29 +0000 + -- Nextcloud bot Wed, 1 Sep 2021 03:52:14 +0000 -nextcloud-desktop (3.3.50-20210814.035419.4d5f3d42e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210831.035332.0ee03468c-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 14 Aug 2021 03:54:19 +0000 + -- Nextcloud bot Tue, 31 Aug 2021 03:53:32 +0000 -nextcloud-desktop (3.3.50-20210813.035243.55d732cce-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210830.035225.ef7e29a0d-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 13 Aug 2021 03:52:43 +0000 + -- Nextcloud bot Mon, 30 Aug 2021 03:52:25 +0000 -nextcloud-desktop (3.3.50-20210812.131716.30d1c707a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210829.035122.c19d48985-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3655 from nextcloud/bugfix/store-login-name-in-webdav_user + * [tx-robot] updated from transifex - -- Matthieu Gallien Thu, 12 Aug 2021 15:17:16 +0200 + -- Nextcloud bot Sun, 29 Aug 2021 03:51:22 +0000 -nextcloud-desktop (3.3.50-20210812.114112.d706125b1-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210828.042337.3e56ebcff-1.0~hirsute1) hirsute; urgency=medium - * Return the login name instead of user id + * [tx-robot] updated from transifex - -- Felix Weilbach Thu, 12 Aug 2021 13:41:12 +0200 + -- Nextcloud bot Sat, 28 Aug 2021 04:23:37 +0000 -nextcloud-desktop (3.3.50-20210812.035424.35f91945b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210827.035356.189ada15f-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 12 Aug 2021 03:54:24 +0000 + -- Nextcloud bot Fri, 27 Aug 2021 03:53:56 +0000 -nextcloud-desktop (3.3.50-20210811.215647.fe65715b9-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210826.090851.50453d9d7-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3589 from nextcloud/bugfix/warnings + * Merge pull request #3718 from nextcloud/release-3.3.2 - -- Matthieu Gallien Wed, 11 Aug 2021 23:56:47 +0200 + -- Matthieu Gallien Thu, 26 Aug 2021 11:08:51 +0200 -nextcloud-desktop (3.3.50-20210723.154705.ccd27870a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.2-20210826.090441.2740fea57-1.0~hirsute1) hirsute; urgency=medium - * Don't compare integers with different signs + * release 3.3.2 version - -- Felix Weilbach Fri, 23 Jul 2021 17:47:05 +0200 + -- Matthieu Gallien Thu, 26 Aug 2021 11:04:41 +0200 -nextcloud-desktop (3.3.50-20210723.154102.acf6cc052-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210826.080153.02a95b6f5-1.0~hirsute1) hirsute; urgency=medium - * Remove unused functions and variables + * Merge pull request #3717 from nextcloud/backport/3698/stable-3.3 - -- Felix Weilbach Fri, 23 Jul 2021 17:41:02 +0200 + -- allexzander Thu, 26 Aug 2021 11:01:53 +0300 -nextcloud-desktop (3.3.50-20210723.153048.d72f7e910-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210820.154638.3aeeeb56f-1.0~hirsute1) hirsute; urgency=medium - * Check result of setPinState() + * Update nextcloudcmd documentation. - -- Felix Weilbach Fri, 23 Jul 2021 17:30:48 +0200 + -- allexzander Fri, 20 Aug 2021 18:46:38 +0300 -nextcloud-desktop (3.3.50-20210811.201656.b7f67c0ad-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210826.035338.9e6750f3d-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3400 from nextcloud/bugfix/variousFixes + * [tx-robot] updated from transifex - -- Matthieu Gallien Wed, 11 Aug 2021 22:16:56 +0200 + -- Nextcloud bot Thu, 26 Aug 2021 03:53:38 +0000 -nextcloud-desktop (3.3.50-20210118.140121.9ffa7bcd4-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210825.035133.ff38f1cff-1.0~hirsute1) hirsute; urgency=medium - * Add workaround for issue discovered in https://github.com/owncloud/core/pull/38304 + * [tx-robot] updated from transifex - -- Hannah von Reth Mon, 18 Jan 2021 15:01:21 +0100 + -- Nextcloud bot Wed, 25 Aug 2021 03:51:33 +0000 -nextcloud-desktop (3.3.50-20210115.153157.3b99b1184-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210824.150114.58f34bd0c-1.0~hirsute1) hirsute; urgency=medium - * Always reset prepared sql statements + * Merge pull request #3711 from nextcloud/backport/3709/stable-3.3 - -- Hannah von Reth Fri, 15 Jan 2021 16:31:57 +0100 + -- Matthieu Gallien Tue, 24 Aug 2021 17:01:14 +0200 -nextcloud-desktop (3.3.50-20210113.133813.6e0a43b57-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210824.125131.44f89224b-1.0~hirsute1) hirsute; urgency=medium - * Fix clash detection with virtual files + * support server versions for one year after it is end of life - -- Hannah von Reth Wed, 13 Jan 2021 14:38:13 +0100 + -- Matthieu Gallien Tue, 24 Aug 2021 14:51:31 +0200 -nextcloud-desktop (3.3.50-20210105.095853.45f3a9799-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210824.035228.cf8b2c98c-1.0~hirsute1) hirsute; urgency=medium - * Small cleanup + * [tx-robot] updated from transifex - -- Hannah von Reth Tue, 5 Jan 2021 10:58:53 +0100 + -- Nextcloud bot Tue, 24 Aug 2021 03:52:28 +0000 -nextcloud-desktop (3.3.50-20210105.095828.989390bc4-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210823.152014.35b55d722-1.0~hirsute1) hirsute; urgency=medium - * Don't shadow + * Merge pull request #3706 from nextcloud/backport/3621/stable-3.3 - -- Hannah von Reth Tue, 5 Jan 2021 10:58:28 +0100 + -- Matthieu Gallien Mon, 23 Aug 2021 17:20:14 +0200 -nextcloud-desktop (3.3.50-20210118.135617.3bc026a55-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210802.120830.9492defbe-1.0~hirsute1) hirsute; urgency=medium - * Make findBestChecksum case insensitive + * Use separate arguments for a remote root and do not use dav or webdav in the server's URL - -- Hannah von Reth Mon, 18 Jan 2021 14:56:17 +0100 + -- allexzander Mon, 2 Aug 2021 15:08:30 +0300 -nextcloud-desktop (3.3.50-20210118.135133.f977a5469-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210823.034939.8fbc25a0d-1.0~hirsute1) hirsute; urgency=medium - * Finish is already called in the destructor + * [tx-robot] updated from transifex - -- Hannah von Reth Mon, 18 Jan 2021 14:51:33 +0100 + -- Nextcloud bot Mon, 23 Aug 2021 03:49:39 +0000 -nextcloud-desktop (3.3.50-20210112.153746.d60eb67c2-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210822.035011.c05136ce5-1.0~hirsute1) hirsute; urgency=medium - * Also prepend appName if id is empty + * [tx-robot] updated from transifex - -- Hannah von Reth Tue, 12 Jan 2021 16:37:46 +0100 + -- Nextcloud bot Sun, 22 Aug 2021 03:50:11 +0000 -nextcloud-desktop (3.3.50-20210112.102354.8468e70cb-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210821.035446.60542aec8-1.0~hirsute1) hirsute; urgency=medium - * Use QKeychain:: explicitly + * [tx-robot] updated from transifex - -- Hannah von Reth Tue, 12 Jan 2021 11:23:54 +0100 + -- Nextcloud bot Sat, 21 Aug 2021 03:54:46 +0000 -nextcloud-desktop (3.3.50-20210115.123725.926a52b33-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210819.035039.6155b24c6-1.0~hirsute1) hirsute; urgency=medium - * Remove unused computation + * [tx-robot] updated from transifex - -- Hannah von Reth Fri, 15 Jan 2021 13:37:25 +0100 + -- Nextcloud bot Thu, 19 Aug 2021 03:50:39 +0000 -nextcloud-desktop (3.3.50-20210111.114631.1284d7859-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210818.092945.3b75cddef-1.0~hirsute1) hirsute; urgency=medium - * Fix testblacklist.cpp + * Merge pull request #3686 from nextcloud/backport/3680/stable-3.3 - -- Hannah von Reth Mon, 11 Jan 2021 12:46:31 +0100 + -- Matthieu Gallien Wed, 18 Aug 2021 11:29:45 +0200 -nextcloud-desktop (3.3.50-20210111.114541.b01973f95-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210816.143937.75307b70c-1.0~hirsute1) hirsute; urgency=medium - * Enable httplogger on unittests + * Fix macOS app bundle name in packaging scripts - -- Hannah von Reth Mon, 11 Jan 2021 12:45:41 +0100 + -- znerol Mon, 16 Aug 2021 16:39:37 +0200 -nextcloud-desktop (3.3.50-20200910.104648.ec0466ed7-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210818.035240.23591f385-1.0~hirsute1) hirsute; urgency=medium - * Allow to add and remove log rules + * [tx-robot] updated from transifex - -- Hannah von Reth Thu, 10 Sep 2020 12:46:48 +0200 + -- Nextcloud bot Wed, 18 Aug 2021 03:52:40 +0000 -nextcloud-desktop (3.3.50-20210111.103814.1b3502bd5-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210817.035323.82d8c363c-1.0~hirsute1) hirsute; urgency=medium - * Fix httplogger in unittests with lambdas + * [tx-robot] updated from transifex - -- Hannah von Reth Mon, 11 Jan 2021 11:38:14 +0100 + -- Nextcloud bot Tue, 17 Aug 2021 03:53:23 +0000 -nextcloud-desktop (3.3.50-20210811.164230.556baae08-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210816.120841.b05d2d791-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3646 from nextcloud/bugfix/fetch-user-id-always + * Merge pull request #3676 from nextcloud/bugfix/checksumsParseIssue - -- Matthieu Gallien Wed, 11 Aug 2021 18:42:30 +0200 + -- Matthieu Gallien Mon, 16 Aug 2021 14:08:41 +0200 -nextcloud-desktop (3.3.50-20210811.131822.f9daa27a5-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210708.142224.630a99124-1.0~hirsute1) hirsute; urgency=medium - * Enforce fetching of user id + * Install VFS plugins - -- Felix Weilbach Wed, 11 Aug 2021 15:18:22 +0200 + -- István Váradi Thu, 8 Jul 2021 16:22:24 +0200 -nextcloud-desktop (3.3.50-20210811.141718.b4d1d9886-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210625.043405.a3d4bbe3e-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3632 from nextcloud/bugfix/always-use-userid-after-login + * Added inkscape to the build dependencies - -- Felix Weilbach Wed, 11 Aug 2021 16:17:18 +0200 + -- István Váradi Fri, 25 Jun 2021 06:34:05 +0200 -nextcloud-desktop (3.3.50-20210806.093449.5195264a2-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210622.151138.1fdfc22c8-1.0~hirsute1) hirsute; urgency=medium - * Ensure that the users id is used for accessing webdav + * Updated the sane CMake patch to follow changes in patched files - -- Felix Weilbach Fri, 6 Aug 2021 11:34:49 +0200 + -- István Váradi Tue, 22 Jun 2021 17:11:38 +0200 -nextcloud-desktop (3.3.50-20210811.035449.f93263805-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210422.142134.3708cbc5b-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Disable LTO build - -- Nextcloud bot Wed, 11 Aug 2021 03:54:49 +0000 + -- István Váradi Thu, 22 Apr 2021 16:21:34 +0200 -nextcloud-desktop (3.3.50-20210810.212648.b80e2b7e0-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210218.151807.4ff11a2e8-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3640 from nextcloud/doNotStoreAppveyorArtifcatsInAppveyor + * Fixed the branch in gbp.conf - -- Matthieu Gallien Tue, 10 Aug 2021 23:26:48 +0200 + -- István Váradi Thu, 18 Feb 2021 16:18:07 +0100 -nextcloud-desktop (3.3.50-20210809.163252.188b06b7b-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (2.7.0-20210126.153245.d7bb87c27-1.0~hirsute1) hirsute; urgency=medium - * no longer produce installers that would be stored by appveyor + * Added build dependency on Qt5 WebSockets - -- Matthieu Gallien Mon, 9 Aug 2021 18:32:52 +0200 + -- István Váradi Tue, 26 Jan 2021 16:32:45 +0100 -nextcloud-desktop (3.3.50-20210810.041012.5f0ac9a1f-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210118.140121.4df0ddcbd-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Add workaround for issue discovered in https://github.com/owncloud/core/pull/38304 - -- Nextcloud bot Tue, 10 Aug 2021 04:10:12 +0000 + -- Hannah von Reth Mon, 18 Jan 2021 15:01:21 +0100 -nextcloud-desktop (3.3.50-20210809.035420.1f8840cab-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210118.135617.26ca56642-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Make findBestChecksum case insensitive - -- Nextcloud bot Mon, 9 Aug 2021 03:54:20 +0000 + -- Hannah von Reth Mon, 18 Jan 2021 14:56:17 +0100 -nextcloud-desktop (3.3.50-20210808.034932.f241e44da-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210816.035149.21caff6dd-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 8 Aug 2021 03:49:32 +0000 + -- Nextcloud bot Mon, 16 Aug 2021 03:51:49 +0000 -nextcloud-desktop (3.3.50-20210807.035807.1d543ccf9-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210815.035124.5d3cd9263-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 7 Aug 2021 03:58:07 +0000 + -- Nextcloud bot Sun, 15 Aug 2021 03:51:24 +0000 -nextcloud-desktop (3.3.50-20210806.040228.199c6b07a-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210814.035315.aa8521c70-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 6 Aug 2021 04:02:28 +0000 + -- Nextcloud bot Sat, 14 Aug 2021 03:53:15 +0000 -nextcloud-desktop (3.3.50-20210805.035436.3bab989aa-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210813.035138.1865bc688-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Thu, 5 Aug 2021 03:54:36 +0000 + -- Nextcloud bot Fri, 13 Aug 2021 03:51:38 +0000 -nextcloud-desktop (3.3.50-20210804.104607.30a2f6ac7-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210812.132922.cd934ba80-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3626 from nextcloud/bugfix/incorrect-activity-message-invalid-char + * Merge pull request #3656 from nextcloud/backport/3655/stable-3.3 - -- allexzander Wed, 4 Aug 2021 13:46:07 +0300 + -- Matthieu Gallien Thu, 12 Aug 2021 15:29:22 +0200 -nextcloud-desktop (3.3.50-20210804.102217.4106c646f-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210812.114112.5202df440-1.0~hirsute1) hirsute; urgency=medium - * Fix incorrect activity message on invalid char in the file name. + * Return the login name instead of user id - -- allexzander Wed, 4 Aug 2021 13:22:17 +0300 + -- Felix Weilbach Thu, 12 Aug 2021 13:41:12 +0200 -nextcloud-desktop (3.3.50-20210804.100011.a92d28988-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210812.083642.99bcf30f7-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3611 from nextcloud/feature/delete-apptoken + * Merge pull request #3650 from nextcloud/bump-3.3.1 - -- allexzander Wed, 4 Aug 2021 13:00:11 +0300 + -- Felix Weilbach Thu, 12 Aug 2021 10:36:42 +0200 -nextcloud-desktop (3.3.50-20210728.135256.c930d8e30-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.1-20210812.083511.56e8561e6-1.0~hirsute1) hirsute; urgency=medium - * Delete apptoken after account removal. + * Bump to version 3.3.1 - -- allexzander Wed, 28 Jul 2021 16:52:56 +0300 + -- Felix Weilbach Thu, 12 Aug 2021 10:35:11 +0200 -nextcloud-desktop (3.3.50-20210804.035413.376a73014-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210812.035316.05fef8e46-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Wed, 4 Aug 2021 03:54:13 +0000 + -- Nextcloud bot Thu, 12 Aug 2021 03:53:16 +0000 -nextcloud-desktop (3.3.50-20210803.121612.31e16f262-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210811.165129.6f5c61e44-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3620 from nextcloud/Valdnet-patch-3 + * Merge pull request #3648 from nextcloud/backport/3646/stable-3.3 - -- allexzander Tue, 3 Aug 2021 15:16:12 +0300 + -- Matthieu Gallien Wed, 11 Aug 2021 18:51:29 +0200 -nextcloud-desktop (3.3.50-20210802.114924.dbd061c44-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210811.131822.1e28185ee-1.0~hirsute1) hirsute; urgency=medium - * l10n: Replace apostrophe with double quotation. Remove double space and sort sentence. + * Enforce fetching of user id - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Mon, 2 Aug 2021 13:49:24 +0200 + -- Felix Weilbach Wed, 11 Aug 2021 15:18:22 +0200 -nextcloud-desktop (3.3.50-20210803.035348.60c0e5e97-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210811.145839.4d7f72e3a-1.0~hirsute1) hirsute; urgency=medium - * [tx-robot] updated from transifex + * Merge pull request #3647 from nextcloud/backport/3632/stable-3.3 - -- Nextcloud bot Tue, 3 Aug 2021 03:53:48 +0000 + -- Matthieu Gallien Wed, 11 Aug 2021 16:58:39 +0200 -nextcloud-desktop (3.3.50-20210802.080938.2855f89e5-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210806.093449.6a414d5fb-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3618 from nextcloud/rakekniven-patch-1 + * Ensure that the users id is used for accessing webdav - -- Felix Weilbach Mon, 2 Aug 2021 10:09:38 +0200 + -- Felix Weilbach Fri, 6 Aug 2021 11:34:49 +0200 -nextcloud-desktop (3.3.50-20210801.152406.37b012fcb-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210811.035348.694c6e721-1.0~hirsute1) hirsute; urgency=medium - * Changed grammar + * [tx-robot] updated from transifex - -- rakekniven <2069590+rakekniven@users.noreply.github.com> Sun, 1 Aug 2021 17:24:06 +0200 + -- Nextcloud bot Wed, 11 Aug 2021 03:53:48 +0000 -nextcloud-desktop (3.3.50-20210802.032711.4c5f12200-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210810.040905.e0e4e9778-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Mon, 2 Aug 2021 03:27:11 +0000 + -- Nextcloud bot Tue, 10 Aug 2021 04:09:05 +0000 -nextcloud-desktop (3.3.50-20210801.032819.2857c16c6-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210809.035321.7baa66b83-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sun, 1 Aug 2021 03:28:19 +0000 + -- Nextcloud bot Mon, 9 Aug 2021 03:53:21 +0000 -nextcloud-desktop (3.3.50-20210731.033350.7cc71deec-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210808.034827.301bb2024-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Sat, 31 Jul 2021 03:33:50 +0000 + -- Nextcloud bot Sun, 8 Aug 2021 03:48:27 +0000 -nextcloud-desktop (3.3.50-20210730.073528.ca4b4cde6-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210807.035706.f7fce0100-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3600 from nextcloud/enh/rais-maxchunk-size + * [tx-robot] updated from transifex - -- allexzander Fri, 30 Jul 2021 10:35:28 +0300 + -- Nextcloud bot Sat, 7 Aug 2021 03:57:06 +0000 -nextcloud-desktop (3.3.50-20210513.192038.2c95b9519-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210806.040123.af894485b-1.0~hirsute1) hirsute; urgency=medium - * Set default maxChunkSize to 1000MB + * [tx-robot] updated from transifex - -- szaimen Thu, 13 May 2021 21:20:38 +0200 + -- Nextcloud bot Fri, 6 Aug 2021 04:01:23 +0000 -nextcloud-desktop (3.3.50-20210730.065938.f02b8f4a1-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210805.035330.2fb609fa9-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3604 from nextcloud/Valdnet-patch-3 + * [tx-robot] updated from transifex - -- allexzander Fri, 30 Jul 2021 09:59:38 +0300 + -- Nextcloud bot Thu, 5 Aug 2021 03:53:30 +0000 -nextcloud-desktop (3.3.50-20210729.085530.fc75b9452-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210804.035310.c4627c3c0-1.0~hirsute1) hirsute; urgency=medium - * Fix clang-tidy errors. + * [tx-robot] updated from transifex - -- allexzander Thu, 29 Jul 2021 11:55:30 +0300 + -- Nextcloud bot Wed, 4 Aug 2021 03:53:10 +0000 -nextcloud-desktop (3.3.50-20210729.074031.71b2b7388-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210803.035244.5f0e8b826-1.0~hirsute1) hirsute; urgency=medium - * Fix tests. + * [tx-robot] updated from transifex - -- allexzander Thu, 29 Jul 2021 10:40:31 +0300 + -- Nextcloud bot Tue, 3 Aug 2021 03:52:44 +0000 -nextcloud-desktop (3.3.50-20210728.193513.7ebbb499e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210802.032603.99c6bee64-1.0~hirsute1) hirsute; urgency=medium - * l10n: Replace apostrophe with double quotation + * [tx-robot] updated from transifex - -- Valdnet <47037905+Valdnet@users.noreply.github.com> Wed, 28 Jul 2021 21:35:13 +0200 + -- Nextcloud bot Mon, 2 Aug 2021 03:26:03 +0000 -nextcloud-desktop (3.3.50-20210730.032523.10b7907fa-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210801.032714.853bfed89-1.0~hirsute1) hirsute; urgency=medium * [tx-robot] updated from transifex - -- Nextcloud bot Fri, 30 Jul 2021 03:25:23 +0000 + -- Nextcloud bot Sun, 1 Aug 2021 03:27:14 +0000 -nextcloud-desktop (3.3.50-20210729.100205.417fd44cb-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210731.033243.86dc3fefc-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3609 from nextcloud/update-supp-server-versions + * [tx-robot] updated from transifex - -- Matthieu Gallien Thu, 29 Jul 2021 12:02:05 +0200 + -- Nextcloud bot Sat, 31 Jul 2021 03:32:43 +0000 -nextcloud-desktop (3.3.50-20210729.091136.22b10e20e-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210730.032419.ea800b638-1.0~hirsute1) hirsute; urgency=medium - * Update supported server versions + * [tx-robot] updated from transifex - -- Felix Weilbach Thu, 29 Jul 2021 11:11:36 +0200 + -- Nextcloud bot Fri, 30 Jul 2021 03:24:19 +0000 -nextcloud-desktop (3.3.50-20210729.084851.78d92f442-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210729.100332.a2e69d857-1.0~hirsute1) hirsute; urgency=medium - * Merge pull request #3608 from nextcloud/bump-version-3.3.50 + * Merge pull request #3610 from nextcloud/backport/3609/stable-3.3 - -- Felix Weilbach Thu, 29 Jul 2021 10:48:51 +0200 + -- Matthieu Gallien Thu, 29 Jul 2021 12:03:32 +0200 -nextcloud-desktop (3.3.50-20210729.084724.efd9c6ef4-1.0~hirsute1) hirsute; urgency=medium +nextcloud-desktop (3.3.0-20210729.091136.0178b322f-1.0~hirsute1) hirsute; urgency=medium - * Bump version to 3.3.50 + * Update supported server versions - -- Felix Weilbach Thu, 29 Jul 2021 10:47:24 +0200 + -- Felix Weilbach Thu, 29 Jul 2021 11:11:36 +0200 nextcloud-desktop (3.3.0-20210729.084019.acf3bf095-1.0~hirsute1) hirsute; urgency=medium @@ -9064,6 +6364,66 @@ -- Hannah von Reth Tue, 15 Sep 2020 16:07:14 +0200 +nextcloud-desktop (2.7.0-20200915.135203.511a2da4b-1.0~hirsute1) hirsute; urgency=medium + + * Make the nextcloud-dekstop package depend on qml-module-qtqml + + -- István Váradi Tue, 15 Sep 2020 15:52:03 +0200 + +nextcloud-desktop (2.7.0-20200828.170520.19211d675-1.0~hirsute1) hirsute; urgency=medium + + * nemo-nextcloud depends on either nemo-python or python-name (for #2329) + + -- István Váradi Fri, 28 Aug 2020 19:05:20 +0200 + +nextcloud-desktop (2.7.0-20201216.094812.a31dffba6-1.0~hirsute1) hirsute; urgency=medium + + * usr/share/mime/packages/nextcloud.xml is installed + + -- István Váradi Wed, 16 Dec 2020 10:48:12 +0100 + +nextcloud-desktop (2.7.0-20201216.090537.59fa008ee-1.0~hirsute1) hirsute; urgency=medium + + * Renamed libocsync.so to libnextcloud_csync.so + + -- István Váradi Wed, 16 Dec 2020 10:05:37 +0100 + +nextcloud-desktop (2.7.0-20201216.082312.4d4f988ca-1.0~hirsute1) hirsute; urgency=medium + + * Updated the CMake sanitizer patch for the latest updates on master + + -- István Váradi Wed, 16 Dec 2020 09:23:12 +0100 + +nextcloud-desktop (2.7.0-20201214.162321.cf8e939b9-1.0~hirsute1) hirsute; urgency=medium + + * Sanitized the 'sane CMake' patch to not include the version components + + -- István Váradi Mon, 14 Dec 2020 17:23:21 +0100 + +nextcloud-desktop (2.7.0-20201210.181824.ad7d6b795-1.0~hirsute1) hirsute; urgency=medium + + * Updated CMake patch for version 3.1.50 + + -- István Váradi Thu, 10 Dec 2020 19:18:24 +0100 + +nextcloud-desktop (2.7.0-20201126.190844.678e0a1e2-1.0~hirsute1) hirsute; urgency=medium + + * Updated CMake patch for version 3.0.82 + + -- István Váradi Thu, 26 Nov 2020 20:08:44 +0100 + +nextcloud-desktop (2.7.0-20201116.181301.9bc217f6a-1.0~hirsute1) hirsute; urgency=medium + + * Updated CMake patch for version 3.0.81 + + -- István Váradi Mon, 16 Nov 2020 19:13:01 +0100 + +nextcloud-desktop (2.7.0-20201007.170023.f6bd2fc2e-1.0~hirsute1) hirsute; urgency=medium + + * Added dependency on qtbase5-private-dev for Qt5::GuiPrivate + + -- István Váradi Wed, 7 Oct 2020 19:00:23 +0200 + nextcloud-desktop (3.1.50-20200810.142256.0c57bb886-1.0~hirsute1) hirsute; urgency=medium * Remove the use of goto from test/csync/std_tests/check_std_c_jhash.c @@ -9082,6 +6442,42 @@ -- Hannah von Reth Mon, 14 Sep 2020 12:31:14 +0200 +nextcloud-desktop (2.7.0-20200807.175959.2ade5a5aa-1.0~hirsute1) hirsute; urgency=medium + + * nextcloud-desktop suggests the file system plugins + + -- István Váradi Fri, 7 Aug 2020 19:59:59 +0200 + +nextcloud-desktop (2.7.0-20200807.175525.a5c8e4505-1.0~hirsute1) hirsute; urgency=medium + + * Updated CMake patch for version 3.1.0 + + -- István Váradi Fri, 7 Aug 2020 19:55:25 +0200 + +nextcloud-desktop (2.7.0-20200806.181542.d46fab81f-1.0~hirsute1) hirsute; urgency=medium + + * Updated CMake patch for version 3.0.0 + + -- István Váradi Thu, 6 Aug 2020 20:15:42 +0200 + +nextcloud-desktop (2.7.0-20200803.165042.0dab7232c-1.0~hirsute1) hirsute; urgency=medium + + * Revert "Change version to 2.8.0 in the CMake patch" + + -- István Váradi Mon, 3 Aug 2020 18:50:42 +0200 + +nextcloud-desktop (2.7.0-20200730.174336.94a42e8cd-1.0~hirsute1) hirsute; urgency=medium + + * Change version to 2.8.0 in the CMake patch + + -- István Váradi Thu, 30 Jul 2020 19:43:36 +0200 + +nextcloud-desktop (2.7.0-20200719.122631.f12751977-1.0~hirsute1) hirsute; urgency=medium + + * Added missing QML module dependencies + + -- István Váradi Sun, 19 Jul 2020 14:26:31 +0200 + nextcloud-desktop (3.1.50-20200717.122816.020c6d642-1.0~hirsute1) hirsute; urgency=medium * Fix placeholders are reverted to OnlineOnly @@ -9184,6 +6580,18 @@ -- Hannah von Reth Fri, 27 Nov 2020 11:26:41 +0100 +nextcloud-desktop (2.7.0-20200712.091120.a265a209c-1.0~hirsute1) hirsute; urgency=medium + + * Transitional package for nextcloud-client-l10n + + -- István Váradi Sun, 12 Jul 2020 11:11:20 +0200 + +nextcloud-desktop (2.7.0-20200712.070318.72d700622-1.0~hirsute1) hirsute; urgency=medium + + * Added further Replaces directives to handle package name transitions better + + -- István Váradi Sun, 12 Jul 2020 09:03:18 +0200 + nextcloud-desktop (3.1.50-20200708.142748.2887a93c4-1.0~hirsute1) hirsute; urgency=medium * Win: Use full Windows paths in file watcher and improve logging @@ -9346,6 +6754,12 @@ -- Hannah von Reth Wed, 13 May 2020 17:34:41 +0200 +nextcloud-desktop (2.7.0-20200507.145930.ff14d5382-1.0~hirsute1) hirsute; urgency=medium + + * Added qtquickcontrols2-5-dev as a build dependency + + -- István Váradi Thu, 7 May 2020 16:59:30 +0200 + nextcloud-desktop (3.1.50-20200505.103215.eed4ffb82-1.0~hirsute1) hirsute; urgency=medium * Wizard: Raise own window @@ -9358,6 +6772,18 @@ -- Hannah von Reth Mon, 4 May 2020 15:54:11 +0200 +nextcloud-desktop (2.7.0-20200427.171556.658c38177-1.0~hirsute1) hirsute; urgency=medium + + * Updated gbp.conf to groovy + + -- István Váradi Mon, 27 Apr 2020 19:15:56 +0200 + +nextcloud-desktop (2.7.0-20200427.171404.04d537870-1.0~hirsute1) hirsute; urgency=medium + + * Updated changelog to groovy + + -- István Váradi Mon, 27 Apr 2020 19:14:04 +0200 + nextcloud-desktop (3.1.50-20200423.083441.1a1035d51-1.0~hirsute1) hirsute; urgency=medium * Remove unused struct @@ -9394,6 +6820,30 @@ -- Hannah von Reth Wed, 22 Apr 2020 15:22:03 +0200 +nextcloud-desktop (2.7.0-20200325.190302.acb160fab-1.0~hirsute1) hirsute; urgency=medium + + * Debian changelog updated to 2.7.0 + + -- István Váradi Wed, 25 Mar 2020 20:03:02 +0100 + +nextcloud-desktop (2.7.0-20200321.134920.14615d29e-1.0~hirsute1) hirsute; urgency=medium + + * Update Debian files for Focal + + -- István Váradi Sat, 21 Mar 2020 14:49:20 +0100 + +nextcloud-desktop (2.7.0-20200325.122432.dd8b7bc93-1.0~hirsute1) hirsute; urgency=medium + + * Merge branch 'debian/base' into debian/dist/focal/master + + -- István Váradi Wed, 25 Mar 2020 13:24:32 +0100 + +nextcloud-desktop (3.1.50-20200322.181153.58bb65e10-1.0~hirsute1) hirsute; urgency=medium + + * Modifications needed for all distributions + + -- István Váradi Sun, 22 Mar 2020 19:11:53 +0100 + nextcloud-desktop (3.1.50-20200318.133819.caa04f6ad-1.0~hirsute1) hirsute; urgency=medium * Make bit flags better readable @@ -9466,6 +6916,24 @@ -- Hannah von Reth Wed, 18 Mar 2020 12:26:15 +0100 +nextcloud-desktop (3.1.50-20200314.091427.031d68c70-1.0~hirsute1) hirsute; urgency=medium + + * Transitional packages for the old PPA package names + + -- István Váradi Sat, 14 Mar 2020 10:14:27 +0100 + +nextcloud-desktop (3.1.50-20200314.075544.be02b077f-1.0~hirsute1) hirsute; urgency=medium + + * The upstream branch is master + + -- István Váradi Sat, 14 Mar 2020 08:55:44 +0100 + +nextcloud-desktop (3.1.50-20200314.075154.df7696266-1.0~hirsute1) hirsute; urgency=medium + + * Copied the debian control directory from salsa + + -- István Váradi Sat, 14 Mar 2020 08:51:54 +0100 + nextcloud-desktop (3.1.50-20200309.164519.d63d4cdf6-1.0~hirsute1) hirsute; urgency=medium * Don't insert items into the folder model if selectiveSync is not supported diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/patches/0004-sane-cmake.patch nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/patches/0004-sane-cmake.patch --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/patches/0004-sane-cmake.patch 2021-12-27 06:25:22.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/patches/0004-sane-cmake.patch 2022-01-03 12:25:37.000000000 +0000 @@ -1,8 +1,11 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index c73a620d1..fe8f5692e 100644 +Description: Put VERSION.cmake and NextcloudCPack.cmake into CMakeLists.txt + Introduce external versionnumber +Author: Alf Gaida +Last-Update: 2019-11-17 + --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -72,29 +72,12 @@ include(GNUInstallDirs) +@@ -61,29 +109,12 @@ include(GNUInstallDirs) include(DefineInstallationPaths) include(GenerateExportHeader) @@ -11,9 +14,9 @@ -get_git_head_revision(GIT_REFSPEC GIT_SHA1) - add_definitions( - -DQT_DISABLE_DEPRECATED_BEFORE=0x000000 -DQT_USE_QSTRINGBUILDER -DQT_MESSAGELOGCONTEXT #enable function name and line number in debug output + -DQT_DEPRECATED_WARNINGS ) -# if we cannot get it from git, directly try .tag (packages) @@ -30,9 +33,9 @@ -message(STATUS "GIT_SHA1 ${GIT_SHA1}") - set(SYSCONFDIR ${SYSCONF_INSTALL_DIR}) - set(SHAREDIR ${CMAKE_INSTALL_DATADIR}) - -@@ -203,7 +186,47 @@ if (NOT DEFINED APPLICATION_ICON_NAME) + set(DATADIR ${DATA_INSTALL_DIR}) + if(WIN32) +@@ -195,7 +226,47 @@ if (NOT DEFINED APPLICATION_ICON_NAME) set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) endif() @@ -81,9 +84,6 @@ add_definitions(-DUNICODE) add_definitions(-D_UNICODE) -diff --git a/NextcloudCPack.cmake b/NextcloudCPack.cmake -deleted file mode 100644 -index 0682090c0..000000000 --- a/NextcloudCPack.cmake +++ /dev/null @@ -1,63 +0,0 @@ @@ -150,13 +150,9 @@ - "${CMAKE_BINARY_DIR}/CPackOptions.cmake" @ONLY) -set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CPackOptions.cmake") # File included at cpack time, once per generator after setting CPACK_GENERATOR to the actual generator being used; allows per-generator setting of CPACK_* variables at cpack time. ${PROJECT_BINARY_DIR}/CPackOptions.cmake -include(CPack) -diff --git a/VERSION.cmake b/VERSION.cmake -index 4939189ea..92012cd5c 100644 --- a/VERSION.cmake +++ b/VERSION.cmake -@@ -9,22 +9,40 @@ set(NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MAJOR 16) - set(NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MINOR 0) - set(NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_PATCH 0) +@@ -4,20 +4,38 @@ set( MIRALL_VERSION_PATCH 50 ) -if ( NOT DEFINED MIRALL_VERSION_SUFFIX ) - set( MIRALL_VERSION_SUFFIX "git") #e.g. beta1, beta2, rc1 diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/patches/0007-vfs-plugin.patch nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/patches/0007-vfs-plugin.patch --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/debian/patches/0007-vfs-plugin.patch 2021-12-27 06:25:22.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/debian/patches/0007-vfs-plugin.patch 2022-01-03 12:25:37.000000000 +0000 @@ -1,21 +1,21 @@ diff --git a/src/libsync/vfs/cfapi/CMakeLists.txt b/src/libsync/vfs/cfapi/CMakeLists.txt -index 5d7900711..e64dd50a2 100644 +index 77392c21f..42083f135 100644 --- a/src/libsync/vfs/cfapi/CMakeLists.txt +++ b/src/libsync/vfs/cfapi/CMakeLists.txt -@@ -25,7 +25,7 @@ if (WIN32) +@@ -21,7 +21,7 @@ if (WIN32) - target_include_directories("nextcloudsync_vfs_cfapi" BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_BINARY_DIR}) + target_include_directories("${synclib_NAME}_vfs_cfapi" BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_BINARY_DIR}) - set(vfs_installdir "${PLUGINDIR}") + set(vfs_installdir "${PLUGIN_INSTALL_DIR}") - generate_export_header(nextcloudsync_vfs_cfapi - BASE_NAME nextcloudsync_vfs_cfapi + GENERATE_EXPORT_HEADER( "${synclib_NAME}_vfs_cfapi" + BASE_NAME "${synclib_NAME}_vfs_cfapi" diff --git a/src/libsync/vfs/suffix/CMakeLists.txt b/src/libsync/vfs/suffix/CMakeLists.txt -index bec840ca2..022641746 100644 +index 92426a5fb..e11375e5e 100644 --- a/src/libsync/vfs/suffix/CMakeLists.txt +++ b/src/libsync/vfs/suffix/CMakeLists.txt -@@ -26,7 +26,7 @@ if(APPLE) +@@ -24,7 +24,7 @@ if(APPLE) # For being loadable when client run from install dir (after make macdeployqt) set(vfs_installdir "${LIB_INSTALL_DIR}/../PlugIns") else() @@ -23,12 +23,12 @@ + set(vfs_installdir "${PLUGIN_INSTALL_DIR}") endif() - install(TARGETS nextcloudsync_vfs_suffix + INSTALL(TARGETS "${synclib_NAME}_vfs_suffix" diff --git a/src/libsync/vfs/xattr/CMakeLists.txt b/src/libsync/vfs/xattr/CMakeLists.txt -index f87bd4f9c..02c1cdab1 100644 +index ae6fe7abf..66f51b4be 100644 --- a/src/libsync/vfs/xattr/CMakeLists.txt +++ b/src/libsync/vfs/xattr/CMakeLists.txt -@@ -34,7 +34,7 @@ if (LINUX) +@@ -32,7 +32,7 @@ if (LINUX) # For being loadable when client run from install dir (after make macdeployqt) set(vfs_installdir "${LIB_INSTALL_DIR}/../PlugIns") else() @@ -36,4 +36,4 @@ + set(vfs_installdir "${PLUGIN_INSTALL_DIR}") endif() - generate_export_header(nextcloudsync_vfs_xattr + GENERATE_EXPORT_HEADER( "${synclib_NAME}_vfs_xattr" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/architecture.rst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/architecture.rst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/architecture.rst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/architecture.rst 2022-01-03 12:25:12.000000000 +0000 @@ -406,7 +406,7 @@ ------------- .. note:: - * This feature is currently only available on ``Windows`` by default. ``Linux`` and ``macOS`` implementations are experimental and must be enabled by adding ``showExperimentalOptions=true`` to the ``nextcloud.cfg`` configuration file in the ``App Data`` folder. + * This feature is currently only available on ``Windows`` by default. ``Linux`` implementation is experimental and must be enabled by adding ``showExperimentalOptions=true`` to the ``nextcloud.cfg`` configuration file in the ``App Data`` folder. ``macOS``, at the moment, is using the same backend as ``Linux`` one. It can be enabled with the same ``showExperimentalOptions`` flag. Oftentimes, users are working with a huge amount of files that are big in size. Synchronizing every such file to a device that's running a Nextcloud desktop client is not always possible due to the user's device storage space limitation. Let's assume that your desktop client is connected to a server that has 1TB of data. You want all those files at hand, so you can quickly access any file via the file explorer. Your device has 512GB local storage device. @@ -416,15 +416,8 @@ That's why, starting from 3.2.0, we are introducing the VFS (Virtual Files) feature. You may have had experience working with a similar feature in other cloud sync clients. This feature is known by different names: Files On-Demand, SmartSync, etc. The VFS does not occupy much space on the user's storage. It just creates placeholders for each file and folder. These files are quite small and only contain metadata needed to display them properly and to fetch the actual file when needed. -When one tries to open a file, for example by double clicking on a -file in the Windows Explorer, one will see that the file gets -downloaded and becomes available locally. This can be observed by a -small progress-bar popup if the file is large enough. - -As soon as the download is complete, the file will then be opened -normally as now it is a real file on the user's storage. It won't -disappear, and, from now on, will always be available, unless it is -manually dehydrated. +One will see a hydration (in other words - file download) process when double-clicking on a file that must become available. There will be a progress-bar popup displayed if the file is large enough. So, the hydration process can be observed and it makes it easy to then find out, how long, it would take to fetch the actual file from the server. +The "Hydration" can be thought of as "downloading" or "fetching" the file contents. As soon as hydration is complete, the file will then be opened normally as now it is a real file on the user's storage. It won't disappear, and, from now on, will always be available, unless it is manually dehydrated. .. image:: images/vfs_hydration_progress_bar.png :alt: VFS hydration progress bar diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/building.rst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/building.rst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/building.rst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/building.rst 2022-01-03 12:25:12.000000000 +0000 @@ -185,8 +185,6 @@ .. code-block:: bash % echo 'export CMAKE_INSTALL_PREFIX=~/Builds' >> ~/.nextcloud_build_variables - # If you want to build a macOS app bundle for distribution - % echo 'export BUILD_OWNCLOUD_OSX_BUNDLE=ON' >> ~/.nextcloud_build_variables Replace ``~/Builds`` with a different directory if you'd like the build to end up elsewhere. diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/conffile.rst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/conffile.rst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/conffile.rst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/conffile.rst 2022-01-03 12:25:12.000000000 +0000 @@ -41,7 +41,7 @@ | ``chunkSize`` | ``10000000`` (10 MB) | Specifies the chunk size of uploaded files in bytes. | | | | The client will dynamically adjust this size within the maximum and minimum bounds (see below). | +----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+ -| ``maxChunkSize`` | ``1000000000`` (1000 MB) | Specifies the maximum chunk size of uploaded files in bytes. | +| ``maxChunkSize`` | ``100000000`` (100 MB) | Specifies the maximum chunk size of uploaded files in bytes. | +----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+ | ``minChunkSize`` | ``1000000`` (1 MB) | Specifies the minimum chunk size of uploaded files in bytes. | +----------------------------------+------------------------+--------------------------------------------------------------------------------------------------------+ diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/conf.py nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/conf.py --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/conf.py 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/conf.py 2022-01-03 12:25:12.000000000 +0000 @@ -48,9 +48,9 @@ # built documents. # # The short X.Y version. -version = '3.4' +version = '3.3' # The full version, including alpha/beta/rc tags. -release = '3.4.1' +release = '3.3.6' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. Binary files /tmp/tmpk4pug5g6/03jeUE8zrL/nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/images/user_status-selector_dialog.png and /tmp/tmpk4pug5g6/Q0S5mSqZ8D/nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/images/user_status-selector_dialog.png differ Binary files /tmp/tmpk4pug5g6/03jeUE8zrL/nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/images/user_status_selector_main_dialog.png and /tmp/tmpk4pug5g6/Q0S5mSqZ8D/nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/images/user_status_selector_main_dialog.png differ diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/installing.rst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/installing.rst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/installing.rst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/installing.rst 2022-01-03 12:25:12.000000000 +0000 @@ -31,7 +31,7 @@ System Requirements ---------------------------------- -- Windows 8.1+ +- Windows 10+ - macOS 10.12+ (64-bit only) - Linux - FreeBSD diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/navigating.rst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/navigating.rst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/doc/navigating.rst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/doc/navigating.rst 2022-01-03 12:25:12.000000000 +0000 @@ -157,35 +157,6 @@ If a directory includes ignored files that are marked with warning icons that does not change the status of the parent directories. -Set the user status -------------------- - -If you have the user status app installed on your Nextcloud server, -you can set your user status from the desktop client. To do so, open -the main dialog. Then click on your avatar and then click on the three -dots. In the menu that opens click on **Set status**. - -.. figure:: images/user_status_selector_main_dialog.png - :alt: Open user status dialog from main dialog. - -In the dialog that opens, you can set your online status if -you click on either **Online**, **Away**, **Do not disturb** or -**Invisible**. You can also set a custom status message with the text -field below or choose one of the predefined status messages below. It -is also possible to set a custom emoji if you click on the button with -the emoji beside the text input field. The last thing you might want -to set is when your user status should be cleared. You can choose the -period after which the user status will be cleared by clicking on the -button on the left hand side of the text **Clear status message after**. - -.. figure:: images/user_status-selector_dialog.png - :alt: Dialog to set user status. - -If you are happy with the status you have created you can enable this -status with the button **Set status message**. If you had already a -status set, you can clear the status by clicking the cutton **Clear -status message**. - Sharing From Your Desktop ------------------------- diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.drone.yml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.drone.yml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.drone.yml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.drone.yml 2022-01-03 12:25:12.000000000 +0000 @@ -1,17 +1,17 @@ kind: pipeline -name: qt-5.15 +name: qt-5.12 steps: - name: cmake - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build commands: - cd /drone/build - - cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address -DCMAKE_CXX_FLAGS=-Werror ../src + - cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address ../src - name: compile - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build @@ -19,7 +19,7 @@ - cd /drone/build - make -j$(nproc) - name: test - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build @@ -27,7 +27,7 @@ - cd /drone/build - useradd -m -s /bin/bash test - chown -R test:test . - - su -c 'ASAN_OPTIONS=detect_leaks=0 xvfb-run ctest --output-on-failure' test + - su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test volumes: - name: build @@ -43,27 +43,27 @@ --- kind: pipeline -name: qt-5.15-clang +name: qt-5.12-clang steps: - name: cmake - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build commands: - cd /drone/build - - cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address -DCMAKE_CXX_FLAGS=-Werror ../src + - cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clazy -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DECM_ENABLE_SANITIZERS=address ../src - name: compile - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build commands: - cd /drone/build - - ninja + - ninja 2>1 | /drone/src/admin/linux/count_compiler_warnings.py /drone/src - name: test - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build @@ -71,9 +71,9 @@ - cd /drone/build - useradd -m -s /bin/bash test - chown -R test:test . - - su -c 'ASAN_OPTIONS=detect_leaks=0 xvfb-run ctest --output-on-failure' test + - su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test - name: clang-tidy - image: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 + image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18 volumes: - name: build path: /drone/build @@ -98,14 +98,14 @@ steps: - name: build - image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-3 + image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-1 environment: CI_UPLOAD_GIT_TOKEN: from_secret: CI_UPLOAD_GIT_TOKEN CI_UPLOAD_GIT_USERNAME: from_secret: CI_UPLOAD_GIT_USERNAME commands: - - BUILDNR=$DRONE_BUILD_NUMBER VERSION_SUFFIX=$DRONE_PULL_REQUEST BUILD_UPDATER=ON DESKTOP_CLIENT_ROOT=$DRONE_WORKSPACE /bin/bash -c "./admin/linux/build-appimage.sh" + - /bin/bash -c "./admin/linux/build-appimage.sh" - /bin/bash -c "./admin/linux/upload-appimage.sh" || echo "Upload failed, however this is an optional step." trigger: branch: diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.github/workflows/command-rebase.yml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.github/workflows/command-rebase.yml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.github/workflows/command-rebase.yml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.github/workflows/command-rebase.yml 2022-01-03 12:25:12.000000000 +0000 @@ -3,44 +3,25 @@ # https://github.com/nextcloud/.github # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization -name: Rebase command - on: issue_comment: - types: created + types: [ created ] +name: Automatic Rebase jobs: rebase: - runs-on: ubuntu-latest - + name: Rebase # On pull requests and if the comment starts with `/rebase` if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase') + runs-on: ubuntu-latest steps: - - name: Add reaction on start - uses: peter-evans/create-or-update-comment@v1 - with: - token: ${{ secrets.COMMAND_BOT_PAT }} - repository: ${{ github.event.repository.full_name }} - comment-id: ${{ github.event.comment.id }} - reaction-type: "+1" - - name: Checkout the latest code uses: actions/checkout@v2 with: fetch-depth: 0 - token: ${{ secrets.COMMAND_BOT_PAT }} - + - name: Automatic Rebase uses: cirrus-actions/rebase@1.5 env: - GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }} - - - name: Add reaction on failure - uses: peter-evans/create-or-update-comment@v1 - if: failure() - with: - token: ${{ secrets.COMMAND_BOT_PAT }} - repository: ${{ github.event.repository.full_name }} - comment-id: ${{ github.event.comment.id }} - reaction-type: "-1" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.github/workflows/sonarcloud.yml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.github/workflows/sonarcloud.yml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.github/workflows/sonarcloud.yml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.github/workflows/sonarcloud.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -name: SonarCloud analysis -on: - push: - branches: - - master - pull_request: - types: [opened, synchronize, reopened] -jobs: - build: - name: Build - runs-on: ubuntu-latest - container: ghcr.io/nextcloud/continuous-integration-client:client-5.15-4 - env: - SONAR_SERVER_URL: "https://sonarcloud.io" - BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - - name: Restore cache - uses: actions/cache@v2 - with: - path: /cache - key: ${{ runner.os }} - - - name: Run build-wrapper - run: | - mkdir build - cd build - cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DBUILD_COVERAGE=ON - build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make -j 2 - - name: Run tests - run: | - cd build - useradd -m -s /bin/bash test - chown -R test:test . - su -c 'xvfb-run ctest --output-on-failure --output-junit testResult.xml' test - - name: Generate coverage report - run: | - cd build - su -c 'ctest -T Coverage' test - - name: Run sonar-scanner - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: | - cp sonar-project.properties build - cd build - sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.gitignore nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.gitignore --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.gitignore 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.gitignore 2022-01-03 12:25:12.000000000 +0000 @@ -184,7 +184,6 @@ convert.exe .dir-locals.el *-icon.png -*-icon-win-folder.png *-sidebar.png *-w10startmenu.png theme.qrc diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/NEXTCLOUD.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/NEXTCLOUD.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/NEXTCLOUD.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/NEXTCLOUD.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -11,8 +11,6 @@ set( APPLICATION_SERVER_URL_ENFORCE ON ) # If set and APPLICATION_SERVER_URL is defined, the server can only connect to the pre-defined URL set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" ) set( APPLICATION_VIRTUALFILE_SUFFIX "nextcloud" CACHE STRING "Virtual file suffix (not including the .)") -set( APPLICATION_OCSP_STAPLING_ENABLED OFF ) -set( APPLICATION_FORBID_BAD_SSL OFF ) set( LINUX_PACKAGE_SHORTNAME "nextcloud" ) set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}") @@ -34,7 +32,6 @@ option( WITH_PROVIDERS "Build with providers list" ON ) -option( ENFORCE_VIRTUAL_FILES_SYNC_FOLDER "Enforce use of virtual files sync folder when available" OFF ) ## Theming options set(NEXTCLOUD_BACKGROUND_COLOR "#0082c9" CACHE STRING "Default Nextcloud background color") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/resources.qrc nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/resources.qrc --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/resources.qrc 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/resources.qrc 2022-01-03 12:25:12.000000000 +0000 @@ -1,27 +1,11 @@ - src/gui/UserStatusSelector.qml - src/gui/UserStatusSelectorDialog.qml - src/gui/EmojiPicker.qml - src/gui/ErrorBox.qml src/gui/tray/Window.qml src/gui/tray/UserLine.qml src/gui/tray/HeaderButton.qml - src/gui/tray/SyncStatus.qml theme/Style/Style.qml theme/Style/qmldir src/gui/tray/ActivityActionButton.qml src/gui/tray/ActivityItem.qml - src/gui/tray/AutoSizingMenu.qml - src/gui/tray/ActivityList.qml - src/gui/tray/FileActivityDialog.qml - src/gui/tray/UnifiedSearchInputContainer.qml - src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml - src/gui/tray/UnifiedSearchResultItem.qml - src/gui/tray/UnifiedSearchResultItemSkeleton.qml - src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml - src/gui/tray/UnifiedSearchResultListItem.qml - src/gui/tray/UnifiedSearchResultNothingFound.qml - src/gui/tray/UnifiedSearchResultSectionItem.qml diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/dolphin/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/dolphin/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/dolphin/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/dolphin/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8.12) -set(QT_MIN_VERSION "5.15.0") +set(QT_MIN_VERSION "5.12.0") set(KF5_MIN_VERSION "5.16.0") set(KDE_INSTALL_USE_QT_SYS_PATHS ON CACHE BOOL "Install the plugin in the right directory") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/dolphin/ownclouddolphinactionplugin.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/dolphin/ownclouddolphinactionplugin.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/dolphin/ownclouddolphinactionplugin.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/dolphin/ownclouddolphinactionplugin.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -37,7 +37,7 @@ explicit OwncloudDolphinPluginAction(QObject* parent, const QList&) : KAbstractFileItemActionPlugin(parent) { } - QList actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) override + QList actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) Q_DECL_OVERRIDE { auto helper = OwncloudDolphinPluginHelper::instance(); if (!helper->isConnected() || !fileItemInfos.isLocal()) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/icons/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/icons/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/icons/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/icons/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,6 +1,6 @@ if( UNIX AND NOT APPLE ) - SET(ICON_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor) + SET(ICON_DIR ${DATADIR}/icons/hicolor) FOREACH(size 128x128 16x16 256x256 32x32 48x48 64x64 72x72) file(GLOB files "${size}/*.png") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/libcloudproviders/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/libcloudproviders/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/libcloudproviders/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/libcloudproviders/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -41,7 +41,7 @@ endmacro(libcloudproviders_add_config _sources) -find_package(Qt5 5.15 COMPONENTS DBus) +find_package(Qt5 5.12 COMPONENTS DBus) IF (Qt5DBus_FOUND) STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR) STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/MacOSX/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/MacOSX/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/MacOSX/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/MacOSX/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,26 +1,23 @@ if(APPLE) - set(OC_OEM_SHARE_ICNS "${CMAKE_BINARY_DIR}/src/gui/${APPLICATION_ICON_NAME}.icns") +set(OC_OEM_SHARE_ICNS "${CMAKE_BINARY_DIR}/src/gui/${APPLICATION_ICON_NAME}.icns") - # The bundle identifier and application group need to have compatible values with the client - # to be able to open a Mach port across the extension's sandbox boundary. - # Pass the info through the xcodebuild command line and make sure that the project uses - # those user-defined settings to build the plist. - add_custom_target( mac_overlayplugin ALL - xcodebuild ARCHS=${CMAKE_OSX_ARCHITECTURES} ONLY_ACTIVE_ARCH=NO - -project ${CMAKE_SOURCE_DIR}/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj - -target FinderSyncExt -configuration Release "SYMROOT=${CMAKE_CURRENT_BINARY_DIR}" - "OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}" - "OC_APPLICATION_NAME=${APPLICATION_NAME}" - "OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}" - "OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}" +# The bundle identifier and application group need to have compatible values with the client +# to be able to open a Mach port across the extension's sandbox boundary. +# Pass the info through the xcodebuild command line and make sure that the project uses +# those user-defined settings to build the plist. +add_custom_target( mac_overlayplugin ALL + xcodebuild -project ${CMAKE_SOURCE_DIR}/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj + -target FinderSyncExt -configuration Release "SYMROOT=${CMAKE_CURRENT_BINARY_DIR}" + "OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}" + "OC_APPLICATION_NAME=${APPLICATION_NAME}" + "OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}" + "OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}" COMMENT building Mac Overlay icons VERBATIM) - add_dependencies(mac_overlayplugin nextcloud) # for the ownCloud.icns to be generated +add_dependencies(mac_overlayplugin ${APPLICATION_EXECUTABLE}) # for the ownCloud.icns to be generated - if (BUILD_OWNCLOUD_OSX_BUNDLE) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Release/FinderSyncExt.appex - DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns - USE_SOURCE_PERMISSIONS) - endif() -endif() +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Release/FinderSyncExt.appex + DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns + USE_SOURCE_PERMISSIONS) +endif(APPLE) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/nautilus/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/nautilus/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/nautilus/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/nautilus/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -25,9 +25,9 @@ ERROR_VARIABLE errors OUTPUT_VARIABLE out) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${CMAKE_INSTALL_DATADIR}/nautilus-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${CMAKE_INSTALL_DATADIR}/nemo-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_caja.py DESTINATION ${CMAKE_INSTALL_DATADIR}/caja-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${DATADIR}/nautilus-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${DATADIR}/nemo-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_caja.py DESTINATION ${DATADIR}/caja-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/windows/NCUtil/RemotePathChecker.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/windows/NCUtil/RemotePathChecker.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/windows/NCUtil/RemotePathChecker.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/windows/NCUtil/RemotePathChecker.h 2022-01-03 12:25:12.000000000 +0000 @@ -26,7 +26,7 @@ #pragma once -class RemotePathChecker { +class __declspec(dllexport) RemotePathChecker { public: enum FileState { // Order synced with NCOverlay diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/windows/WinShellExt.wxs.in nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/windows/WinShellExt.wxs.in --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/shell_integration/windows/WinShellExt.wxs.in 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/shell_integration/windows/WinShellExt.wxs.in 2022-01-03 12:25:12.000000000 +0000 @@ -63,7 +63,6 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/sonar-project.properties nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/sonar-project.properties --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/sonar-project.properties 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/sonar-project.properties 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -sonar.projectKey=nextcloud_desktop -sonar.organization=nextcloud -sonar.projectBaseDir=.. -sonar.sources=src -sonar.exclusions=3rdparty/** -sonar.language=c++ -sonar.cfamily.cache.enabled=false -sonar.sourceEncoding=UTF-8 -sonar.cfamily.threads=2 -sonar.cfamily.gcov.reportsPath=build/Testing/CoverageInfo -sonar.cfamily.cache.enabled=true, -sonar.cfamily.cache.path=/cache/sonarcloud diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/kirigami/wheelhandler.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/kirigami/wheelhandler.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/kirigami/wheelhandler.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/kirigami/wheelhandler.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,280 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2019 Marco Martin - * - * SPDX-License-Identifier: LGPL-2.0-or-later - */ - -#include "wheelhandler.h" -#include -#include -#include - -class GlobalWheelFilterSingleton -{ -public: - GlobalWheelFilter self; -}; - -Q_GLOBAL_STATIC(GlobalWheelFilterSingleton, privateGlobalWheelFilterSelf) - -GlobalWheelFilter::GlobalWheelFilter(QObject *parent) - : QObject(parent) -{ -} - -GlobalWheelFilter::~GlobalWheelFilter() = default; - -GlobalWheelFilter *GlobalWheelFilter::self() -{ - return &privateGlobalWheelFilterSelf()->self; -} - -void GlobalWheelFilter::setItemHandlerAssociation(QQuickItem *item, WheelHandler *handler) -{ - if (!m_handlersForItem.contains(handler->target())) { - handler->target()->installEventFilter(this); - } - m_handlersForItem.insert(item, handler); - - connect(item, &QObject::destroyed, this, [this](QObject *obj) { - auto item = static_cast(obj); - m_handlersForItem.remove(item); - }); - - connect(handler, &QObject::destroyed, this, [this](QObject *obj) { - auto handler = static_cast(obj); - removeItemHandlerAssociation(handler->target(), handler); - }); -} - -void GlobalWheelFilter::removeItemHandlerAssociation(QQuickItem *item, WheelHandler *handler) -{ - if (!item || !handler) { - return; - } - m_handlersForItem.remove(item, handler); - if (!m_handlersForItem.contains(item)) { - item->removeEventFilter(this); - } -} - -bool GlobalWheelFilter::eventFilter(QObject *watched, QEvent *event) -{ - if (event->type() == QEvent::Wheel) { - auto item = qobject_cast(watched); - if (!item || !item->isEnabled()) { - return QObject::eventFilter(watched, event); - } - auto we = static_cast(event); - m_wheelEvent.initializeFromEvent(we); - - bool shouldBlock = false; - bool shouldScrollFlickable = false; - - for (auto *handler : m_handlersForItem.values(item)) { - if (handler->m_blockTargetWheel) { - shouldBlock = true; - } - if (handler->m_scrollFlickableTarget) { - shouldScrollFlickable = true; - } - emit handler->wheel(&m_wheelEvent); - } - - if (shouldScrollFlickable && !m_wheelEvent.isAccepted()) { - manageWheel(item, we); - } - - if (shouldBlock) { - return true; - } - } - return QObject::eventFilter(watched, event); -} - -void GlobalWheelFilter::manageWheel(QQuickItem *target, QWheelEvent *event) -{ - // Duck typing: accept everyhint that has all the properties we need - if (target->metaObject()->indexOfProperty("contentX") == -1 - || target->metaObject()->indexOfProperty("contentY") == -1 - || target->metaObject()->indexOfProperty("contentWidth") == -1 - || target->metaObject()->indexOfProperty("contentHeight") == -1 - || target->metaObject()->indexOfProperty("topMargin") == -1 - || target->metaObject()->indexOfProperty("bottomMargin") == -1 - || target->metaObject()->indexOfProperty("leftMargin") == -1 - || target->metaObject()->indexOfProperty("rightMargin") == -1 - || target->metaObject()->indexOfProperty("originX") == -1 - || target->metaObject()->indexOfProperty("originY") == -1) { - return; - } - - qreal contentWidth = target->property("contentWidth").toReal(); - qreal contentHeight = target->property("contentHeight").toReal(); - qreal contentX = target->property("contentX").toReal(); - qreal contentY = target->property("contentY").toReal(); - qreal topMargin = target->property("topMargin").toReal(); - qreal bottomMargin = target->property("bottomMargin").toReal(); - qreal leftMargin = target->property("leftMaring").toReal(); - qreal rightMargin = target->property("rightMargin").toReal(); - qreal originX = target->property("originX").toReal(); - qreal originY = target->property("originY").toReal(); - - // Scroll Y - if (contentHeight > target->height()) { - - int y = event->pixelDelta().y() != 0 ? event->pixelDelta().y() : event->angleDelta().y() / 8; - - //if we don't have a pixeldelta, apply the configured mouse wheel lines - if (!event->pixelDelta().y()) { - y *= 3; // Magic copied value from Kirigami::Settings - } - - // Scroll one page regardless of delta: - if ((event->modifiers() & Qt::ControlModifier) || (event->modifiers() & Qt::ShiftModifier)) { - if (y > 0) { - y = target->height(); - } else if (y < 0) { - y = -target->height(); - } - } - - qreal minYExtent = topMargin - originY; - qreal maxYExtent = target->height() - (contentHeight + bottomMargin + originY); - - target->setProperty("contentY", qMin(-maxYExtent, qMax(-minYExtent, contentY - y))); - } - - //Scroll X - if (contentWidth > target->width()) { - - int x = event->pixelDelta().x() != 0 ? event->pixelDelta().x() : event->angleDelta().x() / 8; - - // Special case: when can't scroll vertically, scroll horizontally with vertical wheel as well - if (x == 0 && contentHeight <= target->height()) { - x = event->pixelDelta().y() != 0 ? event->pixelDelta().y() : event->angleDelta().y() / 8; - } - - //if we don't have a pixeldelta, apply the configured mouse wheel lines - if (!event->pixelDelta().x()) { - x *= 3; // Magic copied value from Kirigami::Settings - } - - // Scroll one page regardless of delta: - if ((event->modifiers() & Qt::ControlModifier) || (event->modifiers() & Qt::ShiftModifier)) { - if (x > 0) { - x = target->width(); - } else if (x < 0) { - x = -target->width(); - } - } - - qreal minXExtent = leftMargin - originX; - qreal maxXExtent = target->width() - (contentWidth + rightMargin + originX); - - target->setProperty("contentX", qMin(-maxXExtent, qMax(-minXExtent, contentX - x))); - } - - //this is just for making the scrollbar - target->metaObject()->invokeMethod(target, "flick", Q_ARG(double, 0), Q_ARG(double, 1)); - target->metaObject()->invokeMethod(target, "cancelFlick"); -} - - -//////////////////////////// -KirigamiWheelEvent::KirigamiWheelEvent(QObject *parent) - : QObject(parent) -{} - -KirigamiWheelEvent::~KirigamiWheelEvent() = default; - -void KirigamiWheelEvent::initializeFromEvent(QWheelEvent *event) -{ - m_x = event->position().x(); - m_y = event->position().y(); - m_angleDelta = event->angleDelta(); - m_pixelDelta = event->pixelDelta(); - m_buttons = event->buttons(); - m_modifiers = event->modifiers(); - m_accepted = false; - m_inverted = event->inverted(); -} - -qreal KirigamiWheelEvent::x() const -{ - return m_x; -} - -qreal KirigamiWheelEvent::y() const -{ - return m_y; -} - -QPointF KirigamiWheelEvent::angleDelta() const -{ - return m_angleDelta; -} - -QPointF KirigamiWheelEvent::pixelDelta() const -{ - return m_pixelDelta; -} - -int KirigamiWheelEvent::buttons() const -{ - return m_buttons; -} - -int KirigamiWheelEvent::modifiers() const -{ - return m_modifiers; -} - -bool KirigamiWheelEvent::inverted() const -{ - return m_inverted; -} - -bool KirigamiWheelEvent::isAccepted() -{ - return m_accepted; -} - -void KirigamiWheelEvent::setAccepted(bool accepted) -{ - m_accepted = accepted; -} - - -/////////////////////////////// - -WheelHandler::WheelHandler(QObject *parent) - : QObject(parent) -{ -} - -WheelHandler::~WheelHandler() = default; - -QQuickItem *WheelHandler::target() const -{ - return m_target; -} - -void WheelHandler::setTarget(QQuickItem *target) -{ - if (m_target == target) { - return; - } - - if (m_target) { - GlobalWheelFilter::self()->removeItemHandlerAssociation(m_target, this); - } - - m_target = target; - - GlobalWheelFilter::self()->setItemHandlerAssociation(target, this); - - emit targetChanged(); -} - - -#include "moc_wheelhandler.cpp" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/kirigami/wheelhandler.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/kirigami/wheelhandler.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/kirigami/wheelhandler.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/kirigami/wheelhandler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2019 Marco Martin - * - * SPDX-License-Identifier: LGPL-2.0-or-later - */ - -#pragma once - -#include -#include -#include -#include - -class QWheelEvent; - -class WheelHandler; - -/** - * Describes the mouse wheel event - */ -class KirigamiWheelEvent : public QObject -{ - Q_OBJECT - - /** - * x: real - * - * X coordinate of the mouse pointer - */ - Q_PROPERTY(qreal x READ x CONSTANT) - - /** - * y: real - * - * Y coordinate of the mouse pointer - */ - Q_PROPERTY(qreal y READ y CONSTANT) - - /** - * angleDelta: point - * - * The distance the wheel is rotated in degrees. - * The x and y coordinates indicate the horizontal and vertical wheels respectively. - * A positive value indicates it was rotated up/right, negative, bottom/left - * This value is more likely to be set in traditional mice. - */ - Q_PROPERTY(QPointF angleDelta READ angleDelta CONSTANT) - - /** - * pixelDelta: point - * - * provides the delta in screen pixels available on high resolution trackpads - */ - Q_PROPERTY(QPointF pixelDelta READ pixelDelta CONSTANT) - - /** - * buttons: int - * - * it contains an OR combination of the buttons that were pressed during the wheel, they can be: - * Qt.LeftButton, Qt.MiddleButton, Qt.RightButton - */ - Q_PROPERTY(int buttons READ buttons CONSTANT) - - /** - * modifiers: int - * - * Keyboard mobifiers that were pressed during the wheel event, such as: - * Qt.NoModifier (default, no modifiers) - * Qt.ControlModifier - * Qt.ShiftModifier - * ... - */ - Q_PROPERTY(int modifiers READ modifiers CONSTANT) - - /** - * inverted: bool - * - * Whether the delta values are inverted - * On some platformsthe returned delta are inverted, so positive values would mean bottom/left - */ - Q_PROPERTY(bool inverted READ inverted CONSTANT) - - /** - * accepted: bool - * - * If set, the event shouldn't be managed anymore, - * for instance it can be used to block the handler to manage the scroll of a view on some scenarios - * @code - * // This handler handles automatically the scroll of - * // flickableItem, unless Ctrl is pressed, in this case the - * // app has custom code to handle Ctrl+wheel zooming - * Kirigami.WheelHandler { - * target: flickableItem - * blockTargetWheel: true - * scrollFlickableTarget: true - * onWheel: { - * if (wheel.modifiers & Qt.ControlModifier) { - * wheel.accepted = true; - * // Handle scaling of the view - * } - * } - * } - * @endcode - * - */ - Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted) - -public: - KirigamiWheelEvent(QObject *parent = nullptr); - ~KirigamiWheelEvent() override; - - void initializeFromEvent(QWheelEvent *event); - - qreal x() const; - qreal y() const; - QPointF angleDelta() const; - QPointF pixelDelta() const; - int buttons() const; - int modifiers() const; - bool inverted() const; - bool isAccepted(); - void setAccepted(bool accepted); - -private: - qreal m_x = 0; - qreal m_y = 0; - QPointF m_angleDelta; - QPointF m_pixelDelta; - Qt::MouseButtons m_buttons = Qt::NoButton; - Qt::KeyboardModifiers m_modifiers = Qt::NoModifier; - bool m_inverted = false; - bool m_accepted = false; -}; - -class GlobalWheelFilter : public QObject -{ - Q_OBJECT - -public: - GlobalWheelFilter(QObject *parent = nullptr); - ~GlobalWheelFilter() override; - - static GlobalWheelFilter *self(); - - void setItemHandlerAssociation(QQuickItem *item, WheelHandler *handler); - void removeItemHandlerAssociation(QQuickItem *item, WheelHandler *handler); - -protected: - bool eventFilter(QObject *watched, QEvent *event) override; - -private: - void manageWheel(QQuickItem *target, QWheelEvent *wheel); - - QMultiHash m_handlersForItem; - KirigamiWheelEvent m_wheelEvent; -}; - - - -/** - * This class intercepts the mouse wheel events of its target, and gives them to the user code as a signal, which can be used for custom mouse wheel management code. - * The handler can block completely the wheel events from its target, and if it's a Flickable, it can automatically handle scrolling on it - */ -class WheelHandler : public QObject -{ - Q_OBJECT - - /** - * target: Item - * - * The target we want to manage wheel events. - * We will receive wheel() signals every time the user moves - * the mouse wheel (or scrolls with the touchpad) on top - * of that item. - */ - Q_PROPERTY(QQuickItem *target READ target WRITE setTarget NOTIFY targetChanged) - - /** - * blockTargetWheel: bool - * - * If true, the target won't receive any wheel event at all (default true) - */ - Q_PROPERTY(bool blockTargetWheel MEMBER m_blockTargetWheel NOTIFY blockTargetWheelChanged) - - /** - * scrollFlickableTarget: bool - * If this property is true and the target is a Flickable, wheel events will cause the Flickable to scroll (default true) - */ - Q_PROPERTY(bool scrollFlickableTarget MEMBER m_scrollFlickableTarget NOTIFY scrollFlickableTargetChanged) - -public: - explicit WheelHandler(QObject *parent = nullptr); - ~WheelHandler() override; - - QQuickItem *target() const; - void setTarget(QQuickItem *target); - -Q_SIGNALS: - void targetChanged(); - void blockTargetWheelChanged(); - void scrollFlickableTargetChanged(); - void wheel(KirigamiWheelEvent *wheel); - -private: - QPointer m_target; - bool m_blockTargetWheel = true; - bool m_scrollFlickableTarget = true; - KirigamiWheelEvent m_wheelEvent; - - friend class GlobalWheelFilter; -}; - - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/QProgressIndicator/QProgressIndicator.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/QProgressIndicator/QProgressIndicator.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/QProgressIndicator/QProgressIndicator.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/QProgressIndicator/QProgressIndicator.h 2022-01-03 12:25:12.000000000 +0000 @@ -67,8 +67,8 @@ */ const QColor & color() const { return m_color; } - QSize sizeHint() const override; - int heightForWidth(int w) const override; + virtual QSize sizeHint() const; + int heightForWidth(int w) const; public slots: /*! Starts the spin animation. \sa stopAnimation isAnimated @@ -98,8 +98,8 @@ */ void setColor(const QColor & color); protected: - void timerEvent(QTimerEvent * event) override; - void paintEvent(QPaintEvent * event) override; + virtual void timerEvent(QTimerEvent * event); + virtual void paintEvent(QPaintEvent * event); private: int m_angle = 0; int m_timerId = -1; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/qtlockedfile/qtlockedfile.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/qtlockedfile/qtlockedfile.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/qtlockedfile/qtlockedfile.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/qtlockedfile/qtlockedfile.h 2022-01-03 12:25:12.000000000 +0000 @@ -57,7 +57,7 @@ QtLockedFile(); QtLockedFile(const QString &name); - ~QtLockedFile() override; + ~QtLockedFile(); bool lock(LockMode mode, bool block = true); bool unlock(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/qtsingleapplication/qtsingleapplication.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/qtsingleapplication/qtsingleapplication.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/3rdparty/qtsingleapplication/qtsingleapplication.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/3rdparty/qtsingleapplication/qtsingleapplication.h 2022-01-03 12:25:12.000000000 +0000 @@ -44,13 +44,13 @@ public: QtSingleApplication(const QString &id, int &argc, char **argv); - ~QtSingleApplication() override; + ~QtSingleApplication(); bool isRunning(qint64 pid = -1); void setActivationWindow(QWidget* aw, bool activateOnMessage = true); QWidget* activationWindow() const; - bool event(QEvent *event) override; + bool event(QEvent *event) Q_DECL_OVERRIDE; QString applicationId() const; void setBlock(bool value); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -4,8 +4,10 @@ include(ECMEnableSanitizers) -find_package(Qt5 5.15 COMPONENTS Core Network Xml Concurrent REQUIRED) -find_package(Qt5 5.15 COMPONENTS WebEngineWidgets WebEngine) +set(synclib_NAME ${APPLICATION_EXECUTABLE}sync) + +find_package(Qt5 5.12 COMPONENTS Core Network Xml Concurrent REQUIRED) +find_package(Qt5 5.12 COMPONENTS WebEngineWidgets WebEngine) if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND) add_compile_definitions(WITH_WEBENGINE=1) @@ -59,6 +61,10 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now") endif() +include_directories( + ${CMAKE_SOURCE_DIR}/src/3rdparty +) + set(QML_IMPORT_PATH ${CMAKE_SOURCE_DIR}/theme CACHE STRING "" FORCE) add_subdirectory(csync) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,11 +1,14 @@ project(cmd) set(CMAKE_AUTOMOC TRUE) +set(cmd_NAME ${APPLICATION_EXECUTABLE}cmd) + add_library(cmdCore STATIC simplesslerrorhandler.cpp netrcparser.cpp) target_link_libraries(cmdCore PUBLIC - Nextcloud::sync + "${csync_NAME}" + "${synclib_NAME}" Qt5::Core Qt5::Network ) @@ -24,22 +27,20 @@ endif() if(NOT BUILD_LIBRARIES_ONLY) - add_executable(nextcloudcmd cmd.cpp) - set_target_properties(nextcloudcmd PROPERTIES - RUNTIME_OUTPUT_NAME "${APPLICATION_EXECUTABLE}cmd") - - target_link_libraries(nextcloudcmd cmdCore) + add_executable(${cmd_NAME} cmd.cpp) if(BUILD_OWNCLOUD_OSX_BUNDLE) - set_target_properties(nextcloudcmd PROPERTIES + set_target_properties(${cmd_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS") else() - set_target_properties(nextcloudcmd PROPERTIES + set_target_properties(${cmd_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY}) - install(TARGETS nextcloudcmd + install(TARGETS ${cmd_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() + + target_link_libraries(${cmd_NAME} cmdCore) endif() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/cmd.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/cmd.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/cmd.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/cmd.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -142,7 +142,7 @@ { } - void askFromUser() override + void askFromUser() Q_DECL_OVERRIDE { _password = ::queryPassword(user()); _ready = true; @@ -155,7 +155,7 @@ _sslTrusted = isTrusted; } - bool sslIsTrusted() override + bool sslIsTrusted() Q_DECL_OVERRIDE { return _sslTrusted; } @@ -295,10 +295,9 @@ bool ok = false; - const auto selectiveSyncList = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok); - const QSet oldBlackListSet(selectiveSyncList.begin(), selectiveSyncList.end()); + auto oldBlackListSet = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok).toSet(); if (ok) { - const QSet blackListSet(newList.begin(), newList.end()); + auto blackListSet = newList.toSet(); const auto changes = (oldBlackListSet - blackListSet) + (blackListSet - oldBlackListSet); for (const auto &it : changes) { journal->schedulePathForRemoteDiscovery(it); @@ -321,6 +320,8 @@ qputenv("OPENSSL_CONF", opensslConf.toLocal8Bit()); #endif + qsrand(std::random_device()()); + CmdOptions options; options.silent = false; options.trustSSL = false; @@ -483,7 +484,7 @@ qCritical() << "Could not open file containing the list of unsynced folders: " << options.unsyncedfolders; } else { // filter out empty lines and comments - selectiveSyncList = QString::fromUtf8(f.readAll()).split('\n').filter(QRegularExpression("\\S+")).filter(QRegularExpression("^[^#]")); + selectiveSyncList = QString::fromUtf8(f.readAll()).split('\n').filter(QRegExp("\\S+")).filter(QRegExp("^[^#]")); for (int i = 0; i < selectiveSyncList.count(); ++i) { if (!selectiveSyncList.at(i).endsWith(QLatin1Char('/'))) { @@ -501,9 +502,6 @@ selectiveSyncFixup(&db, selectiveSyncList); } - SyncOptions opt; - opt.fillFromEnvironmentVariables(); - opt.verifyChunkSizes(); SyncEngine engine(account, options.source_dir, folder, &db); engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles); engine.setNetworkLimits(options.uplimit, options.downlimit); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/simplesslerrorhandler.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/simplesslerrorhandler.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/cmd/simplesslerrorhandler.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/cmd/simplesslerrorhandler.h 2022-01-03 12:25:12.000000000 +0000 @@ -28,7 +28,7 @@ class SimpleSslErrorHandler : public OCC::AbstractSslErrorHandler { public: - bool handleErrors(QList errors, const QSslConfiguration &conf, QList *certs, OCC::AccountPtr) override; + bool handleErrors(QList errors, const QSslConfiguration &conf, QList *certs, OCC::AccountPtr) Q_DECL_OVERRIDE; }; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/checksums.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/checksums.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/checksums.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/checksums.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -144,9 +144,6 @@ QByteArray findBestChecksum(const QByteArray &_checksums) { - if (_checksums.isEmpty()) { - return {}; - } const auto checksums = QString::fromUtf8(_checksums); int i = 0; // The order of the searches here defines the preference ordering. @@ -165,7 +162,7 @@ return _checksums.mid(i, end - i); } qCWarning(lcChecksums) << "Failed to parse" << _checksums; - return {}; + return QByteArray(); } bool parseChecksumHeader(const QByteArray &header, QByteArray *type, QByteArray *checksum) @@ -364,11 +361,11 @@ const QByteArray &checksum) { if (checksumType != _expectedChecksumType) { - emit validationFailed(tr("The checksum header contained an unknown checksum type \"%1\"").arg(QString::fromLatin1(_expectedChecksumType))); + emit validationFailed(tr("The checksum header contained an unknown checksum type '%1'").arg(QString::fromLatin1(_expectedChecksumType))); return; } if (checksum != _expectedChecksum) { - emit validationFailed(tr(R"(The downloaded file does not match the checksum, it will be resumed. "%1" != "%2")").arg(QString::fromUtf8(_expectedChecksum), QString::fromUtf8(checksum))); + emit validationFailed(tr("The downloaded file does not match the checksum, it will be resumed. '%1' != '%2'").arg(QString::fromUtf8(_expectedChecksum), QString::fromUtf8(checksum))); return; } emit validated(checksumType, checksum); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/checksums.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/checksums.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/checksums.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/checksums.h 2022-01-03 12:25:12.000000000 +0000 @@ -81,7 +81,7 @@ Q_OBJECT public: explicit ComputeChecksum(QObject *parent = nullptr); - ~ComputeChecksum() override; + ~ComputeChecksum(); /** * Sets the checksum type to be used. The default is empty. diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/common.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/common.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/common.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/common.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -5,7 +5,6 @@ ${CMAKE_CURRENT_LIST_DIR}/checksums.cpp ${CMAKE_CURRENT_LIST_DIR}/filesystembase.cpp ${CMAKE_CURRENT_LIST_DIR}/ownsql.cpp - ${CMAKE_CURRENT_LIST_DIR}/preparedsqlquerymanager.cpp ${CMAKE_CURRENT_LIST_DIR}/syncjournaldb.cpp ${CMAKE_CURRENT_LIST_DIR}/syncjournalfilerecord.cpp ${CMAKE_CURRENT_LIST_DIR}/utility.cpp diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/constants.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/constants.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/constants.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/constants.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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. - */ - -#pragma once - -#include - -namespace OCC { -namespace Constants { - constexpr qint32 e2EeTagSize = 16; -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/filesystembase.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/filesystembase.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/filesystembase.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/filesystembase.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -395,13 +395,13 @@ suffix_number++; } if (!file.rename(f.absoluteFilePath(), path + QString::number(suffix_number))) { // rename(file old path, file trash path) - *errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")") + *errorString = QCoreApplication::translate("FileSystem", "Could not move '%1' to '%2'") .arg(f.absoluteFilePath(), path + QString::number(suffix_number)); return false; } } else { if (!file.rename(f.absoluteFilePath(), trashFilePath + f.fileName())) { // rename(file old path, file trash path) - *errorString = QCoreApplication::translate("FileSystem", R"(Could not move "%1" to "%2")") + *errorString = QCoreApplication::translate("FileSystem", "Could not move '%1' to '%2'") .arg(f.absoluteFilePath(), trashFilePath + f.fileName()); return false; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/ownsql.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/ownsql.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/ownsql.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/ownsql.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -490,4 +490,18 @@ } } +bool SqlQuery::initOrReset(const QByteArray &sql, OCC::SqlDatabase &db) +{ + ENFORCE(!_sqldb || &db == _sqldb); + _sqldb = &db; + _db = db.sqliteDb(); + if (_stmt) { + reset_and_clear_bindings(); + return true; + } else { + return prepare(sql) == 0; + } +} + + } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/ownsql.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/ownsql.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/ownsql.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/ownsql.h 2022-01-03 12:25:12.000000000 +0000 @@ -104,6 +104,12 @@ explicit SqlQuery(SqlDatabase &db); explicit SqlQuery(const QByteArray &sql, SqlDatabase &db); /** + * Prepare the SqlQuery if it was not prepared yet. + * Otherwise, clear the results and the bindings. + * return false if there is an error + */ + bool initOrReset(const QByteArray &sql, SqlDatabase &db); + /** * Prepare the SqlQuery. * If the query was already prepared, this will first call finish(), and re-prepare it. * This function must only be used if the constructor was setting a SqlDatabase @@ -155,10 +161,10 @@ const QByteArray &lastQuery() const; int numRowsAffected(); void reset_and_clear_bindings(); + void finish(); private: void bindValueInternal(int pos, const QVariant &value); - void finish(); SqlDatabase *_sqldb = nullptr; sqlite3 *_db = nullptr; @@ -166,9 +172,6 @@ QString _error; int _errId; QByteArray _sql; - - friend class SqlDatabase; - friend class PreparedSqlQueryManager; }; } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/pinstate.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/pinstate.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/pinstate.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/pinstate.h 2022-01-03 12:25:12.000000000 +0000 @@ -77,7 +77,7 @@ */ Unspecified = 3, }; -Q_ENUM_NS(PinState) +Q_ENUM_NS(PinState); /** A user-facing version of PinState. * diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/preparedsqlquerymanager.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/preparedsqlquerymanager.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/preparedsqlquerymanager.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/preparedsqlquerymanager.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (C) by Hannah von Reth - * - * 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 "preparedsqlquerymanager.h" - -#include - -using namespace OCC; - -PreparedSqlQuery::PreparedSqlQuery(SqlQuery *query, bool ok) - : _query(query) - , _ok(ok) -{ -} - -PreparedSqlQuery::~PreparedSqlQuery() -{ - _query->reset_and_clear_bindings(); -} - -const PreparedSqlQuery PreparedSqlQueryManager::get(PreparedSqlQueryManager::Key key) -{ - auto &query = _queries[key]; - ENFORCE(query._stmt) - Q_ASSERT(!sqlite3_stmt_busy(query._stmt)); - return { &query }; -} - -const PreparedSqlQuery PreparedSqlQueryManager::get(PreparedSqlQueryManager::Key key, const QByteArray &sql, SqlDatabase &db) -{ - auto &query = _queries[key]; - Q_ASSERT(!sqlite3_stmt_busy(query._stmt)); - ENFORCE(!query._sqldb || &db == query._sqldb) - if (!query._stmt) { - query._sqldb = &db; - query._db = db.sqliteDb(); - return { &query, query.prepare(sql) == 0 }; - } - return { &query }; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/preparedsqlquerymanager.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/preparedsqlquerymanager.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/preparedsqlquerymanager.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/preparedsqlquerymanager.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -/* - * Copyright (C) by Hannah von Reth - * - * 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 "ocsynclib.h" -#include "ownsql.h" -#include "common/asserts.h" - -namespace OCC { - -class OCSYNC_EXPORT PreparedSqlQuery -{ -public: - ~PreparedSqlQuery(); - - explicit operator bool() const { return _ok; } - - SqlQuery *operator->() const - { - Q_ASSERT(_ok); - return _query; - } - - SqlQuery &operator*() const & - { - Q_ASSERT(_ok); - return *_query; - } - -private: - PreparedSqlQuery(SqlQuery *query, bool ok = true); - - SqlQuery *_query; - bool _ok; - - friend class PreparedSqlQueryManager; -}; - -/** - * @brief Manage PreparedSqlQuery - */ -class OCSYNC_EXPORT PreparedSqlQueryManager -{ -public: - enum Key { - GetFileRecordQuery, - GetFileRecordQueryByMangledName, - GetFileRecordQueryByInode, - GetFileRecordQueryByFileId, - GetFilesBelowPathQuery, - GetAllFilesQuery, - ListFilesInPathQuery, - SetFileRecordQuery, - SetFileRecordChecksumQuery, - SetFileRecordLocalMetadataQuery, - GetDownloadInfoQuery, - SetDownloadInfoQuery, - DeleteDownloadInfoQuery, - GetUploadInfoQuery, - SetUploadInfoQuery, - DeleteUploadInfoQuery, - DeleteFileRecordPhash, - DeleteFileRecordRecursively, - GetErrorBlacklistQuery, - SetErrorBlacklistQuery, - GetSelectiveSyncListQuery, - GetChecksumTypeIdQuery, - GetChecksumTypeQuery, - InsertChecksumTypeQuery, - GetDataFingerprintQuery, - SetDataFingerprintQuery1, - SetDataFingerprintQuery2, - SetKeyValueStoreQuery, - GetKeyValueStoreQuery, - DeleteKeyValueStoreQuery, - GetConflictRecordQuery, - SetConflictRecordQuery, - DeleteConflictRecordQuery, - GetRawPinStateQuery, - GetEffectivePinStateQuery, - GetSubPinsQuery, - CountDehydratedFilesQuery, - SetPinStateQuery, - WipePinStateQuery, - - PreparedQueryCount - }; - PreparedSqlQueryManager() = default; - /** - * The queries are reset in the destructor to prevent wal locks - */ - const PreparedSqlQuery get(Key key); - /** - * Prepare the SqlQuery if it was not prepared yet. - */ - const PreparedSqlQuery get(Key key, const QByteArray &sql, SqlDatabase &db); - -private: - SqlQuery _queries[PreparedQueryCount]; - Q_DISABLE_COPY(PreparedSqlQueryManager) -}; - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/result.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/result.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/result.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/result.h 2022-01-03 12:25:12.000000000 +0000 @@ -104,7 +104,6 @@ ASSERT(!_isError); return _result; } - T operator*() && { ASSERT(!_isError); @@ -117,12 +116,6 @@ return &_result; } - const T &get() const - { - ASSERT(!_isError) - return _result; - } - const Error &error() const & { ASSERT(_isError); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/syncjournaldb.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/syncjournaldb.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/syncjournaldb.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/syncjournaldb.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -31,7 +31,6 @@ #include "filesystembase.h" #include "common/asserts.h" #include "common/checksums.h" -#include "common/preparedsqlquerymanager.h" #include "common/c_jhash.h" @@ -93,6 +92,7 @@ SyncJournalDb::SyncJournalDb(const QString &dbFilePath, QObject *parent) : QObject(parent) , _dbFile(dbFilePath) + , _mutex(QMutex::Recursive) , _transaction(0) , _metadataTableIsEmpty(false) { @@ -396,7 +396,10 @@ && 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"; + _journalMode = "DELETE"; + createQuery.finish(); + pragma1.finish(); commitTransaction(); _db.close(); return checkConnect(); @@ -586,15 +589,13 @@ if (forceRemoteDiscovery) { forceRemoteDiscoveryNextSyncLocked(); } - const auto deleteDownloadInfo = _queryManager.get(PreparedSqlQueryManager::DeleteDownloadInfoQuery, QByteArrayLiteral("DELETE FROM downloadinfo WHERE path=?1"), _db); - if (!deleteDownloadInfo) { - return sqlFail(QStringLiteral("prepare _deleteDownloadInfoQuery"), *deleteDownloadInfo); - } + if (!_deleteDownloadInfoQuery.initOrReset("DELETE FROM downloadinfo WHERE path=?1", _db)) { + return sqlFail(QStringLiteral("prepare _deleteDownloadInfoQuery"), _deleteDownloadInfoQuery); + } - const auto deleteUploadInfoQuery = _queryManager.get(PreparedSqlQueryManager::DeleteUploadInfoQuery, QByteArrayLiteral("DELETE FROM uploadinfo WHERE path=?1"), _db); - if (!deleteUploadInfoQuery) { - return sqlFail(QStringLiteral("prepare _deleteUploadInfoQuery"), *deleteUploadInfoQuery); + if (!_deleteUploadInfoQuery.initOrReset("DELETE FROM uploadinfo WHERE path=?1", _db)) { + return sqlFail(QStringLiteral("prepare _deleteUploadInfoQuery"), _deleteUploadInfoQuery); } QByteArray sql("SELECT lastTryEtag, lastTryModtime, retrycount, errorstring, lastTryTime, ignoreDuration, renameTarget, errorCategory, requestId " @@ -604,9 +605,8 @@ // case insensitively sql += " COLLATE NOCASE"; } - const auto getErrorBlacklistQuery = _queryManager.get(PreparedSqlQueryManager::GetErrorBlacklistQuery, sql, _db); - if (!getErrorBlacklistQuery) { - return sqlFail(QStringLiteral("prepare _getErrorBlacklistQuery"), *getErrorBlacklistQuery); + if (!_getErrorBlacklistQuery.initOrReset(sql, _db)) { + return sqlFail(QStringLiteral("prepare _getErrorBlacklistQuery"), _getErrorBlacklistQuery); } // don't start a new transaction now @@ -891,7 +891,7 @@ qint64 SyncJournalDb::getPHash(const QByteArray &file) { - qint64 h = 0; + int64_t h = 0; int len = file.length(); h = c_jhash64((uint8_t *)file.data(), len, 0); @@ -921,7 +921,7 @@ << "fileSize:" << record._fileSize << "checksum:" << record._checksumHeader << "e2eMangledName:" << record.e2eMangledName() << "isE2eEncrypted:" << record._isE2eEncrypted; - const qint64 phash = getPHash(record._path); + qlonglong phash = getPHash(record._path); if (checkConnect()) { int plen = record._path.length(); @@ -936,35 +936,34 @@ parseChecksumHeader(record._checksumHeader, &checksumType, &checksum); int contentChecksumTypeId = mapChecksumType(checksumType); - const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordQuery, QByteArrayLiteral("INSERT OR REPLACE INTO metadata " - "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, contentChecksum, contentChecksumTypeId, e2eMangledName, isE2eEncrypted) " - "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18);"), - _db); - if (!query) { - return query->error(); - } - - query->bindValue(1, phash); - query->bindValue(2, plen); - query->bindValue(3, record._path); - query->bindValue(4, record._inode); - query->bindValue(5, 0); // uid Not used - query->bindValue(6, 0); // gid Not used - query->bindValue(7, 0); // mode Not used - query->bindValue(8, record._modtime); - query->bindValue(9, record._type); - query->bindValue(10, etag); - query->bindValue(11, fileId); - query->bindValue(12, remotePerm); - query->bindValue(13, record._fileSize); - query->bindValue(14, record._serverHasIgnoredFiles ? 1 : 0); - query->bindValue(15, checksum); - query->bindValue(16, contentChecksumTypeId); - query->bindValue(17, record._e2eMangledName); - query->bindValue(18, record._isE2eEncrypted); + if (!_setFileRecordQuery.initOrReset(QByteArrayLiteral( + "INSERT OR REPLACE INTO metadata " + "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, contentChecksum, contentChecksumTypeId, e2eMangledName, isE2eEncrypted) " + "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18);"), _db)) { + return _setFileRecordQuery.error(); + } + + _setFileRecordQuery.bindValue(1, phash); + _setFileRecordQuery.bindValue(2, plen); + _setFileRecordQuery.bindValue(3, record._path); + _setFileRecordQuery.bindValue(4, record._inode); + _setFileRecordQuery.bindValue(5, 0); // uid Not used + _setFileRecordQuery.bindValue(6, 0); // gid Not used + _setFileRecordQuery.bindValue(7, 0); // mode Not used + _setFileRecordQuery.bindValue(8, record._modtime); + _setFileRecordQuery.bindValue(9, record._type); + _setFileRecordQuery.bindValue(10, etag); + _setFileRecordQuery.bindValue(11, fileId); + _setFileRecordQuery.bindValue(12, remotePerm); + _setFileRecordQuery.bindValue(13, record._fileSize); + _setFileRecordQuery.bindValue(14, record._serverHasIgnoredFiles ? 1 : 0); + _setFileRecordQuery.bindValue(15, checksum); + _setFileRecordQuery.bindValue(16, contentChecksumTypeId); + _setFileRecordQuery.bindValue(17, record._e2eMangledName); + _setFileRecordQuery.bindValue(18, record._isE2eEncrypted); - if (!query->exec()) { - return query->error(); + if (!_setFileRecordQuery.exec()) { + return _setFileRecordQuery.error(); } // Can't be true anymore. @@ -984,14 +983,13 @@ return; } - const auto query = _queryManager.get(PreparedSqlQueryManager::SetKeyValueStoreQuery, QByteArrayLiteral("INSERT OR REPLACE INTO key_value_store (key, value) VALUES(?1, ?2);"), _db); - if (!query) { + if (!_setKeyValueStoreQuery.initOrReset(QByteArrayLiteral("INSERT OR REPLACE INTO key_value_store (key, value) VALUES(?1, ?2);"), _db)) { return; } - query->bindValue(1, key); - query->bindValue(2, value); - query->exec(); + _setKeyValueStoreQuery.bindValue(1, key); + _setKeyValueStoreQuery.bindValue(2, value); + _setKeyValueStoreQuery.exec(); } qint64 SyncJournalDb::keyValueStoreGetInt(const QString &key, qint64 defaultValue) @@ -1001,31 +999,49 @@ return defaultValue; } - const auto query = _queryManager.get(PreparedSqlQueryManager::GetKeyValueStoreQuery, QByteArrayLiteral("SELECT value FROM key_value_store WHERE key=?1"), _db); - if (!query) { + if (!_getKeyValueStoreQuery.initOrReset(QByteArrayLiteral("SELECT value FROM key_value_store WHERE key = ?1;"), _db)) { + return defaultValue; + } + + _getKeyValueStoreQuery.bindValue(1, key); + _getKeyValueStoreQuery.exec(); + + if (!_getKeyValueStoreQuery.next().hasData) { + return defaultValue; + } + + return _getKeyValueStoreQuery.int64Value(0); +} + +QVariant SyncJournalDb::keyValueStoreGet(const QString &key, QVariant defaultValue) +{ + QMutexLocker locker(&_mutex); + if (!checkConnect()) { + return defaultValue; + } + + if (!_getKeyValueStoreQuery.initOrReset(QByteArrayLiteral("SELECT value FROM key_value_store WHERE key = ?1;"), _db)) { return defaultValue; } - query->bindValue(1, key); - query->exec(); - auto result = query->next(); + _getKeyValueStoreQuery.bindValue(1, key); + _getKeyValueStoreQuery.exec(); - if (!result.ok || !result.hasData) { + if (!_getKeyValueStoreQuery.next().hasData) { return defaultValue; } - return query->int64Value(0); + return _getKeyValueStoreQuery.stringValue(0); } void SyncJournalDb::keyValueStoreDelete(const QString &key) { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteKeyValueStoreQuery, QByteArrayLiteral("DELETE FROM key_value_store WHERE key=?1;"), _db); - if (!query) { + if (!_deleteKeyValueStoreQuery.initOrReset("DELETE FROM key_value_store WHERE key=?1;", _db)) { qCWarning(lcDb) << "Failed to initOrReset _deleteKeyValueStoreQuery"; Q_ASSERT(false); } - query->bindValue(1, key); - if (!query->exec()) { + _deleteKeyValueStoreQuery.bindValue(1, key); + if (!_deleteKeyValueStoreQuery.exec()) { qCWarning(lcDb) << "Failed to exec _deleteKeyValueStoreQuery for key" << key; Q_ASSERT(false); } @@ -1040,26 +1056,20 @@ // if (!recursively) { // always delete the actual file. - { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteFileRecordPhash, QByteArrayLiteral("DELETE FROM metadata WHERE phash=?1"), _db); - if (!query) { - return false; - } + if (!_deleteFileRecordPhash.initOrReset(QByteArrayLiteral("DELETE FROM metadata WHERE phash=?1"), _db)) + return false; - const qint64 phash = getPHash(filename.toUtf8()); - query->bindValue(1, phash); + qlonglong phash = getPHash(filename.toUtf8()); + _deleteFileRecordPhash.bindValue(1, phash); - if (!query->exec()) { - return false; - } - } + if (!_deleteFileRecordPhash.exec()) + return false; if (recursively) { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteFileRecordRecursively, QByteArrayLiteral("DELETE FROM metadata WHERE " IS_PREFIX_PATH_OF("?1", "path")), _db); - if (!query) + if (!_deleteFileRecordRecursively.initOrReset(QByteArrayLiteral("DELETE FROM metadata WHERE " IS_PREFIX_PATH_OF("?1", "path")), _db)) return false; - query->bindValue(1, filename); - if (!query->exec()) { + _deleteFileRecordRecursively.bindValue(1, filename); + if (!_deleteFileRecordRecursively.exec()) { return false; } } @@ -1087,27 +1097,25 @@ return false; if (!filename.isEmpty()) { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetFileRecordQuery, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE phash=?1"), _db); - if (!query) { + if (!_getFileRecordQuery.initOrReset(QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE phash=?1"), _db)) return false; - } - query->bindValue(1, getPHash(filename)); + _getFileRecordQuery.bindValue(1, getPHash(filename)); - if (!query->exec()) { + if (!_getFileRecordQuery.exec()) { close(); return false; } - auto next = query->next(); + auto next = _getFileRecordQuery.next(); if (!next.ok) { - QString err = query->error(); + QString err = _getFileRecordQuery.error(); qCWarning(lcDb) << "No journal entry found for" << filename << "Error:" << err; close(); return false; } if (next.hasData) { - fillFileRecordFromGetQuery(*rec, *query); + fillFileRecordFromGetQuery(*rec, _getFileRecordQuery); } } return true; @@ -1131,27 +1139,26 @@ } if (!mangledName.isEmpty()) { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetFileRecordQueryByMangledName, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE e2eMangledName=?1"), _db); - if (!query) { + if (!_getFileRecordQueryByMangledName.initOrReset(QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE e2eMangledName=?1"), _db)) { return false; } - query->bindValue(1, mangledName); + _getFileRecordQueryByMangledName.bindValue(1, mangledName); - if (!query->exec()) { + if (!_getFileRecordQueryByMangledName.exec()) { close(); return false; } - auto next = query->next(); + auto next = _getFileRecordQueryByMangledName.next(); if (!next.ok) { - QString err = query->error(); + QString err = _getFileRecordQueryByMangledName.error(); qCWarning(lcDb) << "No journal entry found for mangled name" << mangledName << "Error: " << err; close(); return false; } if (next.hasData) { - fillFileRecordFromGetQuery(*rec, *query); + fillFileRecordFromGetQuery(*rec, _getFileRecordQueryByMangledName); } } return true; @@ -1171,20 +1178,20 @@ if (!checkConnect()) return false; - const auto query = _queryManager.get(PreparedSqlQueryManager::GetFileRecordQueryByInode, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE inode=?1"), _db); - if (!query) + + if (!_getFileRecordQueryByInode.initOrReset(QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE inode=?1"), _db)) return false; - query->bindValue(1, inode); + _getFileRecordQueryByInode.bindValue(1, inode); - if (!query->exec()) + if (!_getFileRecordQueryByInode.exec()) return false; - auto next = query->next(); + auto next = _getFileRecordQueryByInode.next(); if (!next.ok) return false; if (next.hasData) - fillFileRecordFromGetQuery(*rec, *query); + fillFileRecordFromGetQuery(*rec, _getFileRecordQueryByInode); return true; } @@ -1199,25 +1206,23 @@ if (!checkConnect()) return false; - const auto query = _queryManager.get(PreparedSqlQueryManager::GetFileRecordQueryByFileId, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE fileid=?1"), _db); - if (!query) { + if (!_getFileRecordQueryByFileId.initOrReset(QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE fileid=?1"), _db)) return false; - } - query->bindValue(1, fileId); + _getFileRecordQueryByFileId.bindValue(1, fileId); - if (!query->exec()) + if (!_getFileRecordQueryByFileId.exec()) return false; forever { - auto next = query->next(); + auto next = _getFileRecordQueryByFileId.next(); if (!next.ok) return false; if (!next.hasData) break; SyncJournalFileRecord rec; - fillFileRecordFromGetQuery(rec, *query); + fillFileRecordFromGetQuery(rec, _getFileRecordQueryByFileId); rowCallback(rec); } @@ -1234,24 +1239,7 @@ if (!checkConnect()) return false; - auto _exec = [&rowCallback](SqlQuery &query) { - if (!query.exec()) { - return false; - } - - forever { - auto next = query.next(); - if (!next.ok) - return false; - if (!next.hasData) - break; - - SyncJournalFileRecord rec; - fillFileRecordFromGetQuery(rec, query); - rowCallback(rec); - } - return true; - }; + SqlQuery *query = nullptr; if(path.isEmpty()) { // Since the path column doesn't store the starting /, the getFilesBelowPathQuery @@ -1259,29 +1247,45 @@ // and find nothing. So, unfortunately, we have to use a different query for // retrieving the whole tree. - const auto query = _queryManager.get(PreparedSqlQueryManager::GetAllFilesQuery, QByteArrayLiteral(GET_FILE_RECORD_QUERY " ORDER BY path||'/' ASC"), _db); - if (!query) { + if (!_getAllFilesQuery.initOrReset(QByteArrayLiteral( GET_FILE_RECORD_QUERY " ORDER BY path||'/' ASC"), _db)) return false; - } - return _exec(*query); + query = &_getAllFilesQuery; } else { // This query is used to skip discovery and fill the tree from the // database instead - const auto query = _queryManager.get(PreparedSqlQueryManager::GetFilesBelowPathQuery, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE " IS_PREFIX_PATH_OF("?1", "path") - " OR " IS_PREFIX_PATH_OF("?1", "e2eMangledName") - // We want to ensure that the contents of a directory are sorted - // directly behind the directory itself. Without this ORDER BY - // an ordering like foo, foo-2, foo/file would be returned. - // With the trailing /, we get foo-2, foo, foo/file. This property - // is used in fill_tree_from_db(). - " ORDER BY path||'/' ASC"), - _db); - if (!query) { + if (!_getFilesBelowPathQuery.initOrReset(QByteArrayLiteral( + GET_FILE_RECORD_QUERY + " WHERE " IS_PREFIX_PATH_OF("?1", "path") + " OR " IS_PREFIX_PATH_OF("?1", "e2eMangledName") + // We want to ensure that the contents of a directory are sorted + // directly behind the directory itself. Without this ORDER BY + // an ordering like foo, foo-2, foo/file would be returned. + // With the trailing /, we get foo-2, foo, foo/file. This property + // is used in fill_tree_from_db(). + " ORDER BY path||'/' ASC"), _db)) { return false; } + query = &_getFilesBelowPathQuery; query->bindValue(1, path); - return _exec(*query); } + + if (!query->exec()) { + return false; + } + + forever { + auto next = query->next(); + if (!next.ok) + return false; + if (!next.hasData) + break; + + SyncJournalFileRecord rec; + fillFileRecordFromGetQuery(rec, *query); + rowCallback(rec); + } + + return true; } bool SyncJournalDb::listFilesInPath(const QByteArray& path, @@ -1295,24 +1299,24 @@ if (!checkConnect()) return false; - const auto query = _queryManager.get(PreparedSqlQueryManager::ListFilesInPathQuery, QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE parent_hash(path) = ?1 ORDER BY path||'/' ASC"), _db); - if (!query) { + if (!_listFilesInPathQuery.initOrReset(QByteArrayLiteral( + GET_FILE_RECORD_QUERY " WHERE parent_hash(path) = ?1 ORDER BY path||'/' ASC"), _db)) return false; - } - query->bindValue(1, getPHash(path)); - if (!query->exec()) + _listFilesInPathQuery.bindValue(1, getPHash(path)); + + if (!_listFilesInPathQuery.exec()) return false; forever { - auto next = query->next(); + auto next = _listFilesInPathQuery.next(); if (!next.ok) return false; if (!next.hasData) break; SyncJournalFileRecord rec; - fillFileRecordFromGetQuery(rec, *query); + fillFileRecordFromGetQuery(rec, _listFilesInPathQuery); if (!rec._path.startsWith(path) || rec._path.indexOf("/", path.size() + 1) > 0) { qWarning(lcDb) << "hash collision" << path << rec.path(); continue; @@ -1350,7 +1354,7 @@ qCInfo(lcDb) << "Updating file checksum" << filename << contentChecksum << contentChecksumType; - const qint64 phash = getPHash(filename.toUtf8()); + qlonglong phash = getPHash(filename.toUtf8()); if (!checkConnect()) { qCWarning(lcDb) << "Failed to connect database."; return false; @@ -1358,17 +1362,16 @@ int checksumTypeId = mapChecksumType(contentChecksumType); - const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordChecksumQuery, QByteArrayLiteral("UPDATE metadata" - " SET contentChecksum = ?2, contentChecksumTypeId = ?3" - " WHERE phash == ?1;"), - _db); - if (!query) { + if (!_setFileRecordChecksumQuery.initOrReset(QByteArrayLiteral( + "UPDATE metadata" + " SET contentChecksum = ?2, contentChecksumTypeId = ?3" + " WHERE phash == ?1;"), _db)) { return false; } - query->bindValue(1, phash); - query->bindValue(2, contentChecksum); - query->bindValue(3, checksumTypeId); - return query->exec(); + _setFileRecordChecksumQuery.bindValue(1, phash); + _setFileRecordChecksumQuery.bindValue(2, contentChecksum); + _setFileRecordChecksumQuery.bindValue(3, checksumTypeId); + return _setFileRecordChecksumQuery.exec(); } bool SyncJournalDb::updateLocalMetadata(const QString &filename, @@ -1379,25 +1382,25 @@ qCInfo(lcDb) << "Updating local metadata for:" << filename << modtime << size << inode; - const qint64 phash = getPHash(filename.toUtf8()); + qlonglong phash = getPHash(filename.toUtf8()); if (!checkConnect()) { qCWarning(lcDb) << "Failed to connect database."; return false; } - const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordLocalMetadataQuery, QByteArrayLiteral("UPDATE metadata" - " SET inode=?2, modtime=?3, filesize=?4" - " WHERE phash == ?1;"), - _db); - if (!query) { + + if (!_setFileRecordLocalMetadataQuery.initOrReset(QByteArrayLiteral( + "UPDATE metadata" + " SET inode=?2, modtime=?3, filesize=?4" + " WHERE phash == ?1;"), _db)) { return false; } - query->bindValue(1, phash); - query->bindValue(2, inode); - query->bindValue(3, modtime); - query->bindValue(4, size); - return query->exec(); + _setFileRecordLocalMetadataQuery.bindValue(1, phash); + _setFileRecordLocalMetadataQuery.bindValue(2, inode); + _setFileRecordLocalMetadataQuery.bindValue(3, modtime); + _setFileRecordLocalMetadataQuery.bindValue(4, size); + return _setFileRecordLocalMetadataQuery.exec(); } Optional SyncJournalDb::hasHydratedOrDehydratedFiles(const QByteArray &filename) @@ -1406,25 +1409,25 @@ if (!checkConnect()) return {}; - const auto query = _queryManager.get(PreparedSqlQueryManager::CountDehydratedFilesQuery, QByteArrayLiteral("SELECT DISTINCT type FROM metadata" - " WHERE (" IS_PREFIX_PATH_OR_EQUAL("?1", "path") " OR ?1 == '');"), - _db); - if (!query) { + auto &query = _countDehydratedFilesQuery; + if (!query.initOrReset(QByteArrayLiteral( + "SELECT DISTINCT type FROM metadata" + " WHERE (" IS_PREFIX_PATH_OR_EQUAL("?1", "path") " OR ?1 == '');"), _db)) { return {}; } - query->bindValue(1, filename); - if (!query->exec()) + query.bindValue(1, filename); + if (!query.exec()) return {}; HasHydratedDehydrated result; forever { - auto next = query->next(); + auto next = query.next(); if (!next.ok) return {}; if (!next.hasData) break; - auto type = static_cast(query->intValue(0)); + auto type = static_cast(query.intValue(0)); if (type == ItemTypeFile || type == ItemTypeVirtualFileDehydration) result.hasHydrated = true; if (type == ItemTypeVirtualFile || type == ItemTypeVirtualFileDownload) @@ -1468,19 +1471,20 @@ DownloadInfo res; if (checkConnect()) { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetDownloadInfoQuery, QByteArrayLiteral("SELECT tmpfile, etag, errorcount FROM downloadinfo WHERE path=?1"), _db); - if (!query) { + + if (!_getDownloadInfoQuery.initOrReset(QByteArrayLiteral( + "SELECT tmpfile, etag, errorcount FROM downloadinfo WHERE path=?1"), _db)) { return res; } - query->bindValue(1, file); + _getDownloadInfoQuery.bindValue(1, file); - if (!query->exec()) { + if (!_getDownloadInfoQuery.exec()) { return res; } - if (query->next().hasData) { - toDownloadInfo(*query, &res); + if (_getDownloadInfoQuery.next().hasData) { + toDownloadInfo(_getDownloadInfoQuery, &res); } } return res; @@ -1496,22 +1500,21 @@ if (i._valid) { - const auto query = _queryManager.get(PreparedSqlQueryManager::SetDownloadInfoQuery, QByteArrayLiteral("INSERT OR REPLACE INTO downloadinfo " - "(path, tmpfile, etag, errorcount) " - "VALUES ( ?1 , ?2, ?3, ?4 )"), - _db); - if (!query) { + if (!_setDownloadInfoQuery.initOrReset(QByteArrayLiteral( + "INSERT OR REPLACE INTO downloadinfo " + "(path, tmpfile, etag, errorcount) " + "VALUES ( ?1 , ?2, ?3, ?4 )"), _db)) { return; } - query->bindValue(1, file); - query->bindValue(2, i._tmpfile); - query->bindValue(3, i._etag); - query->bindValue(4, i._errorCount); - query->exec(); + _setDownloadInfoQuery.bindValue(1, file); + _setDownloadInfoQuery.bindValue(2, i._tmpfile); + _setDownloadInfoQuery.bindValue(3, i._etag); + _setDownloadInfoQuery.bindValue(4, i._errorCount); + _setDownloadInfoQuery.exec(); } else { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteDownloadInfoQuery); - query->bindValue(1, file); - query->exec(); + _deleteDownloadInfoQuery.reset_and_clear_bindings(); + _deleteDownloadInfoQuery.bindValue(1, file); + _deleteDownloadInfoQuery.exec(); } } @@ -1545,12 +1548,8 @@ } } - { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteDownloadInfoQuery); - if (!deleteBatch(*query, superfluousPaths, QStringLiteral("downloadinfo"))) { - return empty_result; - } - } + if (!deleteBatch(_deleteDownloadInfoQuery, superfluousPaths, QStringLiteral("downloadinfo"))) + return empty_result; return deleted_entries; } @@ -1580,26 +1579,25 @@ UploadInfo res; if (checkConnect()) { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetUploadInfoQuery, QByteArrayLiteral("SELECT chunk, transferid, errorcount, size, modtime, contentChecksum FROM " - "uploadinfo WHERE path=?1"), - _db); - if (!query) { + if (!_getUploadInfoQuery.initOrReset(QByteArrayLiteral( + "SELECT chunk, transferid, errorcount, size, modtime, contentChecksum FROM " + "uploadinfo WHERE path=?1"), _db)) { return res; } - query->bindValue(1, file); + _getUploadInfoQuery.bindValue(1, file); - if (!query->exec()) { + if (!_getUploadInfoQuery.exec()) { return res; } - if (query->next().hasData) { + if (_getUploadInfoQuery.next().hasData) { bool ok = true; - res._chunk = query->intValue(0); - res._transferid = query->int64Value(1); - res._errorCount = query->intValue(2); - res._size = query->int64Value(3); - res._modtime = query->int64Value(4); - res._contentChecksum = query->baValue(5); + res._chunk = _getUploadInfoQuery.intValue(0); + res._transferid = _getUploadInfoQuery.int64Value(1); + res._errorCount = _getUploadInfoQuery.intValue(2); + res._size = _getUploadInfoQuery.int64Value(3); + res._modtime = _getUploadInfoQuery.int64Value(4); + res._contentChecksum = _getUploadInfoQuery.baValue(5); res._valid = ok; } } @@ -1615,30 +1613,29 @@ } if (i._valid) { - const auto query = _queryManager.get(PreparedSqlQueryManager::SetUploadInfoQuery, QByteArrayLiteral("INSERT OR REPLACE INTO uploadinfo " - "(path, chunk, transferid, errorcount, size, modtime, contentChecksum) " - "VALUES ( ?1 , ?2, ?3 , ?4 , ?5, ?6 , ?7 )"), - _db); - if (!query) { + if (!_setUploadInfoQuery.initOrReset(QByteArrayLiteral( + "INSERT OR REPLACE INTO uploadinfo " + "(path, chunk, transferid, errorcount, size, modtime, contentChecksum) " + "VALUES ( ?1 , ?2, ?3 , ?4 , ?5, ?6 , ?7 )"), _db)) { return; } - query->bindValue(1, file); - query->bindValue(2, i._chunk); - query->bindValue(3, i._transferid); - query->bindValue(4, i._errorCount); - query->bindValue(5, i._size); - query->bindValue(6, i._modtime); - query->bindValue(7, i._contentChecksum); + _setUploadInfoQuery.bindValue(1, file); + _setUploadInfoQuery.bindValue(2, i._chunk); + _setUploadInfoQuery.bindValue(3, i._transferid); + _setUploadInfoQuery.bindValue(4, i._errorCount); + _setUploadInfoQuery.bindValue(5, i._size); + _setUploadInfoQuery.bindValue(6, i._modtime); + _setUploadInfoQuery.bindValue(7, i._contentChecksum); - if (!query->exec()) { + if (!_setUploadInfoQuery.exec()) { return; } } else { - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteUploadInfoQuery); - query->bindValue(1, file); + _deleteUploadInfoQuery.reset_and_clear_bindings(); + _deleteUploadInfoQuery.bindValue(1, file); - if (!query->exec()) { + if (!_deleteUploadInfoQuery.exec()) { return; } } @@ -1670,8 +1667,7 @@ } } - const auto deleteUploadInfoQuery = _queryManager.get(PreparedSqlQueryManager::DeleteUploadInfoQuery); - deleteBatch(*deleteUploadInfoQuery, superfluousPaths, QStringLiteral("uploadinfo")); + deleteBatch(_deleteUploadInfoQuery, superfluousPaths, QStringLiteral("uploadinfo")); return ids; } @@ -1684,20 +1680,20 @@ return entry; if (checkConnect()) { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetErrorBlacklistQuery); - query->bindValue(1, file); - if (query->exec()) { - if (query->next().hasData) { - entry._lastTryEtag = query->baValue(0); - entry._lastTryModtime = query->int64Value(1); - entry._retryCount = query->intValue(2); - entry._errorString = query->stringValue(3); - entry._lastTryTime = query->int64Value(4); - entry._ignoreDuration = query->int64Value(5); - entry._renameTarget = query->stringValue(6); + _getErrorBlacklistQuery.reset_and_clear_bindings(); + _getErrorBlacklistQuery.bindValue(1, file); + if (_getErrorBlacklistQuery.exec()) { + if (_getErrorBlacklistQuery.next().hasData) { + entry._lastTryEtag = _getErrorBlacklistQuery.baValue(0); + entry._lastTryModtime = _getErrorBlacklistQuery.int64Value(1); + entry._retryCount = _getErrorBlacklistQuery.intValue(2); + entry._errorString = _getErrorBlacklistQuery.stringValue(3); + entry._lastTryTime = _getErrorBlacklistQuery.int64Value(4); + entry._ignoreDuration = _getErrorBlacklistQuery.int64Value(5); + entry._renameTarget = _getErrorBlacklistQuery.stringValue(6); entry._errorCategory = static_cast( - query->intValue(7)); - entry._requestId = query->baValue(8); + _getErrorBlacklistQuery.intValue(7)); + entry._requestId = _getErrorBlacklistQuery.baValue(8); entry._file = file; } } @@ -1825,25 +1821,24 @@ return; } - const auto query = _queryManager.get(PreparedSqlQueryManager::SetErrorBlacklistQuery, QByteArrayLiteral("INSERT OR REPLACE INTO blacklist " - "(path, lastTryEtag, lastTryModtime, retrycount, errorstring, lastTryTime, ignoreDuration, renameTarget, errorCategory, requestId) " - "VALUES ( ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)"), - _db); - if (!query) { + if (!_setErrorBlacklistQuery.initOrReset(QByteArrayLiteral( + "INSERT OR REPLACE INTO blacklist " + "(path, lastTryEtag, lastTryModtime, retrycount, errorstring, lastTryTime, ignoreDuration, renameTarget, errorCategory, requestId) " + "VALUES ( ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)"), _db)) { return; } - query->bindValue(1, item._file); - query->bindValue(2, item._lastTryEtag); - query->bindValue(3, item._lastTryModtime); - query->bindValue(4, item._retryCount); - query->bindValue(5, item._errorString); - query->bindValue(6, item._lastTryTime); - query->bindValue(7, item._ignoreDuration); - query->bindValue(8, item._renameTarget); - query->bindValue(9, item._errorCategory); - query->bindValue(10, item._requestId); - query->exec(); + _setErrorBlacklistQuery.bindValue(1, item._file); + _setErrorBlacklistQuery.bindValue(2, item._lastTryEtag); + _setErrorBlacklistQuery.bindValue(3, item._lastTryModtime); + _setErrorBlacklistQuery.bindValue(4, item._retryCount); + _setErrorBlacklistQuery.bindValue(5, item._errorString); + _setErrorBlacklistQuery.bindValue(6, item._lastTryTime); + _setErrorBlacklistQuery.bindValue(7, item._ignoreDuration); + _setErrorBlacklistQuery.bindValue(8, item._renameTarget); + _setErrorBlacklistQuery.bindValue(9, item._errorCategory); + _setErrorBlacklistQuery.bindValue(10, item._requestId); + _setErrorBlacklistQuery.exec(); } QVector SyncJournalDb::getPollInfos() @@ -1869,6 +1864,8 @@ info._url = query.stringValue(3); res.append(info); } + + query.finish(); return res; } @@ -1905,19 +1902,18 @@ return result; } - const auto query = _queryManager.get(PreparedSqlQueryManager::GetSelectiveSyncListQuery, QByteArrayLiteral("SELECT path FROM selectivesync WHERE type=?1"), _db); - if (!query) { + if (!_getSelectiveSyncListQuery.initOrReset(QByteArrayLiteral("SELECT path FROM selectivesync WHERE type=?1"), _db)) { *ok = false; return result; } - query->bindValue(1, int(type)); - if (!query->exec()) { + _getSelectiveSyncListQuery.bindValue(1, int(type)); + if (!_getSelectiveSyncListQuery.exec()) { *ok = false; return result; } forever { - auto next = query->next(); + auto next = _getSelectiveSyncListQuery.next(); if (!next.ok) { *ok = false; return result; @@ -1925,7 +1921,7 @@ if (!next.hasData) break; - auto entry = query->stringValue(0); + auto entry = _getSelectiveSyncListQuery.stringValue(0); if (!entry.endsWith(QLatin1Char('/'))) { entry.append(QLatin1Char('/')); } @@ -2042,20 +2038,19 @@ } // Retrieve the id - const auto query = _queryManager.get(PreparedSqlQueryManager::GetChecksumTypeQuery, QByteArrayLiteral("SELECT name FROM checksumtype WHERE id=?1"), _db); - if (!query) { + auto &query = _getChecksumTypeQuery; + if (!query.initOrReset(QByteArrayLiteral("SELECT name FROM checksumtype WHERE id=?1"), _db)) return {}; - } - query->bindValue(1, checksumTypeId); - if (!query->exec()) { + query.bindValue(1, checksumTypeId); + if (!query.exec()) { return QByteArray(); } - if (!query->next().hasData) { + if (!query.next().hasData) { qCWarning(lcDb) << "No checksum type mapping found for" << checksumTypeId; return QByteArray(); } - return query->baValue(0); + return query.baValue(0); } int SyncJournalDb::mapChecksumType(const QByteArray &checksumType) @@ -2069,36 +2064,28 @@ return *it; // Ensure the checksum type is in the db - { - const auto query = _queryManager.get(PreparedSqlQueryManager::InsertChecksumTypeQuery, QByteArrayLiteral("INSERT OR IGNORE INTO checksumtype (name) VALUES (?1)"), _db); - if (!query) { - return 0; - } - query->bindValue(1, checksumType); - if (!query->exec()) { - return 0; - } + if (!_insertChecksumTypeQuery.initOrReset(QByteArrayLiteral("INSERT OR IGNORE INTO checksumtype (name) VALUES (?1)"), _db)) + return 0; + _insertChecksumTypeQuery.bindValue(1, checksumType); + if (!_insertChecksumTypeQuery.exec()) { + return 0; } // Retrieve the id - { - const auto query = _queryManager.get(PreparedSqlQueryManager::GetChecksumTypeIdQuery, QByteArrayLiteral("SELECT id FROM checksumtype WHERE name=?1"), _db); - if (!query) { - return 0; - } - query->bindValue(1, checksumType); - if (!query->exec()) { - return 0; - } - - if (!query->next().hasData) { - qCWarning(lcDb) << "No checksum type mapping found for" << checksumType; - return 0; - } - auto value = query->intValue(0); - _checksymTypeCache[checksumType] = value; - return value; + if (!_getChecksumTypeIdQuery.initOrReset(QByteArrayLiteral("SELECT id FROM checksumtype WHERE name=?1"), _db)) + return 0; + _getChecksumTypeIdQuery.bindValue(1, checksumType); + if (!_getChecksumTypeIdQuery.exec()) { + return 0; + } + + if (!_getChecksumTypeIdQuery.next().hasData) { + qCWarning(lcDb) << "No checksum type mapping found for" << checksumType; + return 0; } + auto value = _getChecksumTypeIdQuery.intValue(0); + _checksymTypeCache[checksumType] = value; + return value; } QByteArray SyncJournalDb::dataFingerprint() @@ -2108,19 +2095,17 @@ return QByteArray(); } - const auto query = _queryManager.get(PreparedSqlQueryManager::GetDataFingerprintQuery, QByteArrayLiteral("SELECT fingerprint FROM datafingerprint"), _db); - if (!query) { + if (!_getDataFingerprintQuery.initOrReset(QByteArrayLiteral("SELECT fingerprint FROM datafingerprint"), _db)) return QByteArray(); - } - if (!query->exec()) { + if (!_getDataFingerprintQuery.exec()) { return QByteArray(); } - if (!query->next().hasData) { + if (!_getDataFingerprintQuery.next().hasData) { return QByteArray(); } - return query->baValue(0); + return _getDataFingerprintQuery.baValue(0); } void SyncJournalDb::setDataFingerprint(const QByteArray &dataFingerprint) @@ -2130,16 +2115,15 @@ return; } - const auto setDataFingerprintQuery1 = _queryManager.get(PreparedSqlQueryManager::SetDataFingerprintQuery1, QByteArrayLiteral("DELETE FROM datafingerprint;"), _db); - const auto setDataFingerprintQuery2 = _queryManager.get(PreparedSqlQueryManager::SetDataFingerprintQuery2, QByteArrayLiteral("INSERT INTO datafingerprint (fingerprint) VALUES (?1);"), _db); - if (!setDataFingerprintQuery1 || !setDataFingerprintQuery2) { + if (!_setDataFingerprintQuery1.initOrReset(QByteArrayLiteral("DELETE FROM datafingerprint;"), _db) + || !_setDataFingerprintQuery2.initOrReset(QByteArrayLiteral("INSERT INTO datafingerprint (fingerprint) VALUES (?1);"), _db)) { return; } - setDataFingerprintQuery1->exec(); + _setDataFingerprintQuery1.exec(); - setDataFingerprintQuery2->bindValue(1, dataFingerprint); - setDataFingerprintQuery2->exec(); + _setDataFingerprintQuery2.bindValue(1, dataFingerprint); + _setDataFingerprintQuery2.exec(); } void SyncJournalDb::setConflictRecord(const ConflictRecord &record) @@ -2148,17 +2132,18 @@ if (!checkConnect()) return; - const auto query = _queryManager.get(PreparedSqlQueryManager::SetConflictRecordQuery, QByteArrayLiteral("INSERT OR REPLACE INTO conflicts " - "(path, baseFileId, baseModtime, baseEtag, basePath) " - "VALUES (?1, ?2, ?3, ?4, ?5);"), - _db); - ASSERT(query) - query->bindValue(1, record.path); - query->bindValue(2, record.baseFileId); - query->bindValue(3, record.baseModtime); - query->bindValue(4, record.baseEtag); - query->bindValue(5, record.initialBasePath); - ASSERT(query->exec()) + auto &query = _setConflictRecordQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + "INSERT OR REPLACE INTO conflicts " + "(path, baseFileId, baseModtime, baseEtag, basePath) " + "VALUES (?1, ?2, ?3, ?4, ?5);"), + _db)); + query.bindValue(1, record.path); + query.bindValue(2, record.baseFileId); + query.bindValue(3, record.baseModtime); + query.bindValue(4, record.baseEtag); + query.bindValue(5, record.initialBasePath); + ASSERT(query.exec()); } ConflictRecord SyncJournalDb::conflictRecord(const QByteArray &path) @@ -2166,21 +2151,20 @@ ConflictRecord entry; QMutexLocker locker(&_mutex); - if (!checkConnect()) { + if (!checkConnect()) return entry; - } - const auto query = _queryManager.get(PreparedSqlQueryManager::GetConflictRecordQuery, QByteArrayLiteral("SELECT baseFileId, baseModtime, baseEtag, basePath FROM conflicts WHERE path=?1;"), _db); - ASSERT(query) - query->bindValue(1, path); - ASSERT(query->exec()) - if (!query->next().hasData) + auto &query = _getConflictRecordQuery; + ASSERT(query.initOrReset(QByteArrayLiteral("SELECT baseFileId, baseModtime, baseEtag, basePath FROM conflicts WHERE path=?1;"), _db)); + query.bindValue(1, path); + ASSERT(query.exec()); + if (!query.next().hasData) return entry; entry.path = path; - entry.baseFileId = query->baValue(0); - entry.baseModtime = query->int64Value(1); - entry.baseEtag = query->baValue(2); - entry.initialBasePath = query->baValue(3); + entry.baseFileId = query.baValue(0); + entry.baseModtime = query.int64Value(1); + entry.baseEtag = query.baValue(2); + entry.initialBasePath = query.baValue(3); return entry; } @@ -2190,10 +2174,9 @@ if (!checkConnect()) return; - const auto query = _queryManager.get(PreparedSqlQueryManager::DeleteConflictRecordQuery, QByteArrayLiteral("DELETE FROM conflicts WHERE path=?1;"), _db); - ASSERT(query) - query->bindValue(1, path); - ASSERT(query->exec()) + ASSERT(_deleteConflictRecordQuery.initOrReset("DELETE FROM conflicts WHERE path=?1;", _db)); + _deleteConflictRecordQuery.bindValue(1, path); + ASSERT(_deleteConflictRecordQuery.exec()); } QByteArrayList SyncJournalDb::conflictRecordPaths() @@ -2266,19 +2249,21 @@ if (!_db->checkConnect()) return {}; - const auto query = _db->_queryManager.get(PreparedSqlQueryManager::GetRawPinStateQuery, QByteArrayLiteral("SELECT pinState FROM flags WHERE path == ?1;"), _db->_db); - ASSERT(query) - query->bindValue(1, path); - query->exec(); + auto &query = _db->_getRawPinStateQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + "SELECT pinState FROM flags WHERE path == ?1;"), + _db->_db)); + query.bindValue(1, path); + query.exec(); - auto next = query->next(); + auto next = query.next(); if (!next.ok) return {}; // no-entry means Inherited if (!next.hasData) return PinState::Inherited; - return static_cast(query->intValue(0)); + return static_cast(query.intValue(0)); } Optional SyncJournalDb::PinStateInterface::effectiveForPath(const QByteArray &path) @@ -2287,25 +2272,26 @@ if (!_db->checkConnect()) return {}; - const auto query = _db->_queryManager.get(PreparedSqlQueryManager::GetEffectivePinStateQuery, QByteArrayLiteral("SELECT pinState FROM flags WHERE" - // explicitly allow "" to represent the root path - // (it'd be great if paths started with a / and "/" could be the root) - " (" IS_PREFIX_PATH_OR_EQUAL("path", "?1") " OR path == '')" - " AND pinState is not null AND pinState != 0" - " ORDER BY length(path) DESC LIMIT 1;"), - _db->_db); - ASSERT(query) - query->bindValue(1, path); - query->exec(); + auto &query = _db->_getEffectivePinStateQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + "SELECT pinState FROM flags WHERE" + // explicitly allow "" to represent the root path + // (it'd be great if paths started with a / and "/" could be the root) + " (" IS_PREFIX_PATH_OR_EQUAL("path", "?1") " OR path == '')" + " AND pinState is not null AND pinState != 0" + " ORDER BY length(path) DESC LIMIT 1;"), + _db->_db)); + query.bindValue(1, path); + query.exec(); - auto next = query->next(); + auto next = query.next(); if (!next.ok) return {}; // If the root path has no setting, assume AlwaysLocal if (!next.hasData) return PinState::AlwaysLocal; - return static_cast(query->intValue(0)); + return static_cast(query.intValue(0)); } Optional SyncJournalDb::PinStateInterface::effectiveForPathRecursive(const QByteArray &path) @@ -2321,22 +2307,23 @@ return {}; // Find all the non-inherited pin states below the item - const auto query = _db->_queryManager.get(PreparedSqlQueryManager::GetSubPinsQuery, QByteArrayLiteral("SELECT DISTINCT pinState FROM flags WHERE" - " (" IS_PREFIX_PATH_OF("?1", "path") " OR ?1 == '')" - " AND pinState is not null and pinState != 0;"), - _db->_db); - ASSERT(query) - query->bindValue(1, path); - query->exec(); + auto &query = _db->_getSubPinsQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + "SELECT DISTINCT pinState FROM flags WHERE" + " (" IS_PREFIX_PATH_OF("?1", "path") " OR ?1 == '')" + " AND pinState is not null and pinState != 0;"), + _db->_db)); + query.bindValue(1, path); + query.exec(); // Check if they are all identical forever { - auto next = query->next(); + auto next = query.next(); if (!next.ok) return {}; if (!next.hasData) break; - const auto subPin = static_cast(query->intValue(0)); + const auto subPin = static_cast(query.intValue(0)); if (subPin != *basePin) return PinState::Inherited; } @@ -2350,18 +2337,18 @@ if (!_db->checkConnect()) return; - const auto query = _db->_queryManager.get(PreparedSqlQueryManager::SetPinStateQuery, QByteArrayLiteral( - // If we had sqlite >=3.24.0 everywhere this could be an upsert, - // making further flags columns easy - //"INSERT INTO flags(path, pinState) VALUES(?1, ?2)" - //" ON CONFLICT(path) DO UPDATE SET pinState=?2;"), - // Simple version that doesn't work nicely with multiple columns: - "INSERT OR REPLACE INTO flags(path, pinState) VALUES(?1, ?2);"), - _db->_db); - ASSERT(query) - query->bindValue(1, path); - query->bindValue(2, state); - query->exec(); + auto &query = _db->_setPinStateQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + // If we had sqlite >=3.24.0 everywhere this could be an upsert, + // making further flags columns easy + //"INSERT INTO flags(path, pinState) VALUES(?1, ?2)" + //" ON CONFLICT(path) DO UPDATE SET pinState=?2;"), + // Simple version that doesn't work nicely with multiple columns: + "INSERT OR REPLACE INTO flags(path, pinState) VALUES(?1, ?2);"), + _db->_db)); + query.bindValue(1, path); + query.bindValue(2, state); + query.exec(); } void SyncJournalDb::PinStateInterface::wipeForPathAndBelow(const QByteArray &path) @@ -2370,13 +2357,14 @@ if (!_db->checkConnect()) return; - const auto query = _db->_queryManager.get(PreparedSqlQueryManager::WipePinStateQuery, QByteArrayLiteral("DELETE FROM flags WHERE " - // Allow "" to delete everything - " (" IS_PREFIX_PATH_OR_EQUAL("?1", "path") " OR ?1 == '');"), - _db->_db); - ASSERT(query) - query->bindValue(1, path); - query->exec(); + auto &query = _db->_wipePinStateQuery; + ASSERT(query.initOrReset(QByteArrayLiteral( + "DELETE FROM flags WHERE " + // Allow "" to delete everything + " (" IS_PREFIX_PATH_OR_EQUAL("?1", "path") " OR ?1 == '');"), + _db->_db)); + query.bindValue(1, path); + query.exec(); } Optional>> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/syncjournaldb.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/syncjournaldb.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/syncjournaldb.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/syncjournaldb.h 2022-01-03 12:25:12.000000000 +0000 @@ -28,7 +28,6 @@ #include "common/utility.h" #include "common/ownsql.h" -#include "common/preparedsqlquerymanager.h" #include "common/syncjournalfilerecord.h" #include "common/result.h" #include "common/pinstate.h" @@ -47,7 +46,7 @@ Q_OBJECT public: explicit SyncJournalDb(const QString &dbFilePath, QObject *parent = nullptr); - ~SyncJournalDb() override; + virtual ~SyncJournalDb(); /// Create a journal path for a specific configuration static QString makeDbName(const QString &localPath, @@ -70,6 +69,7 @@ void keyValueStoreSet(const QString &key, QVariant value); qint64 keyValueStoreGetInt(const QString &key, qint64 defaultValue); + QVariant keyValueStoreGet(const QString &key, QVariant defaultValue = {}); void keyValueStoreDelete(const QString &key); bool deleteFileRecord(const QString &filename, bool recursively = false); @@ -392,11 +392,51 @@ SqlDatabase _db; QString _dbFile; - QRecursiveMutex _mutex; // Public functions are protected with the mutex. + QMutex _mutex; // Public functions are protected with the mutex. QMap _checksymTypeCache; int _transaction; bool _metadataTableIsEmpty; + SqlQuery _getFileRecordQuery; + SqlQuery _getFileRecordQueryByMangledName; + SqlQuery _getFileRecordQueryByInode; + SqlQuery _getFileRecordQueryByFileId; + SqlQuery _getFilesBelowPathQuery; + SqlQuery _getAllFilesQuery; + SqlQuery _listFilesInPathQuery; + SqlQuery _setFileRecordQuery; + SqlQuery _setFileRecordChecksumQuery; + SqlQuery _setFileRecordLocalMetadataQuery; + SqlQuery _getDownloadInfoQuery; + SqlQuery _setDownloadInfoQuery; + SqlQuery _deleteDownloadInfoQuery; + SqlQuery _getUploadInfoQuery; + SqlQuery _setUploadInfoQuery; + SqlQuery _deleteUploadInfoQuery; + SqlQuery _deleteFileRecordPhash; + SqlQuery _deleteFileRecordRecursively; + SqlQuery _getErrorBlacklistQuery; + SqlQuery _setErrorBlacklistQuery; + SqlQuery _getSelectiveSyncListQuery; + SqlQuery _getChecksumTypeIdQuery; + SqlQuery _getChecksumTypeQuery; + SqlQuery _insertChecksumTypeQuery; + SqlQuery _getDataFingerprintQuery; + SqlQuery _setDataFingerprintQuery1; + SqlQuery _setDataFingerprintQuery2; + SqlQuery _setKeyValueStoreQuery; + SqlQuery _getKeyValueStoreQuery; + SqlQuery _deleteKeyValueStoreQuery; + SqlQuery _getConflictRecordQuery; + SqlQuery _setConflictRecordQuery; + SqlQuery _deleteConflictRecordQuery; + SqlQuery _getRawPinStateQuery; + SqlQuery _getEffectivePinStateQuery; + SqlQuery _getSubPinsQuery; + SqlQuery _countDehydratedFilesQuery; + SqlQuery _setPinStateQuery; + SqlQuery _wipePinStateQuery; + /* Storing etags to these folders, or their parent folders, is filtered out. * * When schedulePathForRemoteDiscovery() is called some etags to _invalid_ in the @@ -418,8 +458,6 @@ * variable, for specific filesystems, or when WAL fails in a particular way. */ QByteArray _journalMode; - - PreparedSqlQueryManager _queryManager; }; bool OCSYNC_EXPORT diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -37,7 +37,6 @@ #include #include #include -#include #ifdef Q_OS_UNIX @@ -65,13 +64,14 @@ bool Utility::writeRandomFile(const QString &fname, int size) { int maxSize = 10 * 10 * 1024; + qsrand(QDateTime::currentMSecsSinceEpoch()); if (size == -1) - size = rand() % maxSize; + size = qrand() % maxSize; QString randString; for (int i = 0; i < size; i++) { - int r = rand() % 128; + int r = qrand() % 128; randString.append(QChar(r)); } @@ -109,11 +109,6 @@ setupFavLink_private(folder); } -void Utility::removeFavLink(const QString &folder) -{ - removeFavLink_private(folder); -} - QString Utility::octetsToString(qint64 octets) { #define THE_FACTOR 1024 @@ -264,11 +259,6 @@ return in.toHtmlEscaped(); } -int Utility::rand() -{ - return QRandomGenerator::global()->bounded(0, RAND_MAX); -} - void Utility::sleep(int sec) { QThread::sleep(sec); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility.h 2022-01-03 12:25:12.000000000 +0000 @@ -50,12 +50,10 @@ * @{ */ namespace Utility { - OCSYNC_EXPORT int rand(); 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 void removeFavLink(const QString &folder); OCSYNC_EXPORT bool writeRandomFile(const QString &fname, int size = -1); OCSYNC_EXPORT QString octetsToString(qint64 octets); OCSYNC_EXPORT QByteArray userAgentString(); @@ -242,11 +240,6 @@ */ OCSYNC_EXPORT bool isPathWindowsDrivePartitionRoot(const QString &path); - /** - * @brief Retrieves current logged-in user name from the OS - */ - OCSYNC_EXPORT QString getCurrentUserName(); - #ifdef Q_OS_WIN OCSYNC_EXPORT bool registryKeyExists(HKEY hRootKey, const QString &subKey); OCSYNC_EXPORT QVariant registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_mac.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_mac.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_mac.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_mac.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -41,11 +41,6 @@ CFRelease(urlRef); } -static void removeFavLink_private(const QString &folder) -{ - Q_UNUSED(folder) -} - bool hasLaunchOnStartup_private(const QString &) { // this is quite some duplicate code with setLaunchOnStartup, at some point we should fix this FIXME. @@ -136,9 +131,4 @@ return returnValue; } -QString Utility::getCurrentUserName() -{ - return {}; -} - } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_unix.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_unix.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_unix.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_unix.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -37,11 +37,6 @@ } } -static void removeFavLink_private(const QString &folder) -{ - Q_UNUSED(folder) -} - // returns the autostart directory the linux way // and respects the XDG_CONFIG_HOME env variable QString getUserAutostartDir_private() @@ -85,17 +80,17 @@ QTextStream ts(&iniFile); ts.setCodec("UTF-8"); - ts << QLatin1String("[Desktop Entry]\n") - << QLatin1String("Name=") << guiName << QLatin1Char('\n') - << QLatin1String("GenericName=") << QLatin1String("File Synchronizer\n") - << QLatin1String("Exec=\"") << executablePath << "\" --background\n" - << QLatin1String("Terminal=") << "false\n" - << QLatin1String("Icon=") << APPLICATION_ICON_NAME << QLatin1Char('\n') - << QLatin1String("Categories=") << QLatin1String("Network\n") - << QLatin1String("Type=") << QLatin1String("Application\n") - << QLatin1String("StartupNotify=") << "false\n" - << QLatin1String("X-GNOME-Autostart-enabled=") << "true\n" - << QLatin1String("X-GNOME-Autostart-Delay=10") << Qt::endl; + ts << QLatin1String("[Desktop Entry]") << endl + << QLatin1String("Name=") << guiName << endl + << QLatin1String("GenericName=") << QLatin1String("File Synchronizer") << endl + << QLatin1String("Exec=\"") << executablePath << "\" --background" << endl + << QLatin1String("Terminal=") << "false" << endl + << QLatin1String("Icon=") << APPLICATION_ICON_NAME << endl + << QLatin1String("Categories=") << QLatin1String("Network") << endl + << QLatin1String("Type=") << QLatin1String("Application") << endl + << QLatin1String("StartupNotify=") << "false" << endl + << QLatin1String("X-GNOME-Autostart-enabled=") << "true" << endl + << QLatin1String("X-GNOME-Autostart-Delay=10") << endl; } else { if (!QFile::remove(desktopFileLocation)) { qCWarning(lcUtility) << "Could not remove autostart desktop file"; @@ -108,9 +103,4 @@ return true; } -QString Utility::getCurrentUserName() -{ - return {}; -} - } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_win.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_win.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/utility_win.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/utility_win.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -18,10 +18,8 @@ #include "asserts.h" #include "utility.h" -#include "gui/configgui.h" #include -#include #include #include #include @@ -49,14 +47,7 @@ desktopIni.open(QFile::WriteOnly); desktopIni.write("[.ShellClassInfo]\r\nIconResource="); desktopIni.write(QDir::toNativeSeparators(qApp->applicationFilePath()).toUtf8()); -#ifdef APPLICATION_FOLDER_ICON_INDEX - const auto iconIndex = APPLICATION_FOLDER_ICON_INDEX; -#else - const auto iconIndex = "0"; -#endif - desktopIni.write(","); - desktopIni.write(iconIndex); - desktopIni.write("\r\n"); + desktopIni.write(",0\r\n"); desktopIni.close(); // Set the folder as system and Desktop.ini as hidden+system for explorer to pick it. @@ -83,40 +74,6 @@ qCWarning(lcUtility) << "linking" << folder << "to" << linkName << "failed!"; } -static void removeFavLink_private(const QString &folder) -{ - const QDir folderDir(folder); - - // #1 Remove the Desktop.ini to reset the folder icon - if (!QFile::remove(folderDir.absoluteFilePath(QLatin1String("Desktop.ini")))) { - qCWarning(lcUtility) << "Remove Desktop.ini from" << folder - << " has failed. Make sure it exists and is not locked by another process."; - } - - // #2 Remove the system file attribute - const auto folderAttrs = GetFileAttributesW(folder.toStdWString().c_str()); - if (!SetFileAttributesW(folder.toStdWString().c_str(), folderAttrs & ~FILE_ATTRIBUTE_SYSTEM)) { - qCWarning(lcUtility) << "Remove system file attribute failed for:" << folder; - } - - // #3 Remove the link to this folder - PWSTR path; - if (!SHGetKnownFolderPath(FOLDERID_Links, 0, nullptr, &path) == S_OK) { - qCWarning(lcUtility) << "SHGetKnownFolderPath for " << folder << "has failed."; - return; - } - - const QDir links(QString::fromWCharArray(path)); - CoTaskMemFree(path); - - const auto linkName = QDir(links).absoluteFilePath(folderDir.dirName() + QLatin1String(".lnk")); - - qCInfo(lcUtility) << "Removing favorite link from" << folder << "to" << linkName; - if (!QFile::remove(linkName)) { - qCWarning(lcUtility) << "Removing a favorite link from" << folder << "to" << linkName << "failed."; - } -} - bool hasSystemLaunchOnStartup_private(const QString &appName) { QString runPath = QLatin1String(systemRunPathC); @@ -389,17 +346,6 @@ return QStringLiteral("WindowsError: %1: %2").arg(QString::number(errorCode, 16), QString::fromWCharArray(_com_error(errorCode).ErrorMessage())); } -QString Utility::getCurrentUserName() -{ - TCHAR username[UNLEN + 1] = {0}; - DWORD len = sizeof(username) / sizeof(TCHAR); - - if (!GetUserName(username, &len)) { - qCWarning(lcUtility) << "Could not retrieve Windows user name." << formatWinError(GetLastError()); - } - - return QString::fromWCharArray(username); -} Utility::NtfsPermissionLookupRAII::NtfsPermissionLookupRAII() { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/vfs.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/vfs.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/vfs.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/vfs.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -16,7 +16,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "config.h" #include "vfs.h" #include "plugin.h" #include "version.h" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/vfs.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/vfs.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/common/vfs.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/common/vfs.h 2022-01-03 12:25:12.000000000 +0000 @@ -126,7 +126,7 @@ public: explicit Vfs(QObject* parent = nullptr); - ~Vfs() override; + virtual ~Vfs(); virtual Mode mode() const = 0; @@ -291,7 +291,7 @@ public: VfsOff(QObject* parent = nullptr); - ~VfsOff() override; + virtual ~VfsOff(); Mode mode() const override { return Vfs::Off; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/crashreporter/main.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/crashreporter/main.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/crashreporter/main.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/crashreporter/main.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -18,9 +18,7 @@ #include #include -#include #include -#include int main(int argc, char *argv[]) { @@ -54,14 +52,6 @@ reporter.setWindowTitle(CRASHREPORTER_PRODUCT_NAME); reporter.setText("

Sorry! " CRASHREPORTER_PRODUCT_NAME " crashed. Please tell us about it! " CRASHREPORTER_PRODUCT_NAME " has created an error report for you that can help improve the stability in the future. You can now send this report directly to the " CRASHREPORTER_PRODUCT_NAME " developers.

"); - const QFileInfo crashLog(QDir::tempPath() + QStringLiteral("/" CRASHREPORTER_PRODUCT_NAME "-crash.log")); - if (crashLog.exists()) { - QFile inFile(crashLog.filePath()); - if (inFile.open(QFile::ReadOnly)) { - reporter.setComment(inFile.readAll()); - } - } - reporter.setReportData("BuildID", CRASHREPORTER_BUILD_ID); reporter.setReportData("ProductName", CRASHREPORTER_PRODUCT_NAME); reporter.setReportData("Version", CRASHREPORTER_VERSION_STRING); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -58,11 +58,10 @@ configure_file(csync_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/csync_version.h) -add_library(nextcloud_csync SHARED ${common_SOURCES} ${csync_SRCS}) -add_library(Nextcloud::csync ALIAS nextcloud_csync) +add_library("${csync_NAME}" SHARED ${common_SOURCES} ${csync_SRCS}) target_include_directories( - nextcloud_csync + "${csync_NAME}" PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/std ) @@ -70,26 +69,26 @@ message(STATUS "Using own sqlite3 version") add_library(sqlite3 STATIC "${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3/sqlite3.c") target_include_directories(sqlite3 PUBLIC "${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3") - target_link_libraries(nextcloud_csync PUBLIC sqlite3) + target_link_libraries("${csync_NAME}" PUBLIC sqlite3) else() - target_include_directories(nextcloud_csync PUBLIC ${SQLITE3_INCLUDE_DIR}) - target_link_libraries(nextcloud_csync PUBLIC ${SQLITE3_LIBRARIES}) + target_include_directories("${csync_NAME}" PUBLIC ${SQLITE3_INCLUDE_DIR}) + target_link_libraries("${csync_NAME}" PUBLIC ${SQLITE3_LIBRARIES}) endif() -generate_export_header(nextcloud_csync +generate_export_header("${csync_NAME}" EXPORT_MACRO_NAME OCSYNC_EXPORT EXPORT_FILE_NAME ocsynclib.h ) -target_link_libraries(nextcloud_csync +target_link_libraries("${csync_NAME}" PUBLIC ${CSYNC_REQUIRED_LIBRARIES} Qt5::Core Qt5::Concurrent ) if(ZLIB_FOUND) - target_link_libraries(nextcloud_csync PUBLIC ZLIB::ZLIB) + target_link_libraries("${csync_NAME}" PUBLIC ZLIB::ZLIB) endif(ZLIB_FOUND) @@ -97,11 +96,11 @@ if (APPLE) find_library(FOUNDATION_LIBRARY NAMES Foundation) find_library(CORESERVICES_LIBRARY NAMES CoreServices) - target_link_libraries(nextcloud_csync PUBLIC ${FOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY}) + target_link_libraries("${csync_NAME}" PUBLIC ${FOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY}) endif() set_target_properties( - nextcloud_csync + "${csync_NAME}" PROPERTIES VERSION ${LIBRARY_VERSION} @@ -109,15 +108,11 @@ ${LIBRARY_SOVERSION} RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} - LIBRARY_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}_csync - RUNTIME_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}_csync ) if(BUILD_OWNCLOUD_OSX_BUNDLE) INSTALL( TARGETS - nextcloud_csync + "${csync_NAME}" LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION @@ -128,7 +123,7 @@ else() INSTALL( TARGETS - nextcloud_csync + "${csync_NAME}" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/ConfigureChecks.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/ConfigureChecks.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/ConfigureChecks.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/ConfigureChecks.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -7,6 +7,7 @@ set(PACKAGE ${APPLICATION_NAME}) set(VERSION ${APPLICATION_VERSION}) +set(DATADIR ${DATA_INSTALL_DIR}) set(LIBDIR ${LIB_INSTALL_DIR}) set(SYSCONFDIR ${SYSCONF_INSTALL_DIR}) @@ -22,12 +23,6 @@ check_library_exists(rt nanosleep "" HAVE_LIBRT) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ) - - # Systems not using glibc require linker flag for argp - check_library_exists(argp argp_parse "" HAVE_LIBARGP) - if(HAVE_ARGP_H AND HAVE_LIBARGP) - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} argp) - endif() endif (NOT LINUX) if(WIN32) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/csync_exclude.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/csync_exclude.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/csync_exclude.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/csync_exclude.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -19,7 +19,6 @@ */ #include "config_csync.h" -#include #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -35,8 +34,10 @@ #include #include +#include #include + /** Expands C-like escape sequences (in place) */ OCSYNC_EXPORT void csync_exclude_expand_escapes(QByteArray &input) @@ -198,13 +199,13 @@ } #endif - /* Do not sync desktop.ini files anywhere in the tree. */ - const auto desktopIniFile = QStringLiteral("desktop.ini"); - if (blen == static_cast(desktopIniFile.length()) && bname.compare(desktopIniFile, Qt::CaseInsensitive) == 0) { - return CSYNC_FILE_SILENTLY_EXCLUDED; + /* We create a Desktop.ini on Windows for the sidebar icon, make sure we don't sync it. */ + if (blen == 11 && path == bname) { + if (bname.compare(QLatin1String("Desktop.ini"), Qt::CaseInsensitive) == 0) { + return CSYNC_FILE_SILENTLY_EXCLUDED; + } } - if (excludeConflictFiles && OCC::Utility::isConflictFile(path)) { return CSYNC_FILE_EXCLUDE_CONFLICT; } @@ -230,21 +231,24 @@ // We're in a detached exclude probably coming from a partial sync or test if (_localPath.isEmpty()) return; + + // Load exclude file from base dir + QFileInfo fi(_localPath + QStringLiteral(".sync-exclude.lst")); + if (fi.isReadable()) + addInTreeExcludeFilePath(fi.absoluteFilePath()); } ExcludedFiles::~ExcludedFiles() = default; void ExcludedFiles::addExcludeFilePath(const QString &path) { - const QFileInfo excludeFileInfo(path); - const auto fileName = excludeFileInfo.fileName(); - const auto basePath = fileName.compare(QStringLiteral("sync-exclude.lst"), Qt::CaseInsensitive) == 0 - ? _localPath - : leftIncludeLast(path, QLatin1Char('/')); - auto &excludeFilesLocalPath = _excludeFiles[basePath]; - if (std::find(excludeFilesLocalPath.cbegin(), excludeFilesLocalPath.cend(), path) == excludeFilesLocalPath.cend()) { - excludeFilesLocalPath.append(path); - } + _excludeFiles[_localPath].append(path); +} + +void ExcludedFiles::addInTreeExcludeFilePath(const QString &path) +{ + BasePathString basePath = leftIncludeLast(path, QLatin1Char('/')); + _excludeFiles[basePath].append(path); } void ExcludedFiles::setExcludeConflictFiles(bool onoff) @@ -284,26 +288,32 @@ _clientVersion = version; } -void ExcludedFiles::loadExcludeFilePatterns(const QString &basePath, QFile &file) +bool ExcludedFiles::loadExcludeFile(const QString &basePath, const QString & file) { + QFile f(file); + if (!f.open(QIODevice::ReadOnly)) + return false; + QStringList patterns; - while (!file.atEnd()) { - QByteArray line = file.readLine().trimmed(); + while (!f.atEnd()) { + QByteArray line = f.readLine().trimmed(); if (line.startsWith("#!version")) { if (!versionDirectiveKeepNextLine(line)) - file.readLine(); + f.readLine(); } if (line.isEmpty() || line.startsWith('#')) continue; csync_exclude_expand_escapes(line); patterns.append(QString::fromUtf8(line)); } - _allExcludes[basePath].append(patterns); + _allExcludes.insert(basePath, patterns); // nothing to prepare if the user decided to not exclude anything if (!_allExcludes.value(basePath).isEmpty()){ prepare(basePath); } + + return true; } bool ExcludedFiles::reloadExcludeFiles() @@ -320,14 +330,8 @@ bool success = true; const auto keys = _excludeFiles.keys(); for (const auto& basePath : keys) { - for (const auto &excludeFile : _excludeFiles.value(basePath)) { - QFile file(excludeFile); - if (file.exists() && file.open(QIODevice::ReadOnly)) { - loadExcludeFilePatterns(basePath, file); - } else { - success = false; - qWarning() << "System exclude list file could not be opened:" << excludeFile; - } + for (const auto& file : _excludeFiles.value(basePath)) { + success = loadExcludeFile(basePath, file); } } @@ -418,14 +422,11 @@ // Directories are guaranteed to be visited before their files if (filetype == ItemTypeDirectory) { const auto basePath = QString(_localPath + path + QLatin1Char('/')); - const QString absolutePath = basePath + QStringLiteral(".sync-exclude.lst"); - QFileInfo excludeFileInfo(absolutePath); + const auto fi = QFileInfo(basePath + QStringLiteral(".sync-exclude.lst")); - if (excludeFileInfo.isReadable()) { - addExcludeFilePath(absolutePath); - reloadExcludeFiles(); - } else { - qWarning() << "System exclude list file could not be read:" << absolutePath; + if (fi.isReadable()) { + addInTreeExcludeFilePath(fi.absoluteFilePath()); + loadExcludeFile(basePath, fi.absoluteFilePath()); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/csync_exclude.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/csync_exclude.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/csync_exclude.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/csync_exclude.h 2022-01-03 12:25:12.000000000 +0000 @@ -48,7 +48,6 @@ }; class ExcludedFilesTest; -class QFile; /** * Manages file/directory exclusion. @@ -70,7 +69,7 @@ using Version = std::tuple; explicit ExcludedFiles(const QString &localPath = QStringLiteral("/")); - ~ExcludedFiles() override; + ~ExcludedFiles(); /** * Adds a new path to a file containing exclude patterns. @@ -78,6 +77,7 @@ * Does not load the file. Use reloadExcludeFiles() afterwards. */ void addExcludeFilePath(const QString &path); + void addInTreeExcludeFilePath(const QString &path); /** * Whether conflict files shall be excluded. @@ -148,7 +148,7 @@ /** * Loads the exclude patterns from file the registered base paths. */ - void loadExcludeFilePatterns(const QString &basePath, QFile &file); + bool loadExcludeFile(const QString &basePath, const QString &file); private: /** diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/vio/csync_vio_local_unix.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/vio/csync_vio_local_unix.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/vio/csync_vio_local_unix.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/vio/csync_vio_local_unix.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -124,8 +124,7 @@ if (vfs) { // Directly modifies file_stat->type. // We can ignore the return value since we're done here anyway. - const auto result = vfs->statTypeVirtualFile(file_stat.get(), &handle->path); - Q_UNUSED(result) + vfs->statTypeVirtualFile(file_stat.get(), &handle->path); } return file_stat; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/vio/csync_vio_local_win.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/vio/csync_vio_local_win.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/csync/vio/csync_vio_local_win.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/csync/vio/csync_vio_local_win.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -34,7 +34,6 @@ #include "csync.h" #include "vio/csync_vio_local.h" #include "common/filesystembase.h" -#include "common/utility.h" #include @@ -53,6 +52,8 @@ QString path; // Always ends with '\' }; +static int _csync_vio_local_stat_mb(const QString &path, csync_file_stat_t *buf); + csync_vio_handle_t *csync_vio_local_opendir(const QString &name) { QScopedPointer handle(new csync_vio_handle_t{}); @@ -174,9 +175,12 @@ file_stat->size = (handle->ffd.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + handle->ffd.nFileSizeLow; file_stat->modtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem); - // path always ends with '\', by construction + QString fullPath; + fullPath.reserve(handle->path.size() + std::wcslen(handle->ffd.cFileName)); + fullPath += handle->path; // path always ends with '\', by construction + fullPath += QString::fromWCharArray(handle->ffd.cFileName); - if (csync_vio_local_stat(handle->path + QString::fromWCharArray(handle->ffd.cFileName), file_stat.get()) < 0) { + if (_csync_vio_local_stat_mb(fullPath, file_stat.get()) < 0) { // Will get excluded by _csync_detect_update. file_stat->type = ItemTypeSkip; } @@ -184,8 +188,15 @@ return file_stat; } + int csync_vio_local_stat(const QString &uri, csync_file_stat_t *buf) { + int rc = _csync_vio_local_stat_mb(uri, buf); + return rc; +} + +static int _csync_vio_local_stat_mb(const QString &path, 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) @@ -195,19 +206,21 @@ BY_HANDLE_FILE_INFORMATION fileInfo; ULARGE_INTEGER FileIndex; - h = CreateFileW(reinterpret_cast(OCC::FileSystem::longWinPath(uri).utf16()), 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); + const auto longPath = OCC::FileSystem::longWinPath(path); + + h = CreateFileW(longPath.toStdWString().data(), 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, + nullptr, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, + nullptr ); if( h == INVALID_HANDLE_VALUE ) { + qCCritical(lcCSyncVIOLocal) << "CreateFileW failed on" << longPath; errno = GetLastError(); - qCCritical(lcCSyncVIOLocal) << "CreateFileW failed on" << uri << OCC::Utility::formatWinError(errno); return -1; } if(!GetFileInformationByHandle( h, &fileInfo ) ) { + qCCritical(lcCSyncVIOLocal) << "GetFileInformationByHandle failed on" << longPath; errno = GetLastError(); - qCCritical(lcCSyncVIOLocal) << "GetFileInformationByHandle failed on" << uri << OCC::Utility::formatWinError(errno); CloseHandle(h); return -1; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountmanager.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountmanager.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountmanager.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountmanager.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -380,8 +380,6 @@ // Forget E2E keys account->account()->e2e()->forgetSensitiveData(account->account()); - account->account()->deleteAppToken(); - emit accountSyncConnectionRemoved(account); emit accountRemoved(account); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountmanager.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountmanager.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountmanager.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountmanager.h 2022-01-03 12:25:12.000000000 +0000 @@ -28,7 +28,7 @@ Q_OBJECT public: static AccountManager *instance(); - ~AccountManager() override = default; + ~AccountManager() = default; /** * Saves the accounts to a given settings file diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountsettings.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountsettings.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountsettings.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountsettings.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -86,11 +86,11 @@ const auto messageBox = new QMessageBox; messageBox->setAttribute(Qt::WA_DeleteOnClose); messageBox->setText(AccountSettings::tr("End-to-End Encryption with Virtual Files")); - messageBox->setInformativeText(AccountSettings::tr("You seem to have the Virtual Files feature enabled on this folder. " - "At the moment, it is not possible to implicitly download virtual files that are " - "End-to-End encrypted. To get the best experience with Virtual Files and " - "End-to-End Encryption, make sure the encrypted folder is marked with " - "\"Make always available locally\".")); + messageBox->setInformativeText(AccountSettings::tr("You seem to have the Virtual Files feature enabled on this folder. At " + " the moment, it is not possible to implicitly download virtual files that are " + "End-to-End encrypted. To get the best experience with Virtual Files and" + " End-to-End Encryption, make sure the encrypted folder is marked with" + " \"Make always available locally\".")); messageBox->setIcon(QMessageBox::Warning); const auto dontEncryptButton = messageBox->addButton(QMessageBox::StandardButton::Cancel); Q_ASSERT(dontEncryptButton); @@ -587,14 +587,12 @@ ac = availabilityMenu->addAction(Utility::vfsPinActionText()); connect(ac, &QAction::triggered, this, [this]() { slotSetCurrentFolderAvailability(PinState::AlwaysLocal); }); - ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder()); ac = availabilityMenu->addAction(Utility::vfsFreeSpaceActionText()); connect(ac, &QAction::triggered, this, [this]() { slotSetCurrentFolderAvailability(PinState::OnlineOnly); }); ac = menu->addAction(tr("Disable virtual file support …")); connect(ac, &QAction::triggered, this, &AccountSettings::slotDisableVfsCurrentFolder); - ac->setDisabled(Theme::instance()->enforceVirtualFilesSyncFolder()); } if (Theme::instance()->showVirtualFilesOption() @@ -762,7 +760,6 @@ messageBox->addButton(tr("Cancel"), QMessageBox::NoRole); connect(messageBox, &QMessageBox::finished, this, [messageBox, yesButton, folder, row, this]{ if (messageBox->clickedButton() == yesButton) { - Utility::removeFavLink(folder->path()); FolderMan::instance()->removeFolder(folder); _model->removeRow(row); @@ -829,9 +826,7 @@ folder->setRootPinState(PinState::Unspecified); for (const auto &entry : oldBlacklist) { folder->journalDb()->schedulePathForRemoteDiscovery(entry); - if (!folder->vfs().setPinState(entry, PinState::OnlineOnly)) { - qCWarning(lcAccountSettings) << "Could not set pin state of" << entry << "to online only"; - } + folder->vfs().setPinState(entry, PinState::OnlineOnly); } folder->slotNextSyncFullLocalDiscovery(); @@ -937,9 +932,7 @@ Q_ASSERT(!path.endsWith('/')); // Update the pin state on all items - if (!folder->vfs().setPinState(path, state)) { - qCWarning(lcAccountSettings) << "Could not set pin state of" << path << "to" << state; - } + folder->vfs().setPinState(path, state); // Trigger sync folder->schedulePathForLocalDiscovery(path); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountsettings.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountsettings.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountsettings.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountsettings.h 2022-01-03 12:25:12.000000000 +0000 @@ -55,7 +55,7 @@ public: explicit AccountSettings(AccountState *accountState, QWidget *parent = nullptr); - ~AccountSettings() override; + ~AccountSettings(); QSize sizeHint() const override { return ownCloudGui::settingsDialogSize(); } bool canEncryptOrDecrypt(const FolderStatusModel::SubFolderInfo* folderInfo); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountstate.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountstate.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountstate.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountstate.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -44,6 +44,7 @@ , _waitingForNewCredentials(false) , _maintenanceToConnectedDelay(60000 + (qrand() % (4 * 60000))) // 1-5min delay , _remoteWipe(new RemoteWipe(_account)) + , _userStatus(new UserStatus(this)) , _isDesktopNotificationsAllowed(true) { qRegisterMetaType("AccountState*"); @@ -126,6 +127,26 @@ emit stateChanged(_state); } +UserStatus::Status AccountState::status() const +{ + return _userStatus->status(); +} + +QString AccountState::statusMessage() const +{ + return _userStatus->message(); +} + +QUrl AccountState::statusIcon() const +{ + return _userStatus->icon(); +} + +QString AccountState::statusEmoji() const +{ + return _userStatus->emoji(); +} + QString AccountState::stateString(State state) { switch (state) { @@ -441,6 +462,12 @@ job->getNavigationApps(); } +void AccountState::fetchUserStatus() +{ + connect(_userStatus, &UserStatus::fetchUserStatusFinished, this, &AccountState::statusChanged); + _userStatus->fetchUserStatus(_account); +} + void AccountState::slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode){ if(statusCode == 200){ qCDebug(lcAccountState) << "New navigation apps ETag Response Header received " << value; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountstate.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountstate.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/accountstate.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/accountstate.h 2022-01-03 12:25:12.000000000 +0000 @@ -21,7 +21,7 @@ #include #include "connectionvalidator.h" #include "creds/abstractcredentials.h" - +#include "userstatus.h" #include class QSettings; @@ -82,7 +82,7 @@ /// Use the account as parent explicit AccountState(AccountPtr account); - ~AccountState() override; + ~AccountState(); /** Creates an account state from settings and an Account object. * @@ -162,6 +162,23 @@ ///Asks for user credentials void handleInvalidCredentials(); + /** Returns the user status (Online, Dnd, Away, Offline, Invisible) + * https://gist.github.com/georgehrke/55a0412007f13be1551d1f9436a39675 + */ + UserStatus::Status status() const; + + /** Returns the user status Message (text) + */ + QString statusMessage() const; + + /** Returns the user status icon url + */ + QUrl statusIcon() const; + + /** Returns the user status emoji + */ + QString statusEmoji() const; + /** Returns the notifications status retrieved by the notificatons endpoint * https://github.com/nextcloud/desktop/issues/2318#issuecomment-680698429 */ @@ -171,6 +188,10 @@ */ void setDesktopNotificationsAllowed(bool isAllowed); + /** Fetch the user status (status, icon, message) + */ + void fetchUserStatus(); + public slots: /// Triggers a ping to the server to update state and /// connection status and errors. @@ -235,6 +256,7 @@ */ AccountAppList _apps; + UserStatus *_userStatus; bool _isDesktopNotificationsAllowed; }; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/addcertificatedialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/addcertificatedialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/addcertificatedialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/addcertificatedialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -35,7 +35,7 @@ public: explicit AddCertificateDialog(QWidget *parent = nullptr); - ~AddCertificateDialog() override; + ~AddCertificateDialog(); QString getCertificatePath(); QString getCertificatePasswd(); void showErrorMessage(const QString message); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/application.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/application.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/application.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/application.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -27,14 +27,13 @@ #include "folderman.h" #include "logger.h" #include "configfile.h" -#include "socketapi/socketapi.h" +#include "socketapi.h" #include "sslerrordialog.h" #include "theme.h" #include "clientproxy.h" #include "sharedialog.h" #include "accountmanager.h" #include "creds/abstractcredentials.h" -#include "pushnotifications.h" #if defined(BUILD_UPDATER) #include "updater/ocupdater.h" @@ -179,7 +178,7 @@ , _showLogWindow(false) , _logExpire(0) , _logFlush(false) - , _logDebug(true) + , _logDebug(false) , _userTriggeredConnect(false) , _debugMode(false) , _backgroundMode(false) @@ -350,9 +349,6 @@ connect(FolderMan::instance()->socketApi(), &SocketApi::shareCommandReceived, _gui.data(), &ownCloudGui::slotShowShareDialog); - connect(FolderMan::instance()->socketApi(), &SocketApi::fileActivityCommandReceived, - Systray::instance(), &Systray::showFileActivityDialog); - // startup procedure. connect(&_checkConnectionTimer, &QTimer::timeout, this, &Application::slotCheckConnection); _checkConnectionTimer.setInterval(ConnectionValidator::DefaultCallingIntervalMsec); // check for connection every 32 seconds. @@ -460,10 +456,9 @@ // Don't check if we're manually signed out or // when the error is permanent. - const auto pushNotifications = accountState->account()->pushNotifications(); - const auto pushNotificationsAvailable = (pushNotifications && pushNotifications->isReady()); - if (state != AccountState::SignedOut && state != AccountState::ConfigurationError - && state != AccountState::AskingCredentials && !pushNotificationsAvailable) { + if (state != AccountState::SignedOut + && state != AccountState::ConfigurationError + && state != AccountState::AskingCredentials) { accountState->checkConnectivity(); } } @@ -483,6 +478,7 @@ void Application::slotownCloudWizardDone(int res) { + AccountManager *accountMan = AccountManager::instance(); FolderMan *folderMan = FolderMan::instance(); // During the wizard, scheduling of new syncs is disabled @@ -495,7 +491,7 @@ // If one account is configured: enable autostart #ifndef QT_DEBUG - bool shouldSetAutoStart = AccountManager::instance()->accounts().size() == 1; + bool shouldSetAutoStart = (accountMan->accounts().size() == 1); #else bool shouldSetAutoStart = false; #endif @@ -529,12 +525,7 @@ logger->enterNextLogFile(); - qCInfo(lcApplication) << "##################" << _theme->appName() - << "locale:" << QLocale::system().name() - << "ui_lang:" << property("ui_lang") - << "version:" << _theme->version() - << "os:" << Utility::platformName(); - qCInfo(lcApplication) << "Arguments:" << qApp->arguments(); + qCInfo(lcApplication) << QString::fromLatin1("################## %1 locale:[%2] ui_lang:[%3] version:[%4] os:[%5]").arg(_theme->appName()).arg(QLocale::system().name()).arg(property("ui_lang").toString()).arg(_theme->version()).arg(Utility::platformName()); } void Application::slotUseMonoIconsChanged(bool) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/application.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/application.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/application.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/application.h 2022-01-03 12:25:12.000000000 +0000 @@ -57,7 +57,7 @@ Q_OBJECT public: explicit Application(int &argc, char **argv); - ~Application() override; + ~Application(); bool giveHelp(); void showHelp(); @@ -88,7 +88,7 @@ void parseOptions(const QStringList &); void setupTranslations(); void setupLogging(); - bool event(QEvent *event) override; + bool event(QEvent *event); signals: void folderRemoved(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/authenticationdialog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/authenticationdialog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/authenticationdialog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/authenticationdialog.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -29,7 +29,7 @@ { setWindowTitle(tr("Authentication Required")); auto *lay = new QVBoxLayout(this); - auto *label = new QLabel(tr("Enter username and password for \"%1\" at %2.").arg(realm, domain)); + auto *label = new QLabel(tr("Enter username and password for '%1' at %2.").arg(realm, domain)); label->setTextFormat(Qt::PlainText); lay->addWidget(label); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/cloudproviders/cloudproviderwrapper.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/cloudproviders/cloudproviderwrapper.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/cloudproviders/cloudproviderwrapper.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/cloudproviders/cloudproviderwrapper.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -119,7 +119,7 @@ // Build status details text QString msg; if (!progress._currentDiscoveredRemoteFolder.isEmpty()) { - msg = tr("Checking for changes in \"%1\"").arg(progress._currentDiscoveredRemoteFolder); + msg = tr("Checking for changes in '%1'").arg(progress._currentDiscoveredRemoteFolder); } else if (progress.totalSize() == 0) { qint64 currentFile = progress.currentFile(); qint64 totalFileCount = qMax(progress.totalFiles(), currentFile); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/cloudproviders/cloudproviderwrapper.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/cloudproviders/cloudproviderwrapper.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/cloudproviders/cloudproviderwrapper.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/cloudproviders/cloudproviderwrapper.h 2022-01-03 12:25:12.000000000 +0000 @@ -39,7 +39,7 @@ Q_OBJECT public: explicit CloudProviderWrapper(QObject *parent = nullptr, Folder *folder = nullptr, int folderId = 0, CloudProvidersProviderExporter* cloudprovider = nullptr); - ~CloudProviderWrapper() override; + ~CloudProviderWrapper(); CloudProvidersAccountExporter* accountExporter(); Folder* folder(); GMenuModel* getMenuModel(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,8 +1,5 @@ project(gui) -find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2 Xml Network) -if (NOT TARGET Qt5::GuiPrivate) - message(FATAL_ERROR "Could not find GuiPrivate component of Qt5. It might be shipped as a separate package, please check that.") -endif() +find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2) if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) @@ -21,7 +18,6 @@ set(client_UI_SRCS accountsettings.ui conflictdialog.ui - invalidfilenamedialog.ui foldercreationdialog.ui folderwizardsourcepage.ui folderwizardtargetpage.ui @@ -39,27 +35,17 @@ addcertificatedialog.ui proxyauthdialog.ui mnemonicdialog.ui - UserStatusSelector.qml - UserStatusSelectorDialog.qml tray/ActivityActionButton.qml tray/ActivityItem.qml - tray/ActivityList.qml tray/Window.qml tray/UserLine.qml - tray/UnifiedSearchInputContainer.qml - tray/UnifiedSearchResultFetchMoreTrigger.qml - tray/UnifiedSearchResultItem.qml - tray/UnifiedSearchResultItemSkeleton.qml - tray/UnifiedSearchResultItemSkeletonContainer.qml - tray/UnifiedSearchResultListItem.qml - tray/UnifiedSearchResultNothingFound.qml - tray/UnifiedSearchResultSectionItem.qml wizard/flow2authwidget.ui wizard/owncloudadvancedsetuppage.ui wizard/owncloudconnectionmethoddialog.ui wizard/owncloudhttpcredspage.ui wizard/owncloudoauthcredspage.ui wizard/owncloudsetupnocredspage.ui + wizard/owncloudwizardresultpage.ui wizard/webview.ui wizard/welcomepage.ui ) @@ -68,7 +54,6 @@ accountmanager.cpp accountsettings.cpp application.cpp - invalidfilenamedialog.cpp conflictdialog.cpp conflictsolver.cpp connectionvalidator.cpp @@ -101,14 +86,15 @@ sharelinkwidget.cpp sharemanager.cpp shareusergroupwidget.cpp - profilepagewidget.cpp sharee.cpp + socketapi.cpp sslbutton.cpp sslerrordialog.cpp syncrunfilelog.cpp systray.cpp thumbnailjob.cpp userinfo.cpp + userstatus.cpp accountstate.cpp addcertificatedialog.cpp authenticationdialog.cpp @@ -119,21 +105,13 @@ guiutility.cpp elidedlabel.cpp headerbanner.cpp - iconutils.cpp + iconjob.cpp remotewipe.cpp - userstatusselectormodel.cpp - emojimodel.cpp - fileactivitylistmodel.cpp - tray/svgimageprovider.cpp - tray/syncstatussummary.cpp - tray/activitydata.cpp - tray/activitylistmodel.cpp - tray/unifiedsearchresult.cpp - tray/unifiedsearchresultimageprovider.cpp - tray/unifiedsearchresultslistmodel.cpp - tray/usermodel.cpp - tray/notificationhandler.cpp - tray/notificationcache.cpp + tray/ActivityData.cpp + tray/ActivityListModel.cpp + tray/UserModel.cpp + tray/NotificationHandler.cpp + tray/NotificationCache.cpp creds/credentialsfactory.cpp creds/httpcredentialsgui.cpp creds/oauth.cpp @@ -151,6 +129,7 @@ wizard/owncloudsetuppage.cpp wizard/owncloudwizardcommon.cpp wizard/owncloudwizard.cpp + wizard/owncloudwizardresultpage.cpp wizard/slideshow.cpp wizard/welcomepage.cpp wizard/linklabel.cpp @@ -173,6 +152,7 @@ IF( APPLE ) list(APPEND client_SRCS cocoainitializer_mac.mm) + list(APPEND client_SRCS socketapisocket_mac.mm) list(APPEND client_SRCS systray.mm) if(SPARKLE_FOUND AND BUILD_UPDATER) @@ -206,7 +186,6 @@ ../3rdparty/qtsingleapplication/qtsingleapplication.cpp ../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp ../3rdparty/kmessagewidget/kmessagewidget.cpp - ../3rdparty/kirigami/wheelhandler.cpp ) if(NOT WIN32) @@ -258,39 +237,20 @@ set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) endif() -if(NOT DEFINED APPLICATION_FOLDER_ICON_INDEX) - set(APPLICATION_FOLDER_ICON_INDEX 0) -endif() - # Generate png icons from svg -find_program(SVG_CONVERTER - NAMES inkscape inkscape.exe rsvg-convert +find_program(INKSCAPE + NAMES inkscape inkscape.exe REQUIRED - HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV SVG_CONVERTER_DIR) + HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV INKSCAPE_DIR) # REQUIRED keyword is only supported on CMake 3.18 and above -if (NOT SVG_CONVERTER) - message(FATAL_ERROR "Could not find a suitable svg converter. Set SVG_CONVERTER_DIR to the path of either the inkscape or rsvg-convert executable.") +if (NOT INKSCAPE) + message(FATAL_ERROR "Could not find inkscape. Set INKSCAPE_DIR to the path of executable.") endif() function(generate_sized_png_from_svg icon_path size) - set(options) - set(oneValueArgs OUTPUT_ICON_NAME OUTPUT_ICON_PATH) - set(multiValueArgs) - - cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - get_filename_component(icon_name_dir ${icon_path} DIRECTORY) get_filename_component(icon_name_wle ${icon_path} NAME_WLE) - if (ARG_OUTPUT_ICON_NAME) - set(icon_name_wle ${ARG_OUTPUT_ICON_NAME}) - endif () - - if (ARG_OUTPUT_ICON_PATH) - set(icon_name_dir ${ARG_OUTPUT_ICON_PATH}) - endif () - - if (EXISTS "${icon_name_dir}/${size}-${icon_name_wle}.png") return() endif() @@ -298,16 +258,16 @@ set(icon_output_name "${size}-${icon_name_wle}.png") message(STATUS "Generate ${icon_output_name}") execute_process(COMMAND - "${SVG_CONVERTER}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}" + "${INKSCAPE}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}" WORKING_DIRECTORY "${icon_name_dir}" RESULT_VARIABLE - SVG_CONVERTER_SIDEBAR_ERROR + INKSCAPE_SIDEBAR_ERROR OUTPUT_QUIET ERROR_QUIET) - if (SVG_CONVERTER_SIDEBAR_ERROR) + if (INKSCAPE_SIDEBAR_ERROR) message(FATAL_ERROR - "${SVG_CONVERTER} could not generate icon: ${SVG_CONVERTER_SIDEBAR_ERROR}") + "inkscape could not generate icon: ${INKSCAPE_SIDEBAR_ERROR}") else() endif() endfunction() @@ -336,86 +296,22 @@ endif() set(APP_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg") - -# generate secondary icon if available (currently for Windows only)-------------------------------------- -set(APP_SECONDARY_ICONS "${theme_dir}/colored/icons") -set(APP_ICON_WIN_FOLDER_SVG "${APP_SECONDARY_ICONS}/${APPLICATION_ICON_NAME}-icon-win-folder.svg") - -set(RC_DEPENDENCIES "") - -if(WIN32) - if (EXISTS ${APP_ICON_WIN_FOLDER_SVG}) - get_filename_component(output_icon_name_win ${APP_ICON_WIN_FOLDER_SVG} NAME_WLE) - # Product icon (for smallest size) - foreach(size IN ITEMS 16;20) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") - endforeach() - - # Product icon with Windows folder (for sizes larger than 20) - foreach(size IN ITEMS 24;32;40;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_WIN_FOLDER_SVG} ${size} OUTPUT_ICON_NAME ${output_icon_name_win} OUTPUT_ICON_PATH "${APP_SECONDARY_ICONS}/") - endforeach() - - file(GLOB_RECURSE OWNCLOUD_ICONS_WIN_FOLDER "${APP_SECONDARY_ICONS}/*-${APPLICATION_ICON_NAME}-icon*") - set(APP_ICON_WIN_FOLDER_ICO_NAME "${APPLICATION_ICON_NAME}-win-folder") - set(RC_DEPENDENCIES "${RC_DEPENDENCIES} ${APP_ICON_WIN_FOLDER_ICO_NAME}.ico") - ecm_add_app_icon(APP_ICON_WIN_FOLDER ICONS "${OWNCLOUD_ICONS_WIN_FOLDER}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APP_ICON_WIN_FOLDER_ICO_NAME}" ICON_INDEX 2) - endif() -endif() -# -------------------------------------- - -if (NOT ${RC_DEPENDENCIES} STREQUAL "") - string(STRIP ${RC_DEPENDENCIES} RC_DEPENDENCIES) -endif() - -# generate primary icon from SVG (due to Win .ico vs .rc dependency issues, primary icon must always be generated last)-------------------------------------- -if(WIN32) - foreach(size IN ITEMS 16;20;24;32;40;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) - endforeach() -else() - foreach(size IN ITEMS 16;24;32;48;64;128;256;512;1024) - generate_sized_png_from_svg(${APP_ICON_SVG} ${size}) - endforeach() -endif() +generate_sized_png_from_svg(${APP_ICON_SVG} 16) +generate_sized_png_from_svg(${APP_ICON_SVG} 24) +generate_sized_png_from_svg(${APP_ICON_SVG} 32) +generate_sized_png_from_svg(${APP_ICON_SVG} 48) +generate_sized_png_from_svg(${APP_ICON_SVG} 64) +generate_sized_png_from_svg(${APP_ICON_SVG} 128) +generate_sized_png_from_svg(${APP_ICON_SVG} 256) +generate_sized_png_from_svg(${APP_ICON_SVG} 512) +generate_sized_png_from_svg(${APP_ICON_SVG} 1024) file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*") - if(APPLE) file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*") MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}") endif() - -ecm_add_app_icon(APP_ICON RC_DEPENDENCIES ${RC_DEPENDENCIES} ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}" ICON_INDEX 1) -# -------------------------------------- - -if(WIN32) -# merge *.rc.in files for Windows (multiple ICON resources must be placed in a single file, otherwise, this won't work de to a bug in Windows compiler https://developercommunity.visualstudio.com/t/visual-studio-2017-prof-1557-cvt1100-duplicate-res/363156) - function(merge_files IN_FILE OUT_FILE) - file(READ ${IN_FILE} CONTENTS) - message("Merging ${IN_FILE} into ${OUT_FILE}") - file(APPEND ${OUT_FILE} "${CONTENTS}") - endfunction() - message("APP_ICON is: ${APP_ICON}") - if(APP_ICON) - get_filename_component(RC_IN_FOLDER ${APP_ICON}} DIRECTORY) - - file(GLOB_RECURSE RC_IN_FILES "${RC_IN_FOLDER}/*rc.in") - - foreach(rc_in_file IN ITEMS ${RC_IN_FILES}) - get_filename_component(rc_in_file_name ${rc_in_file} NAME) - get_filename_component(app_icon_name "${APP_ICON}.in" NAME) - if(NOT "${rc_in_file_name}" STREQUAL "${app_icon_name}") - merge_files(${rc_in_file} "${APP_ICON}.in") - if (DEFINED APPLICATION_FOLDER_ICON_INDEX) - MATH(EXPR APPLICATION_FOLDER_ICON_INDEX "${APPLICATION_FOLDER_ICON_INDEX}+1") - message("APPLICATION_FOLDER_ICON_INDEX is now set to: ${APPLICATION_FOLDER_ICON_INDEX}") - endif() - endif() - endforeach() - endif() -endif() -# -------------------------------------- +ecm_add_app_icon(APP_ICON ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}") if(UNIX AND NOT APPLE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") @@ -431,7 +327,6 @@ target_link_libraries(nextcloudCore PUBLIC - Nextcloud::sync Qt5::Widgets Qt5::GuiPrivate Qt5::Svg @@ -440,10 +335,9 @@ Qt5::Qml Qt5::Quick Qt5::QuickControls2 + ${synclib_NAME} ) -add_subdirectory(socketapi) - if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND) target_link_libraries(nextcloudCore PUBLIC Qt5::WebEngineWidgets) endif() @@ -459,7 +353,6 @@ PUBLIC ${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator ${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile - ${CMAKE_SOURCE_DIR}/src/3rdparty/kirigami ${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication ${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget ${CMAKE_CURRENT_BINARY_DIR} @@ -472,9 +365,9 @@ foreach(_file ${_icons}) string(REPLACE "${theme_dir}/colored/" "" _res ${_file}) string(REPLACE "-${APPLICATION_ICON_NAME}-icon.png" "" _res ${_res}) - install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${_res}x${_res}/apps) + install(FILES ${_file} RENAME ${APPLICATION_ICON_NAME}.png DESTINATION ${DATADIR}/icons/hicolor/${_res}x${_res}/apps) endforeach(_file) - install(FILES ${client_I18N} DESTINATION ${CMAKE_INSTALL_DATADIR}/${APPLICATION_EXECUTABLE}/i18n) + install(FILES ${client_I18N} DESTINATION ${SHAREDIR}/${APPLICATION_EXECUTABLE}/i18n) else() file(GLOB_RECURSE VISUAL_ELEMENTS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-w10startmenu*") install(FILES ${VISUAL_ELEMENTS} DESTINATION bin/visualelements) @@ -483,23 +376,17 @@ endif() # we may not add MACOSX_BUNDLE here, if not building one - add_executable(nextcloud WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON}) - set_target_properties(nextcloud PROPERTIES - OUTPUT_NAME "${APPLICATION_EXECUTABLE}" - ) + add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON}) else() # set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf. set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns") # we must add MACOSX_BUNDLE only if building a bundle - add_executable(nextcloud WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON}) + add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON}) if (BUILD_OWNCLOUD_OSX_BUNDLE) - set_target_properties(nextcloud PROPERTIES + set_target_properties(${APPLICATION_EXECUTABLE} PROPERTIES OUTPUT_NAME "${APPLICATION_NAME}") - else() - set_target_properties(nextcloud PROPERTIES - OUTPUT_NAME "${APPLICATION_EXECUTABLE}") endif() set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations) @@ -519,17 +406,22 @@ IF(BUILD_UPDATER) add_library(updater STATIC ${updater_SRCS}) - target_link_libraries(updater Nextcloud::sync ${updater_DEPS} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml) + target_link_libraries(updater ${synclib_NAME} ${updater_DEPS} Qt5::Widgets Qt5::Svg Qt5::Network Qt5::Xml) target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) set_target_properties(updater PROPERTIES AUTOMOC ON) - target_link_libraries(nextcloudCore PUBLIC updater) endif() -set_target_properties(nextcloud PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} +set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} ) -target_link_libraries(nextcloud PRIVATE nextcloudCore) +target_link_libraries(${APPLICATION_EXECUTABLE} nextcloudCore) + +IF(BUILD_UPDATER) + target_link_libraries(nextcloudCore PUBLIC updater) +endif() + +target_link_libraries(nextcloudCore PUBLIC ${OS_SPECIFIC_LINK_LIBRARIES}) if(TARGET PkgConfig::CLOUDPROVIDERS) message("Building with libcloudproviderssupport") @@ -575,7 +467,11 @@ endif() endif() -install(TARGETS nextcloud +# application.cpp still uses QDesktopServices::storageLocation +target_compile_definitions(nextcloudCore PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0") + + +install(TARGETS ${APPLICATION_EXECUTABLE} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib @@ -602,12 +498,12 @@ set(NO_STRIP "") endif() - add_custom_command(TARGET nextcloud POST_BUILD + add_custom_command(TARGET ${APPLICATION_EXECUTABLE} POST_BUILD COMMAND "${MACDEPLOYQT_EXECUTABLE}" - "$/../.." + "$/../.." -qmldir=${CMAKE_SOURCE_DIR}/src/gui -always-overwrite - -executable="$/${cmd_NAME}" + -executable="$/${cmd_NAME}" ${NO_STRIP} COMMAND "${CMAKE_COMMAND}" -E rm -rf "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/bearer" @@ -618,15 +514,13 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE AND NOT WIN32) configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LINUX_APPLICATION_ID}.desktop DESTINATION ${DATADIR}/applications ) configure_file(owncloud.xml.in ${APPLICATION_EXECUTABLE}.xml) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_EXECUTABLE}.xml DESTINATION ${DATADIR}/mime/packages ) find_package(SharedMimeInfo) if(SharedMimeInfo_FOUND) - update_xdg_mimetypes( ${CMAKE_INSTALL_DATADIR}/mime/packages ) + update_xdg_mimetypes( ${DATADIR}/mime/packages ) endif(SharedMimeInfo_FOUND) endif() - -configure_file(configgui.h.in ${CMAKE_CURRENT_BINARY_DIR}/configgui.h) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/configgui.h.in nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/configgui.h.in --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/configgui.h.in 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/configgui.h.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -#ifndef CONFIG_GUI_H -#define CONFIG_GUI_H -#cmakedefine APPLICATION_FOLDER_ICON_INDEX "@APPLICATION_FOLDER_ICON_INDEX@" -#endif diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/flow2auth.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/flow2auth.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/flow2auth.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/flow2auth.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -100,7 +100,7 @@ pollToken = json.value("poll").toObject().value("token").toString(); pollEndpoint = json.value("poll").toObject().value("endpoint").toString(); if (_enforceHttps && QUrl(pollEndpoint).scheme() != QStringLiteral("https")) { - qCWarning(lcFlow2auth) << "Can not poll endpoint because the returned url" << pollEndpoint << "does not start with https"; + qCWarning(lcFlow2auth) << "Can not poll endpoint because the returned url" << _pollEndpoint << "does not start with https"; emit result(Error, tr("The polling URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator.")); return; } @@ -115,7 +115,7 @@ errorReason = tr("Error returned from the server: %1") .arg(errorFromJson.toHtmlEscaped()); } else if (reply->error() != QNetworkReply::NoError) { - errorReason = tr("There was an error accessing the \"token\" endpoint:
%1") + errorReason = tr("There was an error accessing the 'token' endpoint:
%1") .arg(reply->errorString().toHtmlEscaped()); } else if (jsonParseError.error != QJsonParseError::NoError) { errorReason = tr("Could not parse the JSON returned from the server:
%1") @@ -132,16 +132,6 @@ _loginUrl = loginUrl; - - if (_account->isUsernamePrefillSupported()) { - const auto userName = Utility::getCurrentUserName(); - if (!userName.isEmpty()) { - auto query = QUrlQuery(_loginUrl); - query.addQueryItem(QStringLiteral("user"), userName); - _loginUrl.setQuery(query); - } - } - _pollToken = pollToken; _pollEndpoint = pollEndpoint; @@ -233,7 +223,7 @@ errorReason = tr("Error returned from the server: %1") .arg(errorFromJson.toHtmlEscaped()); } else if (reply->error() != QNetworkReply::NoError) { - errorReason = tr("There was an error accessing the \"token\" endpoint:
%1") + errorReason = tr("There was an error accessing the 'token' endpoint:
%1") .arg(reply->errorString().toHtmlEscaped()); } else if (jsonParseError.error != QJsonParseError::NoError) { errorReason = tr("Could not parse the JSON returned from the server:
%1") diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/flow2auth.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/flow2auth.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/flow2auth.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/flow2auth.h 2022-01-03 12:25:12.000000000 +0000 @@ -42,7 +42,7 @@ }; Flow2Auth(Account *account, QObject *parent); - ~Flow2Auth() override; + ~Flow2Auth(); enum Result { NotSupported, LoggedIn, diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/httpcredentialsgui.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/httpcredentialsgui.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/httpcredentialsgui.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/httpcredentialsgui.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -108,7 +108,7 @@ } if (!_fetchErrorString.isEmpty()) { msg += QLatin1String("
") - + tr("Reading from keychain failed with error: \"%1\"") + + tr("Reading from keychain failed with error: '%1'") .arg(Utility::escape(_fetchErrorString)) + QLatin1String("
"); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/oauth.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/oauth.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/oauth.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/oauth.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -70,14 +70,13 @@ 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 - const QRegularExpression rx("^GET /\\?code=([a-zA-Z0-9]+)[& ]"); // Match a /?code=... URL - const auto rxMatch = rx.match(peek); - if (!rxMatch.hasMatch()) { + QRegExp rx("^GET /\\?code=([a-zA-Z0-9]+)[& ]"); // Match a /?code=... URL + if (rx.indexIn(peek) != 0) { httpReplyAndClose(socket, "404 Not Found", "404 Not Found

404 Not Found

"); return; } - QString code = rxMatch.captured(1); // The 'code' is the first capture of the regexp + QString code = rx.cap(1); // The 'code' is the first capture of the regexp QUrl requestToken = Utility::concatUrlPath(_account->url().toString(), QLatin1String("/index.php/apps/oauth2/api/v1/token")); QNetworkRequest req; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/oauth.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/oauth.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/creds/oauth.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/creds/oauth.h 2022-01-03 12:25:12.000000000 +0000 @@ -47,7 +47,7 @@ , _account(account) { } - ~OAuth() override; + ~OAuth(); enum Result { NotSupported, LoggedIn, diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/emojimodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/emojimodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/emojimodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/emojimodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1571 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 -#include - -#include "emojimodel.h" - -namespace OCC { - -QVariant EmojiCategoriesModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) { - return {}; - } - - switch (role) { - case Roles::EmojiRole: - return categories[index.row()].emoji; - - case Roles::LabelRole: - return categories[index.row()].label; - } - - return {}; -} - -int EmojiCategoriesModel::rowCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return static_cast(categories.size()); -} - -QHash EmojiCategoriesModel::roleNames() const -{ - QHash roles; - roles[Roles::EmojiRole] = "emoji"; - roles[Roles::LabelRole] = "label"; - return roles; -} - -const std::vector EmojiCategoriesModel::categories = { - { "⌛️", "history" }, - { "😏", "people" }, - { "🌲", "nature" }, - { "🍛", "food" }, - { "🚁", "activity" }, - { "🚅", "travel" }, - { "💡", "objects" }, - { "🔣", "symbols" }, - { "🏁", "flags" }, -}; - -QVariantList EmojiModel::history() const -{ - return _settings.value("Editor/emojis", QVariantList()).toList(); -} - -void EmojiModel::setCategory(const QString &category) -{ - if (_category == category) { - return; - } - _category = category; - emit modelChanged(); -} - -QAbstractListModel *EmojiModel::emojiCategoriesModel() -{ - return &_emojiCategoriesModel; -} - -QVariantList EmojiModel::model() const -{ - if (_category == "history") { - return history(); - } else if (_category == "people") { - return people; - } else if (_category == "nature") { - return nature; - } else if (_category == "food") { - return food; - } else if (_category == "activity") { - return activity; - } else if (_category == "travel") { - return travel; - } else if (_category == "objects") { - return objects; - } else if (_category == "symbols") { - return symbols; - } else if (_category == "flags") { - return flags; - } - return history(); -} - -void EmojiModel::emojiUsed(const QVariant &modelData) -{ - auto historyEmojis = history(); - - auto historyEmojisIter = historyEmojis.begin(); - while (historyEmojisIter != historyEmojis.end()) { - if ((*historyEmojisIter).value().unicode == modelData.value().unicode) { - historyEmojisIter = historyEmojis.erase(historyEmojisIter); - } else { - historyEmojisIter++; - } - } - - historyEmojis.push_front(modelData); - _settings.setValue("Editor/emojis", historyEmojis); - - emit historyChanged(); -} - -const QVariantList EmojiModel::people = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x80"), ":grinning:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x81"), ":grin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x82"), ":joy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa3"), ":rofl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x83"), ":smiley:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x84"), ":smile:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x85"), ":sweat_smile:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x86"), ":laughing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x89"), ":wink:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8a"), ":blush:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8b"), ":yum:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8e"), ":sunglasses:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8d"), ":heart_eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x98"), ":kissing_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x97"), ":kissing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x99"), ":kissing_smiling_eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9a"), ":kissing_closed_eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xba"), ":relaxed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x82"), ":slight_smile:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x97"), ":hugging:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x94"), ":thinking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x90"), ":neutral_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x91"), ":expressionless:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb6"), ":no_mouth:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x84"), ":rolling_eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8f"), ":smirk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa3"), ":persevere:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa5"), ":disappointed_relieved:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xae"), ":open_mouth:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x90"), ":zipper_mouth:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xaf"), ":hushed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xaa"), ":sleepy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xab"), ":tired_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb4"), ":sleeping:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x8c"), ":relieved:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x93"), ":nerd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9b"), ":stuck_out_tongue:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9c"), ":stuck_out_tongue_winking_eye:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9d"), ":stuck_out_tongue_closed_eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa4"), ":drooling_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x92"), ":unamused:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x93"), ":sweat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x94"), ":pensive:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x95"), ":confused:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x83"), ":upside_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x91"), ":money_mouth:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb2"), ":astonished:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xb9"), ":frowning2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x81"), ":slight_frown:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x96"), ":confounded:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9e"), ":disappointed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x9f"), ":worried:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa4"), ":triumph:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa2"), ":cry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xad"), ":sob:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa6"), ":frowning:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa7"), ":anguished:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa8"), ":fearful:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa9"), ":weary:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xac"), ":grimacing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb0"), ":cold_sweat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb1"), ":scream:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb3"), ":flushed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb5"), ":dizzy_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa1"), ":rage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xa0"), ":angry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x87"), ":innocent:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa0"), ":cowboy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa1"), ":clown:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa5"), ":lying_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb7"), ":mask:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x92"), ":thermometer_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x95"), ":head_bandage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa2"), ":nauseated_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa7"), ":sneezing_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\x88"), ":smiling_imp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xbf"), ":imp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb9"), ":japanese_ogre:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xba"), ":japanese_goblin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x80"), ":skull:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xbb"), ":ghost:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xbd"), ":alien:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x96"), ":robot:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa9"), ":poop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xba"), ":smiley_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb8"), ":smile_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xb9"), ":joy_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xbb"), ":heart_eyes_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xbc"), ":smirk_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xbd"), ":kissing_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x80"), ":scream_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xbf"), ":crying_cat_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x98\xbe"), ":pouting_cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa6"), ":boy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa7"), ":girl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa8"), ":man:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa9"), ":woman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb4"), ":older_man:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb5"), ":older_woman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb6"), ":baby:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xbc"), ":angel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xae"), ":cop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb5"), ":spy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x82"), ":guardsman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb7"), ":construction_worker:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb3"), ":man_with_turban:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb1"), ":person_with_blond_hair:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x85"), ":santa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb6"), ":mrs_claus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb8"), ":princess:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb4"), ":prince:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb0"), ":bride_with_veil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb5"), ":man_in_tuxedo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb0"), ":pregnant_woman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xb2"), ":man_with_gua_pi_mao:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8d"), ":person_frowning:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8e"), ":person_with_pouting_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x85"), ":no_good:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x86"), ":ok_woman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x81"), ":information_desk_person:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8b"), ":raising_hand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x87"), ":bow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xa6"), ":face_palm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb7"), ":shrug:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x86"), ":massage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x87"), ":haircut:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb6"), ":walking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x83"), ":runner:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x83"), ":dancer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xba"), ":man_dancing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xaf"), ":dancers:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xa3"), ":speaking_head:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa4"), ":bust_in_silhouette:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa5"), ":busts_in_silhouette:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xab"), ":couple:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xac"), ":two_men_holding_hands:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xad"), ":two_women_holding_hands:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8f"), ":couplekiss:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x91"), ":couple_with_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xaa"), ":family:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xaa"), ":muscle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb3"), ":selfie:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x88"), ":point_left:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x89"), ":point_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x9d"), ":point_up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x86"), ":point_up_2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x95"), ":middle_finger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x87"), ":point_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x8c"), ":v:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x9e"), ":fingers_crossed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x96"), ":vulcan:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x98"), ":metal:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x99"), ":call_me:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x90"), ":hand_splayed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x8b"), ":raised_hand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8c"), ":ok_hand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8d"), ":thumbsup:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8e"), ":thumbsdown:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x8a"), ":fist:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8a"), ":punch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x9b"), ":left_facing_fist:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x9c"), ":right_facing_fist:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x9a"), ":raised_back_of_hand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8b"), ":wave:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x8f"), ":clap:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x8d"), ":writing_hand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x90"), ":open_hands:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8c"), ":raised_hands:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8f"), ":pray:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\x9d"), ":handshake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x85"), ":nail_care:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x82"), ":ear:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x83"), ":nose:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa3"), ":footprints:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x80"), ":eyes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x81"), ":eye:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x85"), ":tongue:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x84"), ":lips:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8b"), ":kiss:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa4"), ":zzz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x93"), ":eyeglasses:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb6"), ":dark_sunglasses:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x94"), ":necktie:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x95"), ":shirt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x96"), ":jeans:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x97"), ":dress:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x98"), ":kimono:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x99"), ":bikini:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9a"), ":womans_clothes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9b"), ":purse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9c"), ":handbag:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9d"), ":pouch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x92"), ":school_satchel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9e"), ":mans_shoe:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x9f"), ":athletic_shoe:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa0"), ":high_heel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa1"), ":sandal:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xa2"), ":boot:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x91"), ":crown:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x92"), ":womans_hat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa9"), ":tophat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x93"), ":mortar_board:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x91"), ":helmet_with_cross:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x84"), ":lipstick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8d"), ":ring:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x82"), ":closed_umbrella:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xbc"), ":briefcase:" }), -}; - -const QVariantList EmojiModel::nature = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x88"), ":see_no_evil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x89"), ":hear_no_evil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x99\x8a"), ":speak_no_evil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa6"), ":sweat_drops:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa8"), ":dash:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb5"), ":monkey_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x92"), ":monkey:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8d"), ":gorilla:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb6"), ":dog:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x95"), ":dog2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa9"), ":poodle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xba"), ":wolf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8a"), ":fox:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb1"), ":cat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x88"), ":cat2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x81"), ":lion_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xaf"), ":tiger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x85"), ":tiger2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x86"), ":leopard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb4"), ":horse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8e"), ":racehorse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8c"), ":deer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x84"), ":unicorn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xae"), ":cow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x82"), ":ox:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x83"), ":water_buffalo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x84"), ":cow2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb7"), ":pig:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x96"), ":pig2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x97"), ":boar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xbd"), ":pig_nose:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8f"), ":ram:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x91"), ":sheep:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x90"), ":goat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xaa"), ":dromedary_camel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xab"), ":camel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x98"), ":elephant:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8f"), ":rhino:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xad"), ":mouse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x81"), ":mouse2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x80"), ":rat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb9"), ":hamster:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb0"), ":rabbit:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x87"), ":rabbit2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xbf"), ":chipmunk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x87"), ":bat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xbb"), ":bear:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa8"), ":koala:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xbc"), ":panda_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xbe"), ":feet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x83"), ":turkey:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x94"), ":chicken:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x93"), ":rooster:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa3"), ":hatching_chick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa4"), ":baby_chick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa5"), ":hatched_chick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa6"), ":bird:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa7"), ":penguin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x8a"), ":dove:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x85"), ":eagle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x86"), ":duck:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x89"), ":owl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb8"), ":frog:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8a"), ":crocodile:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa2"), ":turtle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8e"), ":lizard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8d"), ":snake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb2"), ":dragon_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x89"), ":dragon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xb3"), ":whale:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8b"), ":whale2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xac"), ":dolphin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9f"), ":fish:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa0"), ":tropical_fish:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\xa1"), ":blowfish:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x88"), ":shark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x99"), ":octopus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9a"), ":shell:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x80"), ":crab:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x90"), ":shrimp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x91"), ":squid:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x8b"), ":butterfly:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x8c"), ":snail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9b"), ":bug:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9c"), ":ant:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9d"), ":bee:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x90\x9e"), ":beetle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb7"), ":spider:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb8"), ":spider_web:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa6\x82"), ":scorpion:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x90"), ":bouquet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb8"), ":cherry_blossom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb5"), ":rosette:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb9"), ":rose:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x80"), ":wilted_rose:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xba"), ":hibiscus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xbb"), ":sunflower:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xbc"), ":blossom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb7"), ":tulip:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb1"), ":seedling:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb2"), ":evergreen_tree:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb3"), ":deciduous_tree:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb4"), ":palm_tree:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb5"), ":cactus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xbe"), ":ear_of_rice:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xbf"), ":herb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x98"), ":shamrock:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x80"), ":four_leaf_clover:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x81"), ":maple_leaf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x82"), ":fallen_leaf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x83"), ":leaves:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x84"), ":mushroom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb0"), ":chestnut:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8d"), ":earth_africa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8e"), ":earth_americas:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8f"), ":earth_asia:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x91"), ":new_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x92"), ":waxing_crescent_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x93"), ":first_quarter_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x94"), ":waxing_gibbous_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x95"), ":full_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x96"), ":waning_gibbous_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x97"), ":last_quarter_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x98"), ":waning_crescent_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x99"), ":crescent_moon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9a"), ":new_moon_with_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9b"), ":first_quarter_moon_with_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9c"), ":last_quarter_moon_with_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x80"), ":sunny:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9d"), ":full_moon_with_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9e"), ":sun_with_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xad\x90"), ":star:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x9f"), ":star2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x81"), ":cloud:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x85"), ":partly_sunny:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x88"), ":thunder_cloud_rain:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa4"), ":white_sun_small_cloud:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa5"), ":white_sun_cloud:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa6"), ":white_sun_rain_cloud:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa7"), ":cloud_rain:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa8"), ":cloud_snow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa9"), ":cloud_lightning:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xaa"), ":cloud_tornado:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xab"), ":fog:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xac"), ":wind_blowing_face:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x82"), ":umbrella2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x94"), ":umbrella:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xa1"), ":zap:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x84"), ":snowflake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x83"), ":snowman2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x84"), ":snowman:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x84"), ":comet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa5"), ":fire:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa7"), ":droplet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8a"), ":ocean:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x83"), ":jack_o_lantern:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x84"), ":christmas_tree:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\xa8"), ":sparkles:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8b"), ":tanabata_tree:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8d"), ":bamboo:" }), -}; - -const QVariantList EmojiModel::food = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x87"), ":grapes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x88"), ":melon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x89"), ":watermelon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8a"), ":tangerine:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8b"), ":lemon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8c"), ":banana:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8d"), ":pineapple:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8e"), ":apple:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x8f"), ":green_apple:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x90"), ":pear:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x91"), ":peach:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x92"), ":cherries:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x93"), ":strawberry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x9d"), ":kiwi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x85"), ":tomato:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x91"), ":avocado:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x86"), ":eggplant:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x94"), ":potato:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x95"), ":carrot:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xbd"), ":corn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xb6"), ":hot_pepper:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x92"), ":cucumber:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x9c"), ":peanuts:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9e"), ":bread:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x90"), ":croissant:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x96"), ":french_bread:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x9e"), ":pancakes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa7\x80"), ":cheese:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x96"), ":meat_on_bone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x97"), ":poultry_leg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x93"), ":bacon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x94"), ":hamburger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9f"), ":fries:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x95"), ":pizza:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xad"), ":hotdog:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xae"), ":taco:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xaf"), ":burrito:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x99"), ":stuffed_flatbread:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x9a"), ":egg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb3"), ":cooking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x98"), ":shallow_pan_of_food:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb2"), ":stew:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x97"), ":salad:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xbf"), ":popcorn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb1"), ":bento:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x98"), ":rice_cracker:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x99"), ":rice_ball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9a"), ":rice:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9b"), ":curry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9c"), ":ramen:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\x9d"), ":spaghetti:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa0"), ":sweet_potato:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa2"), ":oden:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa3"), ":sushi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa4"), ":fried_shrimp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa5"), ":fish_cake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa1"), ":dango:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa6"), ":icecream:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa7"), ":shaved_ice:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa8"), ":ice_cream:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xa9"), ":doughnut:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xaa"), ":cookie:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x82"), ":birthday:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb0"), ":cake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xab"), ":chocolate_bar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xac"), ":candy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xad"), ":lollipop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xae"), ":custard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xaf"), ":honey_pot:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xbc"), ":baby_bottle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x9b"), ":milk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x95"), ":coffee:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb5"), ":tea:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb6"), ":sake:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xbe"), ":champagne:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb7"), ":wine_glass:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb8"), ":cocktail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb9"), ":tropical_drink:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xba"), ":beer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xbb"), ":beers:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x82"), ":champagne_glass:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x83"), ":tumbler_glass:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xbd"), ":fork_knife_plate:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8d\xb4"), ":fork_and_knife:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x84"), ":spoon:" }), -}; - -const QVariantList EmojiModel::activity = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\xbe"), ":space_invader:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb4"), ":levitate:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xba"), ":fencer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87"), ":horse_racing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbb"), ":horse_racing_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbc"), ":horse_racing_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbd"), ":horse_racing_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbe"), ":horse_racing_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x87\xf0\x9f\x8f\xbf"), ":horse_racing_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb7"), ":skier:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x82"), ":snowboarder:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8c"), ":golfer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84"), ":surfer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbb"), ":surfer_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbc"), ":surfer_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbd"), ":surfer_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbe"), ":surfer_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x84\xf0\x9f\x8f\xbf"), ":surfer_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3"), ":rowboat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbb"), ":rowboat_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbc"), ":rowboat_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbd"), ":rowboat_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbe"), ":rowboat_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa3\xf0\x9f\x8f\xbf"), ":rowboat_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a"), ":swimmer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbb"), ":swimmer_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbc"), ":swimmer_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbd"), ":swimmer_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbe"), ":swimmer_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8a\xf0\x9f\x8f\xbf"), ":swimmer_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9"), ":basketball_player:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbb"), ":basketball_player_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbc"), ":basketball_player_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbd"), ":basketball_player_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbe"), ":basketball_player_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb9\xf0\x9f\x8f\xbf"), ":basketball_player_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b"), ":lifter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbb"), ":lifter_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbc"), ":lifter_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbd"), ":lifter_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbe"), ":lifter_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8b\xf0\x9f\x8f\xbf"), ":lifter_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4"), ":bicyclist:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbb"), ":bicyclist_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbc"), ":bicyclist_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbd"), ":bicyclist_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbe"), ":bicyclist_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb4\xf0\x9f\x8f\xbf"), ":bicyclist_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5"), ":mountain_bicyclist:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbb"), ":mountain_bicyclist_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbc"), ":mountain_bicyclist_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbd"), ":mountain_bicyclist_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbe"), ":mountain_bicyclist_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb5\xf0\x9f\x8f\xbf"), ":mountain_bicyclist_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8"), ":cartwheel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbb"), ":cartwheel_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbc"), ":cartwheel_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbd"), ":cartwheel_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbe"), ":cartwheel_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb8\xf0\x9f\x8f\xbf"), ":cartwheel_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc"), ":wrestlers:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbb"), ":wrestlers_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbc"), ":wrestlers_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbd"), ":wrestlers_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbe"), ":wrestlers_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbc\xf0\x9f\x8f\xbf"), ":wrestlers_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd"), ":water_polo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbb"), ":water_polo_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbc"), ":water_polo_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbd"), ":water_polo_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbe"), ":water_polo_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbd\xf0\x9f\x8f\xbf"), ":water_polo_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe"), ":handball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbb"), ":handball_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbc"), ":handball_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbd"), ":handball_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbe"), ":handball_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xbe\xf0\x9f\x8f\xbf"), ":handball_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9"), ":juggling:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbb"), ":juggling_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbc"), ":juggling_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbd"), ":juggling_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbe"), ":juggling_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa4\xb9\xf0\x9f\x8f\xbf"), ":juggling_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xaa"), ":circus_tent:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xad"), ":performing_arts:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa8"), ":art:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb0"), ":slot_machine:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80"), ":bath:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbb"), ":bath_tone1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbc"), ":bath_tone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbd"), ":bath_tone3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbe"), ":bath_tone4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x80\xf0\x9f\x8f\xbf"), ":bath_tone5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x97"), ":reminder_ribbon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x9f"), ":tickets:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xab"), ":ticket:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x96"), ":military_medal:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x86"), ":trophy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x85"), ":medal:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x87"), ":first_place:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x88"), ":second_place:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x89"), ":third_place:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xbd"), ":soccer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xbe"), ":baseball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x80"), ":basketball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x90"), ":volleyball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x88"), ":football:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x89"), ":rugby_football:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xbe"), ":tennis:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb1"), ":8ball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb3"), ":bowling:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8f"), ":cricket:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x91"), ":field_hockey:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x92"), ":hockey:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x93"), ":ping_pong:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb8"), ":badminton:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x8a"), ":boxing_glove:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x8b"), ":martial_arts_uniform:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x85"), ":goal:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xaf"), ":dart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb3"), ":golf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb8"), ":ice_skate:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa3"), ":fishing_pole_and_fish:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xbd"), ":running_shirt_with_sash:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xbf"), ":ski:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xae"), ":video_game:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb2"), ":game_die:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xbc"), ":musical_score:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa4"), ":microphone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa7"), ":headphones:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb7"), ":saxophone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb8"), ":guitar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb9"), ":musical_keyboard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xba"), ":trumpet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xbb"), ":violin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\xa5\x81"), ":drum:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xac"), ":clapper:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb9"), ":bow_and_arrow:" }), -}; - -const QVariantList EmojiModel::travel = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8e"), ":race_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x8d"), ":motorcycle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xbe"), ":japan:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x94"), ":mountain_snow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb0"), ":mountain:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8b"), ":volcano:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xbb"), ":mount_fuji:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x95"), ":camping:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x96"), ":beach:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9c"), ":desert:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9d"), ":island:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9e"), ":park:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9f"), ":stadium:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9b"), ":classical_building:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x97"), ":construction_site:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x98"), ":homes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x99"), ":cityscape:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x9a"), ":house_abandoned:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa0"), ":house:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa1"), ":house_with_garden:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa2"), ":office:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa3"), ":post_office:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa4"), ":european_post_office:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa5"), ":hospital:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa6"), ":bank:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa8"), ":hotel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa9"), ":love_hotel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xaa"), ":convenience_store:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xab"), ":school:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xac"), ":department_store:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xad"), ":factory:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xaf"), ":japanese_castle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb0"), ":european_castle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x92"), ":wedding:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xbc"), ":tokyo_tower:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xbd"), ":statue_of_liberty:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xaa"), ":church:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x8c"), ":mosque:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x8d"), ":synagogue:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xa9"), ":shinto_shrine:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x8b"), ":kaaba:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb2"), ":fountain:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xba"), ":tent:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x81"), ":foggy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x83"), ":night_with_stars:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x84"), ":sunrise_over_mountains:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x85"), ":sunrise:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x86"), ":city_dusk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x87"), ":city_sunset:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x89"), ":bridge_at_night:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x8c"), ":milky_way:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa0"), ":carousel_horse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa1"), ":ferris_wheel:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa2"), ":roller_coaster:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x82"), ":steam_locomotive:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x83"), ":railway_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x84"), ":bullettrain_side:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x85"), ":bullettrain_front:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x86"), ":train2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x87"), ":metro:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x88"), ":light_rail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x89"), ":station:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8a"), ":tram:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9d"), ":monorail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9e"), ":mountain_railway:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8b"), ":train:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8c"), ":bus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8d"), ":oncoming_bus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8e"), ":trolleybus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x90"), ":minibus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x91"), ":ambulance:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x92"), ":fire_engine:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x93"), ":police_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x94"), ":oncoming_police_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x95"), ":taxi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x96"), ":oncoming_taxi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x97"), ":red_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x98"), ":oncoming_automobile:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x99"), ":blue_car:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9a"), ":truck:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9b"), ":articulated_lorry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9c"), ":tractor:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb2"), ":bike:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xb4"), ":scooter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xb5"), ":motor_scooter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x8f"), ":busstop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa3"), ":motorway:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa4"), ":railway_track:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xbd"), ":fuelpump:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa8"), ":rotating_light:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa5"), ":traffic_light:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa6"), ":vertical_traffic_light:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa7"), ":construction:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x93"), ":anchor:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb5"), ":sailboat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xb6"), ":canoe:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa4"), ":speedboat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xb3"), ":cruise_ship:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb4"), ":ferry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa5"), ":motorboat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa2"), ":ship:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x88"), ":airplane:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa9"), ":airplane_small:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xab"), ":airplane_departure:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xac"), ":airplane_arriving:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xba"), ":seat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x81"), ":helicopter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x9f"), ":suspension_railway:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa0"), ":mountain_cableway:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa1"), ":aerial_tramway:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\x80"), ":rocket:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xb0"), ":satellite_orbital:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa0"), ":stars:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x88"), ":rainbow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x86"), ":fireworks:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x87"), ":sparkler:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x91"), ":rice_scene:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\x81"), ":checkered_flag:" }), -}; - -const QVariantList EmojiModel::objects = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xa0"), ":skull_crossbones:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8c"), ":love_letter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa3"), ":bomb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb3"), ":hole:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x8d"), ":shopping_bags:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xbf"), ":prayer_beads:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8e"), ":gem:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xaa"), ":knife:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xba"), ":amphora:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xba"), ":map:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x88"), ":barber:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xbc"), ":frame_photo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x8e"), ":bellhop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xaa"), ":door:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x8c"), ":sleeping_accommodation:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x8f"), ":bed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x8b"), ":couch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xbd"), ":toilet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xbf"), ":shower:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x81"), ":bathtub:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8c\x9b"), ":hourglass:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb3"), ":hourglass_flowing_sand:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8c\x9a"), ":watch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb0"), ":alarm_clock:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb1"), ":stopwatch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb2"), ":timer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb0"), ":clock:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\xa1"), ":thermometer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\xb1"), ":beach_umbrella:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x88"), ":balloon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x89"), ":tada:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8a"), ":confetti_ball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8e"), ":dolls:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8f"), ":flags:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x90"), ":wind_chime:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x80"), ":ribbon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x81"), ":gift:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xb9"), ":joystick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xaf"), ":postal_horn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x99"), ":microphone2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x9a"), ":level_slider:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x9b"), ":control_knobs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xbb"), ":radio:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb1"), ":iphone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb2"), ":calling:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x8e"), ":telephone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9e"), ":telephone_receiver:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9f"), ":pager:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa0"), ":fax:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8b"), ":battery:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8c"), ":electric_plug:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xbb"), ":computer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xa5"), ":desktop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xa8"), ":printer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8c\xa8"), ":keyboard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xb1"), ":mouse_three_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xb2"), ":trackball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xbd"), ":minidisc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xbe"), ":floppy_disk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xbf"), ":cd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x80"), ":dvd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa5"), ":movie_camera:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x9e"), ":film_frames:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xbd"), ":projector:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xba"), ":tv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb7"), ":camera:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb8"), ":camera_with_flash:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb9"), ":video_camera:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xbc"), ":vhs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8d"), ":mag:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8e"), ":mag_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xac"), ":microscope:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xad"), ":telescope:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa1"), ":satellite:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xaf"), ":candle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa1"), ":bulb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa6"), ":flashlight:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xae"), ":izakaya_lantern:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x94"), ":notebook_with_decorative_cover:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x95"), ":closed_book:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x96"), ":book:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x97"), ":green_book:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x98"), ":blue_book:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x99"), ":orange_book:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9a"), ":books:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x93"), ":notebook:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x92"), ":ledger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x83"), ":page_with_curl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9c"), ":scroll:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x84"), ":page_facing_up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb0"), ":newspaper:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x9e"), ":newspaper2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x91"), ":bookmark_tabs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x96"), ":bookmark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb7"), ":label:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb0"), ":moneybag:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb4"), ":yen:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb5"), ":dollar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb6"), ":euro:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb7"), ":pound:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb8"), ":money_with_wings:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb3"), ":credit_card:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x89"), ":envelope:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa7"), ":e-mail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa8"), ":incoming_envelope:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa9"), ":envelope_with_arrow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa4"), ":outbox_tray:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa5"), ":inbox_tray:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa6"), ":package:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xab"), ":mailbox:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xaa"), ":mailbox_closed:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xac"), ":mailbox_with_mail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xad"), ":mailbox_with_no_mail:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xae"), ":postbox:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xb3"), ":ballot_box:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x8f"), ":pencil2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x92"), ":black_nib:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x8b"), ":pen_fountain:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x8a"), ":pen_ballpoint:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x8c"), ":paintbrush:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x8d"), ":crayon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9d"), ":pencil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x81"), ":file_folder:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x82"), ":open_file_folder:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x82"), ":dividers:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x85"), ":date:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x86"), ":calendar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x92"), ":notepad_spiral:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x93"), ":calendar_spiral:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x87"), ":card_index:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x88"), ":chart_with_upwards_trend:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x89"), ":chart_with_downwards_trend:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8a"), ":bar_chart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8b"), ":clipboard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8c"), ":pushpin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8d"), ":round_pushpin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8e"), ":paperclip:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\x87"), ":paperclips:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x8f"), ":straight_ruler:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x90"), ":triangular_ruler:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x82"), ":scissors:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x83"), ":card_box:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x84"), ":file_cabinet:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x91"), ":wastebasket:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x92"), ":lock:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x93"), ":unlock:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8f"), ":lock_with_ink_pen:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x90"), ":closed_lock_with_key:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x91"), ":key:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x9d"), ":key2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa8"), ":hammer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x8f"), ":pick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x92"), ":hammer_pick:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa0"), ":tools:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xa1"), ":dagger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x94"), ":crossed_swords:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xab"), ":gun:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa1"), ":shield:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa7"), ":wrench:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa9"), ":nut_and_bolt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x99"), ":gear:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\x9c"), ":compression:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x97"), ":alembic:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x96"), ":scales:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x97"), ":link:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x93"), ":chains:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x89"), ":syringe:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x8a"), ":pill:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xac"), ":smoking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xb0"), ":coffin:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xb1"), ":urn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xbf"), ":moyai:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\xa2"), ":oil:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xae"), ":crystal_ball:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x92"), ":shopping_cart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xa9"), ":triangular_flag_on_post:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\x8c"), ":crossed_flags:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb4"), ":flag_black:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb3"), ":flag_white:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xb3\xf0\x9f\x8c\x88"), ":rainbow_flag:" }), -}; - -const QVariantList EmojiModel::symbols = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x91\x81\xf0\x9f\x97\xa8"), ":eye_in_speech_bubble:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x98"), ":cupid:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\xa4"), ":heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x93"), ":heartbeat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x94"), ":broken_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x95"), ":two_hearts:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x96"), ":sparkling_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x97"), ":heartpulse:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x99"), ":blue_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9a"), ":green_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9b"), ":yellow_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9c"), ":purple_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x96\xa4"), ":black_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9d"), ":gift_heart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9e"), ":revolving_hearts:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\x9f"), ":heart_decoration:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\xa3"), ":heart_exclamation:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa2"), ":anger:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa5"), ":boom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xab"), ":dizzy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xac"), ":speech_balloon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xa8"), ":speech_left:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x97\xaf"), ":anger_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xad"), ":thought_balloon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xae"), ":white_flower:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x90"), ":globe_with_meridians:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xa8"), ":hotsprings:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x91"), ":octagonal_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9b"), ":clock12:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa7"), ":clock1230:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x90"), ":clock1:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9c"), ":clock130:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x91"), ":clock2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9d"), ":clock230:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x92"), ":clock3:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9e"), ":clock330:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x93"), ":clock4:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9f"), ":clock430:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x94"), ":clock5:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa0"), ":clock530:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x95"), ":clock6:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa1"), ":clock630:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x96"), ":clock7:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa2"), ":clock730:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x97"), ":clock8:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa3"), ":clock830:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x98"), ":clock9:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa4"), ":clock930:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x99"), ":clock10:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa5"), ":clock1030:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x9a"), ":clock11:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\xa6"), ":clock1130:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8c\x80"), ":cyclone:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xa0"), ":spades:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xa5"), ":hearts:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xa6"), ":diamonds:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xa3"), ":clubs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x83\x8f"), ":black_joker:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x80\x84"), ":mahjong:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb4"), ":flower_playing_cards:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x87"), ":mute:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x88"), ":speaker:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x89"), ":sound:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x8a"), ":loud_sound:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa2"), ":loudspeaker:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xa3"), ":mega:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x94"), ":bell:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x95"), ":no_bell:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb5"), ":musical_note:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xb6"), ":notes:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb9"), ":chart:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb1"), ":currency_exchange:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xb2"), ":heavy_dollar_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8f\xa7"), ":atm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xae"), ":put_litter_in_its_place:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb0"), ":potable_water:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xbf"), ":wheelchair:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb9"), ":mens:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xba"), ":womens:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xbb"), ":restroom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xbc"), ":baby_symbol:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xbe"), ":wc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x82"), ":passport_control:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x83"), ":customs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x84"), ":baggage_claim:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x85"), ":left_luggage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xa0"), ":warning:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb8"), ":children_crossing:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x94"), ":no_entry:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xab"), ":no_entry_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb3"), ":no_bicycles:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xad"), ":no_smoking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xaf"), ":do_not_litter:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb1"), ":non-potable_water:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9a\xb7"), ":no_pedestrians:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb5"), ":no_mobile_phones:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9e"), ":underage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xa2"), ":radioactive:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xa3"), ":biohazard:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xac\x86"), ":arrow_up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x97"), ":arrow_upper_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\xa1"), ":arrow_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x98"), ":arrow_lower_right:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xac\x87"), ":arrow_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x99"), ":arrow_lower_left:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xac\x85"), ":arrow_left:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x96"), ":arrow_upper_left:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x95"), ":arrow_up_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\x94"), ":left_right_arrow:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\xa9"), ":leftwards_arrow_with_hook:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x86\xaa"), ":arrow_right_hook:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xa4\xb4"), ":arrow_heading_up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xa4\xb5"), ":arrow_heading_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x83"), ":arrows_clockwise:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x84"), ":arrows_counterclockwise:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x99"), ":back:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9a"), ":end:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9b"), ":on:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9c"), ":soon:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9d"), ":top:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x9b\x90"), ":place_of_worship:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x9b"), ":atom:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x89"), ":om_symbol:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\xa1"), ":star_of_david:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xb8"), ":wheel_of_dharma:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xaf"), ":yin_yang:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x9d"), ":cross:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xa6"), ":orthodox_cross:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xaa"), ":star_and_crescent:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\xae"), ":peace:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x95\x8e"), ":menorah:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xaf"), ":six_pointed_star:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x88"), ":aries:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x89"), ":taurus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8a"), ":gemini:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8b"), ":cancer:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8c"), ":leo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8d"), ":virgo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8e"), ":libra:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x8f"), ":scorpius:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x90"), ":sagittarius:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x91"), ":capricorn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x92"), ":aquarius:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\x93"), ":pisces:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9b\x8e"), ":ophiuchus:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x80"), ":twisted_rightwards_arrows:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x81"), ":repeat:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x82"), ":repeat_one:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x96\xb6"), ":arrow_forward:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xa9"), ":fast_forward:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xad"), ":track_next:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xaf"), ":play_pause:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x97\x80"), ":arrow_backward:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xaa"), ":rewind:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xae"), ":track_previous:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xbc"), ":arrow_up_small:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xab"), ":arrow_double_up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xbd"), ":arrow_down_small:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xac"), ":arrow_double_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb8"), ":pause_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xb9"), ":stop_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\xba"), ":record_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x8f\x8f"), ":eject:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x8e\xa6"), ":cinema:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x85"), ":low_brightness:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x86"), ":high_brightness:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb6"), ":signal_strength:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb3"), ":vibration_mode:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\xb4"), ":mobile_phone_off:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x99\xbb"), ":recycle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x93\x9b"), ":name_badge:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\x9c"), ":fleur-de-lis:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb0"), ":beginner:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb1"), ":trident:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xad\x95"), ":o:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x85"), ":white_check_mark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x98\x91"), ":ballot_box_with_check:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x94"), ":heavy_check_mark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\x96"), ":heavy_multiplication_x:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x8c"), ":x:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x8e"), ":negative_squared_cross_mark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\x95"), ":heavy_plus_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\x96"), ":heavy_minus_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\x97"), ":heavy_division_sign:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\xb0"), ":curly_loop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9e\xbf"), ":loop:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe3\x80\xbd"), ":part_alternation_mark:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\xb3"), ":eight_spoked_asterisk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9c\xb4"), ":eight_pointed_black_star:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x87"), ":sparkle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x80\xbc"), ":bangbang:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x81\x89"), ":interrobang:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x93"), ":question:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x94"), ":grey_question:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x95"), ":grey_exclamation:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9d\x97"), ":exclamation:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe3\x80\xb0"), ":wavy_dash:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xc2\xa9"), ":copyright:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xc2\xae"), ":registered:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x84\xa2"), ":tm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("#\xe2\x83\xa3"), ":hash:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("*\xe2\x83\xa3"), ":asterisk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("0\xe2\x83\xa3"), ":zero:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("1\xe2\x83\xa3"), ":one:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("2\xe2\x83\xa3"), ":two:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("3\xe2\x83\xa3"), ":three:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("4\xe2\x83\xa3"), ":four:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("5\xe2\x83\xa3"), ":five:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("6\xe2\x83\xa3"), ":six:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("7\xe2\x83\xa3"), ":seven:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("8\xe2\x83\xa3"), ":eight:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("9\xe2\x83\xa3"), ":nine:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x9f"), ":keycap_ten:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xaf"), ":100:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa0"), ":capital_abcd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa1"), ":abcd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa2"), ":1234:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa3"), ":symbols:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xa4"), ":abc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x85\xb0"), ":a:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x8e"), ":ab:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x85\xb1"), ":b:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x91"), ":cl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x92"), ":cool:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x93"), ":free:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x84\xb9"), ":information_source:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x94"), ":id:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x93\x82"), ":m:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x95"), ":new:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x96"), ":ng:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x85\xbe"), ":o2:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x97"), ":ok:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x85\xbf"), ":parking:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x98"), ":sos:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x99"), ":up:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x86\x9a"), ":vs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\x81"), ":koko:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\x82"), ":sa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb7"), ":u6708:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb6"), ":u6709:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xaf"), ":u6307:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x89\x90"), ":ideograph_advantage:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb9"), ":u5272:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\x9a"), ":u7121:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb2"), ":u7981:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x89\x91"), ":accept:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb8"), ":u7533:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb4"), ":u5408:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb3"), ":u7a7a:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe3\x8a\x97"), ":congratulations:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe3\x8a\x99"), ":secret:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xba"), ":u55b6:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x88\xb5"), ":u6e80:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x96\xaa"), ":black_small_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x96\xab"), ":white_small_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x97\xbb"), ":white_medium_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x97\xbc"), ":black_medium_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x97\xbd"), ":white_medium_small_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x97\xbe"), ":black_medium_small_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xac\x9b"), ":black_large_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\xac\x9c"), ":white_large_square:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb6"), ":large_orange_diamond:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb7"), ":large_blue_diamond:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb8"), ":small_orange_diamond:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb9"), ":small_blue_diamond:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xba"), ":small_red_triangle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xbb"), ":small_red_triangle_down:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x92\xa0"), ":diamond_shape_with_a_dot_inside:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\x98"), ":radio_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb2"), ":black_square_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb3"), ":white_square_button:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xaa"), ":white_circle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xe2\x9a\xab"), ":black_circle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb4"), ":red_circle:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x94\xb5"), ":blue_circle:" }), -}; - -const QVariantList EmojiModel::flags = { - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xa8"), ":flag_ac:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xa9"), ":flag_ad:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xaa"), ":flag_ae:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xab"), ":flag_af:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xac"), ":flag_ag:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xae"), ":flag_ai:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb1"), ":flag_al:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb2"), ":flag_am:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb4"), ":flag_ao:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb6"), ":flag_aq:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb7"), ":flag_ar:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb8"), ":flag_as:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xb9"), ":flag_at:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xba"), ":flag_au:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbc"), ":flag_aw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbd"), ":flag_ax:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa6\xf0\x9f\x87\xbf"), ":flag_az:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa6"), ":flag_ba:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa7"), ":flag_bb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xa9"), ":flag_bd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xaa"), ":flag_be:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xab"), ":flag_bf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xac"), ":flag_bg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xad"), ":flag_bh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xae"), ":flag_bi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xaf"), ":flag_bj:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb1"), ":flag_bl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb2"), ":flag_bm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb3"), ":flag_bn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb4"), ":flag_bo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb6"), ":flag_bq:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb7"), ":flag_br:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb8"), ":flag_bs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xb9"), ":flag_bt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbb"), ":flag_bv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbc"), ":flag_bw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbe"), ":flag_by:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa7\xf0\x9f\x87\xbf"), ":flag_bz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa6"), ":flag_ca:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa8"), ":flag_cc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xa9"), ":flag_cd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xab"), ":flag_cf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xac"), ":flag_cg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xad"), ":flag_ch:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xae"), ":flag_ci:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb0"), ":flag_ck:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb1"), ":flag_cl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb2"), ":flag_cm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb3"), ":flag_cn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb4"), ":flag_co:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb5"), ":flag_cp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xb7"), ":flag_cr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xba"), ":flag_cu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbb"), ":flag_cv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbc"), ":flag_cw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbd"), ":flag_cx:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbe"), ":flag_cy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa8\xf0\x9f\x87\xbf"), ":flag_cz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xaa"), ":flag_de:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xac"), ":flag_dg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xaf"), ":flag_dj:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb0"), ":flag_dk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb2"), ":flag_dm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xb4"), ":flag_do:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xa9\xf0\x9f\x87\xbf"), ":flag_dz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xa6"), ":flag_ea:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xa8"), ":flag_ec:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xaa"), ":flag_ee:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xac"), ":flag_eg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xad"), ":flag_eh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb7"), ":flag_er:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb8"), ":flag_es:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xb9"), ":flag_et:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaa\xf0\x9f\x87\xba"), ":flag_eu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xae"), ":flag_fi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xaf"), ":flag_fj:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb0"), ":flag_fk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb2"), ":flag_fm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb4"), ":flag_fo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xab\xf0\x9f\x87\xb7"), ":flag_fr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa6"), ":flag_ga:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa7"), ":flag_gb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xa9"), ":flag_gd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xaa"), ":flag_ge:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xab"), ":flag_gf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xac"), ":flag_gg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xad"), ":flag_gh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xae"), ":flag_gi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb1"), ":flag_gl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb2"), ":flag_gm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb3"), ":flag_gn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb5"), ":flag_gp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb6"), ":flag_gq:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb7"), ":flag_gr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb8"), ":flag_gs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xb9"), ":flag_gt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xba"), ":flag_gu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xbc"), ":flag_gw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xac\xf0\x9f\x87\xbe"), ":flag_gy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb0"), ":flag_hk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb2"), ":flag_hm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb3"), ":flag_hn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb7"), ":flag_hr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xb9"), ":flag_ht:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xad\xf0\x9f\x87\xba"), ":flag_hu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xa8"), ":flag_ic:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xa9"), ":flag_id:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xaa"), ":flag_ie:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb1"), ":flag_il:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb2"), ":flag_im:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb3"), ":flag_in:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb4"), ":flag_io:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb6"), ":flag_iq:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb7"), ":flag_ir:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb8"), ":flag_is:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xae\xf0\x9f\x87\xb9"), ":flag_it:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xaa"), ":flag_je:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb2"), ":flag_jm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb4"), ":flag_jo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xaf\xf0\x9f\x87\xb5"), ":flag_jp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xaa"), ":flag_ke:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xac"), ":flag_kg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xad"), ":flag_kh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xae"), ":flag_ki:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb2"), ":flag_km:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb3"), ":flag_kn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb5"), ":flag_kp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xb7"), ":flag_kr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbc"), ":flag_kw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbe"), ":flag_ky:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb0\xf0\x9f\x87\xbf"), ":flag_kz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa6"), ":flag_la:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa7"), ":flag_lb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xa8"), ":flag_lc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xae"), ":flag_li:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb0"), ":flag_lk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb7"), ":flag_lr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb8"), ":flag_ls:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xb9"), ":flag_lt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xba"), ":flag_lu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xbb"), ":flag_lv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb1\xf0\x9f\x87\xbe"), ":flag_ly:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa6"), ":flag_ma:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa8"), ":flag_mc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xa9"), ":flag_md:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xaa"), ":flag_me:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xab"), ":flag_mf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xac"), ":flag_mg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xad"), ":flag_mh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb0"), ":flag_mk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb1"), ":flag_ml:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb2"), ":flag_mm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb3"), ":flag_mn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb4"), ":flag_mo:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb5"), ":flag_mp:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb6"), ":flag_mq:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb7"), ":flag_mr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb8"), ":flag_ms:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xb9"), ":flag_mt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xba"), ":flag_mu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbb"), ":flag_mv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbc"), ":flag_mw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbd"), ":flag_mx:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbe"), ":flag_my:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb2\xf0\x9f\x87\xbf"), ":flag_mz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xa6"), ":flag_na:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xa8"), ":flag_nc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xaa"), ":flag_ne:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xab"), ":flag_nf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xac"), ":flag_ng:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xae"), ":flag_ni:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb1"), ":flag_nl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb4"), ":flag_no:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb5"), ":flag_np:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xb7"), ":flag_nr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xba"), ":flag_nu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb3\xf0\x9f\x87\xbf"), ":flag_nz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb4\xf0\x9f\x87\xb2"), ":flag_om:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xa6"), ":flag_pa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xaa"), ":flag_pe:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xab"), ":flag_pf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xac"), ":flag_pg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xad"), ":flag_ph:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb0"), ":flag_pk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb1"), ":flag_pl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb2"), ":flag_pm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb3"), ":flag_pn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb7"), ":flag_pr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb8"), ":flag_ps:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xb9"), ":flag_pt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xbc"), ":flag_pw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb5\xf0\x9f\x87\xbe"), ":flag_py:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb6\xf0\x9f\x87\xa6"), ":flag_qa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xaa"), ":flag_re:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xb4"), ":flag_ro:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xb8"), ":flag_rs:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xba"), ":flag_ru:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb7\xf0\x9f\x87\xbc"), ":flag_rw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa6"), ":flag_sa:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa7"), ":flag_sb:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa8"), ":flag_sc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xa9"), ":flag_sd:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xaa"), ":flag_se:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xac"), ":flag_sg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xad"), ":flag_sh:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xae"), ":flag_si:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xaf"), ":flag_sj:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb0"), ":flag_sk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb1"), ":flag_sl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb2"), ":flag_sm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb3"), ":flag_sn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb4"), ":flag_so:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb7"), ":flag_sr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb8"), ":flag_ss:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xb9"), ":flag_st:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbb"), ":flag_sv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbd"), ":flag_sx:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbe"), ":flag_sy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb8\xf0\x9f\x87\xbf"), ":flag_sz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa6"), ":flag_ta:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa8"), ":flag_tc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xa9"), ":flag_td:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xab"), ":flag_tf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xac"), ":flag_tg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xad"), ":flag_th:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xaf"), ":flag_tj:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb0"), ":flag_tk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb1"), ":flag_tl:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb2"), ":flag_tm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb3"), ":flag_tn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb4"), ":flag_to:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb7"), ":flag_tr:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xb9"), ":flag_tt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbb"), ":flag_tv:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbc"), ":flag_tw:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xb9\xf0\x9f\x87\xbf"), ":flag_tz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xa6"), ":flag_ua:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xac"), ":flag_ug:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xb2"), ":flag_um:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xb8"), ":flag_us:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xbe"), ":flag_uy:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xba\xf0\x9f\x87\xbf"), ":flag_uz:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xa6"), ":flag_va:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xa8"), ":flag_vc:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xaa"), ":flag_ve:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xac"), ":flag_vg:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xae"), ":flag_vi:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xb3"), ":flag_vn:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbb\xf0\x9f\x87\xba"), ":flag_vu:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbc\xf0\x9f\x87\xab"), ":flag_wf:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbc\xf0\x9f\x87\xb8"), ":flag_ws:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbd\xf0\x9f\x87\xb0"), ":flag_xk:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbe\xf0\x9f\x87\xaa"), ":flag_ye:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbe\xf0\x9f\x87\xb9"), ":flag_yt:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xa6"), ":flag_za:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xb2"), ":flag_zm:" }), - QVariant::fromValue(Emoji { QString::fromUtf8("\xf0\x9f\x87\xbf\xf0\x9f\x87\xbc"), ":flag_zw:" }), -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/emojimodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/emojimodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/emojimodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/emojimodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,137 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -namespace OCC { - -struct Emoji -{ - Emoji(QString u, QString s, bool isCustom = false) - : unicode(std::move(std::move(u))) - , shortname(std::move(std::move(s))) - , isCustom(isCustom) - { - } - Emoji() = default; - - friend QDataStream &operator<<(QDataStream &arch, const Emoji &object) - { - arch << object.unicode; - arch << object.shortname; - return arch; - } - - friend QDataStream &operator>>(QDataStream &arch, Emoji &object) - { - arch >> object.unicode; - arch >> object.shortname; - object.isCustom = object.unicode.startsWith("image://"); - return arch; - } - - QString unicode; - QString shortname; - bool isCustom = false; - - Q_GADGET - Q_PROPERTY(QString unicode MEMBER unicode) - Q_PROPERTY(QString shortname MEMBER shortname) - Q_PROPERTY(bool isCustom MEMBER isCustom) -}; - -class EmojiCategoriesModel : public QAbstractListModel -{ -public: - QVariant data(const QModelIndex &index, int role) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QHash roleNames() const override; - -private: - enum Roles { - EmojiRole = 0, - LabelRole - }; - - struct Category - { - QString emoji; - QString label; - }; - - static const std::vector categories; -}; - -class EmojiModel : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QVariantList model READ model NOTIFY modelChanged) - Q_PROPERTY(QAbstractListModel *emojiCategoriesModel READ emojiCategoriesModel CONSTANT) - - Q_PROPERTY(QVariantList history READ history NOTIFY historyChanged) - - Q_PROPERTY(QVariantList people MEMBER people CONSTANT) - Q_PROPERTY(QVariantList nature MEMBER nature CONSTANT) - Q_PROPERTY(QVariantList food MEMBER food CONSTANT) - Q_PROPERTY(QVariantList activity MEMBER activity CONSTANT) - Q_PROPERTY(QVariantList travel MEMBER travel CONSTANT) - Q_PROPERTY(QVariantList objects MEMBER objects CONSTANT) - Q_PROPERTY(QVariantList symbols MEMBER symbols CONSTANT) - Q_PROPERTY(QVariantList flags MEMBER flags CONSTANT) - -public: - explicit EmojiModel(QObject *parent = nullptr) - : QObject(parent) - { - } - - Q_INVOKABLE QVariantList history() const; - Q_INVOKABLE void setCategory(const QString &category); - Q_INVOKABLE void emojiUsed(const QVariant &modelData); - - QVariantList model() const; - QAbstractListModel *emojiCategoriesModel(); - -signals: - void historyChanged(); - void modelChanged(); - -private: - static const QVariantList people; - static const QVariantList nature; - static const QVariantList food; - static const QVariantList activity; - static const QVariantList travel; - static const QVariantList objects; - static const QVariantList symbols; - static const QVariantList flags; - - QSettings _settings; - QString _category = "history"; - - EmojiCategoriesModel _emojiCategoriesModel; -}; - -} - -Q_DECLARE_METATYPE(OCC::Emoji) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/EmojiPicker.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/EmojiPicker.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/EmojiPicker.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/EmojiPicker.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 - -import com.nextcloud.desktopclient 1.0 as NC - -ColumnLayout { - NC.EmojiModel { - id: emojiModel - } - - signal chosen(string emoji) - - spacing: 0 - - FontMetrics { - id: metrics - } - - ListView { - id: headerLayout - Layout.fillWidth: true - implicitWidth: contentItem.childrenRect.width - implicitHeight: metrics.height * 2 - - orientation: ListView.Horizontal - - model: emojiModel.emojiCategoriesModel - - delegate: ItemDelegate { - width: metrics.height * 2 - height: headerLayout.height - - contentItem: Text { - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: emoji - } - - Rectangle { - anchors.bottom: parent.bottom - - width: parent.width - height: 2 - - visible: ListView.isCurrentItem - - color: "grey" - } - - - onClicked: { - emojiModel.setCategory(label) - } - } - - } - - Rectangle { - height: 1 - Layout.fillWidth: true - color: "grey" - } - - GridView { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.preferredHeight: metrics.height * 8 - - cellWidth: metrics.height * 2 - cellHeight: metrics.height * 2 - - boundsBehavior: Flickable.DragOverBounds - clip: true - - model: emojiModel.model - - delegate: ItemDelegate { - - width: metrics.height * 2 - height: metrics.height * 2 - - contentItem: Text { - anchors.centerIn: parent - text: modelData === undefined ? "" : modelData.unicode - } - - onClicked: { - chosen(modelData.unicode); - emojiModel.emojiUsed(modelData); - } - } - - ScrollBar.vertical: ScrollBar {} - - } - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ErrorBox.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ErrorBox.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ErrorBox.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ErrorBox.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -import QtQuick 2.15 - -import Style 1.0 - -Item { - id: errorBox - - property var text: "" - - property color color: Style.errorBoxTextColor - property color backgroundColor: Style.errorBoxBackgroundColor - property color borderColor: Style.errorBoxBorderColor - - implicitHeight: errorMessage.implicitHeight + 2 * 8 - - Rectangle { - anchors.fill: parent - color: errorBox.backgroundColor - border.color: errorBox.borderColor - } - - Text { - id: errorMessage - - anchors.fill: parent - anchors.margins: 8 - width: parent.width - color: errorBox.color - wrapMode: Text.WordWrap - text: errorBox.text - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/fileactivitylistmodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/fileactivitylistmodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/fileactivitylistmodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/fileactivitylistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "fileactivitylistmodel.h" -#include "folderman.h" -#include "tray/activitylistmodel.h" - -namespace OCC { - -Q_LOGGING_CATEGORY(lcFileActivityListModel, "nextcloud.gui.fileactivitylistmodel", QtInfoMsg) - -FileActivityListModel::FileActivityListModel(QObject *parent) - : ActivityListModel(nullptr, parent) -{ - setDisplayActions(false); -} - -void FileActivityListModel::load(AccountState *accountState, const QString &localPath) -{ - Q_ASSERT(accountState); - if (!accountState || currentlyFetching()) { - return; - } - setAccountState(accountState); - - const auto folder = FolderMan::instance()->folderForPath(localPath); - if (!folder) { - return; - } - - const auto file = folder->fileFromLocalPath(localPath); - SyncJournalFileRecord fileRecord; - if (!folder->journalDb()->getFileRecord(file, &fileRecord) || !fileRecord.isValid()) { - return; - } - - _fileId = fileRecord._fileId; - slotRefreshActivity(); -} - -void FileActivityListModel::startFetchJob() -{ - if (!accountState()->isConnected()) { - return; - } - setCurrentlyFetching(true); - - const QString url(QStringLiteral("ocs/v2.php/apps/activity/api/v2/activity/filter")); - auto job = new JsonApiJob(accountState()->account(), url, this); - QObject::connect(job, &JsonApiJob::jsonReceived, - this, &FileActivityListModel::activitiesReceived); - - QUrlQuery params; - params.addQueryItem(QStringLiteral("sort"), QStringLiteral("asc")); - params.addQueryItem(QStringLiteral("object_type"), "files"); - params.addQueryItem(QStringLiteral("object_id"), _fileId); - job->addQueryParams(params); - setDoneFetching(true); - setHideOldActivities(true); - job->start(); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/fileactivitylistmodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/fileactivitylistmodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/fileactivitylistmodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/fileactivitylistmodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include "accountstate.h" -#include "tray/activitylistmodel.h" - -namespace OCC { - -class FileActivityListModel : public ActivityListModel -{ - Q_OBJECT - -public: - explicit FileActivityListModel(QObject *parent = nullptr); - -public slots: - void load(AccountState *accountState, const QString &fileId); - -protected: - void startFetchJob() override; - -private: - QString _fileId; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folder.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folder.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folder.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folder.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -28,7 +28,7 @@ #include "clientproxy.h" #include "syncengine.h" #include "syncrunfilelog.h" -#include "socketapi/socketapi.h" +#include "socketapi.h" #include "theme.h" #include "filesystem.h" #include "localdiscoverytracker.h" @@ -353,7 +353,7 @@ // The _requestEtagJob is auto deleting itself on finish. Our guard pointer _requestEtagJob will then be null. } -void Folder::etagRetrieved(const QByteArray &etag, const QDateTime &tp) +void Folder::etagRetrieved(const QString &etag, const QDateTime &tp) { // re-enable sync if it was disabled because network was down FolderMan::instance()->setSyncEnabled(true); @@ -367,7 +367,7 @@ _accountState->tagLastSuccessfullETagRequest(tp); } -void Folder::etagRetrievedFromSyncEngine(const QByteArray &etag, const QDateTime &time) +void Folder::etagRetrievedFromSyncEngine(const QString &etag, const QDateTime &time) { qCInfo(lcFolder) << "Root etag from during sync:" << etag; accountState()->tagLastSuccessfullETagRequest(time); @@ -636,9 +636,7 @@ // (suffix-virtual file's pin state is stored at the hydrated path) const auto pin = _vfs->pinState(relativepath); if (pin && *pin == PinState::OnlineOnly) { - if (!_vfs->setPinState(relativepath, PinState::Unspecified)) { - qCWarning(lcFolder) << "Could not set pin state of" << relativepath << "to unspecified"; - } + _vfs->setPinState(relativepath, PinState::Unspecified); } // Add to local discovery @@ -669,39 +667,21 @@ _definition.virtualFilesMode = newMode; startVfs(); - if (newMode != Vfs::Off) { + if (newMode != Vfs::Off) _saveInFoldersWithPlaceholders = true; - switchToVirtualFiles(); - } saveToSettings(); } } void Folder::setRootPinState(PinState state) { - if (!_vfs->setPinState(QString(), state)) { - qCWarning(lcFolder) << "Could not set root pin state of" << _definition.alias; - } + _vfs->setPinState(QString(), state); // We don't actually need discovery, but it's important to recurse // into all folders, so the changes can be applied. slotNextSyncFullLocalDiscovery(); } -void Folder::switchToVirtualFiles() -{ - SyncEngine::switchToVirtualFiles(path(), _journal, *_vfs); - _hasSwitchedToVfs = true; -} - -void Folder::processSwitchedToVirtualFiles() -{ - if (_hasSwitchedToVfs) { - _hasSwitchedToVfs = false; - saveToSettings(); - } -} - bool Folder::supportsSelectiveSync() const { return !virtualFilesEnabled() && !isVfsOnOffSwitchPending(); @@ -875,27 +855,11 @@ _engine->setIgnoreHiddenFiles(_definition.ignoreHiddenFiles); - correctPlaceholderFiles(); - QMetaObject::invokeMethod(_engine.data(), "startSync", Qt::QueuedConnection); emit syncStarted(); } -void Folder::correctPlaceholderFiles() -{ - if (_definition.virtualFilesMode == Vfs::Off) { - return; - } - static const auto placeholdersCorrectedKey = QStringLiteral("placeholders_corrected"); - const auto placeholdersCorrected = _journal.keyValueStoreGetInt(placeholdersCorrectedKey, 0); - if (!placeholdersCorrected) { - qCDebug(lcFolder) << "Make sure all virtual files are placeholder files"; - switchToVirtualFiles(); - _journal.keyValueStoreSet(placeholdersCorrectedKey, true); - } -} - void Folder::setSyncOptions() { SyncOptions opt; @@ -906,15 +870,42 @@ opt._confirmExternalStorage = cfgFile.confirmExternalStorage(); opt._moveFilesToTrash = cfgFile.moveToTrash(); opt._vfs = _vfs; - opt._parallelNetworkJobs = _accountState->account()->isHttp2Supported() ? 20 : 6; - opt._initialChunkSize = cfgFile.chunkSize(); - opt._minChunkSize = cfgFile.minChunkSize(); - opt._maxChunkSize = cfgFile.maxChunkSize(); - opt._targetChunkUploadDuration = cfgFile.targetChunkUploadDuration(); + QByteArray chunkSizeEnv = qgetenv("OWNCLOUD_CHUNK_SIZE"); + if (!chunkSizeEnv.isEmpty()) { + opt._initialChunkSize = chunkSizeEnv.toUInt(); + } else { + opt._initialChunkSize = cfgFile.chunkSize(); + } + QByteArray minChunkSizeEnv = qgetenv("OWNCLOUD_MIN_CHUNK_SIZE"); + if (!minChunkSizeEnv.isEmpty()) { + opt._minChunkSize = minChunkSizeEnv.toUInt(); + } else { + opt._minChunkSize = cfgFile.minChunkSize(); + } + QByteArray maxChunkSizeEnv = qgetenv("OWNCLOUD_MAX_CHUNK_SIZE"); + if (!maxChunkSizeEnv.isEmpty()) { + opt._maxChunkSize = maxChunkSizeEnv.toUInt(); + } else { + opt._maxChunkSize = cfgFile.maxChunkSize(); + } - opt.fillFromEnvironmentVariables(); - opt.verifyChunkSizes(); + int maxParallel = qgetenv("OWNCLOUD_MAX_PARALLEL").toUInt(); + opt._parallelNetworkJobs = maxParallel ? maxParallel : _accountState->account()->isHttp2Supported() ? 20 : 6; + + // Previously min/max chunk size values didn't exist, so users might + // have setups where the chunk size exceeds the new min/max default + // values. To cope with this, adjust min/max to always include the + // initial chunk size value. + opt._minChunkSize = qMin(opt._minChunkSize, opt._initialChunkSize); + opt._maxChunkSize = qMax(opt._maxChunkSize, opt._initialChunkSize); + + QByteArray targetChunkUploadDurationEnv = qgetenv("OWNCLOUD_TARGET_CHUNK_UPLOAD_DURATION"); + if (!targetChunkUploadDurationEnv.isEmpty()) { + opt._targetChunkUploadDuration = std::chrono::milliseconds(targetChunkUploadDurationEnv.toUInt()); + } else { + opt._targetChunkUploadDuration = cfgFile.targetChunkUploadDuration(); + } _engine->setSyncOptions(opt); } @@ -1261,12 +1252,12 @@ return; } - const QString msg = dir == SyncFileItem::Down ? tr("All files in the sync folder \"%1\" folder were deleted on the server.\n" + const QString msg = dir == SyncFileItem::Down ? tr("All files in the sync folder '%1' folder were deleted on the server.\n" "These deletes will be synchronized to your local sync folder, making such files " "unavailable unless you have a right to restore. \n" "If you decide to restore the files, they will be re-synced with the server if you have rights to do so.\n" "If you decide to delete the files, they will be unavailable to you, unless you are the owner.") - : tr("All the files in your local sync folder \"%1\" were deleted. These deletes will be " + : tr("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.\n" "Are you sure you want to sync those actions with the server?\n" "If this was an accident and you decide to keep your files, they will be re-synced from the server."); @@ -1293,11 +1284,6 @@ msgBox->open(); } -QString Folder::fileFromLocalPath(const QString &localPath) const -{ - return localPath.mid(cleanPath().length() + 1); -} - void FolderDefinition::save(QSettings &settings, const FolderDefinition &folder) { settings.setValue(QLatin1String("localPath"), folder.localPath); @@ -1391,5 +1377,4 @@ return SyncJournalDb::makeDbName(localPath, account->url(), targetPath, account->credentials()->user()); } - } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/foldercreationdialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/foldercreationdialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/foldercreationdialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/foldercreationdialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -29,7 +29,7 @@ public: explicit FolderCreationDialog(const QString &destination, QWidget *parent = nullptr); - ~FolderCreationDialog() override; + ~FolderCreationDialog(); private slots: void accept() override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folder.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folder.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folder.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folder.h 2022-01-03 12:25:12.000000000 +0000 @@ -117,7 +117,7 @@ */ Folder(const FolderDefinition &definition, AccountState *accountState, std::unique_ptr vfs, QObject *parent = nullptr); - ~Folder() override; + ~Folder(); using Map = QMap; using MapIterator = QMapIterator; @@ -287,15 +287,9 @@ bool isVfsOnOffSwitchPending() const { return _vfsOnOffPending; } void setVfsOnOffSwitchPending(bool pending) { _vfsOnOffPending = pending; } - void switchToVirtualFiles(); - - void processSwitchedToVirtualFiles(); - /** Whether this folder should show selective sync ui */ bool supportsSelectiveSync() const; - QString fileFromLocalPath(const QString &localPath) const; - signals: void syncStateChange(); void syncStarted(); @@ -382,8 +376,8 @@ void slotItemCompleted(const SyncFileItemPtr &); void slotRunEtagJob(); - void etagRetrieved(const QByteArray &, const QDateTime &tp); - void etagRetrievedFromSyncEngine(const QByteArray &, const QDateTime &time); + void etagRetrieved(const QString &, const QDateTime &tp); + void etagRetrievedFromSyncEngine(const QString &, const QDateTime &time); void slotEmitFinishedDelayed(); @@ -446,8 +440,6 @@ void startVfs(); - void correctPlaceholderFiles(); - AccountStatePtr _accountState; FolderDefinition _definition; QString _canonicalLocalPath; // As returned with QFileInfo:canonicalFilePath. Always ends with "/" @@ -455,7 +447,7 @@ SyncResult _syncResult; QScopedPointer _engine; QPointer _requestEtagJob; - QByteArray _lastEtag; + QString _lastEtag; QElapsedTimer _timeSinceLastSyncDone; QElapsedTimer _timeSinceLastSyncStart; QElapsedTimer _timeSinceLastFullLocalDiscovery; @@ -502,10 +494,6 @@ */ bool _vfsOnOffPending = false; - /** Whether this folder has just switched to VFS or not - */ - bool _hasSwitchedToVfs = false; - /** * Watches this folder's local directory for changes. * diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderman.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderman.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderman.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderman.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,7 +17,7 @@ #include "folder.h" #include "syncresult.h" #include "theme.h" -#include "socketapi/socketapi.h" +#include "socketapi.h" #include "account.h" #include "accountstate.h" #include "accountmanager.h" @@ -211,10 +211,6 @@ emit folderListChanged(_folderMap); - for (const auto folder : _folderMap) { - folder->processSwitchedToVirtualFiles(); - } - return _folderMap.size(); } @@ -296,11 +292,6 @@ SyncJournalDb::maybeMigrateDb(folderDefinition.localPath, folderDefinition.absoluteJournalPath()); } - const auto switchToVfs = isSwitchToVfsNeeded(folderDefinition); - if (switchToVfs) { - folderDefinition.virtualFilesMode = bestAvailableVfsMode(); - } - auto vfs = createVfsFromPlugin(folderDefinition.virtualFilesMode); if (!vfs) { // TODO: Must do better error handling @@ -309,9 +300,6 @@ Folder *f = addFolderInternal(std::move(folderDefinition), account.data(), std::move(vfs)); if (f) { - if (switchToVfs) { - f->switchToVirtualFiles(); - } // Migrate the old "usePlaceholders" setting to the root folder pin state if (settings.value(QLatin1String(versionC), 1).toInt() == 1 && settings.value(QLatin1String("usePlaceholders"), false).toBool()) { @@ -399,7 +387,7 @@ while (QFile::exists(journalDbFile) && !QFile::remove(journalDbFile)) { qCWarning(lcFolderMan) << "Could not remove old db file at" << journalDbFile; int ret = QMessageBox::warning(nullptr, tr("Could not reset folder state"), - tr("An old sync journal \"%1\" was found, " + tr("An old sync journal '%1' was found, " "but could not be removed. Please make sure " "that no application is currently using it.") .arg(QDir::fromNativeSeparators(QDir::cleanPath(journalDbFile))), @@ -849,19 +837,6 @@ return pushFilesAvailable && pushNotifications && pushNotifications->isReady(); } -bool FolderMan::isSwitchToVfsNeeded(const FolderDefinition &folderDefinition) const -{ - auto result = false; - if (ENFORCE_VIRTUAL_FILES_SYNC_FOLDER && - folderDefinition.virtualFilesMode != bestAvailableVfsMode() && - folderDefinition.virtualFilesMode == Vfs::Off && - OCC::Theme::instance()->showVirtualFilesOption()) { - result = true; - } - - return result; -} - void FolderMan::slotEtagPollTimerTimeout() { qCInfo(lcFolderMan) << "Etag poll timer timeout"; @@ -1100,7 +1075,7 @@ // Migration: The first account that's configured for a local folder shall // be saved in a backwards-compatible way. const auto folderList = FolderMan::instance()->map(); - const auto oneAccountOnly = std::none_of(folderList.cbegin(), folderList.cend(), [folder](const auto *other) { + const auto oneAccountOnly = std::none_of(folderList.cbegin(), folderList.cend(), [this, folder](const auto *other) { return other != folder && other->cleanPath() == folder->cleanPath(); }); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderman.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderman.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderman.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderman.h 2022-01-03 12:25:12.000000000 +0000 @@ -62,7 +62,7 @@ { Q_OBJECT public: - ~FolderMan() override; + ~FolderMan(); static FolderMan *instance(); int setupFolders(); @@ -324,8 +324,6 @@ bool pushNotificationsFilesReady(Account *account); - bool isSwitchToVfsNeeded(const FolderDefinition &folderDefinition) const; - QSet _disabledFolders; Folder::Map _folderMap; QString _folderConfigPath; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderstatusmodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderstatusmodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderstatusmodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderstatusmodel.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -907,7 +907,7 @@ // The folders that were undecided or blacklisted and that are now checked should go on the white list. // The user confirmed them already just now. - QStringList toAddToWhiteList = ((oldBlackListSet + folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, &ok).toSet()) - blackListSet).values(); + QStringList toAddToWhiteList = ((oldBlackListSet + folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList, &ok).toSet()) - blackListSet).toList(); if (!toAddToWhiteList.isEmpty()) { auto whiteList = folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok); @@ -970,11 +970,11 @@ if (progress.status() == ProgressInfo::Discovery) { if (!progress._currentDiscoveredRemoteFolder.isEmpty()) { - pi->_overallSyncString = tr("Checking for changes in remote \"%1\"").arg(progress._currentDiscoveredRemoteFolder); + pi->_overallSyncString = tr("Checking for changes in remote '%1'").arg(progress._currentDiscoveredRemoteFolder); emit dataChanged(index(folderIndex), index(folderIndex), roles); return; } else if (!progress._currentDiscoveredLocalFolder.isEmpty()) { - pi->_overallSyncString = tr("Checking for changes in local \"%1\"").arg(progress._currentDiscoveredLocalFolder); + pi->_overallSyncString = tr("Checking for changes in local '%1'").arg(progress._currentDiscoveredLocalFolder); emit dataChanged(index(folderIndex), index(folderIndex), roles); return; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderstatusmodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderstatusmodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderstatusmodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderstatusmodel.h 2022-01-03 12:25:12.000000000 +0000 @@ -42,7 +42,7 @@ enum {FileIdRole = Qt::UserRole+1}; FolderStatusModel(QObject *parent = nullptr); - ~FolderStatusModel() override; + ~FolderStatusModel(); void setAccountState(const AccountState *accountState); Qt::ItemFlags flags(const QModelIndex &) const override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwatcher.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwatcher.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwatcher.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwatcher.h 2022-01-03 12:25:12.000000000 +0000 @@ -53,7 +53,7 @@ public: // Construct, connect signals, call init() explicit FolderWatcher(Folder *folder = nullptr); - ~FolderWatcher() override; + virtual ~FolderWatcher(); /** * @param root Path of the root of the folder diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwatcher_linux.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwatcher_linux.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwatcher_linux.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwatcher_linux.h 2022-01-03 12:25:12.000000000 +0000 @@ -37,7 +37,7 @@ public: FolderWatcherPrivate() = default; FolderWatcherPrivate(FolderWatcher *p, const QString &path); - ~FolderWatcherPrivate() override; + ~FolderWatcherPrivate(); int testWatchCount() const { return _pathToWatch.size(); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwizard.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwizard.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwizard.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwizard.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -181,7 +181,7 @@ auto *dlg = new QInputDialog(this); dlg->setWindowTitle(tr("Create Remote Folder")); - dlg->setLabelText(tr("Enter the name of the new folder to be created below \"%1\":") + dlg->setLabelText(tr("Enter the name of the new folder to be created below '%1':") .arg(parent)); dlg->open(this, SLOT(slotCreateRemoteFolder(QString))); dlg->setAttribute(Qt::WA_DeleteOnClose); @@ -201,19 +201,21 @@ auto *job = new MkColJob(_account, fullPath, this); /* check the owncloud configuration file and query the ownCloud */ - connect(job, &MkColJob::finishedWithoutError, + connect(job, static_cast(&MkColJob::finished), this, &FolderWizardRemotePath::slotCreateRemoteFolderFinished); connect(job, &AbstractNetworkJob::networkError, this, &FolderWizardRemotePath::slotHandleMkdirNetworkError); job->start(); } -void FolderWizardRemotePath::slotCreateRemoteFolderFinished() +void FolderWizardRemotePath::slotCreateRemoteFolderFinished(QNetworkReply::NetworkError error) { - qCDebug(lcWizard) << "webdav mkdir request finished"; - showWarn(tr("Folder was successfully created on %1.").arg(Theme::instance()->appNameGUI())); - slotRefreshFolders(); - _ui.folderEntry->setText(static_cast(sender())->path()); - slotLsColFolderEntry(); + if (error == QNetworkReply::NoError) { + qCDebug(lcWizard) << "webdav mkdir request finished"; + showWarn(tr("Folder was successfully created on %1.").arg(Theme::instance()->appNameGUI())); + slotRefreshFolders(); + _ui.folderEntry->setText(static_cast(sender())->path()); + slotLsColFolderEntry(); + } } void FolderWizardRemotePath::slotHandleMkdirNetworkError(QNetworkReply *reply) @@ -545,11 +547,6 @@ _virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi); _virtualFilesCheckBox->setEnabled(true); _virtualFilesCheckBox->setText(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)"))); - - if (Theme::instance()->enforceVirtualFilesSyncFolder()) { - _virtualFilesCheckBox->setChecked(true); - _virtualFilesCheckBox->setDisabled(true); - } } // } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwizard.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwizard.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/folderwizard.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/folderwizard.h 2022-01-03 12:25:12.000000000 +0000 @@ -53,7 +53,7 @@ Q_OBJECT public: explicit FolderWizardLocalPath(const AccountPtr &account); - ~FolderWizardLocalPath() override; + ~FolderWizardLocalPath(); bool isComplete() const override; void initializePage() override; @@ -80,7 +80,7 @@ Q_OBJECT public: explicit FolderWizardRemotePath(const AccountPtr &account); - ~FolderWizardRemotePath() override; + ~FolderWizardRemotePath(); bool isComplete() const override; @@ -92,7 +92,7 @@ void showWarn(const QString & = QString()) const; void slotAddRemoteFolder(); void slotCreateRemoteFolder(const QString &); - void slotCreateRemoteFolderFinished(); + void slotCreateRemoteFolderFinished(QNetworkReply::NetworkError error); void slotHandleMkdirNetworkError(QNetworkReply *); void slotHandleLsColNetworkError(QNetworkReply *); void slotUpdateDirectories(const QStringList &); @@ -124,7 +124,7 @@ Q_OBJECT public: explicit FolderWizardSelectiveSync(const AccountPtr &account); - ~FolderWizardSelectiveSync() override; + ~FolderWizardSelectiveSync(); bool validatePage() override; @@ -154,7 +154,7 @@ }; explicit FolderWizard(AccountPtr account, QWidget *parent = nullptr); - ~FolderWizard() override; + ~FolderWizard(); bool eventFilter(QObject *watched, QEvent *event) override; void resizeEvent(QResizeEvent *event) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/generalsettings.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/generalsettings.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/generalsettings.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/generalsettings.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -21,7 +21,6 @@ #include "configfile.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" -#include "guiutility.h" #if defined(BUILD_UPDATER) #include "updater/updater.h" @@ -276,13 +275,8 @@ connect(_ui->updateButton, &QAbstractButton::clicked, this, &GeneralSettings::slotUpdateCheckNow, Qt::UniqueConnection); connect(_ui->autoCheckForUpdatesCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleAutoUpdateCheck); - QString status = ocupdater->statusString(OCUpdater::UpdateStatusStringFormat::Html); + QString status = ocupdater->statusString(); Theme::replaceLinkColorStringBackgroundAware(status); - - _ui->updateStateLabel->setOpenExternalLinks(false); - connect(_ui->updateStateLabel, &QLabel::linkActivated, this, [](const QString &link) { - Utility::openBrowser(QUrl(link)); - }); _ui->updateStateLabel->setText(status); _ui->restartButton->setVisible(ocupdater->downloadState() == OCUpdater::DownloadComplete); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/generalsettings.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/generalsettings.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/generalsettings.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/generalsettings.h 2022-01-03 12:25:12.000000000 +0000 @@ -36,7 +36,7 @@ public: explicit GeneralSettings(QWidget *parent = nullptr); - ~GeneralSettings() override; + ~GeneralSettings(); QSize sizeHint() const override; public slots: diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconjob.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconjob.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,41 @@ +/* + * Copyright (C) by Camila Ayres + * + * 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 "iconjob.h" + +namespace OCC { + +IconJob::IconJob(const QUrl &url, QObject *parent) : + QObject(parent) +{ + connect(&_accessManager, &QNetworkAccessManager::finished, + this, &IconJob::finished); + + QNetworkRequest request(url); +#if (QT_VERSION >= 0x050600) + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); +#endif + _accessManager.get(request); +} + +void IconJob::finished(QNetworkReply *reply) +{ + if (reply->error() != QNetworkReply::NoError) + return; + + reply->deleteLater(); + deleteLater(); + emit jobFinished(reply->readAll()); +} +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconjob.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconjob.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (C) by Camila Ayres + * + * 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 ICONJOB_H +#define ICONJOB_H + +#include +#include +#include +#include +#include + +namespace OCC { + +/** + * @brief Job to fetch a icon + * @ingroup gui + */ +class IconJob : public QObject +{ + Q_OBJECT +public: + explicit IconJob(const QUrl &url, QObject *parent = nullptr); + +signals: + void jobFinished(QByteArray iconData); + +private slots: + void finished(QNetworkReply *reply); + +private: + QNetworkAccessManager _accessManager; +}; +} + +#endif // ICONJOB_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconutils.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconutils.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconutils.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconutils.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 "iconutils.h" - -#include - -#include -#include -#include -#include -#include - -namespace { -QString findSvgFilePath(const QString &fileName, const QStringList &possibleColors) -{ - QString result; - result = QString{OCC::Theme::themePrefix} + fileName; - if (QFile::exists(result)) { - return result; - } else { - for (const auto &color : possibleColors) { - result = QString{OCC::Theme::themePrefix} + color + QStringLiteral("/") + fileName; - - if (QFile::exists(result)) { - return result; - } - } - result.clear(); - } - - return result; -} -} - -namespace OCC { -namespace Ui { -namespace IconUtils { -Q_LOGGING_CATEGORY(lcIconUtils, "nextcloud.gui.iconutils", QtInfoMsg) -QPixmap pixmapForBackground(const QString &fileName, const QColor &backgroundColor) -{ - Q_ASSERT(!fileName.isEmpty()); - - const auto pixmapColor = backgroundColor.isValid() && !Theme::isDarkColor(backgroundColor) - ? QColorConstants::Svg::black - : QColorConstants::Svg::white; - ; - return createSvgPixmapWithCustomColorCached(fileName, pixmapColor); -} - -QImage createSvgImageWithCustomColor(const QString &fileName, const QColor &customColor, QSize *originalSize, const QSize &requestedSize) -{ - Q_ASSERT(!fileName.isEmpty()); - Q_ASSERT(customColor.isValid()); - - QImage result{}; - - if (fileName.isEmpty() || !customColor.isValid()) { - qWarning(lcIconUtils) << "invalid fileName or customColor"; - return result; - } - - // some icons are present in white or black only, so, we need to check both when needed - const auto iconBaseColors = QStringList{QStringLiteral("black"), QStringLiteral("white")}; - - // check if there is an existing image matching the custom color - { - const auto customColorName = [&customColor]() { - auto result = customColor.name(); - if (result.startsWith(QStringLiteral("#"))) { - if (result == QStringLiteral("#000000")) { - result = QStringLiteral("black"); - } - if (result == QStringLiteral("#ffffff")) { - result = QStringLiteral("white"); - } - } - return result; - }(); - - if (iconBaseColors.contains(customColorName)) { - result = QImage{QString{OCC::Theme::themePrefix} + customColorName + QStringLiteral("/") + fileName}; - if (!result.isNull()) { - return result; - } - } - } - - // find the first matching svg file - const auto sourceSvg = findSvgFilePath(fileName, iconBaseColors); - - Q_ASSERT(!sourceSvg.isEmpty()); - if (sourceSvg.isEmpty()) { - qWarning(lcIconUtils) << "Failed to find base SVG file for" << fileName; - return result; - } - - result = drawSvgWithCustomFillColor(sourceSvg, customColor, originalSize, requestedSize); - - Q_ASSERT(!result.isNull()); - if (result.isNull()) { - qWarning(lcIconUtils) << "Failed to load pixmap for" << fileName; - } - - return result; -} - -QPixmap createSvgPixmapWithCustomColorCached(const QString &fileName, const QColor &customColor, QSize *originalSize, const QSize &requestedSize) -{ - QPixmap cachedPixmap; - - const auto customColorName = customColor.name(); - - const QString cacheKey = fileName + QStringLiteral(",") + customColorName; - - // check for existing QPixmap in cache - if (QPixmapCache::find(cacheKey, &cachedPixmap)) { - if (originalSize) { - *originalSize = {}; - } - return cachedPixmap; - } - - cachedPixmap = QPixmap::fromImage(createSvgImageWithCustomColor(fileName, customColor, originalSize, requestedSize)); - - if (!cachedPixmap.isNull()) { - QPixmapCache::insert(cacheKey, cachedPixmap); - } - - return cachedPixmap; -} - -QImage drawSvgWithCustomFillColor( - const QString &sourceSvgPath, const QColor &fillColor, QSize *originalSize, const QSize &requestedSize) -{ - QSvgRenderer svgRenderer; - - if (!svgRenderer.load(sourceSvgPath)) { - qCWarning(lcIconUtils) << "Could no load initial SVG image"; - return {}; - } - - const auto reqSize = requestedSize.isValid() ? requestedSize : svgRenderer.defaultSize(); - - if (originalSize) { - *originalSize = svgRenderer.defaultSize(); - } - - // render source image - QImage svgImage(reqSize, QImage::Format_ARGB32); - { - QPainter svgImagePainter(&svgImage); - svgImage.fill(Qt::GlobalColor::transparent); - svgRenderer.render(&svgImagePainter); - } - - // draw target image with custom fillColor - QImage image(reqSize, QImage::Format_ARGB32); - image.fill(QColor(fillColor)); - { - QPainter imagePainter(&image); - imagePainter.setCompositionMode(QPainter::CompositionMode_DestinationIn); - imagePainter.drawImage(0, 0, svgImage); - } - - return image; -} -} -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconutils.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconutils.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/iconutils.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/iconutils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 ICONUTILS_H -#define ICONUTILS_H - -#include -#include - -namespace OCC { -namespace Ui { -namespace IconUtils { -QPixmap pixmapForBackground(const QString &fileName, const QColor &backgroundColor); -QImage createSvgImageWithCustomColor(const QString &fileName, const QColor &customColor, QSize *originalSize = nullptr, const QSize &requestedSize = {}); -QPixmap createSvgPixmapWithCustomColorCached(const QString &fileName, const QColor &customColor, QSize *originalSize = nullptr, const QSize &requestedSize = {}); -QImage drawSvgWithCustomFillColor(const QString &sourceSvgPath, const QColor &fillColor, QSize *originalSize = nullptr, const QSize &requestedSize = {}); -} -} -} -#endif // ICONUTILS_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisteditor.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisteditor.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisteditor.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisteditor.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -37,7 +37,7 @@ ConfigFile cfgFile; //FIXME This is not true. The entries are hardcoded below in setupTableReadOnlyItems - readOnlyTooltip = tr("This entry is provided by the system at \"%1\" " + readOnlyTooltip = tr("This entry is provided by the system at '%1' " "and cannot be modified in this view.") .arg(QDir::toNativeSeparators(cfgFile.excludeFile(ConfigFile::SystemScope))); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisteditor.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisteditor.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisteditor.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisteditor.h 2022-01-03 12:25:12.000000000 +0000 @@ -36,7 +36,7 @@ public: IgnoreListEditor(QWidget *parent = nullptr); - ~IgnoreListEditor() override; + ~IgnoreListEditor(); bool ignoreHiddenFiles(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisttablewidget.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisttablewidget.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisttablewidget.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisttablewidget.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -91,7 +91,7 @@ } } else { QMessageBox::warning(this, tr("Could not open file"), - tr("Cannot write changes to \"%1\".").arg(file)); + tr("Cannot write changes to '%1'.").arg(file)); } ignores.close(); //close the file before reloading stuff. diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisttablewidget.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisttablewidget.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ignorelisttablewidget.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ignorelisttablewidget.h 2022-01-03 12:25:12.000000000 +0000 @@ -16,7 +16,7 @@ public: IgnoreListTableWidget(QWidget *parent = nullptr); - ~IgnoreListTableWidget() override; + ~IgnoreListTableWidget(); void readIgnoreFile(const QString &file, bool readOnly = false); int addPattern(const QString &pattern, bool deletable, bool readOnly); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,184 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "invalidfilenamedialog.h" -#include "accountfwd.h" -#include "common/syncjournalfilerecord.h" -#include "propagateremotemove.h" -#include "ui_invalidfilenamedialog.h" - -#include - -#include -#include -#include -#include -#include -#include - -#include - -namespace { -constexpr std::array illegalCharacters({ '\\', '/', ':', '?', '*', '\"', '<', '>', '|' }); - -QVector getIllegalCharsFromString(const QString &string) -{ - QVector result; - for (const auto &character : string) { - if (std::find(illegalCharacters.begin(), illegalCharacters.end(), character) - != illegalCharacters.end()) { - result.push_back(character); - } - } - return result; -} - -QString illegalCharacterListToString(const QVector &illegalCharacters) -{ - QString illegalCharactersString; - if (illegalCharacters.size() > 0) { - illegalCharactersString += illegalCharacters[0]; - } - - for (int i = 1; i < illegalCharacters.count(); ++i) { - if (illegalCharactersString.contains(illegalCharacters[i])) { - continue; - } - illegalCharactersString += " " + illegalCharacters[i]; - } - return illegalCharactersString; -} -} - -namespace OCC { - -InvalidFilenameDialog::InvalidFilenameDialog(AccountPtr account, Folder *folder, QString filePath, QWidget *parent) - : QDialog(parent) - , _ui(new Ui::InvalidFilenameDialog) - , _account(account) - , _folder(folder) - , _filePath(std::move(filePath)) -{ - Q_ASSERT(_account); - Q_ASSERT(_folder); - - const auto filePathFileInfo = QFileInfo(_filePath); - _relativeFilePath = filePathFileInfo.path() + QStringLiteral("/"); - _relativeFilePath = _relativeFilePath.replace(folder->path(), QStringLiteral("")); - _relativeFilePath = _relativeFilePath.isEmpty() ? QStringLiteral("") : _relativeFilePath + QStringLiteral("/"); - - _originalFileName = _relativeFilePath + filePathFileInfo.fileName(); - - _ui->setupUi(this); - _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - _ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Rename file")); - - _ui->descriptionLabel->setText(tr("The file %1 could not be synced because the name contains characters which are not allowed on this system.").arg(_originalFileName)); - _ui->explanationLabel->setText(tr("The following characters are not allowed on the system: * \" | & ? , ; : \\ / ~ < >")); - _ui->filenameLineEdit->setText(filePathFileInfo.fileName()); - - connect(_ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(_ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - - connect(_ui->filenameLineEdit, &QLineEdit::textChanged, this, - &InvalidFilenameDialog::onFilenameLineEditTextChanged); - - checkIfAllowedToRename(); -} - -InvalidFilenameDialog::~InvalidFilenameDialog() = default; - -void InvalidFilenameDialog::checkIfAllowedToRename() -{ - const auto propfindJob = new PropfindJob(_account, QDir::cleanPath(_folder->remotePath() + _originalFileName)); - propfindJob->setProperties({ "http://owncloud.org/ns:permissions" }); - connect(propfindJob, &PropfindJob::result, this, &InvalidFilenameDialog::onPropfindPermissionSuccess); - propfindJob->start(); -} - -void InvalidFilenameDialog::onPropfindPermissionSuccess(const QVariantMap &values) -{ - if (!values.contains("permissions")) { - return; - } - const auto remotePermissions = RemotePermissions::fromServerString(values["permissions"].toString()); - if (!remotePermissions.hasPermission(remotePermissions.CanRename) - || !remotePermissions.hasPermission(remotePermissions.CanMove)) { - _ui->errorLabel->setText( - tr("You don't have the permission to rename this file. Please ask the author of the file to rename it.")); - _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - _ui->filenameLineEdit->setEnabled(false); - } -} - -void InvalidFilenameDialog::accept() -{ - _newFilename = _relativeFilePath + _ui->filenameLineEdit->text().trimmed(); - const auto propfindJob = new PropfindJob(_account, QDir::cleanPath(_folder->remotePath() + _newFilename)); - connect(propfindJob, &PropfindJob::result, this, &InvalidFilenameDialog::onRemoteFileAlreadyExists); - connect(propfindJob, &PropfindJob::finishedWithError, this, &InvalidFilenameDialog::onRemoteFileDoesNotExist); - propfindJob->start(); -} - -void InvalidFilenameDialog::onFilenameLineEditTextChanged(const QString &text) -{ - const auto isNewFileNameDifferent = text != _originalFileName; - const auto illegalContainedCharacters = getIllegalCharsFromString(text); - const auto containsIllegalChars = !illegalContainedCharacters.empty() || text.endsWith(QLatin1Char('.')); - const auto isTextValid = isNewFileNameDifferent && !containsIllegalChars; - - if (isTextValid) { - _ui->errorLabel->setText(""); - } else { - _ui->errorLabel->setText(tr("Filename contains illegal characters: %1") - .arg(illegalCharacterListToString(illegalContainedCharacters))); - } - - _ui->buttonBox->button(QDialogButtonBox::Ok) - ->setEnabled(isTextValid); -} - -void InvalidFilenameDialog::onMoveJobFinished() -{ - const auto job = qobject_cast(sender()); - const auto error = job->reply()->error(); - - if (error != QNetworkReply::NoError) { - _ui->errorLabel->setText(tr("Could not rename file. Please make sure you are connected to the server.")); - return; - } - - QDialog::accept(); -} - -void InvalidFilenameDialog::onRemoteFileAlreadyExists(const QVariantMap &values) -{ - Q_UNUSED(values); - - _ui->errorLabel->setText(tr("Cannot rename file because a file with the same name does already exist on the server. Please pick another name.")); - _ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); -} - -void InvalidFilenameDialog::onRemoteFileDoesNotExist(QNetworkReply *reply) -{ - Q_UNUSED(reply); - - // File does not exist. We can rename it. - const auto remoteSource = QDir::cleanPath(_folder->remotePath() + _originalFileName); - const auto remoteDestionation = QDir::cleanPath(_account->davUrl().path() + _folder->remotePath() + _newFilename); - const auto moveJob = new MoveJob(_account, remoteSource, remoteDestionation, this); - connect(moveJob, &MoveJob::finishedSignal, this, &InvalidFilenameDialog::onMoveJobFinished); - moveJob->start(); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include -#include - -#include - -#include - -namespace OCC { - -class Folder; - -namespace Ui { - class InvalidFilenameDialog; -} - - -class InvalidFilenameDialog : public QDialog -{ - Q_OBJECT - -public: - explicit InvalidFilenameDialog(AccountPtr account, Folder *folder, QString filePath, QWidget *parent = nullptr); - - ~InvalidFilenameDialog() override; - - void accept() override; - -private: - std::unique_ptr _ui; - - AccountPtr _account; - Folder *_folder; - QString _filePath; - QString _relativeFilePath; - QString _originalFileName; - QString _newFilename; - - void onFilenameLineEditTextChanged(const QString &text); - void onMoveJobFinished(); - void onRemoteFileAlreadyExists(const QVariantMap &values); - void onRemoteFileDoesNotExist(QNetworkReply *reply); - void checkIfAllowedToRename(); - void onPropfindPermissionSuccess(const QVariantMap &values); -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.ui nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.ui --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/invalidfilenamedialog.ui 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/invalidfilenamedialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ - - - OCC::InvalidFilenameDialog - - - - 0 - 0 - 411 - 192 - - - - Invalid filename - - - - QLayout::SetDefaultConstraint - - - - - The file could not be synced because it contains characters which are not allowed on this system. - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - false - - - - - - - Error - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - false - - - - - - - Please enter a new name for the file: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - false - - - - - - - New filename - - - - - - - - - - - - 255 - 0 - 0 - - - - - - - - - 255 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/legalnotice.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/legalnotice.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/legalnotice.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/legalnotice.h 2022-01-03 12:25:12.000000000 +0000 @@ -35,7 +35,7 @@ public: explicit LegalNotice(QDialog *parent = nullptr); - ~LegalNotice() override; + ~LegalNotice(); protected: void changeEvent(QEvent *) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/logbrowser.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/logbrowser.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/logbrowser.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/logbrowser.h 2022-01-03 12:25:12.000000000 +0000 @@ -38,7 +38,7 @@ Q_OBJECT public: explicit LogBrowser(QWidget *parent = nullptr); - ~LogBrowser() override; + ~LogBrowser(); protected: void closeEvent(QCloseEvent *) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/main.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/main.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/main.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/main.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -16,7 +16,6 @@ #include #include -#include #ifdef Q_OS_UNIX #include @@ -24,14 +23,9 @@ #endif #include "application.h" -#include "fileactivitylistmodel.h" #include "theme.h" #include "common/utility.h" #include "cocoainitializer.h" -#include "userstatusselectormodel.h" -#include "emojimodel.h" -#include "tray/syncstatussummary.h" -#include "tray/unifiedsearchresultslistmodel.h" #if defined(BUILD_UPDATER) #include "updater/updater.h" @@ -42,7 +36,6 @@ #include #include #include -#include using namespace OCC; @@ -64,21 +57,6 @@ Q_INIT_RESOURCE(resources); Q_INIT_RESOURCE(theme); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "SyncStatusSummary"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "EmojiModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "UserStatusSelectorModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "ActivityListModel"); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "FileActivityListModel"); - qmlRegisterUncreatableType( - "com.nextcloud.desktopclient", 1, 0, "UnifiedSearchResultsListModel", "UnifiedSearchResultsListModel"); - qRegisterMetaType("UnifiedSearchResultsListModel*"); - - qmlRegisterUncreatableType("com.nextcloud.desktopclient", 1, 0, "UserStatus", "Access to Status enum"); - - qRegisterMetaTypeStreamOperators(); - qRegisterMetaType("UserStatus"); - - // Work around a bug in KDE's qqc2-desktop-style which breaks // buttons with icons not based on a name, by forcing a style name // the platformtheme plugin won't try to force qqc2-desktops-style @@ -126,10 +104,6 @@ } #endif - auto surfaceFormat = QSurfaceFormat::defaultFormat(); - surfaceFormat.setOption(QSurfaceFormat::ResetNotification); - QSurfaceFormat::setDefaultFormat(surfaceFormat); - // check a environment variable for core dumps #ifdef Q_OS_UNIX if (!qEnvironmentVariableIsEmpty("OWNCLOUD_CORE_DUMP")) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/networksettings.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/networksettings.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/networksettings.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/networksettings.h 2022-01-03 12:25:12.000000000 +0000 @@ -34,7 +34,7 @@ public: explicit NetworkSettings(QWidget *parent = nullptr); - ~NetworkSettings() override; + ~NetworkSettings(); QSize sizeHint() const override; private slots: diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/notificationconfirmjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/notificationconfirmjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/notificationconfirmjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/notificationconfirmjob.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -56,11 +56,10 @@ const QString replyStr = reply()->readAll(); if (replyStr.contains("")) { - const QRegularExpression rex("(\\d+)"); - const auto rexMatch = rex.match(replyStr); - if (rexMatch.hasMatch()) { + QRegExp rex("(\\d+)"); + if (replyStr.contains(rex)) { // this is a error message coming back from ocs. - replyCode = rexMatch.captured(1).toInt(); + replyCode = rex.cap(1).toInt(); } } emit jobFinished(replyStr, replyCode); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ocssharejob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ocssharejob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ocssharejob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ocssharejob.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -118,17 +118,6 @@ start(); } -void OcsShareJob::setLabel(const QString &shareId, const QString &label) -{ - appendPath(shareId); - setVerb("PUT"); - - addParam(QStringLiteral("label"), label); - _value = label; - - start(); -} - void OcsShareJob::createLinkShare(const QString &path, const QString &name, const QString &password) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ocssharejob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ocssharejob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/ocssharejob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/ocssharejob.h 2022-01-03 12:25:12.000000000 +0000 @@ -96,11 +96,6 @@ */ void setPermissions(const QString &shareId, const Share::Permissions permissions); - - /** - * Set share link label - */ - void setLabel(const QString &shareId, const QString &label); /** * Create a new link share diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/openfilemanager.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/openfilemanager.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/openfilemanager.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/openfilemanager.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -103,7 +103,7 @@ return; #endif - const QString explorer = "explorer.exe "; // FIXME: we trust it's in PATH + QString explorer = "explorer.exe "; // FIXME: we trust it's in PATH QFileInfo fi(localPath); // canonicalFilePath returns empty if the file does not exist @@ -123,7 +123,7 @@ // only around the path. Use setNativeArguments to bypass this logic. p.setNativeArguments(nativeArgs); #endif - p.start(explorer, QStringList {}); + p.start(explorer); p.waitForFinished(5000); } } else if (Utility::isMac()) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudgui.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudgui.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudgui.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudgui.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -415,10 +415,10 @@ if (progress.status() == ProgressInfo::Discovery) { #if 0 if (!progress._currentDiscoveredRemoteFolder.isEmpty()) { - _actionStatus->setText(tr("Checking for changes in remote \"%1\"") + _actionStatus->setText(tr("Checking for changes in remote '%1'") .arg(progress._currentDiscoveredRemoteFolder)); } else if (!progress._currentDiscoveredLocalFolder.isEmpty()) { - _actionStatus->setText(tr("Checking for changes in local \"%1\"") + _actionStatus->setText(tr("Checking for changes in local '%1'") .arg(progress._currentDiscoveredLocalFolder)); } #endif @@ -631,7 +631,19 @@ } } - auto maxSharingPermissions = resharingAllowed? SharePermissions(accountState->account()->capabilities().shareDefaultPermissions()) : SharePermissions({}); + // As a first approximation, set the set of permissions that can be granted + // either to everything (resharing allowed) or nothing (no resharing). + // + // The correct value will be found with a propfind from ShareDialog. + // (we want to show the dialog directly, not wait for the propfind first) + SharePermissions maxSharingPermissions = + SharePermissionRead + | SharePermissionUpdate | SharePermissionCreate | SharePermissionDelete + | SharePermissionShare; + if (!resharingAllowed) { + maxSharingPermissions = {}; + } + ShareDialog *w = nullptr; if (_shareDialogs.contains(localPath) && _shareDialogs[localPath]) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudsetupwizard.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudsetupwizard.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudsetupwizard.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudsetupwizard.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -393,7 +393,7 @@ return; } errorMsg = tr("The authenticated request to the server was redirected to " - "\"%1\". The URL is bad, the server is misconfigured.") + "'%1'. The URL is bad, the server is misconfigured.") .arg(Utility::escape(redirectUrl.toString())); // A 404 is actually a success: we were authorized to know that the folder does @@ -553,28 +553,26 @@ _ocWizard->appendToConfigurationLog(tr("creating folder on Nextcloud: %1").arg(_remoteFolder)); auto *job = new MkColJob(_ocWizard->account(), _remoteFolder, this); - connect(job, &MkColJob::finishedWithError, this, &OwncloudSetupWizard::slotCreateRemoteFolderFinished); - connect(job, &MkColJob::finishedWithoutError, this, [this] { - _ocWizard->appendToConfigurationLog(tr("Remote folder %1 created successfully.").arg(_remoteFolder)); - finalizeSetup(true); - }); + connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); job->start(); } -void OwncloudSetupWizard::slotCreateRemoteFolderFinished(QNetworkReply *reply) +void OwncloudSetupWizard::slotCreateRemoteFolderFinished(QNetworkReply::NetworkError error) { - auto error = reply->error(); qCDebug(lcWizard) << "** webdav mkdir request finished " << error; // disconnect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)), // this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); bool success = true; - if (error == 202) { + + if (error == QNetworkReply::NoError) { + _ocWizard->appendToConfigurationLog(tr("Remote folder %1 created successfully.").arg(_remoteFolder)); + } else if (error == 202) { _ocWizard->appendToConfigurationLog(tr("The remote folder %1 already exists. Connecting it for syncing.").arg(_remoteFolder)); } else if (error > 202 && error < 300) { - _ocWizard->displayError(tr("The folder creation resulted in HTTP error code %1").arg(static_cast(error)), false); + _ocWizard->displayError(tr("The folder creation resulted in HTTP error code %1").arg((int)error), false); - _ocWizard->appendToConfigurationLog(tr("The folder creation resulted in HTTP error code %1").arg(static_cast(error))); + _ocWizard->appendToConfigurationLog(tr("The folder creation resulted in HTTP error code %1").arg((int)error)); } else if (error == QNetworkReply::OperationCanceledError) { _ocWizard->displayError(tr("The remote folder creation failed because the provided credentials " "are wrong!" @@ -596,6 +594,9 @@ void OwncloudSetupWizard::finalizeSetup(bool success) { + // enable/disable the finish button. + _ocWizard->enableFinishOnResultWidget(success); + const QString localFolder = _ocWizard->property("localFolder").toString(); if (success) { if (!(localFolder.isEmpty() || _remoteFolder.isEmpty())) { @@ -684,7 +685,6 @@ } // notify others. - _ocWizard->done(QWizard::Accepted); emit ownCloudWizardDone(result); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudsetupwizard.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudsetupwizard.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/owncloudsetupwizard.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/owncloudsetupwizard.h 2022-01-03 12:25:12.000000000 +0000 @@ -65,13 +65,13 @@ void slotCreateLocalAndRemoteFolders(const QString &, const QString &); void slotRemoteFolderExists(QNetworkReply *); - void slotCreateRemoteFolderFinished(QNetworkReply *reply); + void slotCreateRemoteFolderFinished(QNetworkReply::NetworkError); void slotAssistantFinished(int); void slotSkipFolderConfiguration(); private: explicit OwncloudSetupWizard(QObject *parent = nullptr); - ~OwncloudSetupWizard() override; + ~OwncloudSetupWizard(); void startWizard(); void testOwnCloudConnect(); void createRemoteFolder(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/profilepagewidget.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/profilepagewidget.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/profilepagewidget.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/profilepagewidget.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -#include "profilepagewidget.h" -#include "guiutility.h" -#include "ocsprofileconnector.h" - -namespace OCC { - -ProfilePageMenu::ProfilePageMenu(AccountPtr account, const QString &shareWithUserId, QWidget *parent) - : QWidget(parent) - , _profileConnector(account) -{ - connect(&_profileConnector, &OcsProfileConnector::hovercardFetched, this, &ProfilePageMenu::onHovercardFetched); - connect(&_profileConnector, &OcsProfileConnector::iconLoaded, this, &ProfilePageMenu::onIconLoaded); - _profileConnector.fetchHovercard(shareWithUserId); -} - -ProfilePageMenu::~ProfilePageMenu() = default; - -void ProfilePageMenu::exec(const QPoint &globalPosition) -{ - _menu.exec(globalPosition); -} - -void ProfilePageMenu::onHovercardFetched() -{ - _menu.clear(); - - const auto hovercardActions = _profileConnector.hovercard()._actions; - for (const auto &hovercardAction : hovercardActions) { - const auto action = _menu.addAction(hovercardAction._icon, hovercardAction._title); - const auto link = hovercardAction._link; - connect(action, &QAction::triggered, action, [link](bool) { Utility::openBrowser(link); }); - } -} - -void ProfilePageMenu::onIconLoaded(const std::size_t &hovercardActionIndex) -{ - const auto hovercardActions = _profileConnector.hovercard()._actions; - const auto menuActions = _menu.actions(); - if (hovercardActionIndex >= hovercardActions.size() - || hovercardActionIndex >= static_cast(menuActions.size())) { - return; - } - const auto menuAction = menuActions[static_cast(hovercardActionIndex)]; - menuAction->setIcon(hovercardActions[hovercardActionIndex]._icon); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/profilepagewidget.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/profilepagewidget.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/profilepagewidget.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/profilepagewidget.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -#pragma once - -#include "ocsprofileconnector.h" - -#include -#include -#include -#include - -#include - -namespace OCC { - -class ProfilePageMenu : public QWidget -{ - Q_OBJECT -public: - explicit ProfilePageMenu(AccountPtr account, const QString &shareWithUserId, QWidget *parent = nullptr); - ~ProfilePageMenu() override; - - void exec(const QPoint &globalPosition); - -private: - void onHovercardFetched(); - void onIconLoaded(const std::size_t &hovercardActionIndex); - - OcsProfileConnector _profileConnector; - QMenu _menu; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/proxyauthdialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/proxyauthdialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/proxyauthdialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/proxyauthdialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -34,7 +34,7 @@ public: explicit ProxyAuthDialog(QWidget *parent = nullptr); - ~ProxyAuthDialog() override; + ~ProxyAuthDialog(); void setProxyAddress(const QString &address); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/proxyauthhandler.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/proxyauthhandler.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/proxyauthhandler.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/proxyauthhandler.h 2022-01-03 12:25:12.000000000 +0000 @@ -49,7 +49,7 @@ public: static ProxyAuthHandler *instance(); - ~ProxyAuthHandler() override; + virtual ~ProxyAuthHandler(); public slots: /// Intended for QNetworkAccessManager::proxyAuthenticationRequired() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/settingsdialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/settingsdialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/settingsdialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/settingsdialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -49,7 +49,7 @@ public: explicit SettingsDialog(ownCloudGui *gui, QWidget *parent = nullptr); - ~SettingsDialog() override; + ~SettingsDialog(); QWidget* currentPage(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharedialog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharedialog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharedialog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharedialog.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -96,8 +96,8 @@ QString ocDir(_sharePath); ocDir.truncate(ocDir.length() - fileName.length()); - ocDir.replace(QRegularExpression("^/*"), ""); - ocDir.replace(QRegularExpression("/*$"), ""); + ocDir.replace(QRegExp("^/*"), ""); + ocDir.replace(QRegExp("/*$"), ""); // Laying this out is complex because sharePath // may be in use or not. diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharedialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharedialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharedialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharedialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -51,7 +51,7 @@ const QByteArray &numericFileId, ShareDialogStartPage startPage, QWidget *parent = nullptr); - ~ShareDialog() override; + ~ShareDialog(); private slots: void done(int r) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharelinkwidget.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharelinkwidget.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharelinkwidget.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharelinkwidget.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -20,7 +20,6 @@ #include "guiutility.h" #include "sharemanager.h" #include "theme.h" -#include "elidedlabel.h" #include "QProgressIndicator.h" #include @@ -79,10 +78,11 @@ connect(_ui->confirmPassword, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCreatePassword); connect(_ui->confirmNote, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCreateNote); connect(_ui->confirmExpirationDate, &QAbstractButton::clicked, this, &ShareLinkWidget::slotSetExpireDate); + connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotSetExpireDate); _ui->errorLabel->hide(); - auto sharingPossible = true; + bool sharingPossible = true; if (!_account->capabilities().sharePublicLink()) { qCWarning(lcShareLink) << "Link shares have been disabled"; sharingPossible = false; @@ -103,6 +103,7 @@ togglePasswordOptions(false); toggleExpireDateOptions(false); toggleNoteOptions(false); + _ui->calendar->setMinimumDate(QDate::currentDate().addDays(1)); _ui->noteProgressIndicator->setVisible(false); _ui->passwordProgressIndicator->setVisible(false); @@ -121,7 +122,7 @@ delete _ui; } -void ShareLinkWidget::slotToggleShareLinkAnimation(const bool start) +void ShareLinkWidget::slotToggleShareLinkAnimation(bool start) { _ui->sharelinkProgressIndicator->setVisible(start); if (start) { @@ -133,19 +134,17 @@ } } -void ShareLinkWidget::toggleButtonAnimation(QToolButton *button, QProgressIndicator *progressIndicator, const QAction *checkedAction) const +void ShareLinkWidget::slotToggleButtonAnimation(QToolButton *button, QProgressIndicator *progressIndicator, bool optionEnabled, bool start) { - auto startAnimation = false; - const auto actionIsChecked = checkedAction->isChecked(); - if (!progressIndicator->isAnimated() && actionIsChecked) { - progressIndicator->startAnimation(); - startAnimation = true; + button->setVisible(optionEnabled && !start); + progressIndicator->setVisible(start); + if (start) { + if (!progressIndicator->isAnimated()) { + progressIndicator->startAnimation(); + } } else { progressIndicator->stopAnimation(); } - - button->setVisible(!startAnimation && actionIsChecked); - progressIndicator->setVisible(startAnimation && actionIsChecked); } void ShareLinkWidget::setLinkShare(QSharedPointer linkShare) @@ -165,15 +164,15 @@ void ShareLinkWidget::setupUiOptions() { + connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireDateSet); connect(_linkShare.data(), &LinkShare::noteSet, this, &ShareLinkWidget::slotNoteSet); connect(_linkShare.data(), &LinkShare::passwordSet, this, &ShareLinkWidget::slotPasswordSet); connect(_linkShare.data(), &LinkShare::passwordSetError, this, &ShareLinkWidget::slotPasswordSetError); - connect(_linkShare.data(), &LinkShare::labelSet, this, &ShareLinkWidget::slotLabelSet); // Prepare permissions check and create group action const QDate expireDate = _linkShare.data()->getExpireDate().isValid() ? _linkShare.data()->getExpireDate() : QDate(); const SharePermissions perm = _linkShare.data()->getPermissions(); - auto checked = false; + bool checked = false; auto *permissionsGroup = new QActionGroup(this); // Prepare sharing menu @@ -190,7 +189,7 @@ } else { checked = (perm == SharePermissionRead); - _readOnlyLinkAction = permissionsGroup->addAction(tr("View only")); + _readOnlyLinkAction = permissionsGroup->addAction(tr("Read only")); _readOnlyLinkAction->setCheckable(true); _readOnlyLinkAction->setChecked(checked); @@ -205,41 +204,6 @@ _allowUploadLinkAction->setCheckable(true); _allowUploadLinkAction->setChecked(checked); } - - _shareLinkElidedLabel = new OCC::ElidedLabel(this); - _shareLinkElidedLabel->setElideMode(Qt::ElideRight); - displayShareLinkLabel(); - _ui->horizontalLayout->insertWidget(2, _shareLinkElidedLabel); - - _shareLinkLayout = new QHBoxLayout(this); - - _shareLinkLabel = new QLabel(this); - _shareLinkLabel->setPixmap(QString(":/client/theme/black/edit.svg")); - _shareLinkLayout->addWidget(_shareLinkLabel); - - _shareLinkEdit = new QLineEdit(this); - connect(_shareLinkEdit, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotCreateLabel); - _shareLinkEdit->setPlaceholderText(tr("Link name")); - _shareLinkEdit->setText(_linkShare.data()->getLabel()); - _shareLinkLayout->addWidget(_shareLinkEdit); - - _shareLinkButton = new QToolButton(this); - connect(_shareLinkButton, &QToolButton::clicked, this, &ShareLinkWidget::slotCreateLabel); - _shareLinkButton->setIcon(QIcon(":/client/theme/confirm.svg")); - _shareLinkButton->setToolButtonStyle(Qt::ToolButtonIconOnly); - _shareLinkLayout->addWidget(_shareLinkButton); - - _shareLinkProgressIndicator = new QProgressIndicator(this); - _shareLinkProgressIndicator->setVisible(false); - _shareLinkLayout->addWidget(_shareLinkProgressIndicator); - - _shareLinkDefaultWidget = new QWidget(this); - _shareLinkDefaultWidget->setLayout(_shareLinkLayout); - - _shareLinkWidgetAction = new QWidgetAction(this); - _shareLinkWidgetAction->setDefaultWidget(_shareLinkDefaultWidget); - _shareLinkWidgetAction->setCheckable(true); - _linkContextMenu->addAction(_shareLinkWidgetAction); // Adds permissions actions (radio button style) if (_isFile) { @@ -257,7 +221,7 @@ if (_linkShare->getNote().isSimpleText() && !_linkShare->getNote().isEmpty()) { _ui->textEdit_note->setText(_linkShare->getNote()); _noteLinkAction->setChecked(true); - toggleNoteOptions(); + showNoteOptions(true); } // Adds action to display password widget (check box) @@ -267,7 +231,7 @@ if (_linkShare.data()->isPasswordSet()) { _passwordProtectLinkAction->setChecked(true); _ui->lineEdit_password->setPlaceholderText(QString::fromUtf8(passwordIsSetPlaceholder)); - togglePasswordOptions(); + showPasswordOptions(true); } // If password is enforced then don't allow users to disable it @@ -285,11 +249,8 @@ if (!expireDate.isNull()) { _ui->calendar->setDate(expireDate); _expirationDateLinkAction->setChecked(true); - toggleExpireDateOptions(); + showExpireDateOptions(true); } - connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotSetExpireDate); - connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireDateSet); - // If expiredate is enforced do not allow disable and set max days if (_account->capabilities().sharePublicLinkEnforceExpireDate()) { @@ -302,7 +263,7 @@ // Adds action to unshare widget (check box) _unshareLinkAction = _linkContextMenu->addAction(QIcon(":/client/theme/delete.svg"), - tr("Delete link")); + tr("Delete share link")); _linkContextMenu->addSeparator(); @@ -324,27 +285,32 @@ // show sharing options _ui->shareLinkToolButton->show(); + //TO DO + //startAnimation(0, height()); + customizeStyle(); } -void ShareLinkWidget::slotCreateNote() +void ShareLinkWidget::setNote(const QString ¬e) { - const auto note = _ui->textEdit_note->toPlainText(); - if (!_linkShare || _linkShare->getNote() == note || note.isEmpty()) { - return; + if (_linkShare) { + slotToggleButtonAnimation(_ui->confirmNote, _ui->noteProgressIndicator, _noteLinkAction->isChecked(), true); + _ui->errorLabel->hide(); + _linkShare->setNote(note); } - - toggleButtonAnimation(_ui->confirmNote, _ui->noteProgressIndicator, _noteLinkAction); - _ui->errorLabel->hide(); - _linkShare->setNote(note); +} + +void ShareLinkWidget::slotCreateNote() +{ + setNote(_ui->textEdit_note->toPlainText()); } void ShareLinkWidget::slotNoteSet() { - toggleButtonAnimation(_ui->confirmNote, _ui->noteProgressIndicator, _noteLinkAction); + slotToggleButtonAnimation(_ui->confirmNote, _ui->noteProgressIndicator, _noteLinkAction->isChecked(), false); } -void ShareLinkWidget::slotCopyLinkShare(const bool clicked) const +void ShareLinkWidget::slotCopyLinkShare(bool clicked) { Q_UNUSED(clicked); @@ -353,7 +319,7 @@ void ShareLinkWidget::slotExpireDateSet() { - toggleButtonAnimation(_ui->confirmExpirationDate, _ui->expirationDateProgressIndicator, _expirationDateLinkAction); + slotToggleButtonAnimation(_ui->confirmExpirationDate, _ui->expirationDateProgressIndicator, _expirationDateLinkAction->isChecked(), false); } void ShareLinkWidget::slotSetExpireDate() @@ -362,7 +328,7 @@ return; } - toggleButtonAnimation(_ui->confirmExpirationDate, _ui->expirationDateProgressIndicator, _expirationDateLinkAction); + slotToggleButtonAnimation(_ui->confirmExpirationDate, _ui->expirationDateProgressIndicator, _expirationDateLinkAction->isChecked(), true); _ui->errorLabel->hide(); _linkShare->setExpireDate(_ui->calendar->date()); } @@ -373,12 +339,12 @@ return; } - toggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction); + slotToggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction->isChecked(), true); _ui->errorLabel->hide(); emit createPassword(_ui->lineEdit_password->text()); } -void ShareLinkWidget::slotCreateShareLink(const bool clicked) +void ShareLinkWidget::slotCreateShareLink(bool clicked) { Q_UNUSED(clicked); slotToggleShareLinkAnimation(true); @@ -387,26 +353,27 @@ void ShareLinkWidget::slotPasswordSet() { - toggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction); - - _ui->lineEdit_password->setText({}); + slotToggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction->isChecked(), false); + _ui->lineEdit_password->setText(QString()); if (_linkShare->isPasswordSet()) { _ui->lineEdit_password->setEnabled(true); _ui->lineEdit_password->setPlaceholderText(QString::fromUtf8(passwordIsSetPlaceholder)); } else { - _ui->lineEdit_password->setPlaceholderText({}); + _ui->lineEdit_password->setPlaceholderText(QString()); } + setupUiOptions(); + emit createPasswordProcessed(); } -void ShareLinkWidget::slotPasswordSetError(const int code, const QString &message) +void ShareLinkWidget::slotPasswordSetError(int code, const QString &message) { - toggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction); + slotToggleButtonAnimation(_ui->confirmPassword, _ui->passwordProgressIndicator, _passwordProtectLinkAction->isChecked(), false); slotServerError(code, message); - togglePasswordOptions(); + showPasswordOptions(true); _ui->lineEdit_password->setFocus(); emit createPasswordProcessed(); } @@ -431,6 +398,9 @@ { slotToggleShareLinkAnimation(false); + // TODO + //startAnimation(height(), 0); + _linkShare.clear(); togglePasswordOptions(false); toggleNoteOptions(false); @@ -438,40 +408,31 @@ emit deleteLinkShare(); } -void ShareLinkWidget::toggleNoteOptions(const bool enable) +void ShareLinkWidget::showNoteOptions(bool show) { - _ui->noteLabel->setVisible(enable); - _ui->textEdit_note->setVisible(enable); - _ui->confirmNote->setVisible(enable); - _ui->textEdit_note->setText(enable && _linkShare ? _linkShare->getNote() : QString()); - - if (!enable && _linkShare && !_linkShare->getNote().isEmpty()) { - _linkShare->setNote({}); - } + _ui->noteLabel->setVisible(show); + _ui->textEdit_note->setVisible(show); + _ui->confirmNote->setVisible(show); } -void ShareLinkWidget::slotAnimationFinished() -{ - emit resizeRequested(); - deleteLater(); -} -void ShareLinkWidget::slotCreateLabel() +void ShareLinkWidget::toggleNoteOptions(bool enable) { - const auto labelText = _shareLinkEdit->text(); - if (!_linkShare || _linkShare->getLabel() == labelText || labelText.isEmpty()) { - return; + showNoteOptions(enable); + + if (enable) { + _ui->textEdit_note->setFocus(); + } else { + // 'deletes' note + if (_linkShare) + _linkShare->setNote(QString()); } - _shareLinkWidgetAction->setChecked(true); - toggleButtonAnimation(_shareLinkButton, _shareLinkProgressIndicator, _shareLinkWidgetAction); - _ui->errorLabel->hide(); - _linkShare->setLabel(_shareLinkEdit->text()); } -void ShareLinkWidget::slotLabelSet() +void ShareLinkWidget::slotAnimationFinished() { - toggleButtonAnimation(_shareLinkButton, _shareLinkProgressIndicator, _shareLinkWidgetAction); - displayShareLinkLabel(); + emit resizeRequested(); + deleteLater(); } void ShareLinkWidget::slotDeleteAnimationFinished() @@ -486,6 +447,7 @@ { slotToggleShareLinkAnimation(message.isEmpty()); + showPasswordOptions(true); if (!message.isEmpty()) { _ui->errorLabel->setText(message); _ui->errorLabel->show(); @@ -493,36 +455,49 @@ _passwordRequired = true; - togglePasswordOptions(); + togglePasswordOptions(true); } -void ShareLinkWidget::togglePasswordOptions(const bool enable) +void ShareLinkWidget::showPasswordOptions(bool show) { - _ui->passwordLabel->setVisible(enable); - _ui->lineEdit_password->setVisible(enable); - _ui->confirmPassword->setVisible(enable); - _ui->lineEdit_password->setFocus(); - - if (!enable && _linkShare && _linkShare->isPasswordSet()) { - _linkShare->setPassword({}); + _ui->passwordLabel->setVisible(show); + _ui->lineEdit_password->setVisible(show); + _ui->confirmPassword->setVisible(show); +} + +void ShareLinkWidget::togglePasswordOptions(bool enable) +{ + showPasswordOptions(enable); + + if (enable) { + _ui->lineEdit_password->setFocus(); + } else { + // 'deletes' password + if (_linkShare) + _linkShare->setPassword(QString()); } } -void ShareLinkWidget::toggleExpireDateOptions(const bool enable) +void ShareLinkWidget::showExpireDateOptions(bool show) { - _ui->expirationLabel->setVisible(enable); - _ui->calendar->setVisible(enable); - _ui->confirmExpirationDate->setVisible(enable); - - const auto date = enable ? _linkShare->getExpireDate() : QDate::currentDate().addDays(1); - _ui->calendar->setDate(date); - _ui->calendar->setMinimumDate(QDate::currentDate().addDays(1)); - _ui->calendar->setMaximumDate( - QDate::currentDate().addDays(_account->capabilities().sharePublicLinkExpireDateDays())); - _ui->calendar->setFocus(); - - if (!enable && _linkShare && _linkShare->getExpireDate().isValid()) { - _linkShare->setExpireDate({}); + _ui->expirationLabel->setVisible(show); + _ui->calendar->setVisible(show); + _ui->confirmExpirationDate->setVisible(show); +} + +void ShareLinkWidget::toggleExpireDateOptions(bool enable) +{ + showExpireDateOptions(enable); + + if (enable) { + const QDate date = QDate::currentDate().addDays(1); + _ui->calendar->setDate(date); + _ui->calendar->setMinimumDate(date); + _ui->calendar->setFocus(); + } else { + // 'deletes' expire date + if (_linkShare) + _linkShare->setExpireDate(QDate()); } } @@ -567,7 +542,7 @@ void ShareLinkWidget::slotLinkContextMenuActionTriggered(QAction *action) { - const auto state = action->isChecked(); + bool state = action->isChecked(); SharePermissions perm = SharePermissionRead; if (action == _addAnotherLinkAction) { @@ -602,7 +577,7 @@ } } -void ShareLinkWidget::slotServerError(const int code, const QString &message) +void ShareLinkWidget::slotServerError(int code, const QString &message) { slotToggleShareLinkAnimation(false); @@ -640,12 +615,4 @@ _ui->passwordProgressIndicator->setColor(QGuiApplication::palette().color(QPalette::Text)); } -void ShareLinkWidget::displayShareLinkLabel() -{ - _shareLinkElidedLabel->clear(); - if (!_linkShare->getLabel().isEmpty()) { - _shareLinkElidedLabel->setText(QString("(%1)").arg(_linkShare->getLabel())); - } -} - } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharelinkwidget.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharelinkwidget.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharelinkwidget.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharelinkwidget.h 2022-01-03 12:25:12.000000000 +0000 @@ -23,10 +23,6 @@ #include #include #include -#include -#include -#include -#include class QMenu; class QTableWidgetItem; @@ -41,7 +37,6 @@ class SyncResult; class LinkShare; class Share; -class ElidedLabel; /** * @brief The ShareDialog class @@ -57,7 +52,7 @@ const QString &localPath, SharePermissions maxSharingPermissions, QWidget *parent = nullptr); - ~ShareLinkWidget() override; + ~ShareLinkWidget(); void toggleButton(bool show); void setupUiOptions(); @@ -69,20 +64,20 @@ public slots: void slotDeleteShareFetched(); - void slotToggleShareLinkAnimation(const bool start); - void slotServerError(const int code, const QString &message); + void slotToggleShareLinkAnimation(bool start); + void slotToggleButtonAnimation(QToolButton *button, QProgressIndicator *progressIndicator, bool optionEnabled, bool start); + void slotServerError(int code, const QString &message); void slotCreateShareRequiresPassword(const QString &message); void slotStyleChanged(); private slots: - void slotCreateShareLink(const bool clicked); - void slotCopyLinkShare(const bool clicked) const; + void slotCreateShareLink(bool clicked); void slotCreatePassword(); void slotPasswordSet(); - void slotPasswordSetError(const int code, const QString &message); + void slotPasswordSetError(int code, const QString &message); - void slotCreateNote(); + void slotCreateNote(); void slotNoteSet(); void slotSetExpireDate(); @@ -93,9 +88,6 @@ void slotDeleteAnimationFinished(); void slotAnimationFinished(); - - void slotCreateLabel(); - void slotLabelSet(); signals: void createLinkShare(); @@ -107,11 +99,18 @@ private: void displayError(const QString &errMsg); - - void togglePasswordOptions(const bool enable = true); - void toggleNoteOptions(const bool enable = true); - void toggleExpireDateOptions(const bool enable = true); - void toggleButtonAnimation(QToolButton *button, QProgressIndicator *progressIndicator, const QAction *checkedAction) const; + + void showPasswordOptions(bool show); + void togglePasswordOptions(bool enable); + + void showNoteOptions(bool show); + void toggleNoteOptions(bool enable); + void setNote(const QString ¬e); + + void showExpireDateOptions(bool show); + void toggleExpireDateOptions(bool enable); + + void slotCopyLinkShare(bool clicked); /** Confirm with the user and then delete the share */ void confirmAndDeleteShare(); @@ -122,8 +121,6 @@ void startAnimation(const int start, const int end); void customizeStyle(); - - void displayShareLinkLabel(); Ui::ShareLinkWidget *_ui; AccountPtr _account; @@ -149,14 +146,6 @@ QAction *_unshareLinkAction; QAction *_addAnotherLinkAction; QAction *_noteLinkAction; - QHBoxLayout *_shareLinkLayout{}; - QLabel *_shareLinkLabel{}; - ElidedLabel *_shareLinkElidedLabel{}; - QLineEdit *_shareLinkEdit{}; - QToolButton *_shareLinkButton{}; - QProgressIndicator *_shareLinkProgressIndicator{}; - QWidget *_shareLinkDefaultWidget{}; - QWidgetAction *_shareLinkWidgetAction{}; }; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharemanager.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharemanager.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharemanager.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharemanager.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -146,12 +146,6 @@ job->deleteShare(getId()); } -bool Share::isShareTypeUserGroupEmailRoomOrRemote(const ShareType type) -{ - return (type == Share::TypeUser || type == Share::TypeGroup || type == Share::TypeEmail || type == Share::TypeRoom - || type == Share::TypeRemote); -} - void Share::slotDeleted() { updateFolder(_account, _path); @@ -201,16 +195,12 @@ Permissions permissions, bool isPasswordSet, const QUrl &url, - const QDate &expireDate, - const QString ¬e, - const QString &label) + const QDate &expireDate) : Share(account, id, uidowner, ownerDisplayName, path, Share::TypeLink, isPasswordSet, permissions) , _name(name) , _token(token) - , _note(note) , _expireDate(expireDate) , _url(url) - , _label(label) { } @@ -234,19 +224,20 @@ return _note; } -QString LinkShare::getLabel() const -{ - return _label; -} - void LinkShare::setName(const QString &name) { - createShareJob(&LinkShare::slotNameSet)->setName(getId(), name); + auto *job = new OcsShareJob(_account); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotNameSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); + job->setName(getId(), name); } void LinkShare::setNote(const QString ¬e) { - createShareJob(&LinkShare::slotNoteSet)->setNote(getId(), note); + auto *job = new OcsShareJob(_account); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotNoteSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); + job->setNote(getId(), note); } void LinkShare::slotNoteSet(const QJsonDocument &, const QVariant ¬e) @@ -262,20 +253,10 @@ void LinkShare::setExpireDate(const QDate &date) { - createShareJob(&LinkShare::slotExpireDateSet)->setExpireDate(getId(), date); -} - -void LinkShare::setLabel(const QString &label) -{ - createShareJob(&LinkShare::slotLabelSet)->setLabel(getId(), label); -} - -template -OcsShareJob *LinkShare::createShareJob(const LinkShareSlot slotFunction) { auto *job = new OcsShareJob(_account); - connect(job, &OcsShareJob::shareJobFinished, this, slotFunction); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotExpireDateSet); connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); - return job; + job->setExpireDate(getId(), date); } void LinkShare::slotExpireDateSet(const QJsonDocument &reply, const QVariant &value) @@ -300,14 +281,6 @@ emit nameSet(); } -void LinkShare::slotLabelSet(const QJsonDocument &, const QVariant &label) -{ - if (_label != label.toString()) { - _label = label.toString(); - emit labelSet(); - } -} - UserGroupShare::UserGroupShare(AccountPtr account, const QString &id, const QString &owner, @@ -323,7 +296,7 @@ , _note(note) , _expireDate(expireDate) { - Q_ASSERT(Share::isShareTypeUserGroupEmailRoomOrRemote(shareType)); + Q_ASSERT(shareType == TypeUser || shareType == TypeGroup || shareType == TypeEmail); Q_ASSERT(shareWith); } @@ -353,11 +326,6 @@ void UserGroupShare::setExpireDate(const QDate &date) { - if (_expireDate == date) { - emit expireDateSet(); - return; - } - auto *job = new OcsShareJob(_account); connect(job, &OcsShareJob::shareJobFinished, this, &UserGroupShare::slotExpireDateSet); connect(job, &OcsJob::ocsError, this, &UserGroupShare::slotOcsError); @@ -493,7 +461,7 @@ if (shareType == Share::TypeLink) { newShare = parseLinkShare(data); - } else if (Share::isShareTypeUserGroupEmailRoomOrRemote(static_cast (shareType))) { + } else if (shareType == Share::TypeGroup || shareType == Share::TypeUser || shareType == Share::TypeEmail) { newShare = parseUserGroupShare(data); } else { newShare = parseShare(data); @@ -556,11 +524,6 @@ if (data.value("expiration").isString()) { expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); } - - QString note; - if (data.value("note").isString()) { - note = data.value("note").toString(); - } return QSharedPointer(new LinkShare(_account, data.value("id").toVariant().toString(), // "id" used to be an integer, support both @@ -572,9 +535,7 @@ (Share::Permissions)data.value("permissions").toInt(), data.value("share_with").isString(), // has password? url, - expireDate, - note, - data.value("label").toString())); + expireDate)); } QSharedPointer ShareManager::parseShare(const QJsonObject &data) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharemanager.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharemanager.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sharemanager.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sharemanager.h 2022-01-03 12:25:12.000000000 +0000 @@ -31,8 +31,6 @@ namespace OCC { -class OcsShareJob; - class Share : public QObject { Q_OBJECT @@ -130,11 +128,6 @@ */ void deleteShare(); - /* - * Is it a share with a user or group (local or remote) - */ - static bool isShareTypeUserGroupEmailRoomOrRemote(const ShareType type); - signals: void permissionsSet(); void shareDeleted(); @@ -182,9 +175,7 @@ const Permissions permissions, bool isPasswordSet, const QUrl &url, - const QDate &expireDate, - const QString ¬e, - const QString &label); + const QDate &expireDate); /* * Get the share link @@ -214,12 +205,8 @@ /* * Returns the note of the link share. */ + QString getNote() const; - - /* - * Returns the label of the link share. - */ - QString getLabel() const; /* * Set the name of the link share. @@ -228,6 +215,7 @@ */ void setName(const QString &name); + /* * Set the note of the link share. */ @@ -250,30 +238,16 @@ * In case of a server error the serverError signal is emitted. */ void setExpireDate(const QDate &expireDate); - - /* - * Set the label of the share link. - */ - void setLabel(const QString &label); - - /* - * Create OcsShareJob and connect to signal/slots - */ - template - OcsShareJob *createShareJob(const LinkShareSlot slotFunction); - - + signals: void expireDateSet(); void noteSet(); void nameSet(); - void labelSet(); private slots: void slotNoteSet(const QJsonDocument &, const QVariant &value); void slotExpireDateSet(const QJsonDocument &reply, const QVariant &value); void slotNameSet(const QJsonDocument &, const QVariant &value); - void slotLabelSet(const QJsonDocument &, const QVariant &value); private: QString _name; @@ -281,7 +255,6 @@ QString _note; QDate _expireDate; QUrl _url; - QString _label; }; class UserGroupShare : public Share diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareusergroupwidget.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareusergroupwidget.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareusergroupwidget.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareusergroupwidget.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -12,9 +12,7 @@ * for more details. */ -#include "ocsprofileconnector.h" #include "sharee.h" -#include "tray/usermodel.h" #include "ui_shareusergroupwidget.h" #include "ui_shareuserline.h" #include "shareusergroupwidget.h" @@ -29,7 +27,6 @@ #include "thumbnailjob.h" #include "sharemanager.h" #include "theme.h" -#include "iconutils.h" #include "QProgressIndicator.h" #include @@ -38,9 +35,7 @@ #include #include #include -#include -#include -#include +#include #include #include #include @@ -51,38 +46,15 @@ #include #include #include -#include -#include -#include #include namespace { -const char *passwordIsSetPlaceholder = "●●●●●●●●"; - + const char *passwordIsSetPlaceholder = "●●●●●●●●"; } namespace OCC { -AvatarEventFilter::AvatarEventFilter(QObject *parent) - : QObject(parent) -{ -} - - -bool AvatarEventFilter::eventFilter(QObject *obj, QEvent *event) -{ - if (event->type() == QEvent::ContextMenu) { - const auto contextMenuEvent = dynamic_cast(event); - if (!contextMenuEvent) { - return false; - } - emit contextMenu(contextMenuEvent->globalPos()); - return true; - } - return QObject::eventFilter(obj, event); -} - ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, const QString &sharePath, const QString &localPath, @@ -275,7 +247,7 @@ } - Q_ASSERT(Share::isShareTypeUserGroupEmailRoomOrRemote(share->getShareType())); + Q_ASSERT(share->getShareType() == Share::TypeUser || share->getShareType() == Share::TypeGroup || share->getShareType() == Share::TypeEmail); auto userGroupShare = qSharedPointerDynamicCast(share); auto *s = new ShareUserLine(_account, userGroupShare, _maxSharingPermissions, _isFile, _parentScrollArea); connect(s, &ShareUserLine::resizeRequested, this, &ShareUserGroupWidget::slotAdjustScrollWidgetSize); @@ -362,7 +334,7 @@ _pi_sharee.stopAnimation(); if (_completerModel->rowCount() == 0) { - displayError(0, tr("No results for \"%1\"").arg(_completerModel->currentSearch())); + displayError(0, tr("No results for '%1'").arg(_completerModel->currentSearch())); } // if no rows are present in the model - complete() will hide the completer @@ -397,30 +369,43 @@ */ _lastCreatedShareId = QString(); - - QString password; - if (sharee->type() == Sharee::Email && _account->capabilities().shareEmailPasswordEnforced()) { - _ui->shareeLineEdit->clear(); - // always show a dialog for password-enforced email shares - bool ok = false; - - do { - password = QInputDialog::getText( - this, - tr("Password for share required"), - tr("Please enter a password for your email share:"), - QLineEdit::Password, - QString(), - &ok); - } while (password.isEmpty() && ok); - - if (!ok) { - return; + + if (sharee->type() == Sharee::Federated + && _account->serverVersionInt() < Account::makeServerVersion(9, 1, 0)) { + int permissions = SharePermissionRead | SharePermissionUpdate; + if (!_isFile) { + permissions |= SharePermissionCreate | SharePermissionDelete; + } + _manager->createShare(_sharePath, Share::ShareType(sharee->type()), + sharee->shareWith(), SharePermission(permissions)); + } else { + QString password; + if (sharee->type() == Sharee::Email && _account->capabilities().shareEmailPasswordEnforced()) { + _ui->shareeLineEdit->clear(); + // always show a dialog for password-enforced email shares + bool ok = false; + + do { + password = QInputDialog::getText( + this, + tr("Password for share required"), + tr("Please enter a password for your email share:"), + QLineEdit::Password, + QString(), + &ok); + } while (password.isEmpty() && ok); + + if (!ok) { + return; + } } + + // Default permissions on creation + int permissions = SharePermissionCreate | SharePermissionUpdate + | SharePermissionDelete | SharePermissionShare; + _manager->createShare(_sharePath, Share::ShareType(sharee->type()), + sharee->shareWith(), SharePermission(permissions), password); } - - _manager->createShare(_sharePath, Share::ShareType(sharee->type()), - sharee->shareWith(), _maxSharingPermissions, password); _ui->shareeLineEdit->setEnabled(false); _ui->shareeLineEdit->clear(); @@ -491,14 +476,16 @@ _ui->shareeLineEdit->setFocus(); } -ShareUserLine::ShareUserLine(AccountPtr account, QSharedPointer share, - SharePermissions maxSharingPermissions, bool isFile, QWidget *parent) +ShareUserLine::ShareUserLine(AccountPtr account, + QSharedPointer share, + SharePermissions maxSharingPermissions, + bool isFile, + QWidget *parent) : QWidget(parent) , _ui(new Ui::ShareUserLine) , _account(account) , _share(share) , _isFile(isFile) - , _profilePageMenu(account, share->getShareWith()->shareWith()) { Q_ASSERT(_share); _ui->setupUi(this); @@ -514,6 +501,7 @@ _ui->permissionsEdit->setEnabled(enabled); connect(_ui->permissionsEdit, &QAbstractButton::clicked, this, &ShareUserLine::slotEditPermissionsChanged); connect(_ui->noteConfirmButton, &QAbstractButton::clicked, this, &ShareUserLine::onNoteConfirmButtonClicked); + connect(_ui->confirmExpirationDate, &QAbstractButton::clicked, this, &ShareUserLine::setExpireDate); connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareUserLine::setExpireDate); connect(_share.data(), &UserGroupShare::noteSet, this, &ShareUserLine::disableProgessIndicatorAnimation); @@ -533,9 +521,10 @@ showNoteOptions(false); - const bool isNoteSupported = _share->getShareType() != Share::ShareType::TypeEmail && _share->getShareType() != Share::ShareType::TypeRoom; + // email shares do not support notes and expiration dates + const bool isNoteAndExpirationDateSupported = _share->getShareType() != Share::ShareType::TypeEmail; - if (isNoteSupported) { + if (isNoteAndExpirationDateSupported) { _noteLinkAction = new QAction(tr("Note to recipient")); _noteLinkAction->setCheckable(true); menu->addAction(_noteLinkAction); @@ -548,9 +537,7 @@ showExpireDateOptions(false); - const bool isExpirationDateSupported = _share->getShareType() != Share::ShareType::TypeEmail; - - if (isExpirationDateSupported) { + if (isNoteAndExpirationDateSupported) { // email shares do not support expiration dates _expirationDateLinkAction = new QAction(tr("Set expiration date")); _expirationDateLinkAction->setCheckable(true); @@ -558,8 +545,9 @@ connect(_expirationDateLinkAction, &QAction::triggered, this, &ShareUserLine::toggleExpireDateOptions); const auto expireDate = _share->getExpireDate().isValid() ? share.data()->getExpireDate() : QDate(); if (!expireDate.isNull()) { + _ui->calendar->setDate(expireDate); _expirationDateLinkAction->setChecked(true); - showExpireDateOptions(true, expireDate); + showExpireDateOptions(true); } } @@ -642,22 +630,11 @@ _permissionReshare->setVisible(false); } - const auto avatarEventFilter = new AvatarEventFilter(_ui->avatar); - connect(avatarEventFilter, &AvatarEventFilter::contextMenu, this, &ShareUserLine::onAvatarContextMenu); - _ui->avatar->installEventFilter(avatarEventFilter); - loadAvatar(); customizeStyle(); } -void ShareUserLine::onAvatarContextMenu(const QPoint &globalPosition) -{ - if (_share->getShareType() == Share::TypeUser) { - _profilePageMenu.exec(globalPosition); - } -} - void ShareUserLine::loadAvatar() { const int avatarSize = 36; @@ -669,28 +646,15 @@ _ui->avatar->setMaximumWidth(avatarSize); _ui->avatar->setAlignment(Qt::AlignCenter); - setDefaultAvatar(avatarSize); - - /* Start the network job to fetch the avatar data. - * - * Currently only regular users can have avatars. - */ - if (_share->getShareWith()->type() == Sharee::User) { - auto *job = new AvatarJob(_share->account(), _share->getShareWith()->shareWith(), avatarSize, this); - connect(job, &AvatarJob::avatarPixmap, this, &ShareUserLine::slotAvatarLoaded); - job->start(); - } -} - -void ShareUserLine::setDefaultAvatar(int avatarSize) -{ /* Create the fallback avatar. * * This will be shown until the avatar image data arrives. */ + const QByteArray hash = QCryptographicHash::hash(_ui->sharedWith->text().toUtf8(), QCryptographicHash::Md5); + double hue = static_cast(hash[0]) / 255.; // See core/js/placeholder.js for details on colors and styling - const auto backgroundColor = backgroundColorForShareeType(_share->getShareWith()->type()); + const QColor bg = QColor::fromHslF(hue, 0.7, 0.68); const QString style = QString(R"(* { color: #fff; background-color: %1; @@ -698,19 +662,21 @@ text-align: center; line-height: %2px; font-size: %2px; - })").arg(backgroundColor.name(), QString::number(avatarSize / 2)); + })").arg(bg.name(), QString::number(avatarSize / 2)); _ui->avatar->setStyleSheet(style); - const auto pixmap = pixmapForShareeType(_share->getShareWith()->type(), backgroundColor); - - if (!pixmap.isNull()) { - _ui->avatar->setPixmap(pixmap); - } else { - qCDebug(lcSharing) << "pixmap is null for share type: " << _share->getShareWith()->type(); + // The avatar label is the first character of the user name. + const QString text = _share->getShareWith()->displayName(); + _ui->avatar->setText(text.at(0).toUpper()); - // The avatar label is the first character of the user name. - const auto text = _share->getShareWith()->displayName(); - _ui->avatar->setText(text.at(0).toUpper()); + /* Start the network job to fetch the avatar data. + * + * Currently only regular users can have avatars. + */ + if (_share->getShareWith()->type() == Sharee::User) { + auto *job = new AvatarJob(_share->account(), _share->getShareWith()->shareWith(), avatarSize, this); + connect(job, &AvatarJob::avatarPixmap, this, &ShareUserLine::slotAvatarLoaded); + job->start(); } } @@ -960,57 +926,13 @@ _deleteShareButton->setIcon(deleteicon); _ui->noteConfirmButton->setIcon(Theme::createColorAwareIcon(":/client/theme/confirm.svg")); + _ui->confirmExpirationDate->setIcon(Theme::createColorAwareIcon(":/client/theme/confirm.svg")); _ui->progressIndicator->setColor(QGuiApplication::palette().color(QPalette::WindowText)); // make sure to force BackgroundRole to QPalette::WindowText for a lable, because it's parent always has a different role set that applies to children unless customized _ui->errorLabel->setBackgroundRole(QPalette::WindowText); } -QPixmap ShareUserLine::pixmapForShareeType(Sharee::Type type, const QColor &backgroundColor) const -{ - switch (type) { - case Sharee::Room: - return Ui::IconUtils::pixmapForBackground(QStringLiteral("talk-app.svg"), backgroundColor); - case Sharee::Email: - return Ui::IconUtils::pixmapForBackground(QStringLiteral("email.svg"), backgroundColor); - case Sharee::Group: - case Sharee::Federated: - case Sharee::Circle: - case Sharee::User: - break; - } - - return {}; -} - -QColor ShareUserLine::backgroundColorForShareeType(Sharee::Type type) const -{ - switch (type) { - case Sharee::Room: - return Theme::instance()->wizardHeaderBackgroundColor(); - case Sharee::Email: - return Theme::instance()->wizardHeaderTitleColor(); - case Sharee::Group: - case Sharee::Federated: - case Sharee::Circle: - case Sharee::User: - break; - } - - const auto calculateBackgroundBasedOnText = [this]() { - const auto hash = QCryptographicHash::hash(_ui->sharedWith->text().toUtf8(), QCryptographicHash::Md5); - Q_ASSERT(hash.size() > 0); - if (hash.size() == 0) { - qCWarning(lcSharing) << "Failed to calculate hash color for share:" << _share->path(); - return QColor{}; - } - const double hue = static_cast(hash[0]) / 255.; - return QColor::fromHslF(hue, 0.7, 0.68); - }; - - return calculateBackgroundBasedOnText(); -} - void ShareUserLine::showNoteOptions(bool show) { _ui->noteLabel->setVisible(show); @@ -1057,21 +979,17 @@ } } -void ShareUserLine::showExpireDateOptions(bool show, const QDate &initialDate) +void ShareUserLine::showExpireDateOptions(bool show) { _ui->expirationLabel->setVisible(show); _ui->calendar->setVisible(show); + _ui->confirmExpirationDate->setVisible(show); if (show) { - _ui->calendar->setMinimumDate(QDate::currentDate().addDays(1)); - _ui->calendar->setDate(initialDate.isValid() ? initialDate : _ui->calendar->minimumDate()); + const QDate date = QDate::currentDate().addDays(1); + _ui->calendar->setDate(date); + _ui->calendar->setMinimumDate(date); _ui->calendar->setFocus(); - - if (enforceExpirationDateForShare(_share->getShareType())) { - _ui->calendar->setMaximumDate(maxExpirationDateForShare(_share->getShareType(), _ui->calendar->maximumDate())); - _expirationDateLinkAction->setChecked(true); - _expirationDateLinkAction->setEnabled(false); - } } emit resizeRequested(); @@ -1113,35 +1031,6 @@ enableProgessIndicatorAnimation(false); } -QDate ShareUserLine::maxExpirationDateForShare(const Share::ShareType type, const QDate &fallbackDate) const -{ - auto daysToExpire = 0; - if (type == Share::ShareType::TypeRemote) { - daysToExpire = _account->capabilities().shareRemoteExpireDateDays(); - } else if (type == Share::ShareType::TypeEmail) { - daysToExpire = _account->capabilities().sharePublicLinkExpireDateDays(); - } else { - daysToExpire = _account->capabilities().shareInternalExpireDateDays(); - } - - if (daysToExpire > 0) { - return QDate::currentDate().addDays(daysToExpire); - } - - return fallbackDate; -} - -bool ShareUserLine::enforceExpirationDateForShare(const Share::ShareType type) const -{ - if (type == Share::ShareType::TypeRemote) { - return _account->capabilities().shareRemoteEnforceExpireDate(); - } else if (type == Share::ShareType::TypeEmail) { - return _account->capabilities().sharePublicLinkEnforceExpireDate(); - } - - return _account->capabilities().shareInternalEnforceExpireDate(); -} - void ShareUserLine::setPasswordConfirmed() { if (_ui->lineEdit_password->text().isEmpty()) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareusergroupwidget.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareusergroupwidget.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareusergroupwidget.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareusergroupwidget.h 2022-01-03 12:25:12.000000000 +0000 @@ -19,7 +19,6 @@ #include "sharemanager.h" #include "sharepermissions.h" #include "sharee.h" -#include "profilepagewidget.h" #include "QProgressIndicator.h" #include #include @@ -27,7 +26,6 @@ #include #include #include -#include #include class QAction; @@ -46,21 +44,6 @@ class Share; class ShareManager; -class AvatarEventFilter : public QObject -{ - Q_OBJECT - -public: - explicit AvatarEventFilter(QObject *parent = nullptr); - -signals: - void clicked(); - void contextMenu(const QPoint &globalPosition); - -protected: - bool eventFilter(QObject *obj, QEvent *event) override; -}; - /** * @brief The ShareDialog (user/group) class * @ingroup gui @@ -76,7 +59,7 @@ SharePermissions maxSharingPermissions, const QString &privateLinkUrl, QWidget *parent = nullptr); - ~ShareUserGroupWidget() override; + ~ShareUserGroupWidget(); signals: void togglePublicLinkShare(bool); @@ -145,7 +128,7 @@ SharePermissions maxSharingPermissions, bool isFile, QWidget *parent = nullptr); - ~ShareUserLine() override; + ~ShareUserLine(); QSharedPointer share() const; @@ -183,24 +166,18 @@ void slotConfirmPasswordClicked(); - void onAvatarContextMenu(const QPoint &globalPosition); - private: void displayPermissions(); void loadAvatar(); - void setDefaultAvatar(int avatarSize); void customizeStyle(); - QPixmap pixmapForShareeType(Sharee::Type type, const QColor &backgroundColor = QColor()) const; - QColor backgroundColorForShareeType(Sharee::Type type) const; - void showNoteOptions(bool show); void toggleNoteOptions(bool enable); void onNoteConfirmButtonClicked(); void setNote(const QString ¬e); void toggleExpireDateOptions(bool enable); - void showExpireDateOptions(bool show, const QDate &initialDate = QDate()); + void showExpireDateOptions(bool show); void setExpireDate(); void togglePasswordSetProgressAnimation(bool show); @@ -208,16 +185,11 @@ void enableProgessIndicatorAnimation(bool enable); void disableProgessIndicatorAnimation(); - QDate maxExpirationDateForShare(const Share::ShareType type, const QDate &fallbackDate) const; - bool enforceExpirationDateForShare(const Share::ShareType type) const; - Ui::ShareUserLine *_ui; AccountPtr _account; QSharedPointer _share; bool _isFile; - ProfilePageMenu _profilePageMenu; - // _permissionEdit is a checkbox QAction *_permissionReshare; QAction *_deleteShareButton; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareuserline.ui nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareuserline.ui --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/shareuserline.ui 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/shareuserline.ui 2022-01-03 12:25:12.000000000 +0000 @@ -6,8 +6,8 @@ 0 0 - 899 - 310 + 980 + 239 @@ -273,6 +273,20 @@ + + + + + + + + :/client/theme/confirm.svg:/client/theme/confirm.svg + + + true + + + @@ -302,518 +316,32 @@ - - 255 - 255 - 255 - - - - - - - 65 - 70 - 84 - - - - - - - 95 - 103 - 127 - - - - - - 49 - 49 - 49 - - - - - - - 0 - 0 - 0 - - - - - - - 25 - 25 - 25 - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 64 - 69 - 82 - - - - - - - 56 - 60 - 74 - - - - - - - 0 0 0 - - - - 82 - 148 - 226 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 157 - 255 - - - - - - - 158 - 79 - 255 - - - - - - - 60 - 67 - 79 - - - - - - - 0 - 0 - 0 - - - - - - - 238 - 252 - 255 - - - - - - - 255 - 255 - 255 - - - - - 255 - 255 - 255 - - - - - - - 65 - 70 - 84 - - - - - - - 95 - 103 - 127 - - - - - - - 49 - 49 - 49 - - - - - - - 0 - 0 - 0 - - - - - - - 25 - 25 - 25 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 64 - 69 - 82 - - - - - - - 56 - 60 - 74 - - - - - - - 0 - 0 - 0 - - - - - - - 82 - 149 - 225 - - - - - 255 - 255 - 255 - - - - - - - 0 - 157 - 255 - - - - - - - 158 - 79 - 255 - - - - - - - 60 - 67 - 79 - - - - - - - 0 0 0 - - - - 238 - 252 - 255 - - - - - - - 255 - 255 - 255 - - - - - 255 - 255 - 255 - - - - - - 65 - 70 - 84 - - - - - - - 95 - 103 - 127 - - - - - - - 49 - 49 - 49 - - - - - - - 0 - 0 - 0 - - - - - - - 25 - 25 - 25 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 64 - 69 - 82 - - - - - - - 56 - 60 - 74 - - - - - - - 0 - 0 - 0 - - - - - - - 82 - 148 - 226 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 157 - 255 - - - - - - - 158 - 79 - 255 - - - - - - - 60 - 67 - 79 - - - - - - - 0 - 0 - 0 - - - - - - - 238 - 252 - 255 - - - - - - - 255 - 255 - 255 + 123 + 121 + 134 diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -target_sources(nextcloudCore PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/socketapi.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/socketuploadjob.cpp -) - -if( APPLE ) - target_sources(nextcloudCore PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/socketapisocket_mac.mm) -endif() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1504 +0,0 @@ -/* - * Copyright (C) by Dominik Schmidt - * Copyright (C) by Klaas Freitag - * Copyright (C) by Roeland Jago Douma - * - * 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 "socketapi.h" -#include "socketapi_p.h" -#include "socketapi/socketuploadjob.h" - -#include "conflictdialog.h" -#include "conflictsolver.h" - -#include "config.h" -#include "configfile.h" -#include "folderman.h" -#include "folder.h" -#include "theme.h" -#include "common/syncjournalfilerecord.h" -#include "syncengine.h" -#include "syncfileitem.h" -#include "filesystem.h" -#include "version.h" -#include "account.h" -#include "accountstate.h" -#include "account.h" -#include "accountmanager.h" -#include "capabilities.h" -#include "common/asserts.h" -#include "guiutility.h" -#ifndef OWNCLOUD_TEST -#include "sharemanager.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#ifdef Q_OS_MAC -#include -#endif - - -// This is the version that is returned when the client asks for the VERSION. -// The first number should be changed if there is an incompatible change that breaks old clients. -// The second number should be changed when there are new features. -#define MIRALL_SOCKET_API_VERSION "1.1" - -namespace { - -const QLatin1Char RecordSeparator() -{ - return QLatin1Char('\x1e'); -} - -QStringList split(const QString &data) -{ - // TODO: string ref? - return data.split(RecordSeparator()); -} - -#if GUI_TESTING - -using namespace OCC; - -QList allObjects(const QList &widgets) -{ - QList objects; - std::copy(widgets.constBegin(), widgets.constEnd(), std::back_inserter(objects)); - - objects << qApp; - - return objects; -} - -QObject *findWidget(const QString &queryString, const QList &widgets = QApplication::allWidgets()) -{ - auto objects = allObjects(widgets); - - QList::const_iterator foundWidget; - - if (queryString.contains('>')) { - qCDebug(lcSocketApi) << "queryString contains >"; - - auto subQueries = queryString.split('>', QString::SkipEmptyParts); - Q_ASSERT(subQueries.count() == 2); - - auto parentQueryString = subQueries[0].trimmed(); - qCDebug(lcSocketApi) << "Find parent: " << parentQueryString; - auto parent = findWidget(parentQueryString); - - if (!parent) { - return nullptr; - } - - auto childQueryString = subQueries[1].trimmed(); - auto child = findWidget(childQueryString, parent->findChildren()); - qCDebug(lcSocketApi) << "found child: " << !!child; - return child; - - } else if (queryString.startsWith('#')) { - auto objectName = queryString.mid(1); - qCDebug(lcSocketApi) << "find objectName: " << objectName; - foundWidget = std::find_if(objects.constBegin(), objects.constEnd(), [&](QObject *widget) { - return widget->objectName() == objectName; - }); - } else { - QList matches; - std::copy_if(objects.constBegin(), objects.constEnd(), std::back_inserter(matches), [&](QObject *widget) { - return widget->inherits(queryString.toLatin1()); - }); - - std::for_each(matches.constBegin(), matches.constEnd(), [](QObject *w) { - if (!w) - return; - qCDebug(lcSocketApi) << "WIDGET: " << w->objectName() << w->metaObject()->className(); - }); - - if (matches.empty()) { - return nullptr; - } - return matches[0]; - } - - if (foundWidget == objects.constEnd()) { - return nullptr; - } - - return *foundWidget; -} -#endif - -static inline QString removeTrailingSlash(QString path) -{ - Q_ASSERT(path.endsWith(QLatin1Char('/'))); - path.truncate(path.length() - 1); - return path; -} - -static QString buildMessage(const QString &verb, const QString &path, const QString &status = QString()) -{ - QString msg(verb); - - if (!status.isEmpty()) { - msg.append(QLatin1Char(':')); - msg.append(status); - } - if (!path.isEmpty()) { - msg.append(QLatin1Char(':')); - QFileInfo fi(path); - msg.append(QDir::toNativeSeparators(fi.absoluteFilePath())); - } - return msg; -} -} - -namespace OCC { - -Q_LOGGING_CATEGORY(lcSocketApi, "nextcloud.gui.socketapi", QtInfoMsg) -Q_LOGGING_CATEGORY(lcPublicLink, "nextcloud.gui.socketapi.publiclink", QtInfoMsg) - - -void SocketListener::sendMessage(const QString &message, bool doWait) const -{ - if (!socket) { - qCWarning(lcSocketApi) << "Not sending message to dead socket:" << message; - return; - } - - qCDebug(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket; - QString localMessage = message; - if (!localMessage.endsWith(QLatin1Char('\n'))) { - localMessage.append(QLatin1Char('\n')); - } - - QByteArray bytesToSend = localMessage.toUtf8(); - qint64 sent = socket->write(bytesToSend); - if (doWait) { - socket->waitForBytesWritten(1000); - } - if (sent != bytesToSend.length()) { - qCWarning(lcSocketApi) << "Could not send all data on socket for " << localMessage; - } -} - -SocketApi::SocketApi(QObject *parent) - : QObject(parent) -{ - QString socketPath; - - qRegisterMetaType("SocketListener*"); - qRegisterMetaType>("QSharedPointer"); - qRegisterMetaType>("QSharedPointer"); - - if (Utility::isWindows()) { - socketPath = QLatin1String(R"(\\.\pipe\)") - + QLatin1String(APPLICATION_EXECUTABLE) - + QLatin1String("-") - + QString::fromLocal8Bit(qgetenv("USERNAME")); - // TODO: once the windows extension supports multiple - // client connections, switch back to the theme name - // See issue #2388 - // + Theme::instance()->appName(); - } else if (Utility::isMac()) { - // This must match the code signing Team setting of the extension - // Example for developer builds (with ad-hoc signing identity): "" "com.owncloud.desktopclient" ".socketApi" - // Example for official signed packages: "9B5WD74GWJ." "com.owncloud.desktopclient" ".socketApi" - socketPath = SOCKETAPI_TEAM_IDENTIFIER_PREFIX APPLICATION_REV_DOMAIN ".socketApi"; -#ifdef Q_OS_MAC - CFURLRef url = (CFURLRef)CFAutorelease((CFURLRef)CFBundleCopyBundleURL(CFBundleGetMainBundle())); - QString bundlePath = QUrl::fromCFURL(url).path(); - - auto _system = [](const QString &cmd, const QStringList &args) { - QProcess process; - process.setProcessChannelMode(QProcess::MergedChannels); - process.start(cmd, args); - if (!process.waitForFinished()) { - qCWarning(lcSocketApi) << "Failed to load shell extension:" << cmd << args.join(" ") << process.errorString(); - } else { - qCInfo(lcSocketApi) << (process.exitCode() != 0 ? "Failed to load" : "Loaded") << "shell extension:" << cmd << args.join(" ") << process.readAll(); - } - }; - // Add it again. This was needed for Mojave to trigger a load. - _system(QStringLiteral("pluginkit"), { QStringLiteral("-a"), QStringLiteral("%1Contents/PlugIns/FinderSyncExt.appex/").arg(bundlePath) }); - // Tell Finder to use the Extension (checking it from System Preferences -> Extensions) - _system(QStringLiteral("pluginkit"), { QStringLiteral("-e"), QStringLiteral("use"), QStringLiteral("-i"), QStringLiteral(APPLICATION_REV_DOMAIN ".FinderSyncExt") }); - -#endif - } else if (Utility::isLinux() || Utility::isBSD()) { - QString runtimeDir; - runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - socketPath = runtimeDir + "/" + Theme::instance()->appName() + "/socket"; - } else { - qCWarning(lcSocketApi) << "An unexpected system detected, this probably won't work."; - } - - SocketApiServer::removeServer(socketPath); - QFileInfo info(socketPath); - if (!info.dir().exists()) { - bool result = info.dir().mkpath("."); - qCDebug(lcSocketApi) << "creating" << info.dir().path() << result; - if (result) { - QFile::setPermissions(socketPath, - QFile::Permissions(QFile::ReadOwner + QFile::WriteOwner + QFile::ExeOwner)); - } - } - if (!_localServer.listen(socketPath)) { - qCWarning(lcSocketApi) << "can't start server" << socketPath; - } else { - qCInfo(lcSocketApi) << "server started, listening at " << socketPath; - } - - connect(&_localServer, &SocketApiServer::newConnection, this, &SocketApi::slotNewConnection); - - // folder watcher - connect(FolderMan::instance(), &FolderMan::folderSyncStateChange, this, &SocketApi::slotUpdateFolderView); -} - -SocketApi::~SocketApi() -{ - qCDebug(lcSocketApi) << "dtor"; - _localServer.close(); - // All remaining sockets will be destroyed with _localServer, their parent - ASSERT(_listeners.isEmpty() || _listeners.first()->socket->parent() == &_localServer) - _listeners.clear(); -} - -void SocketApi::slotNewConnection() -{ - // Note that on macOS this is not actually a line-based QIODevice, it's a SocketApiSocket which is our - // custom message based macOS IPC. - QIODevice *socket = _localServer.nextPendingConnection(); - - if (!socket) { - return; - } - qCInfo(lcSocketApi) << "New connection" << socket; - connect(socket, &QIODevice::readyRead, this, &SocketApi::slotReadSocket); - connect(socket, SIGNAL(disconnected()), this, SLOT(onLostConnection())); - connect(socket, &QObject::destroyed, this, &SocketApi::slotSocketDestroyed); - ASSERT(socket->readAll().isEmpty()); - - auto listener = QSharedPointer::create(socket); - _listeners.insert(socket, listener); - for (Folder *f : FolderMan::instance()->map()) { - if (f->canSync()) { - QString message = buildRegisterPathMessage(removeTrailingSlash(f->path())); - qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener->socket; - listener->sendMessage(message); - } - } -} - -void SocketApi::onLostConnection() -{ - qCInfo(lcSocketApi) << "Lost connection " << sender(); - sender()->deleteLater(); - - auto socket = qobject_cast(sender()); - ASSERT(socket); - _listeners.remove(socket); -} - -void SocketApi::slotSocketDestroyed(QObject *obj) -{ - auto *socket = static_cast(obj); - _listeners.remove(socket); -} - -void SocketApi::slotReadSocket() -{ - auto *socket = qobject_cast(sender()); - ASSERT(socket); - - // Find the SocketListener - // - // It's possible for the disconnected() signal to be triggered before - // the readyRead() signals are received - in that case there won't be a - // valid listener. We execute the handler anyway, but it will work with - // a SocketListener that doesn't send any messages. - static auto invalidListener = QSharedPointer::create(nullptr); - const auto listener = _listeners.value(socket, invalidListener); - while (socket->canReadLine()) { - // Make sure to normalize the input from the socket to - // make sure that the path will match, especially on OS X. - const QString line = QString::fromUtf8(socket->readLine().trimmed()).normalized(QString::NormalizationForm_C); - qCInfo(lcSocketApi) << "Received SocketAPI message <--" << line << "from" << socket; - const int argPos = line.indexOf(QLatin1Char(':')); - const QByteArray command = line.midRef(0, argPos).toUtf8().toUpper(); - const int indexOfMethod = [&] { - QByteArray functionWithArguments = QByteArrayLiteral("command_"); - if (command.startsWith("ASYNC_")) { - functionWithArguments += command + QByteArrayLiteral("(QSharedPointer)"); - } else if (command.startsWith("V2/")) { - functionWithArguments += QByteArrayLiteral("V2_") + command.mid(3) + QByteArrayLiteral("(QSharedPointer)"); - } else { - functionWithArguments += command + QByteArrayLiteral("(QString,SocketListener*)"); - } - Q_ASSERT(staticQtMetaObject.normalizedSignature(functionWithArguments) == functionWithArguments); - const auto out = staticMetaObject.indexOfMethod(functionWithArguments); - if (out == -1) { - listener->sendError(QStringLiteral("Function %1 not found").arg(QString::fromUtf8(functionWithArguments))); - } - ASSERT(out != -1) - return out; - }(); - - const auto argument = argPos != -1 ? line.midRef(argPos + 1) : QStringRef(); - if (command.startsWith("ASYNC_")) { - auto arguments = argument.split('|'); - if (arguments.size() != 2) { - listener->sendError(QStringLiteral("argument count is wrong")); - return; - } - - auto json = QJsonDocument::fromJson(arguments[1].toUtf8()).object(); - - auto jobId = arguments[0]; - - auto socketApiJob = QSharedPointer( - new SocketApiJob(jobId.toString(), listener, json), &QObject::deleteLater); - if (indexOfMethod != -1) { - staticMetaObject.method(indexOfMethod) - .invoke(this, Qt::QueuedConnection, - Q_ARG(QSharedPointer, socketApiJob)); - } else { - qCWarning(lcSocketApi) << "The command is not supported by this version of the client:" << command - << "with argument:" << argument; - socketApiJob->reject(QStringLiteral("command not found")); - } - } else if (command.startsWith("V2/")) { - QJsonParseError error; - const auto json = QJsonDocument::fromJson(argument.toUtf8(), &error).object(); - if (error.error != QJsonParseError::NoError) { - qCWarning(lcSocketApi()) << "Invalid json" << argument.toString() << error.errorString(); - listener->sendError(error.errorString()); - return; - } - auto socketApiJob = QSharedPointer::create(listener, command, json); - if (indexOfMethod != -1) { - staticMetaObject.method(indexOfMethod) - .invoke(this, Qt::QueuedConnection, - Q_ARG(QSharedPointer, socketApiJob)); - } else { - qCWarning(lcSocketApi) << "The command is not supported by this version of the client:" << command - << "with argument:" << argument; - socketApiJob->failure(QStringLiteral("command not found")); - } - } else { - if (indexOfMethod != -1) { - // to ensure that listener is still valid we need to call it with Qt::DirectConnection - ASSERT(thread() == QThread::currentThread()) - staticMetaObject.method(indexOfMethod) - .invoke(this, Qt::DirectConnection, Q_ARG(QString, argument.toString()), - Q_ARG(SocketListener *, listener.data())); - } - } - } -} - -void SocketApi::slotRegisterPath(const QString &alias) -{ - // Make sure not to register twice to each connected client - if (_registeredAliases.contains(alias)) - return; - - Folder *f = FolderMan::instance()->folder(alias); - if (f) { - const QString message = buildRegisterPathMessage(removeTrailingSlash(f->path())); - for (const auto &listener : qAsConst(_listeners)) { - qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener->socket; - listener->sendMessage(message); - } - } - - _registeredAliases.insert(alias); -} - -void SocketApi::slotUnregisterPath(const QString &alias) -{ - if (!_registeredAliases.contains(alias)) - return; - - Folder *f = FolderMan::instance()->folder(alias); - if (f) - broadcastMessage(buildMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(f->path()), QString()), true); - - _registeredAliases.remove(alias); -} - -void SocketApi::slotUpdateFolderView(Folder *f) -{ - if (_listeners.isEmpty()) { - return; - } - - if (f) { - // do only send UPDATE_VIEW for a couple of status - if (f->syncResult().status() == SyncResult::SyncPrepare - || f->syncResult().status() == SyncResult::Success - || f->syncResult().status() == SyncResult::Paused - || f->syncResult().status() == SyncResult::Problem - || f->syncResult().status() == SyncResult::Error - || f->syncResult().status() == SyncResult::SetupError) { - QString rootPath = removeTrailingSlash(f->path()); - broadcastStatusPushMessage(rootPath, f->syncEngine().syncFileStatusTracker().fileStatus("")); - - broadcastMessage(buildMessage(QLatin1String("UPDATE_VIEW"), rootPath)); - } else { - qCDebug(lcSocketApi) << "Not sending UPDATE_VIEW for" << f->alias() << "because status() is" << f->syncResult().status(); - } - } -} - -void SocketApi::broadcastMessage(const QString &msg, bool doWait) -{ - for (const auto &listener : qAsConst(_listeners)) { - listener->sendMessage(msg, doWait); - } -} - -void SocketApi::processFileActivityRequest(const QString &localFile) -{ - const auto fileData = FileData::get(localFile); - emit fileActivityCommandReceived(fileData.serverRelativePath, fileData.localPath); -} - -void SocketApi::processShareRequest(const QString &localFile, SocketListener *listener, ShareDialogStartPage startPage) -{ - auto theme = Theme::instance(); - - auto fileData = FileData::get(localFile); - auto shareFolder = fileData.folder; - if (!shareFolder) { - const QString message = QLatin1String("SHARE:NOP:") + QDir::toNativeSeparators(localFile); - // files that are not within a sync folder are not synced. - listener->sendMessage(message); - } else if (!shareFolder->accountState()->isConnected()) { - const QString message = QLatin1String("SHARE:NOTCONNECTED:") + QDir::toNativeSeparators(localFile); - // if the folder isn't connected, don't open the share dialog - listener->sendMessage(message); - } else if (!theme->linkSharing() && (!theme->userGroupSharing() || shareFolder->accountState()->account()->serverVersionInt() < Account::makeServerVersion(8, 2, 0))) { - const QString message = QLatin1String("SHARE:NOP:") + QDir::toNativeSeparators(localFile); - listener->sendMessage(message); - } else { - // If the file doesn't have a journal record, it might not be uploaded yet - if (!fileData.journalRecord().isValid()) { - const QString message = QLatin1String("SHARE:NOTSYNCED:") + QDir::toNativeSeparators(localFile); - listener->sendMessage(message); - return; - } - - auto &remotePath = fileData.serverRelativePath; - - // Can't share root folder - if (remotePath == "/") { - const QString message = QLatin1String("SHARE:CANNOTSHAREROOT:") + QDir::toNativeSeparators(localFile); - listener->sendMessage(message); - return; - } - - const QString message = QLatin1String("SHARE:OK:") + QDir::toNativeSeparators(localFile); - listener->sendMessage(message); - - emit shareCommandReceived(remotePath, fileData.localPath, startPage); - } -} - -void SocketApi::broadcastStatusPushMessage(const QString &systemPath, SyncFileStatus fileStatus) -{ - QString msg = buildMessage(QLatin1String("STATUS"), systemPath, fileStatus.toSocketAPIString()); - Q_ASSERT(!systemPath.endsWith('/')); - uint directoryHash = qHash(systemPath.left(systemPath.lastIndexOf('/'))); - for (const auto &listener : qAsConst(_listeners)) { - listener->sendMessageIfDirectoryMonitored(msg, directoryHash); - } -} - -void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString &argument, SocketListener *listener) -{ - // This command is the same as RETRIEVE_FILE_STATUS - command_RETRIEVE_FILE_STATUS(argument, listener); -} - -void SocketApi::command_RETRIEVE_FILE_STATUS(const QString &argument, SocketListener *listener) -{ - QString statusString; - - auto fileData = FileData::get(argument); - if (!fileData.folder) { - // this can happen in offline mode e.g.: nothing to worry about - statusString = QLatin1String("NOP"); - } else { - // The user probably visited this directory in the file shell. - // Let the listener know that it should now send status pushes for sibblings of this file. - QString directory = fileData.localPath.left(fileData.localPath.lastIndexOf('/')); - listener->registerMonitoredDirectory(qHash(directory)); - - SyncFileStatus fileStatus = fileData.syncFileStatus(); - statusString = fileStatus.toSocketAPIString(); - } - - const QString message = QLatin1String("STATUS:") % statusString % QLatin1Char(':') % QDir::toNativeSeparators(argument); - listener->sendMessage(message); -} - -void SocketApi::command_SHARE(const QString &localFile, SocketListener *listener) -{ - processShareRequest(localFile, listener, ShareDialogStartPage::UsersAndGroups); -} - -void SocketApi::command_ACTIVITY(const QString &localFile, SocketListener *listener) -{ - Q_UNUSED(listener); - - processFileActivityRequest(localFile); -} - -void SocketApi::command_MANAGE_PUBLIC_LINKS(const QString &localFile, SocketListener *listener) -{ - processShareRequest(localFile, listener, ShareDialogStartPage::PublicLinks); -} - -void SocketApi::command_VERSION(const QString &, SocketListener *listener) -{ - listener->sendMessage(QLatin1String("VERSION:" MIRALL_VERSION_STRING ":" MIRALL_SOCKET_API_VERSION)); -} - -void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketListener *listener) -{ - //listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is Nextcloud").arg(Theme::instance()->appNameGUI())); - listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + Theme::instance()->appNameGUI()); -} - -void SocketApi::command_EDIT(const QString &localFile, SocketListener *listener) -{ - Q_UNUSED(listener) - auto fileData = FileData::get(localFile); - if (!fileData.folder) { - qCWarning(lcSocketApi) << "Unknown path" << localFile; - return; - } - - auto record = fileData.journalRecord(); - if (!record.isValid()) - return; - - DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); - if (!editor) - return; - - auto *job = new JsonApiJob(fileData.folder->accountState()->account(), QLatin1String("ocs/v2.php/apps/files/api/v1/directEditing/open"), this); - - QUrlQuery params; - params.addQueryItem("path", fileData.serverRelativePath); - params.addQueryItem("editorId", editor->id()); - job->addQueryParams(params); - job->setVerb(JsonApiJob::Verb::Post); - - QObject::connect(job, &JsonApiJob::jsonReceived, [](const QJsonDocument &json){ - auto data = json.object().value("ocs").toObject().value("data").toObject(); - auto url = QUrl(data.value("url").toString()); - - if(!url.isEmpty()) - Utility::openBrowser(url); - }); - job->start(); -} - -// don't pull the share manager into socketapi unittests -#ifndef OWNCLOUD_TEST - -class GetOrCreatePublicLinkShare : public QObject -{ - Q_OBJECT -public: - GetOrCreatePublicLinkShare(const AccountPtr &account, const QString &localFile, - QObject *parent) - : QObject(parent) - , _account(account) - , _shareManager(account) - , _localFile(localFile) - { - connect(&_shareManager, &ShareManager::sharesFetched, - this, &GetOrCreatePublicLinkShare::sharesFetched); - connect(&_shareManager, &ShareManager::linkShareCreated, - this, &GetOrCreatePublicLinkShare::linkShareCreated); - connect(&_shareManager, &ShareManager::linkShareRequiresPassword, - this, &GetOrCreatePublicLinkShare::linkShareRequiresPassword); - connect(&_shareManager, &ShareManager::serverError, - this, &GetOrCreatePublicLinkShare::serverError); - } - - void run() - { - qCDebug(lcPublicLink) << "Fetching shares"; - _shareManager.fetchShares(_localFile); - } - -private slots: - void sharesFetched(const QList> &shares) - { - auto shareName = SocketApi::tr("Context menu share"); - - // If there already is a context menu share, reuse it - for (const auto &share : shares) { - const auto linkShare = qSharedPointerDynamicCast(share); - if (!linkShare) - continue; - - if (linkShare->getName() == shareName) { - qCDebug(lcPublicLink) << "Found existing share, reusing"; - return success(linkShare->getLink().toString()); - } - } - - // otherwise create a new one - qCDebug(lcPublicLink) << "Creating new share"; - _shareManager.createLinkShare(_localFile, shareName, QString()); - } - - void linkShareCreated(const QSharedPointer &share) - { - qCDebug(lcPublicLink) << "New share created"; - success(share->getLink().toString()); - } - - void passwordRequired() { - bool ok = false; - QString password = QInputDialog::getText(nullptr, - tr("Password for share required"), - tr("Please enter a password for your link share:"), - QLineEdit::Normal, - QString(), - &ok); - - if (!ok) { - // The dialog was canceled so no need to do anything - return; - } - - // Try to create the link share again with the newly entered password - _shareManager.createLinkShare(_localFile, QString(), password); - } - - void linkShareRequiresPassword(const QString &message) - { - qCInfo(lcPublicLink) << "Could not create link share:" << message; - emit error(message); - deleteLater(); - } - - void serverError(int code, const QString &message) - { - qCWarning(lcPublicLink) << "Share fetch/create error" << code << message; - QMessageBox::warning( - nullptr, - tr("Sharing error"), - tr("Could not retrieve or create the public link share. Error:\n\n%1").arg(message), - QMessageBox::Ok, - QMessageBox::NoButton); - emit error(message); - deleteLater(); - } - -signals: - void done(const QString &link); - void error(const QString &message); - -private: - void success(const QString &link) - { - emit done(link); - deleteLater(); - } - - AccountPtr _account; - ShareManager _shareManager; - QString _localFile; -}; - -#else - -class GetOrCreatePublicLinkShare : public QObject -{ - Q_OBJECT -public: - GetOrCreatePublicLinkShare(const AccountPtr &, const QString &, - std::function, QObject *) - { - } - - void run() - { - } -}; - -#endif - -void SocketApi::command_COPY_PUBLIC_LINK(const QString &localFile, SocketListener *) -{ - auto fileData = FileData::get(localFile); - if (!fileData.folder) - return; - - AccountPtr account = fileData.folder->accountState()->account(); - auto job = new GetOrCreatePublicLinkShare(account, fileData.serverRelativePath, this); - connect(job, &GetOrCreatePublicLinkShare::done, this, - [](const QString &url) { copyUrlToClipboard(url); }); - connect(job, &GetOrCreatePublicLinkShare::error, this, - [=]() { emit shareCommandReceived(fileData.serverRelativePath, fileData.localPath, ShareDialogStartPage::PublicLinks); }); - job->run(); -} - -// Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 -#ifdef Q_OS_WIN -void SocketApi::command_COPYASPATH(const QString &localFile, SocketListener *) -{ - QApplication::clipboard()->setText(localFile); -} - -void SocketApi::command_OPENNEWWINDOW(const QString &localFile, SocketListener *) -{ - QDesktopServices::openUrl(QUrl::fromLocalFile(localFile)); -} - -void SocketApi::command_OPEN(const QString &localFile, SocketListener *socketListener) -{ - command_OPENNEWWINDOW(localFile, socketListener); -} -#endif - -// Fetches the private link url asynchronously and then calls the target slot -void SocketApi::fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun) -{ - auto fileData = FileData::get(localFile); - if (!fileData.folder) { - qCWarning(lcSocketApi) << "Unknown path" << localFile; - return; - } - - auto record = fileData.journalRecord(); - if (!record.isValid()) - return; - - fetchPrivateLinkUrl( - fileData.folder->accountState()->account(), - fileData.serverRelativePath, - record.numericFileId(), - this, - targetFun); -} - -void SocketApi::command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *) -{ - fetchPrivateLinkUrlHelper(localFile, &SocketApi::copyUrlToClipboard); -} - -void SocketApi::command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *) -{ - fetchPrivateLinkUrlHelper(localFile, &SocketApi::emailPrivateLink); -} - -void SocketApi::command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *) -{ - fetchPrivateLinkUrlHelper(localFile, &SocketApi::openPrivateLink); -} - -void SocketApi::command_MAKE_AVAILABLE_LOCALLY(const QString &filesArg, SocketListener *) -{ - const QStringList files = split(filesArg); - - for (const auto &file : files) { - auto data = FileData::get(file); - if (!data.folder) - continue; - - // Update the pin state on all items - if (!data.folder->vfs().setPinState(data.folderRelativePath, PinState::AlwaysLocal)) { - qCWarning(lcSocketApi) << "Could not set pin state of" << data.folderRelativePath << "to always local"; - } - - // Trigger sync - data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); - data.folder->scheduleThisFolderSoon(); - } -} - -/* Go over all the files and replace them by a virtual file */ -void SocketApi::command_MAKE_ONLINE_ONLY(const QString &filesArg, SocketListener *) -{ - const QStringList files = split(filesArg); - - for (const auto &file : files) { - auto data = FileData::get(file); - if (!data.folder) - continue; - - // Update the pin state on all items - if (!data.folder->vfs().setPinState(data.folderRelativePath, PinState::OnlineOnly)) { - qCWarning(lcSocketApi) << "Could not set pin state of" << data.folderRelativePath << "to online only"; - } - - // Trigger sync - data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); - data.folder->scheduleThisFolderSoon(); - } -} - -void SocketApi::copyUrlToClipboard(const QString &link) -{ - QApplication::clipboard()->setText(link); -} - -void SocketApi::command_RESOLVE_CONFLICT(const QString &localFile, SocketListener *) -{ - const auto fileData = FileData::get(localFile); - if (!fileData.folder || !Utility::isConflictFile(fileData.folderRelativePath)) - return; // should not have shown menu item - - const auto conflictedRelativePath = fileData.folderRelativePath; - const auto baseRelativePath = fileData.folder->journalDb()->conflictFileBaseName(fileData.folderRelativePath.toUtf8()); - - const auto dir = QDir(fileData.folder->path()); - const auto conflictedPath = dir.filePath(conflictedRelativePath); - const auto basePath = dir.filePath(baseRelativePath); - - const auto baseName = QFileInfo(basePath).fileName(); - -#ifndef OWNCLOUD_TEST - ConflictDialog dialog; - dialog.setBaseFilename(baseName); - dialog.setLocalVersionFilename(conflictedPath); - dialog.setRemoteVersionFilename(basePath); - if (dialog.exec() == ConflictDialog::Accepted) { - fileData.folder->scheduleThisFolderSoon(); - } -#endif -} - -void SocketApi::command_DELETE_ITEM(const QString &localFile, SocketListener *) -{ - ConflictSolver solver; - solver.setLocalVersionFilename(localFile); - solver.exec(ConflictSolver::KeepRemoteVersion); -} - -void SocketApi::command_MOVE_ITEM(const QString &localFile, SocketListener *) -{ - const auto fileData = FileData::get(localFile); - const auto parentDir = fileData.parentFolder(); - if (!fileData.folder) - return; // should not have shown menu item - - QString defaultDirAndName = fileData.folderRelativePath; - - // If it's a conflict, we want to save it under the base name by default - if (Utility::isConflictFile(defaultDirAndName)) { - defaultDirAndName = fileData.folder->journalDb()->conflictFileBaseName(fileData.folderRelativePath.toUtf8()); - } - - // If the parent doesn't accept new files, go to the root of the sync folder - QFileInfo fileInfo(localFile); - const auto parentRecord = parentDir.journalRecord(); - if ((fileInfo.isFile() && !parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddFile)) - || (fileInfo.isDir() && !parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddSubDirectories))) { - defaultDirAndName = QFileInfo(defaultDirAndName).fileName(); - } - - // Add back the folder path - defaultDirAndName = QDir(fileData.folder->path()).filePath(defaultDirAndName); - - const auto target = QFileDialog::getSaveFileName( - nullptr, - tr("Select new location …"), - defaultDirAndName, - QString(), nullptr, QFileDialog::HideNameFilterDetails); - if (target.isEmpty()) - return; - - ConflictSolver solver; - solver.setLocalVersionFilename(localFile); - solver.setRemoteVersionFilename(target); -} - -void SocketApi::command_V2_LIST_ACCOUNTS(const QSharedPointer &job) const -{ - QJsonArray out; - for (auto acc : AccountManager::instance()->accounts()) { - // TODO: Use uuid once https://github.com/owncloud/client/pull/8397 is merged - out << QJsonObject({ { "name", acc->account()->displayName() }, { "id", acc->account()->id() } }); - } - job->success({ { "accounts", out } }); -} - -void SocketApi::command_V2_UPLOAD_FILES_FROM(const QSharedPointer &job) const -{ - auto uploadJob = new SocketUploadJob(job); - uploadJob->start(); -} - -void SocketApi::emailPrivateLink(const QString &link) -{ - Utility::openEmailComposer( - tr("I shared something with you"), - link, - nullptr); -} - -void OCC::SocketApi::openPrivateLink(const QString &link) -{ - Utility::openBrowser(link); -} - -void SocketApi::command_GET_STRINGS(const QString &argument, SocketListener *listener) -{ - static std::array, 6> strings { { - { "SHARE_MENU_TITLE", tr("Share options") }, - { "FILE_ACTIVITY_MENU_TITLE", tr("Activity") }, - { "CONTEXT_MENU_TITLE", Theme::instance()->appNameGUI() }, - { "COPY_PRIVATE_LINK_MENU_TITLE", tr("Copy private link to clipboard") }, - { "EMAIL_PRIVATE_LINK_MENU_TITLE", tr("Send private link by email …") }, - { "CONTEXT_MENU_ICON", APPLICATION_ICON_NAME }, - } }; - listener->sendMessage(QString("GET_STRINGS:BEGIN")); - for (const auto& key_value : strings) { - if (argument.isEmpty() || argument == QLatin1String(key_value.first)) { - listener->sendMessage(QString("STRING:%1:%2").arg(key_value.first, key_value.second)); - } - } - listener->sendMessage(QString("GET_STRINGS:END")); -} - -void SocketApi::sendSharingContextMenuOptions(const FileData &fileData, SocketListener *listener, bool enabled) -{ - auto record = fileData.journalRecord(); - bool isOnTheServer = record.isValid(); - auto flagString = isOnTheServer && enabled ? QLatin1String("::") : QLatin1String(":d:"); - - auto capabilities = fileData.folder->accountState()->account()->capabilities(); - auto theme = Theme::instance(); - if (!capabilities.shareAPI() || !(theme->userGroupSharing() || (theme->linkSharing() && capabilities.sharePublicLink()))) - return; - - // If sharing is globally disabled, do not show any sharing entries. - // If there is no permission to share for this file, add a disabled entry saying so - if (isOnTheServer && !record._remotePerm.isNull() && !record._remotePerm.hasPermission(RemotePermissions::CanReshare)) { - listener->sendMessage(QLatin1String("MENU_ITEM:DISABLED:d:") + (!record.isDirectory() ? tr("Resharing this file is not allowed") : tr("Resharing this folder is not allowed"))); - } else { - listener->sendMessage(QLatin1String("MENU_ITEM:SHARE") + flagString + tr("Share options")); - - // Do we have public links? - bool publicLinksEnabled = theme->linkSharing() && capabilities.sharePublicLink(); - - // Is is possible to create a public link without user choices? - bool canCreateDefaultPublicLink = publicLinksEnabled - && !capabilities.sharePublicLinkEnforceExpireDate() - && !capabilities.sharePublicLinkAskOptionalPassword() - && !capabilities.sharePublicLinkEnforcePassword(); - - if (canCreateDefaultPublicLink) { - listener->sendMessage(QLatin1String("MENU_ITEM:COPY_PUBLIC_LINK") + flagString + tr("Copy public link")); - } else if (publicLinksEnabled) { - listener->sendMessage(QLatin1String("MENU_ITEM:MANAGE_PUBLIC_LINKS") + flagString + tr("Copy public link")); - } - } - - listener->sendMessage(QLatin1String("MENU_ITEM:COPY_PRIVATE_LINK") + flagString + tr("Copy internal link")); - - // Disabled: only providing email option for private links would look odd, - // and the copy option is more general. - //listener->sendMessage(QLatin1String("MENU_ITEM:EMAIL_PRIVATE_LINK") + flagString + tr("Send private link by email …")); -} - -SocketApi::FileData SocketApi::FileData::get(const QString &localFile) -{ - FileData data; - - data.localPath = QDir::cleanPath(localFile); - if (data.localPath.endsWith(QLatin1Char('/'))) - data.localPath.chop(1); - - data.folder = FolderMan::instance()->folderForPath(data.localPath); - if (!data.folder) - return data; - - data.folderRelativePath = data.localPath.mid(data.folder->cleanPath().length() + 1); - data.serverRelativePath = QDir(data.folder->remotePath()).filePath(data.folderRelativePath); - QString virtualFileExt = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX); - if (data.serverRelativePath.endsWith(virtualFileExt)) { - data.serverRelativePath.chop(virtualFileExt.size()); - } - return data; -} - -QString SocketApi::FileData::folderRelativePathNoVfsSuffix() const -{ - auto result = folderRelativePath; - QString virtualFileExt = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX); - if (result.endsWith(virtualFileExt)) { - result.chop(virtualFileExt.size()); - } - return result; -} - -SyncFileStatus SocketApi::FileData::syncFileStatus() const -{ - if (!folder) - return SyncFileStatus::StatusNone; - return folder->syncEngine().syncFileStatusTracker().fileStatus(folderRelativePath); -} - -SyncJournalFileRecord SocketApi::FileData::journalRecord() const -{ - SyncJournalFileRecord record; - if (!folder) - return record; - folder->journalDb()->getFileRecord(folderRelativePath, &record); - return record; -} - -SocketApi::FileData SocketApi::FileData::parentFolder() const -{ - return FileData::get(QFileInfo(localPath).dir().path().toUtf8()); -} - -void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListener *listener) -{ - listener->sendMessage(QString("GET_MENU_ITEMS:BEGIN")); - const QStringList files = split(argument); - - // Find the common sync folder. - // syncFolder will be null if files are in different folders. - Folder *syncFolder = nullptr; - for (const auto &file : files) { - auto folder = FolderMan::instance()->folderForPath(file); - if (folder != syncFolder) { - if (!syncFolder) { - syncFolder = folder; - } else { - syncFolder = nullptr; - break; - } - } - } - - // Sharing actions show for single files only - if (syncFolder && files.size() == 1 && syncFolder->accountState()->isConnected()) { - QString systemPath = QDir::cleanPath(argument); - if (systemPath.endsWith(QLatin1Char('/'))) { - systemPath.truncate(systemPath.length() - 1); - } - - FileData fileData = FileData::get(argument); - const auto record = fileData.journalRecord(); - const bool isOnTheServer = record.isValid(); - const auto isE2eEncryptedPath = fileData.journalRecord()._isE2eEncrypted || !fileData.journalRecord()._e2eMangledName.isEmpty(); - auto flagString = isOnTheServer && !isE2eEncryptedPath ? QLatin1String("::") : QLatin1String(":d:"); - - const QFileInfo fileInfo(fileData.localPath); - if (!fileInfo.isDir()) { - listener->sendMessage(QLatin1String("MENU_ITEM:ACTIVITY") + flagString + tr("Activity")); - } - - DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); - if (editor) { - //listener->sendMessage(QLatin1String("MENU_ITEM:EDIT") + flagString + tr("Edit via ") + editor->name()); - listener->sendMessage(QLatin1String("MENU_ITEM:EDIT") + flagString + tr("Edit")); - } else { - listener->sendMessage(QLatin1String("MENU_ITEM:OPEN_PRIVATE_LINK") + flagString + tr("Open in browser")); - } - - sendSharingContextMenuOptions(fileData, listener, !isE2eEncryptedPath); - - // Conflict files get conflict resolution actions - bool isConflict = Utility::isConflictFile(fileData.folderRelativePath); - if (isConflict || !isOnTheServer) { - // Check whether this new file is in a read-only directory - const auto parentDir = fileData.parentFolder(); - const auto parentRecord = parentDir.journalRecord(); - const bool canAddToDir = - !parentRecord.isValid() // We're likely at the root of the sync folder, got to assume we can add there - || (fileInfo.isFile() && parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddFile)) - || (fileInfo.isDir() && parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddSubDirectories)); - const bool canChangeFile = - !isOnTheServer - || (record._remotePerm.hasPermission(RemotePermissions::CanDelete) - && record._remotePerm.hasPermission(RemotePermissions::CanMove) - && record._remotePerm.hasPermission(RemotePermissions::CanRename)); - - if (isConflict && canChangeFile) { - if (canAddToDir) { - listener->sendMessage(QLatin1String("MENU_ITEM:RESOLVE_CONFLICT::") + tr("Resolve conflict …")); - } else { - if (isOnTheServer) { - // Uploaded conflict file in read-only directory - listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move and rename …")); - } else { - // Local-only conflict file in a read-only dir - listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move, rename and upload …")); - } - listener->sendMessage(QLatin1String("MENU_ITEM:DELETE_ITEM::") + tr("Delete local changes")); - } - } - - // File in a read-only directory? - if (!isConflict && !isOnTheServer && !canAddToDir) { - listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move and upload …")); - listener->sendMessage(QLatin1String("MENU_ITEM:DELETE_ITEM::") + tr("Delete")); - } - } - } - - // File availability actions - if (syncFolder - && syncFolder->virtualFilesEnabled() - && syncFolder->vfs().socketApiPinStateActionsShown()) { - ENFORCE(!files.isEmpty()); - - // Determine the combined availability status of the files - auto combined = Optional(); - auto merge = [](VfsItemAvailability lhs, VfsItemAvailability rhs) { - if (lhs == rhs) - return lhs; - if (int(lhs) > int(rhs)) - std::swap(lhs, rhs); // reduce cases ensuring lhs < rhs - if (lhs == VfsItemAvailability::AlwaysLocal && rhs == VfsItemAvailability::AllHydrated) - return VfsItemAvailability::AllHydrated; - if (lhs == VfsItemAvailability::AllDehydrated && rhs == VfsItemAvailability::OnlineOnly) - return VfsItemAvailability::AllDehydrated; - return VfsItemAvailability::Mixed; - }; - for (const auto &file : files) { - auto fileData = FileData::get(file); - auto availability = syncFolder->vfs().availability(fileData.folderRelativePath); - if (!availability) { - if (availability.error() == Vfs::AvailabilityError::DbError) - availability = VfsItemAvailability::Mixed; - if (availability.error() == Vfs::AvailabilityError::NoSuchItem) - continue; - } - if (!combined) { - combined = *availability; - } else { - combined = merge(*combined, *availability); - } - } - - // TODO: Should be a submenu, should use icons - auto makePinContextMenu = [&](bool makeAvailableLocally, bool freeSpace) { - listener->sendMessage(QLatin1String("MENU_ITEM:CURRENT_PIN:d:") - + Utility::vfsCurrentAvailabilityText(*combined)); - if (!Theme::instance()->enforceVirtualFilesSyncFolder()) { - listener->sendMessage(QLatin1String("MENU_ITEM:MAKE_AVAILABLE_LOCALLY:") - + (makeAvailableLocally ? QLatin1String(":") : QLatin1String("d:")) + Utility::vfsPinActionText()); - } - - listener->sendMessage(QLatin1String("MENU_ITEM:MAKE_ONLINE_ONLY:") - + (freeSpace ? QLatin1String(":") : QLatin1String("d:")) - + Utility::vfsFreeSpaceActionText()); - }; - - if (combined) { - switch (*combined) { - case VfsItemAvailability::AlwaysLocal: - makePinContextMenu(false, true); - break; - case VfsItemAvailability::AllHydrated: - case VfsItemAvailability::Mixed: - makePinContextMenu(true, true); - break; - case VfsItemAvailability::AllDehydrated: - case VfsItemAvailability::OnlineOnly: - makePinContextMenu(true, false); - break; - } - } - } - - listener->sendMessage(QString("GET_MENU_ITEMS:END")); -} - -DirectEditor* SocketApi::getDirectEditorForLocalFile(const QString &localFile) -{ - FileData fileData = FileData::get(localFile); - auto capabilities = fileData.folder->accountState()->account()->capabilities(); - - if (fileData.folder && fileData.folder->accountState()->isConnected()) { - const auto record = fileData.journalRecord(); - const auto mimeMatchMode = record.isVirtualFile() ? QMimeDatabase::MatchExtension : QMimeDatabase::MatchDefault; - - QMimeDatabase db; - QMimeType type = db.mimeTypeForFile(localFile, mimeMatchMode); - - DirectEditor* editor = capabilities.getDirectEditorForMimetype(type); - if (!editor) { - editor = capabilities.getDirectEditorForOptionalMimetype(type); - } - return editor; - } - - return nullptr; -} - -#if GUI_TESTING -void SocketApi::command_ASYNC_LIST_WIDGETS(const QSharedPointer &job) -{ - QString response; - for (auto &widget : allObjects(QApplication::allWidgets())) { - auto objectName = widget->objectName(); - if (!objectName.isEmpty()) { - response += objectName + ":" + widget->property("text").toString() + ", "; - } - } - job->resolve(response); -} - -void SocketApi::command_ASYNC_INVOKE_WIDGET_METHOD(const QSharedPointer &job) -{ - auto &arguments = job->arguments(); - - auto widget = findWidget(arguments["objectName"].toString()); - if (!widget) { - job->reject(QLatin1String("widget not found")); - return; - } - - QMetaObject::invokeMethod(widget, arguments["method"].toString().toUtf8().constData()); - job->resolve(); -} - -void SocketApi::command_ASYNC_GET_WIDGET_PROPERTY(const QSharedPointer &job) -{ - QString widgetName = job->arguments()[QLatin1String("objectName")].toString(); - auto widget = findWidget(widgetName); - if (!widget) { - QString message = QString(QLatin1String("Widget not found: 2: %1")).arg(widgetName); - job->reject(message); - return; - } - - auto propertyName = job->arguments()[QLatin1String("property")].toString(); - - auto segments = propertyName.split('.'); - - QObject *currentObject = widget; - QString value; - for (int i = 0; i < segments.count(); i++) { - auto segment = segments.at(i); - auto var = currentObject->property(segment.toUtf8().constData()); - - if (var.canConvert()) { - var.convert(QMetaType::QString); - value = var.value(); - break; - } - - auto tmpObject = var.value(); - if (tmpObject) { - currentObject = tmpObject; - } else { - QString message = QString(QLatin1String("Widget not found: 3: %1")).arg(widgetName); - job->reject(message); - return; - } - } - - job->resolve(value); -} - -void SocketApi::command_ASYNC_SET_WIDGET_PROPERTY(const QSharedPointer &job) -{ - auto &arguments = job->arguments(); - QString widgetName = arguments["objectName"].toString(); - auto widget = findWidget(widgetName); - if (!widget) { - QString message = QString(QLatin1String("Widget not found: 4: %1")).arg(widgetName); - job->reject(message); - return; - } - widget->setProperty(arguments["property"].toString().toUtf8().constData(), - arguments["value"]); - - job->resolve(); -} - -void SocketApi::command_ASYNC_WAIT_FOR_WIDGET_SIGNAL(const QSharedPointer &job) -{ - auto &arguments = job->arguments(); - QString widgetName = arguments["objectName"].toString(); - auto widget = findWidget(arguments["objectName"].toString()); - if (!widget) { - QString message = QString(QLatin1String("Widget not found: 5: %1")).arg(widgetName); - job->reject(message); - return; - } - - ListenerClosure *closure = new ListenerClosure([job]() { job->resolve("signal emitted"); }); - - auto signalSignature = arguments["signalSignature"].toString(); - signalSignature.prepend("2"); - auto utf8 = signalSignature.toUtf8(); - auto signalSignatureFinal = utf8.constData(); - connect(widget, signalSignatureFinal, closure, SLOT(closureSlot()), Qt::QueuedConnection); -} - -void SocketApi::command_ASYNC_TRIGGER_MENU_ACTION(const QSharedPointer &job) -{ - auto &arguments = job->arguments(); - - auto objectName = arguments["objectName"].toString(); - auto widget = findWidget(objectName); - if (!widget) { - QString message = QString(QLatin1String("Object not found: 1: %1")).arg(objectName); - job->reject(message); - return; - } - - auto children = widget->findChildren(); - for (auto childWidget : children) { - // foo is the popupwidget! - auto actions = childWidget->actions(); - for (auto action : actions) { - if (action->objectName() == arguments["actionName"].toString()) { - action->trigger(); - - job->resolve("action found"); - return; - } - } - } - - QString message = QString(QLatin1String("Action not found: 1: %1")).arg(arguments["actionName"].toString()); - job->reject(message); -} - -void SocketApi::command_ASYNC_ASSERT_ICON_IS_EQUAL(const QSharedPointer &job) -{ - auto widget = findWidget(job->arguments()[QLatin1String("queryString")].toString()); - if (!widget) { - QString message = QString(QLatin1String("Object not found: 6: %1")).arg(job->arguments()["queryString"].toString()); - job->reject(message); - return; - } - - auto propertyName = job->arguments()[QLatin1String("propertyPath")].toString(); - - auto segments = propertyName.split('.'); - - QObject *currentObject = widget; - QIcon value; - for (int i = 0; i < segments.count(); i++) { - auto segment = segments.at(i); - auto var = currentObject->property(segment.toUtf8().constData()); - - if (var.canConvert()) { - var.convert(QMetaType::QIcon); - value = var.value(); - break; - } - - auto tmpObject = var.value(); - if (tmpObject) { - currentObject = tmpObject; - } else { - job->reject(QString(QLatin1String("Icon not found: %1")).arg(propertyName)); - } - } - - auto iconName = job->arguments()[QLatin1String("iconName")].toString(); - if (value.name() == iconName) { - job->resolve(); - } else { - job->reject("iconName " + iconName + " does not match: " + value.name()); - } -} -#endif - -QString SocketApi::buildRegisterPathMessage(const QString &path) -{ - QFileInfo fi(path); - QString message = QLatin1String("REGISTER_PATH:"); - message.append(QDir::toNativeSeparators(fi.absoluteFilePath())); - return message; -} - -void SocketApiJob::resolve(const QString &response) -{ - _socketListener->sendMessage(QStringLiteral("RESOLVE|") + _jobId + QLatin1Char('|') + response); -} - -void SocketApiJob::resolve(const QJsonObject &response) -{ - resolve(QJsonDocument { response }.toJson()); -} - -void SocketApiJob::reject(const QString &response) -{ - _socketListener->sendMessage(QStringLiteral("REJECT|") + _jobId + QLatin1Char('|') + response); -} - -SocketApiJobV2::SocketApiJobV2(const QSharedPointer &socketListener, const QByteArray &command, const QJsonObject &arguments) - : _socketListener(socketListener) - , _command(command) - , _jobId(arguments[QStringLiteral("id")].toString()) - , _arguments(arguments[QStringLiteral("arguments")].toObject()) -{ - ASSERT(!_jobId.isEmpty()) -} - -void SocketApiJobV2::success(const QJsonObject &response) const -{ - doFinish(response); -} - -void SocketApiJobV2::failure(const QString &error) const -{ - doFinish({ { QStringLiteral("error"), error } }); -} - -void SocketApiJobV2::doFinish(const QJsonObject &obj) const -{ - _socketListener->sendMessage(_command + QStringLiteral("_RESULT:") + QJsonDocument({ { QStringLiteral("id"), _jobId }, { QStringLiteral("arguments"), obj } }).toJson(QJsonDocument::Compact)); - Q_EMIT finished(); -} - -} // namespace OCC - -#include "socketapi.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ -/* - * Copyright (C) by Dominik Schmidt - * - * 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 SOCKETAPI_H -#define SOCKETAPI_H - -#include "syncfileitem.h" -#include "common/syncfilestatus.h" -#include "sharedialog.h" // for the ShareDialogStartPage -#include "common/syncjournalfilerecord.h" - -#include "config.h" - -#if defined(Q_OS_MAC) -#include "socketapisocket_mac.h" -#else -#include -using SocketApiServer = QLocalServer; -#endif - -class QUrl; -class QLocalSocket; -class QStringList; - -namespace OCC { - -class SyncFileStatus; -class Folder; -class SocketListener; -class DirectEditor; -class SocketApiJob; -class SocketApiJobV2; - -Q_DECLARE_LOGGING_CATEGORY(lcSocketApi) - -/** - * @brief The SocketApi class - * @ingroup gui - */ -class SocketApi : public QObject -{ - Q_OBJECT - -public: - explicit SocketApi(QObject *parent = nullptr); - ~SocketApi() override; - -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, ShareDialogStartPage startPage); - void fileActivityCommandReceived(const QString &sharePath, const QString &localPath); - -private slots: - void slotNewConnection(); - void onLostConnection(); - void slotSocketDestroyed(QObject *obj); - void slotReadSocket(); - - static void copyUrlToClipboard(const QString &link); - static void emailPrivateLink(const QString &link); - static void openPrivateLink(const QString &link); - -private: - // Helper structure for getting information on a file - // based on its local path - used for nearly all remote - // actions. - struct FileData - { - static FileData get(const QString &localFile); - SyncFileStatus syncFileStatus() const; - SyncJournalFileRecord journalRecord() const; - FileData parentFolder() const; - - // Relative path of the file locally, without any vfs suffix - QString folderRelativePathNoVfsSuffix() const; - - Folder *folder; - // Absolute path of the file locally. (May be a virtual file) - QString localPath; - // Relative path of the file locally, as in the DB. (May be a virtual file) - QString folderRelativePath; - // Path of the file on the server (In case of virtual file, it points to the actual file) - QString serverRelativePath; - }; - - void broadcastMessage(const QString &msg, bool doWait = false); - - // opens share dialog, sends reply - void processShareRequest(const QString &localFile, SocketListener *listener, ShareDialogStartPage startPage); - void processFileActivityRequest(const QString &localFile); - - Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString &argument, SocketListener *listener); - Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString &argument, SocketListener *listener); - - Q_INVOKABLE void command_VERSION(const QString &argument, SocketListener *listener); - - Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString &argument, SocketListener *listener); - - // The context menu actions - Q_INVOKABLE void command_ACTIVITY(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_SHARE(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_MANAGE_PUBLIC_LINKS(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_COPY_PUBLIC_LINK(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_MAKE_AVAILABLE_LOCALLY(const QString &filesArg, SocketListener *listener); - Q_INVOKABLE void command_MAKE_ONLINE_ONLY(const QString &filesArg, SocketListener *listener); - Q_INVOKABLE void command_RESOLVE_CONFLICT(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_DELETE_ITEM(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_MOVE_ITEM(const QString &localFile, SocketListener *listener); - - // Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 -#ifdef Q_OS_WIN - Q_INVOKABLE void command_COPYASPATH(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_OPENNEWWINDOW(const QString &localFile, SocketListener *listener); - Q_INVOKABLE void command_OPEN(const QString &localFile, SocketListener *listener); -#endif - - // External sync - Q_INVOKABLE void command_V2_LIST_ACCOUNTS(const QSharedPointer &job) const; - Q_INVOKABLE void command_V2_UPLOAD_FILES_FROM(const QSharedPointer &job) const; - - // Fetch the private link and call targetFun - void fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun); - - /** Sends translated/branded strings that may be useful to the integration */ - Q_INVOKABLE void command_GET_STRINGS(const QString &argument, SocketListener *listener); - - // Sends the context menu options relating to sharing to listener - void sendSharingContextMenuOptions(const FileData &fileData, SocketListener *listener, bool enabled); - - /** Send the list of menu item. (added in version 1.1) - * argument is a list of files for which the menu should be shown, separated by '\x1e' - * Reply with GET_MENU_ITEMS:BEGIN - * followed by several MENU_ITEM:[Action]:[flag]:[Text] - * If flag contains 'd', the menu should be disabled - * and ends with GET_MENU_ITEMS:END - */ - Q_INVOKABLE void command_GET_MENU_ITEMS(const QString &argument, SocketListener *listener); - - /// Direct Editing - Q_INVOKABLE void command_EDIT(const QString &localFile, SocketListener *listener); - DirectEditor* getDirectEditorForLocalFile(const QString &localFile); - -#if GUI_TESTING - Q_INVOKABLE void command_ASYNC_ASSERT_ICON_IS_EQUAL(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_LIST_WIDGETS(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_INVOKE_WIDGET_METHOD(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_GET_WIDGET_PROPERTY(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_SET_WIDGET_PROPERTY(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_WAIT_FOR_WIDGET_SIGNAL(const QSharedPointer &job); - Q_INVOKABLE void command_ASYNC_TRIGGER_MENU_ACTION(const QSharedPointer &job); -#endif - - QString buildRegisterPathMessage(const QString &path); - - QSet _registeredAliases; - QMap> _listeners; - SocketApiServer _localServer; -}; -} - -#endif // SOCKETAPI_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi_p.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi_p.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapi_p.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapi_p.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -/* - * Copyright (C) by Dominik Schmidt - * Copyright (C) by Klaas Freitag - * Copyright (C) by Roeland Jago Douma - * - * 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 SOCKETAPI_P_H -#define SOCKETAPI_P_H - -#include -#include -#include - -#include -#include - -#include -#include - -namespace OCC { - -class BloomFilter -{ - // Initialize with m=1024 bits and k=2 (high and low 16 bits of a qHash). - // For a client navigating in less than 100 directories, this gives us a probability less than - // (1-e^(-2*100/1024))^2 = 0.03147872136 false positives. - const static int NumBits = 1024; - -public: - BloomFilter() - : hashBits(NumBits) - { - } - - void storeHash(uint hash) - { - hashBits.setBit((hash & 0xFFFF) % NumBits); // NOLINT it's uint all the way and the modulo puts us back in the 0..1023 range - hashBits.setBit((hash >> 16) % NumBits); // NOLINT - } - bool isHashMaybeStored(uint hash) const - { - return hashBits.testBit((hash & 0xFFFF) % NumBits) // NOLINT - && hashBits.testBit((hash >> 16) % NumBits); // NOLINT - } - -private: - QBitArray hashBits; -}; - -class SocketListener -{ -public: - QPointer socket; - - explicit SocketListener(QIODevice *_socket) - : socket(_socket) - { - } - - void sendMessage(const QString &message, bool doWait = false) const; - void sendWarning(const QString &message, bool doWait = false) const - { - sendMessage(QStringLiteral("WARNING:") + message, doWait); - } - void sendError(const QString &message, bool doWait = false) const - { - sendMessage(QStringLiteral("ERROR:") + message, doWait); - } - - void sendMessageIfDirectoryMonitored(const QString &message, uint systemDirectoryHash) const - { - if (_monitoredDirectoriesBloomFilter.isHashMaybeStored(systemDirectoryHash)) - sendMessage(message, false); - } - - void registerMonitoredDirectory(uint systemDirectoryHash) - { - _monitoredDirectoriesBloomFilter.storeHash(systemDirectoryHash); - } - -private: - BloomFilter _monitoredDirectoriesBloomFilter; -}; - -class ListenerClosure : public QObject -{ - Q_OBJECT -public: - using CallbackFunction = std::function; - ListenerClosure(CallbackFunction callback) - : callback_(callback) - { - } - -public slots: - void closureSlot() - { - callback_(); - deleteLater(); - } - -private: - CallbackFunction callback_; -}; - -class SocketApiJob : public QObject -{ - Q_OBJECT -public: - explicit SocketApiJob(const QString &jobId, const QSharedPointer &socketListener, const QJsonObject &arguments) - : _jobId(jobId) - , _socketListener(socketListener) - , _arguments(arguments) - { - } - - void resolve(const QString &response = QString()); - - void resolve(const QJsonObject &response); - - const QJsonObject &arguments() { return _arguments; } - - void reject(const QString &response); - -protected: - QString _jobId; - QSharedPointer _socketListener; - QJsonObject _arguments; -}; - -class SocketApiJobV2 : public QObject -{ - Q_OBJECT -public: - explicit SocketApiJobV2(const QSharedPointer &socketListener, const QByteArray &command, const QJsonObject &arguments); - - void success(const QJsonObject &response) const; - void failure(const QString &error) const; - - const QJsonObject &arguments() const { return _arguments; } - QByteArray command() const { return _command; } - -Q_SIGNALS: - void finished() const; - -private: - void doFinish(const QJsonObject &obj) const; - - QSharedPointer _socketListener; - const QByteArray _command; - QString _jobId; - QJsonObject _arguments; -}; -} - -Q_DECLARE_METATYPE(OCC::SocketListener *) - -#endif // SOCKETAPI_P_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapisocket_mac.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapisocket_mac.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapisocket_mac.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapisocket_mac.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -/* - * Copyright (C) by Jocelyn Turcotte - * - * 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 SOCKETAPISOCKET_OSX_H -#define SOCKETAPISOCKET_OSX_H - -#include -#include - -class SocketApiServerPrivate; -class SocketApiSocketPrivate; - -class SocketApiSocket : public QIODevice -{ - Q_OBJECT -public: - SocketApiSocket(QObject *parent, SocketApiSocketPrivate *p); - ~SocketApiSocket(); - - qint64 readData(char *data, qint64 maxlen) override; - qint64 writeData(const char *data, qint64 len) override; - - bool isSequential() const override { return true; } - qint64 bytesAvailable() const override; - bool canReadLine() const override; - -signals: - void disconnected(); - -private: - // Use Qt's p-impl system to hide objective-c types from C++ code including this file - Q_DECLARE_PRIVATE(SocketApiSocket) - QScopedPointer d_ptr; - friend class SocketApiServerPrivate; -}; - -class SocketApiServer : public QObject -{ - Q_OBJECT -public: - SocketApiServer(); - ~SocketApiServer(); - - void close(); - bool listen(const QString &name); - SocketApiSocket *nextPendingConnection(); - - static bool removeServer(const QString &) { return false; } - -signals: - void newConnection(); - -private: - Q_DECLARE_PRIVATE(SocketApiServer) - QScopedPointer d_ptr; -}; - -#endif // SOCKETAPISOCKET_OSX_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapisocket_mac.mm nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapisocket_mac.mm --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketapisocket_mac.mm 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketapisocket_mac.mm 1970-01-01 00:00:00.000000000 +0000 @@ -1,245 +0,0 @@ -/* - * Copyright (C) by Jocelyn Turcotte - * - * 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 "socketapisocket_mac.h" -#import - -@protocol ChannelProtocol -- (void)sendMessage:(NSData *)msg; -@end - -@protocol RemoteEndProtocol -- (void)registerTransmitter:(id)tx; -@end - -@interface LocalEnd : NSObject -@property SocketApiSocketPrivate *wrapper; -- (instancetype)initWithWrapper:(SocketApiSocketPrivate *)wrapper; -@end - -@interface Server : NSObject -@property SocketApiServerPrivate *wrapper; -- (instancetype)initWithWrapper:(SocketApiServerPrivate *)wrapper; -- (void)registerClient:(NSDistantObject *)remoteEnd; -@end - -class SocketApiSocketPrivate -{ -public: - SocketApiSocket *q_ptr; - - SocketApiSocketPrivate(NSDistantObject *remoteEnd); - ~SocketApiSocketPrivate(); - - // release remoteEnd - void disconnectRemote(); - - NSDistantObject *remoteEnd; - LocalEnd *localEnd; - QByteArray inBuffer; - bool isRemoteDisconnected = false; -}; - -class SocketApiServerPrivate -{ -public: - SocketApiServer *q_ptr; - - SocketApiServerPrivate(); - ~SocketApiServerPrivate(); - - QList pendingConnections; - NSConnection *connection; - Server *server; -}; - - -@implementation LocalEnd -- (instancetype)initWithWrapper:(SocketApiSocketPrivate *)wrapper -{ - self = [super init]; - self->_wrapper = wrapper; - return self; -} - -- (void)sendMessage:(NSData *)msg -{ - if (_wrapper) { - _wrapper->inBuffer += QByteArray::fromRawNSData(msg); - emit _wrapper->q_ptr->readyRead(); - } -} - -- (void)connectionDidDie:(NSNotification *)notification -{ -#pragma unused(notification) - if (_wrapper) { - _wrapper->disconnectRemote(); - emit _wrapper->q_ptr->disconnected(); - } -} -@end - -@implementation Server -- (instancetype)initWithWrapper:(SocketApiServerPrivate *)wrapper -{ - self = [super init]; - self->_wrapper = wrapper; - return self; -} - -- (void)registerClient:(NSDistantObject *)remoteEnd -{ - // This saves a few mach messages that would otherwise be needed to query the interface - [remoteEnd setProtocolForProxy:@protocol(RemoteEndProtocol)]; - - SocketApiServer *server = _wrapper->q_ptr; - SocketApiSocketPrivate *socketPrivate = new SocketApiSocketPrivate(remoteEnd); - SocketApiSocket *socket = new SocketApiSocket(server, socketPrivate); - _wrapper->pendingConnections.append(socket); - emit server->newConnection(); - - [remoteEnd registerTransmitter:socketPrivate->localEnd]; -} -@end - - -SocketApiSocket::SocketApiSocket(QObject *parent, SocketApiSocketPrivate *p) - : QIODevice(parent) - , d_ptr(p) -{ - Q_D(SocketApiSocket); - d->q_ptr = this; - open(ReadWrite); -} - -SocketApiSocket::~SocketApiSocket() -{ -} - -qint64 SocketApiSocket::readData(char *data, qint64 maxlen) -{ - Q_D(SocketApiSocket); - qint64 len = std::min(maxlen, static_cast(d->inBuffer.size())); - memcpy(data, d->inBuffer.constData(), len); - d->inBuffer.remove(0, len); - return len; -} - -qint64 SocketApiSocket::writeData(const char *data, qint64 len) -{ - Q_D(SocketApiSocket); - if (d->isRemoteDisconnected) - return -1; - - @try { - // FIXME: The NSConnection will make this block unless the function is marked as "oneway" - // in the protocol. This isn't async and reduces our performances but this currectly avoids - // a Mach queue deadlock during requests bursts of the legacy OwnCloudFinder extension. - // Since FinderSync already runs in a separate process, blocking isn't too critical. - [d->remoteEnd sendMessage:[NSData dataWithBytesNoCopy:const_cast(data) length:len freeWhenDone:NO]]; - return len; - } @catch (NSException *e) { - // connectionDidDie can be notified too late, also interpret any sending exception as a disconnection. - d->disconnectRemote(); - emit disconnected(); - return -1; - } -} - -qint64 SocketApiSocket::bytesAvailable() const -{ - Q_D(const SocketApiSocket); - return d->inBuffer.size() + QIODevice::bytesAvailable(); -} - -bool SocketApiSocket::canReadLine() const -{ - Q_D(const SocketApiSocket); - return d->inBuffer.indexOf('\n', int(pos())) != -1 || QIODevice::canReadLine(); -} - -SocketApiSocketPrivate::SocketApiSocketPrivate(NSDistantObject *remoteEnd) - : remoteEnd(remoteEnd) - , localEnd([[LocalEnd alloc] initWithWrapper:this]) -{ - [remoteEnd retain]; - // (Ab)use our objective-c object just to catch the notification - [[NSNotificationCenter defaultCenter] addObserver:localEnd - selector:@selector(connectionDidDie:) - name:NSConnectionDidDieNotification - object:[remoteEnd connectionForProxy]]; -} - -SocketApiSocketPrivate::~SocketApiSocketPrivate() -{ - disconnectRemote(); - - // The DO vended localEnd might still be referenced by the connection - localEnd.wrapper = nil; - [localEnd release]; -} - -void SocketApiSocketPrivate::disconnectRemote() -{ - if (isRemoteDisconnected) - return; - isRemoteDisconnected = true; - - [remoteEnd release]; -} - -SocketApiServer::SocketApiServer() - : d_ptr(new SocketApiServerPrivate) -{ - Q_D(SocketApiServer); - d->q_ptr = this; -} - -SocketApiServer::~SocketApiServer() -{ -} - -void SocketApiServer::close() -{ - // Assume we'll be destroyed right after -} - -bool SocketApiServer::listen(const QString &name) -{ - Q_D(SocketApiServer); - // Set the name of the root object - return [d->connection registerName:name.toNSString()]; -} - -SocketApiSocket *SocketApiServer::nextPendingConnection() -{ - Q_D(SocketApiServer); - return d->pendingConnections.takeFirst(); -} - -SocketApiServerPrivate::SocketApiServerPrivate() -{ - // Create the connection and server object to vend over Disributed Objects - connection = [[NSConnection alloc] init]; - server = [[Server alloc] initWithWrapper:this]; - [connection setRootObject:server]; -} - -SocketApiServerPrivate::~SocketApiServerPrivate() -{ - [connection release]; - server.wrapper = nil; - [server release]; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketuploadjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketuploadjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketuploadjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketuploadjob.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -/* - * Copyright (C) by Hannah von Reth - * - * 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 "socketuploadjob.h" -#include "socketapi_p.h" - -#include "accountmanager.h" -#include "common/syncjournaldb.h" -#include "syncengine.h" - -#include -#include -#include - -using namespace OCC; - -SocketUploadJob::SocketUploadJob(const QSharedPointer &job) - : _apiJob(job) -{ - connect(job.data(), &SocketApiJobV2::finished, this, &SocketUploadJob::deleteLater); - - _localPath = _apiJob->arguments()[QLatin1String("localPath")].toString(); - _remotePath = _apiJob->arguments()[QLatin1String("remotePath")].toString(); - if (!_remotePath.startsWith(QLatin1Char('/'))) { - _remotePath = QLatin1Char('/') + _remotePath; - } - - _pattern = job->arguments()[QLatin1String("pattern")].toString(); - // TODO: use uuid - const auto accname = job->arguments()[QLatin1String("account")][QLatin1String("name")].toString(); - auto account = AccountManager::instance()->account(accname); - - if (!QFileInfo(_localPath).isAbsolute()) { - job->failure(QStringLiteral("Local path must be a an absolute path")); - return; - } - if (!_tmp.open()) { - job->failure(QStringLiteral("Failed to create temporary database")); - return; - } - - _db = new SyncJournalDb(_tmp.fileName(), this); - _engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), _remotePath, _db); - _engine->setParent(_db); - - connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) { - _syncedFiles.append(item->_file); - }); - - connect(_engine, &OCC::SyncEngine::finished, this, [this](bool ok) { - if (ok) { - _apiJob->success({ { "localPath", _localPath }, { "syncedFiles", QJsonArray::fromStringList(_syncedFiles) } }); - } - }); - connect(_engine, &OCC::SyncEngine::syncError, this, [this](const QString &error, ErrorCategory) { - _apiJob->failure(error); - }); -} - -void SocketUploadJob::start() -{ - auto opt = _engine->syncOptions(); - opt.setFilePattern(_pattern); - if (!opt.fileRegex().isValid()) { - _apiJob->failure(opt.fileRegex().errorString()); - return; - } - _engine->setSyncOptions(opt); - - // create the dir, fail if it already exists - auto mkdir = new OCC::MkColJob(_engine->account(), _remotePath); - connect(mkdir, &OCC::MkColJob::finishedWithoutError, _engine, &OCC::SyncEngine::startSync); - connect(mkdir, &OCC::MkColJob::finishedWithError, this, [this](QNetworkReply *reply) { - if (reply->error() == 202) { - _apiJob->failure(QStringLiteral("Destination %1 already exists").arg(_remotePath)); - } else { - _apiJob->failure(reply->errorString()); - } - }); - mkdir->start(); -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketuploadjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketuploadjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi/socketuploadjob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi/socketuploadjob.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright (C) by Hannah von Reth - * - * 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. - */ - -#pragma once -#include -#include - -#include "socketapi.h" -#include "account.h" - -namespace OCC { - -class SyncJournalDb; -class SyncEngine; - -class SocketUploadJob : public QObject -{ - Q_OBJECT -public: - SocketUploadJob(const QSharedPointer &job); - void start(); - -private: - QSharedPointer _apiJob; - QString _localPath; - QString _remotePath; - QString _pattern; - QTemporaryFile _tmp; - SyncJournalDb *_db; - SyncEngine *_engine; - QStringList _syncedFiles; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,1384 @@ +/* + * Copyright (C) by Dominik Schmidt + * Copyright (C) by Klaas Freitag + * Copyright (C) by Roeland Jago Douma + * + * 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 "socketapi.h" +#include "socketapi_p.h" + +#include "conflictdialog.h" +#include "conflictsolver.h" +#include "config.h" +#include "configfile.h" +#include "folderman.h" +#include "folder.h" +#include "theme.h" +#include "common/syncjournalfilerecord.h" +#include "syncengine.h" +#include "syncfileitem.h" +#include "filesystem.h" +#include "version.h" +#include "account.h" +#include "accountstate.h" +#include "account.h" +#include "capabilities.h" +#include "common/asserts.h" +#include "guiutility.h" +#ifndef OWNCLOUD_TEST +#include "sharemanager.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include + +#include +#include + +#include +#include + +#ifdef Q_OS_MAC +#include +#endif + + +// This is the version that is returned when the client asks for the VERSION. +// The first number should be changed if there is an incompatible change that breaks old clients. +// The second number should be changed when there are new features. +#define MIRALL_SOCKET_API_VERSION "1.1" + +namespace { +#if GUI_TESTING + +using namespace OCC; + +QList allObjects(const QList &widgets) { + QList objects; + std::copy(widgets.constBegin(), widgets.constEnd(), std::back_inserter(objects)); + + objects << qApp; + + return objects; +} + +QObject *findWidget(const QString &queryString, const QList &widgets = QApplication::allWidgets()) +{ + auto objects = allObjects(widgets); + + QList::const_iterator foundWidget; + + if (queryString.contains('>')) { + qCDebug(lcSocketApi) << "queryString contains >"; + + auto subQueries = queryString.split('>', QString::SkipEmptyParts); + Q_ASSERT(subQueries.count() == 2); + + auto parentQueryString = subQueries[0].trimmed(); + qCDebug(lcSocketApi) << "Find parent: " << parentQueryString; + auto parent = findWidget(parentQueryString); + + if(!parent) { + return nullptr; + } + + auto childQueryString = subQueries[1].trimmed(); + auto child = findWidget(childQueryString, parent->findChildren()); + qCDebug(lcSocketApi) << "found child: " << !!child; + return child; + + } else if(queryString.startsWith('#')) { + auto objectName = queryString.mid(1); + qCDebug(lcSocketApi) << "find objectName: " << objectName; + foundWidget = std::find_if(objects.constBegin(), objects.constEnd(), [&](QObject *widget) { + return widget->objectName() == objectName; + }); + } else { + QList matches; + std::copy_if(objects.constBegin(), objects.constEnd(), std::back_inserter(matches), [&](QObject* widget) { + return widget->inherits(queryString.toLatin1()); + }); + + std::for_each(matches.constBegin(), matches.constEnd(), [](QObject* w) { + if(!w) return; + qCDebug(lcSocketApi) << "WIDGET: " << w->objectName() << w->metaObject()->className(); + }); + + if(matches.empty()) { + return nullptr; + } + return matches[0]; + } + + if (foundWidget == objects.constEnd()) { + return nullptr; + } + + return *foundWidget; +} +#endif + +static inline QString removeTrailingSlash(QString path) +{ + Q_ASSERT(path.endsWith(QLatin1Char('/'))); + path.truncate(path.length() - 1); + return path; +} + +static QString buildMessage(const QString &verb, const QString &path, const QString &status = QString()) +{ + QString msg(verb); + + if (!status.isEmpty()) { + msg.append(QLatin1Char(':')); + msg.append(status); + } + if (!path.isEmpty()) { + msg.append(QLatin1Char(':')); + QFileInfo fi(path); + msg.append(QDir::toNativeSeparators(fi.absoluteFilePath())); + } + return msg; +} +} + +namespace OCC { + +Q_LOGGING_CATEGORY(lcSocketApi, "nextcloud.gui.socketapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcPublicLink, "nextcloud.gui.socketapi.publiclink", QtInfoMsg) + + +void SocketListener::sendMessage(const QString &message, bool doWait) const +{ + if (!socket) { + qCWarning(lcSocketApi) << "Not sending message to dead socket:" << message; + return; + } + + qCDebug(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket; + QString localMessage = message; + if (!localMessage.endsWith(QLatin1Char('\n'))) { + localMessage.append(QLatin1Char('\n')); + } + + QByteArray bytesToSend = localMessage.toUtf8(); + qint64 sent = socket->write(bytesToSend); + if (doWait) { + socket->waitForBytesWritten(1000); + } + if (sent != bytesToSend.length()) { + qCWarning(lcSocketApi) << "Could not send all data on socket for " << localMessage; + } +} + +struct ListenerHasSocketPred +{ + QIODevice *socket; + ListenerHasSocketPred(QIODevice *socket) + : socket(socket) + { + } + bool operator()(const SocketListener &listener) const { return listener.socket == socket; } +}; + +SocketApi::SocketApi(QObject *parent) + : QObject(parent) +{ + QString socketPath; + + qRegisterMetaType("SocketListener*"); + qRegisterMetaType>("QSharedPointer"); + + if (Utility::isWindows()) { + socketPath = QLatin1String(R"(\\.\pipe\)") + + QLatin1String(APPLICATION_EXECUTABLE) + + QLatin1String("-") + + QString::fromLocal8Bit(qgetenv("USERNAME")); + // TODO: once the windows extension supports multiple + // client connections, switch back to the theme name + // See issue #2388 + // + Theme::instance()->appName(); + } else if (Utility::isMac()) { + // This must match the code signing Team setting of the extension + // Example for developer builds (with ad-hoc signing identity): "" "com.owncloud.desktopclient" ".socketApi" + // Example for official signed packages: "9B5WD74GWJ." "com.owncloud.desktopclient" ".socketApi" + socketPath = SOCKETAPI_TEAM_IDENTIFIER_PREFIX APPLICATION_REV_DOMAIN ".socketApi"; +#ifdef Q_OS_MAC + CFURLRef url = (CFURLRef)CFAutorelease((CFURLRef)CFBundleCopyBundleURL(CFBundleGetMainBundle())); + QString bundlePath = QUrl::fromCFURL(url).path(); + + auto _system = [](const QString &cmd, const QStringList &args){ + QProcess process; + process.setProcessChannelMode(QProcess::MergedChannels); + process.start(cmd, args); + if (!process.waitForFinished()) + { + qCWarning(lcSocketApi) << "Failed to load shell extension:" << cmd << args.join(" ") << process.errorString(); + } else { + qCInfo(lcSocketApi) << (process.exitCode() != 0 ? "Failed to load" : "Loaded") << "shell extension:" << cmd << args.join(" ") << process.readAll(); + } + }; + // Add it again. This was needed for Mojave to trigger a load. + _system(QStringLiteral("pluginkit"), {QStringLiteral("-a"),QStringLiteral("%1Contents/PlugIns/FinderSyncExt.appex/").arg(bundlePath)}); + // Tell Finder to use the Extension (checking it from System Preferences -> Extensions) + _system(QStringLiteral("pluginkit"), {QStringLiteral("-e"), QStringLiteral("use"), QStringLiteral("-i"), QStringLiteral(APPLICATION_REV_DOMAIN ".FinderSyncExt")}); + +#endif + } else if (Utility::isLinux() || Utility::isBSD()) { + QString runtimeDir; + runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); + socketPath = runtimeDir + "/" + Theme::instance()->appName() + "/socket"; + } else { + qCWarning(lcSocketApi) << "An unexpected system detected, this probably won't work."; + } + + SocketApiServer::removeServer(socketPath); + QFileInfo info(socketPath); + if (!info.dir().exists()) { + bool result = info.dir().mkpath("."); + qCDebug(lcSocketApi) << "creating" << info.dir().path() << result; + if (result) { + QFile::setPermissions(socketPath, + QFile::Permissions(QFile::ReadOwner + QFile::WriteOwner + QFile::ExeOwner)); + } + } + if (!_localServer.listen(socketPath)) { + qCWarning(lcSocketApi) << "can't start server" << socketPath; + } else { + qCInfo(lcSocketApi) << "server started, listening at " << socketPath; + } + + connect(&_localServer, &SocketApiServer::newConnection, this, &SocketApi::slotNewConnection); + + // folder watcher + connect(FolderMan::instance(), &FolderMan::folderSyncStateChange, this, &SocketApi::slotUpdateFolderView); +} + +SocketApi::~SocketApi() +{ + qCDebug(lcSocketApi) << "dtor"; + _localServer.close(); + // All remaining sockets will be destroyed with _localServer, their parent + ASSERT(_listeners.isEmpty() || _listeners.first().socket->parent() == &_localServer); + _listeners.clear(); +} + +void SocketApi::slotNewConnection() +{ + // Note that on macOS this is not actually a line-based QIODevice, it's a SocketApiSocket which is our + // custom message based macOS IPC. + QIODevice *socket = _localServer.nextPendingConnection(); + + if (!socket) { + return; + } + qCInfo(lcSocketApi) << "New connection" << socket; + connect(socket, &QIODevice::readyRead, this, &SocketApi::slotReadSocket); + connect(socket, SIGNAL(disconnected()), this, SLOT(onLostConnection())); + connect(socket, &QObject::destroyed, this, &SocketApi::slotSocketDestroyed); + ASSERT(socket->readAll().isEmpty()); + + _listeners.append(SocketListener(socket)); + SocketListener &listener = _listeners.last(); + + foreach (Folder *f, FolderMan::instance()->map()) { + if (f->canSync()) { + QString message = buildRegisterPathMessage(removeTrailingSlash(f->path())); + qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket; + listener.sendMessage(message); + } + } +} + +void SocketApi::onLostConnection() +{ + qCInfo(lcSocketApi) << "Lost connection " << sender(); + sender()->deleteLater(); + + auto socket = qobject_cast(sender()); + ASSERT(socket); + _listeners.erase(std::remove_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket)), _listeners.end()); +} + +void SocketApi::slotSocketDestroyed(QObject *obj) +{ + auto *socket = static_cast(obj); + _listeners.erase(std::remove_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket)), _listeners.end()); +} + +void SocketApi::slotReadSocket() +{ + auto *socket = qobject_cast(sender()); + ASSERT(socket); + + // Find the SocketListener + // + // It's possible for the disconnected() signal to be triggered before + // the readyRead() signals are received - in that case there won't be a + // valid listener. We execute the handler anyway, but it will work with + // a SocketListener that doesn't send any messages. + static auto noListener = SocketListener(nullptr); + SocketListener *listener = &noListener; + auto listenerIt = std::find_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket)); + if (listenerIt != _listeners.end()) { + listener = &*listenerIt; + } + + while (socket->canReadLine()) { + // Make sure to normalize the input from the socket to + // make sure that the path will match, especially on OS X. + QString line = QString::fromUtf8(socket->readLine()).normalized(QString::NormalizationForm_C); + line.chop(1); // remove the '\n' + qCInfo(lcSocketApi) << "Received SocketAPI message <--" << line << "from" << socket; + QByteArray command = line.split(":").value(0).toLatin1(); + + QByteArray functionWithArguments = "command_" + command; + if (command.startsWith("ASYNC_")) { + functionWithArguments += "(QSharedPointer)"; + } else { + functionWithArguments += "(QString,SocketListener*)"; + } + + int indexOfMethod = staticMetaObject.indexOfMethod(functionWithArguments); + + QString argument = line.remove(0, command.length() + 1); + if (command.startsWith("ASYNC_")) { + + auto arguments = argument.split('|'); + if (arguments.size() != 2) { + listener->sendMessage(QLatin1String("argument count is wrong")); + return; + } + + auto json = QJsonDocument::fromJson(arguments[1].toUtf8()).object(); + + auto jobId = arguments[0]; + + auto socketApiJob = QSharedPointer( + new SocketApiJob(jobId, listener, json), &QObject::deleteLater); + if (indexOfMethod != -1) { + staticMetaObject.method(indexOfMethod) + .invoke(this, Qt::QueuedConnection, + Q_ARG(QSharedPointer, socketApiJob)); + } else { + qCWarning(lcSocketApi) << "The command is not supported by this version of the client:" << command + << "with argument:" << argument; + socketApiJob->reject("command not found"); + } + } else { + if (indexOfMethod != -1) { + // to ensure that listener is still valid we need to call it with Qt::DirectConnection + ASSERT(thread() == QThread::currentThread()) + staticMetaObject.method(indexOfMethod) + .invoke(this, Qt::DirectConnection, Q_ARG(QString, argument), + Q_ARG(SocketListener *, listener)); + } else { + qCWarning(lcSocketApi) << "The command is not supported by this version of the client:" << command << "with argument:" << argument; + } + } + } +} + +void SocketApi::slotRegisterPath(const QString &alias) +{ + // Make sure not to register twice to each connected client + if (_registeredAliases.contains(alias)) + return; + + Folder *f = FolderMan::instance()->folder(alias); + if (f) { + QString message = buildRegisterPathMessage(removeTrailingSlash(f->path())); + foreach (auto &listener, _listeners) { + qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket; + listener.sendMessage(message); + } + } + + _registeredAliases.insert(alias); +} + +void SocketApi::slotUnregisterPath(const QString &alias) +{ + if (!_registeredAliases.contains(alias)) + return; + + Folder *f = FolderMan::instance()->folder(alias); + if (f) + broadcastMessage(buildMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(f->path()), QString()), true); + + _registeredAliases.remove(alias); +} + +void SocketApi::slotUpdateFolderView(Folder *f) +{ + if (_listeners.isEmpty()) { + return; + } + + if (f) { + // do only send UPDATE_VIEW for a couple of status + if (f->syncResult().status() == SyncResult::SyncPrepare + || f->syncResult().status() == SyncResult::Success + || f->syncResult().status() == SyncResult::Paused + || f->syncResult().status() == SyncResult::Problem + || f->syncResult().status() == SyncResult::Error + || f->syncResult().status() == SyncResult::SetupError) { + QString rootPath = removeTrailingSlash(f->path()); + broadcastStatusPushMessage(rootPath, f->syncEngine().syncFileStatusTracker().fileStatus("")); + + broadcastMessage(buildMessage(QLatin1String("UPDATE_VIEW"), rootPath)); + } else { + qCDebug(lcSocketApi) << "Not sending UPDATE_VIEW for" << f->alias() << "because status() is" << f->syncResult().status(); + } + } +} + +void SocketApi::broadcastMessage(const QString &msg, bool doWait) +{ + foreach (auto &listener, _listeners) { + listener.sendMessage(msg, doWait); + } +} + +void SocketApi::processShareRequest(const QString &localFile, SocketListener *listener, ShareDialogStartPage startPage) +{ + auto theme = Theme::instance(); + + auto fileData = FileData::get(localFile); + auto shareFolder = fileData.folder; + if (!shareFolder) { + const QString message = QLatin1String("SHARE:NOP:") + QDir::toNativeSeparators(localFile); + // files that are not within a sync folder are not synced. + listener->sendMessage(message); + } else if (!shareFolder->accountState()->isConnected()) { + const QString message = QLatin1String("SHARE:NOTCONNECTED:") + QDir::toNativeSeparators(localFile); + // if the folder isn't connected, don't open the share dialog + listener->sendMessage(message); + } else if (!theme->linkSharing() && (!theme->userGroupSharing() || shareFolder->accountState()->account()->serverVersionInt() < Account::makeServerVersion(8, 2, 0))) { + const QString message = QLatin1String("SHARE:NOP:") + QDir::toNativeSeparators(localFile); + listener->sendMessage(message); + } else { + // If the file doesn't have a journal record, it might not be uploaded yet + if (!fileData.journalRecord().isValid()) { + const QString message = QLatin1String("SHARE:NOTSYNCED:") + QDir::toNativeSeparators(localFile); + listener->sendMessage(message); + return; + } + + auto &remotePath = fileData.serverRelativePath; + + // Can't share root folder + if (remotePath == "/") { + const QString message = QLatin1String("SHARE:CANNOTSHAREROOT:") + QDir::toNativeSeparators(localFile); + listener->sendMessage(message); + return; + } + + const QString message = QLatin1String("SHARE:OK:") + QDir::toNativeSeparators(localFile); + listener->sendMessage(message); + + emit shareCommandReceived(remotePath, fileData.localPath, startPage); + } +} + +void SocketApi::broadcastStatusPushMessage(const QString &systemPath, SyncFileStatus fileStatus) +{ + QString msg = buildMessage(QLatin1String("STATUS"), systemPath, fileStatus.toSocketAPIString()); + Q_ASSERT(!systemPath.endsWith('/')); + uint directoryHash = qHash(systemPath.left(systemPath.lastIndexOf('/'))); + foreach (auto &listener, _listeners) { + listener.sendMessageIfDirectoryMonitored(msg, directoryHash); + } +} + +void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString &argument, SocketListener *listener) +{ + // This command is the same as RETRIEVE_FILE_STATUS + command_RETRIEVE_FILE_STATUS(argument, listener); +} + +void SocketApi::command_RETRIEVE_FILE_STATUS(const QString &argument, SocketListener *listener) +{ + QString statusString; + + auto fileData = FileData::get(argument); + if (!fileData.folder) { + // this can happen in offline mode e.g.: nothing to worry about + statusString = QLatin1String("NOP"); + } else { + // The user probably visited this directory in the file shell. + // Let the listener know that it should now send status pushes for sibblings of this file. + QString directory = fileData.localPath.left(fileData.localPath.lastIndexOf('/')); + listener->registerMonitoredDirectory(qHash(directory)); + + SyncFileStatus fileStatus = fileData.syncFileStatus(); + statusString = fileStatus.toSocketAPIString(); + } + + const QString message = QLatin1String("STATUS:") % statusString % QLatin1Char(':') % QDir::toNativeSeparators(argument); + listener->sendMessage(message); +} + +void SocketApi::command_SHARE(const QString &localFile, SocketListener *listener) +{ + processShareRequest(localFile, listener, ShareDialogStartPage::UsersAndGroups); +} + +void SocketApi::command_MANAGE_PUBLIC_LINKS(const QString &localFile, SocketListener *listener) +{ + processShareRequest(localFile, listener, ShareDialogStartPage::PublicLinks); +} + +void SocketApi::command_VERSION(const QString &, SocketListener *listener) +{ + listener->sendMessage(QLatin1String("VERSION:" MIRALL_VERSION_STRING ":" MIRALL_SOCKET_API_VERSION)); +} + +void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketListener *listener) +{ + //listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is Nextcloud").arg(Theme::instance()->appNameGUI())); + listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + Theme::instance()->appNameGUI()); +} + +void SocketApi::command_EDIT(const QString &localFile, SocketListener *listener) +{ + Q_UNUSED(listener) + auto fileData = FileData::get(localFile); + if (!fileData.folder) { + qCWarning(lcSocketApi) << "Unknown path" << localFile; + return; + } + + auto record = fileData.journalRecord(); + if (!record.isValid()) + return; + + DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); + if (!editor) + return; + + auto *job = new JsonApiJob(fileData.folder->accountState()->account(), QLatin1String("ocs/v2.php/apps/files/api/v1/directEditing/open"), this); + + QUrlQuery params; + params.addQueryItem("path", fileData.serverRelativePath); + params.addQueryItem("editorId", editor->id()); + job->addQueryParams(params); + job->usePOST(); + + QObject::connect(job, &JsonApiJob::jsonReceived, [](const QJsonDocument &json){ + auto data = json.object().value("ocs").toObject().value("data").toObject(); + auto url = QUrl(data.value("url").toString()); + + if(!url.isEmpty()) + Utility::openBrowser(url); + }); + job->start(); +} + +// don't pull the share manager into socketapi unittests +#ifndef OWNCLOUD_TEST + +class GetOrCreatePublicLinkShare : public QObject +{ + Q_OBJECT +public: + GetOrCreatePublicLinkShare(const AccountPtr &account, const QString &localFile, + std::function targetFun, QObject *parent) + : QObject(parent) + , _shareManager(account) + , _localFile(localFile) + , _targetFun(targetFun) + { + connect(&_shareManager, &ShareManager::sharesFetched, + this, &GetOrCreatePublicLinkShare::sharesFetched); + connect(&_shareManager, &ShareManager::linkShareCreated, + this, &GetOrCreatePublicLinkShare::linkShareCreated); + connect(&_shareManager, &ShareManager::serverError, + this, &GetOrCreatePublicLinkShare::serverError); + connect(&_shareManager, &ShareManager::linkShareRequiresPassword, + this, &GetOrCreatePublicLinkShare::passwordRequired); + } + + void run() + { + qCDebug(lcPublicLink) << "Fetching shares"; + _shareManager.fetchShares(_localFile); + } + +private slots: + void sharesFetched(const QList> &shares) + { + auto shareName = SocketApi::tr("Context menu share"); + // If there already is a context menu share, reuse it + for (const auto &share : shares) { + const auto linkShare = qSharedPointerDynamicCast(share); + if (!linkShare) + continue; + + if (linkShare->getName() == shareName) { + qCDebug(lcPublicLink) << "Found existing share, reusing"; + return success(linkShare->getLink().toString()); + } + } + + // otherwise create a new one + qCDebug(lcPublicLink) << "Creating new share"; + _shareManager.createLinkShare(_localFile, shareName, QString()); + } + + void linkShareCreated(const QSharedPointer &share) + { + qCDebug(lcPublicLink) << "New share created"; + success(share->getLink().toString()); + } + + void passwordRequired() { + bool ok = false; + QString password = QInputDialog::getText(nullptr, + tr("Password for share required"), + tr("Please enter a password for your link share:"), + QLineEdit::Normal, + QString(), + &ok); + + if (!ok) { + // The dialog was canceled so no need to do anything + return; + } + + // Try to create the link share again with the newly entered password + _shareManager.createLinkShare(_localFile, QString(), password); + } + + void serverError(int code, const QString &message) + { + qCWarning(lcPublicLink) << "Share fetch/create error" << code << message; + QMessageBox::warning( + nullptr, + tr("Sharing error"), + tr("Could not retrieve or create the public link share. Error:\n\n%1").arg(message), + QMessageBox::Ok, + QMessageBox::NoButton); + deleteLater(); + } + +private: + void success(const QString &link) + { + _targetFun(link); + deleteLater(); + } + + ShareManager _shareManager; + QString _localFile; + std::function _targetFun; +}; + +#else + +class GetOrCreatePublicLinkShare : public QObject +{ + Q_OBJECT +public: + GetOrCreatePublicLinkShare(const AccountPtr &, const QString &, + std::function, QObject *) + { + } + + void run() + { + } +}; + +#endif + +void SocketApi::command_COPY_PUBLIC_LINK(const QString &localFile, SocketListener *) +{ + auto fileData = FileData::get(localFile); + if (!fileData.folder) + return; + + AccountPtr account = fileData.folder->accountState()->account(); + auto job = new GetOrCreatePublicLinkShare(account, fileData.serverRelativePath, [](const QString &url) { copyUrlToClipboard(url); }, this); + job->run(); +} + +// Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 +#ifdef Q_OS_WIN +void SocketApi::command_COPYASPATH(const QString &localFile, SocketListener *) +{ + QApplication::clipboard()->setText(localFile); +} + +void SocketApi::command_OPENNEWWINDOW(const QString &localFile, SocketListener *) +{ + QDesktopServices::openUrl(QUrl::fromLocalFile(localFile)); +} + +void SocketApi::command_OPEN(const QString &localFile, SocketListener *socketListener) +{ + command_OPENNEWWINDOW(localFile, socketListener); +} +#endif + +// Fetches the private link url asynchronously and then calls the target slot +void SocketApi::fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun) +{ + auto fileData = FileData::get(localFile); + if (!fileData.folder) { + qCWarning(lcSocketApi) << "Unknown path" << localFile; + return; + } + + auto record = fileData.journalRecord(); + if (!record.isValid()) + return; + + fetchPrivateLinkUrl( + fileData.folder->accountState()->account(), + fileData.serverRelativePath, + record.numericFileId(), + this, + targetFun); +} + +void SocketApi::command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *) +{ + fetchPrivateLinkUrlHelper(localFile, &SocketApi::copyUrlToClipboard); +} + +void SocketApi::command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *) +{ + fetchPrivateLinkUrlHelper(localFile, &SocketApi::emailPrivateLink); +} + +void SocketApi::command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *) +{ + fetchPrivateLinkUrlHelper(localFile, &SocketApi::openPrivateLink); +} + +void SocketApi::command_MAKE_AVAILABLE_LOCALLY(const QString &filesArg, SocketListener *) +{ + QStringList files = filesArg.split(QLatin1Char('\x1e')); // Record Separator + + for (const auto &file : files) { + auto data = FileData::get(file); + if (!data.folder) + continue; + + // Update the pin state on all items + data.folder->vfs().setPinState(data.folderRelativePath, PinState::AlwaysLocal); + + // Trigger sync + data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); + data.folder->scheduleThisFolderSoon(); + } +} + +/* Go over all the files and replace them by a virtual file */ +void SocketApi::command_MAKE_ONLINE_ONLY(const QString &filesArg, SocketListener *) +{ + QStringList files = filesArg.split(QLatin1Char('\x1e')); // Record Separator + + for (const auto &file : files) { + auto data = FileData::get(file); + if (!data.folder) + continue; + + // Update the pin state on all items + data.folder->vfs().setPinState(data.folderRelativePath, PinState::OnlineOnly); + + // Trigger sync + data.folder->schedulePathForLocalDiscovery(data.folderRelativePath); + data.folder->scheduleThisFolderSoon(); + } +} + +void SocketApi::copyUrlToClipboard(const QString &link) +{ + QApplication::clipboard()->setText(link); +} + +void SocketApi::command_RESOLVE_CONFLICT(const QString &localFile, SocketListener *) +{ + const auto fileData = FileData::get(localFile); + if (!fileData.folder || !Utility::isConflictFile(fileData.folderRelativePath)) + return; // should not have shown menu item + + const auto conflictedRelativePath = fileData.folderRelativePath; + const auto baseRelativePath = fileData.folder->journalDb()->conflictFileBaseName(fileData.folderRelativePath.toUtf8()); + + const auto dir = QDir(fileData.folder->path()); + const auto conflictedPath = dir.filePath(conflictedRelativePath); + const auto basePath = dir.filePath(baseRelativePath); + + const auto baseName = QFileInfo(basePath).fileName(); + +#ifndef OWNCLOUD_TEST + ConflictDialog dialog; + dialog.setBaseFilename(baseName); + dialog.setLocalVersionFilename(conflictedPath); + dialog.setRemoteVersionFilename(basePath); + if (dialog.exec() == ConflictDialog::Accepted) { + fileData.folder->scheduleThisFolderSoon(); + } +#endif +} + +void SocketApi::command_DELETE_ITEM(const QString &localFile, SocketListener *) +{ + ConflictSolver solver; + solver.setLocalVersionFilename(localFile); + solver.exec(ConflictSolver::KeepRemoteVersion); +} + +void SocketApi::command_MOVE_ITEM(const QString &localFile, SocketListener *) +{ + const auto fileData = FileData::get(localFile); + const auto parentDir = fileData.parentFolder(); + if (!fileData.folder) + return; // should not have shown menu item + + QString defaultDirAndName = fileData.folderRelativePath; + + // If it's a conflict, we want to save it under the base name by default + if (Utility::isConflictFile(defaultDirAndName)) { + defaultDirAndName = fileData.folder->journalDb()->conflictFileBaseName(fileData.folderRelativePath.toUtf8()); + } + + // If the parent doesn't accept new files, go to the root of the sync folder + QFileInfo fileInfo(localFile); + const auto parentRecord = parentDir.journalRecord(); + if ((fileInfo.isFile() && !parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddFile)) + || (fileInfo.isDir() && !parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddSubDirectories))) { + defaultDirAndName = QFileInfo(defaultDirAndName).fileName(); + } + + // Add back the folder path + defaultDirAndName = QDir(fileData.folder->path()).filePath(defaultDirAndName); + + const auto target = QFileDialog::getSaveFileName( + nullptr, + tr("Select new location …"), + defaultDirAndName, + QString(), nullptr, QFileDialog::HideNameFilterDetails); + if (target.isEmpty()) + return; + + ConflictSolver solver; + solver.setLocalVersionFilename(localFile); + solver.setRemoteVersionFilename(target); +} + +void SocketApi::emailPrivateLink(const QString &link) +{ + Utility::openEmailComposer( + tr("I shared something with you"), + link, + nullptr); +} + +void OCC::SocketApi::openPrivateLink(const QString &link) +{ + Utility::openBrowser(link); +} + +void SocketApi::command_GET_STRINGS(const QString &argument, SocketListener *listener) +{ + static std::array, 5> strings { { + { "SHARE_MENU_TITLE", tr("Share options") }, + { "CONTEXT_MENU_TITLE", Theme::instance()->appNameGUI() }, + { "COPY_PRIVATE_LINK_MENU_TITLE", tr("Copy private link to clipboard") }, + { "EMAIL_PRIVATE_LINK_MENU_TITLE", tr("Send private link by email …") }, + { "CONTEXT_MENU_ICON", APPLICATION_ICON_NAME}, + } }; + listener->sendMessage(QString("GET_STRINGS:BEGIN")); + for (const auto& key_value : strings) { + if (argument.isEmpty() || argument == QLatin1String(key_value.first)) { + listener->sendMessage(QString("STRING:%1:%2").arg(key_value.first, key_value.second)); + } + } + listener->sendMessage(QString("GET_STRINGS:END")); +} + +void SocketApi::sendSharingContextMenuOptions(const FileData &fileData, SocketListener *listener, bool enabled) +{ + auto record = fileData.journalRecord(); + bool isOnTheServer = record.isValid(); + auto flagString = isOnTheServer && enabled ? QLatin1String("::") : QLatin1String(":d:"); + + auto capabilities = fileData.folder->accountState()->account()->capabilities(); + auto theme = Theme::instance(); + if (!capabilities.shareAPI() || !(theme->userGroupSharing() || (theme->linkSharing() && capabilities.sharePublicLink()))) + return; + + // If sharing is globally disabled, do not show any sharing entries. + // If there is no permission to share for this file, add a disabled entry saying so + if (isOnTheServer && !record._remotePerm.isNull() && !record._remotePerm.hasPermission(RemotePermissions::CanReshare)) { + listener->sendMessage(QLatin1String("MENU_ITEM:DISABLED:d:") + (!record.isDirectory() + ? tr("Resharing this file is not allowed") : tr("Resharing this folder is not allowed"))); + } else { + listener->sendMessage(QLatin1String("MENU_ITEM:SHARE") + flagString + tr("Share options")); + + // Do we have public links? + bool publicLinksEnabled = theme->linkSharing() && capabilities.sharePublicLink(); + + // Is is possible to create a public link without user choices? + bool canCreateDefaultPublicLink = publicLinksEnabled + && !capabilities.sharePublicLinkEnforceExpireDate() + && !capabilities.sharePublicLinkAskOptionalPassword() + && !capabilities.sharePublicLinkEnforcePassword(); + + if (canCreateDefaultPublicLink) { + listener->sendMessage(QLatin1String("MENU_ITEM:COPY_PUBLIC_LINK") + flagString + tr("Copy public link")); + } else if (publicLinksEnabled) { + listener->sendMessage(QLatin1String("MENU_ITEM:MANAGE_PUBLIC_LINKS") + flagString + tr("Copy public link")); + } + } + + listener->sendMessage(QLatin1String("MENU_ITEM:COPY_PRIVATE_LINK") + flagString + tr("Copy internal link")); + + // Disabled: only providing email option for private links would look odd, + // and the copy option is more general. + //listener->sendMessage(QLatin1String("MENU_ITEM:EMAIL_PRIVATE_LINK") + flagString + tr("Send private link by email …")); +} + +SocketApi::FileData SocketApi::FileData::get(const QString &localFile) +{ + FileData data; + + data.localPath = QDir::cleanPath(localFile); + if (data.localPath.endsWith(QLatin1Char('/'))) + data.localPath.chop(1); + + data.folder = FolderMan::instance()->folderForPath(data.localPath); + if (!data.folder) + return data; + + data.folderRelativePath = data.localPath.mid(data.folder->cleanPath().length() + 1); + data.serverRelativePath = QDir(data.folder->remotePath()).filePath(data.folderRelativePath); + QString virtualFileExt = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX); + if (data.serverRelativePath.endsWith(virtualFileExt)) { + data.serverRelativePath.chop(virtualFileExt.size()); + } + return data; +} + +QString SocketApi::FileData::folderRelativePathNoVfsSuffix() const +{ + auto result = folderRelativePath; + QString virtualFileExt = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX); + if (result.endsWith(virtualFileExt)) { + result.chop(virtualFileExt.size()); + } + return result; +} + +SyncFileStatus SocketApi::FileData::syncFileStatus() const +{ + if (!folder) + return SyncFileStatus::StatusNone; + return folder->syncEngine().syncFileStatusTracker().fileStatus(folderRelativePath); +} + +SyncJournalFileRecord SocketApi::FileData::journalRecord() const +{ + SyncJournalFileRecord record; + if (!folder) + return record; + folder->journalDb()->getFileRecord(folderRelativePath, &record); + return record; +} + +SocketApi::FileData SocketApi::FileData::parentFolder() const +{ + return FileData::get(QFileInfo(localPath).dir().path().toUtf8()); +} + +void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListener *listener) +{ + listener->sendMessage(QString("GET_MENU_ITEMS:BEGIN")); + QStringList files = argument.split(QLatin1Char('\x1e')); // Record Separator + + // Find the common sync folder. + // syncFolder will be null if files are in different folders. + Folder *syncFolder = nullptr; + for (const auto &file : files) { + auto folder = FolderMan::instance()->folderForPath(file); + if (folder != syncFolder) { + if (!syncFolder) { + syncFolder = folder; + } else { + syncFolder = nullptr; + break; + } + } + } + + // Sharing actions show for single files only + if (syncFolder && files.size() == 1 && syncFolder->accountState()->isConnected()) { + QString systemPath = QDir::cleanPath(argument); + if (systemPath.endsWith(QLatin1Char('/'))) { + systemPath.truncate(systemPath.length() - 1); + } + + FileData fileData = FileData::get(argument); + const auto record = fileData.journalRecord(); + const bool isOnTheServer = record.isValid(); + const auto isE2eEncryptedPath = fileData.journalRecord()._isE2eEncrypted || !fileData.journalRecord()._e2eMangledName.isEmpty(); + auto flagString = isOnTheServer && !isE2eEncryptedPath ? QLatin1String("::") : QLatin1String(":d:"); + + DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); + if (editor) { + //listener->sendMessage(QLatin1String("MENU_ITEM:EDIT") + flagString + tr("Edit via ") + editor->name()); + listener->sendMessage(QLatin1String("MENU_ITEM:EDIT") + flagString + tr("Edit")); + } else { + listener->sendMessage(QLatin1String("MENU_ITEM:OPEN_PRIVATE_LINK") + flagString + tr("Open in browser")); + } + + sendSharingContextMenuOptions(fileData, listener, !isE2eEncryptedPath); + + // Conflict files get conflict resolution actions + bool isConflict = Utility::isConflictFile(fileData.folderRelativePath); + if (isConflict || !isOnTheServer) { + // Check whether this new file is in a read-only directory + QFileInfo fileInfo(fileData.localPath); + const auto parentDir = fileData.parentFolder(); + const auto parentRecord = parentDir.journalRecord(); + const bool canAddToDir = + !parentRecord.isValid() // We're likely at the root of the sync folder, got to assume we can add there + || (fileInfo.isFile() && parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddFile)) + || (fileInfo.isDir() && parentRecord._remotePerm.hasPermission(RemotePermissions::CanAddSubDirectories)); + const bool canChangeFile = + !isOnTheServer + || (record._remotePerm.hasPermission(RemotePermissions::CanDelete) + && record._remotePerm.hasPermission(RemotePermissions::CanMove) + && record._remotePerm.hasPermission(RemotePermissions::CanRename)); + + if (isConflict && canChangeFile) { + if (canAddToDir) { + listener->sendMessage(QLatin1String("MENU_ITEM:RESOLVE_CONFLICT::") + tr("Resolve conflict …")); + } else { + if (isOnTheServer) { + // Uploaded conflict file in read-only directory + listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move and rename …")); + } else { + // Local-only conflict file in a read-only dir + listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move, rename and upload …")); + } + listener->sendMessage(QLatin1String("MENU_ITEM:DELETE_ITEM::") + tr("Delete local changes")); + } + } + + // File in a read-only directory? + if (!isConflict && !isOnTheServer && !canAddToDir) { + listener->sendMessage(QLatin1String("MENU_ITEM:MOVE_ITEM::") + tr("Move and upload …")); + listener->sendMessage(QLatin1String("MENU_ITEM:DELETE_ITEM::") + tr("Delete")); + } + } + } + + // File availability actions + if (syncFolder + && syncFolder->virtualFilesEnabled() + && syncFolder->vfs().socketApiPinStateActionsShown()) { + ENFORCE(!files.isEmpty()); + + // Determine the combined availability status of the files + auto combined = Optional(); + auto merge = [](VfsItemAvailability lhs, VfsItemAvailability rhs) { + if (lhs == rhs) + return lhs; + if (int(lhs) > int(rhs)) + std::swap(lhs, rhs); // reduce cases ensuring lhs < rhs + if (lhs == VfsItemAvailability::AlwaysLocal && rhs == VfsItemAvailability::AllHydrated) + return VfsItemAvailability::AllHydrated; + if (lhs == VfsItemAvailability::AllDehydrated && rhs == VfsItemAvailability::OnlineOnly) + return VfsItemAvailability::AllDehydrated; + return VfsItemAvailability::Mixed; + }; + for (const auto &file : files) { + auto fileData = FileData::get(file); + auto availability = syncFolder->vfs().availability(fileData.folderRelativePath); + if (!availability) { + if (availability.error() == Vfs::AvailabilityError::DbError) + availability = VfsItemAvailability::Mixed; + if (availability.error() == Vfs::AvailabilityError::NoSuchItem) + continue; + } + if (!combined) { + combined = *availability; + } else { + combined = merge(*combined, *availability); + } + } + + // TODO: Should be a submenu, should use icons + auto makePinContextMenu = [&](bool makeAvailableLocally, bool freeSpace) { + listener->sendMessage(QLatin1String("MENU_ITEM:CURRENT_PIN:d:") + + Utility::vfsCurrentAvailabilityText(*combined)); + listener->sendMessage(QLatin1String("MENU_ITEM:MAKE_AVAILABLE_LOCALLY:") + + (makeAvailableLocally ? QLatin1String(":") : QLatin1String("d:")) + + Utility::vfsPinActionText()); + listener->sendMessage(QLatin1String("MENU_ITEM:MAKE_ONLINE_ONLY:") + + (freeSpace ? QLatin1String(":") : QLatin1String("d:")) + + Utility::vfsFreeSpaceActionText()); + }; + + if (combined) { + switch (*combined) { + case VfsItemAvailability::AlwaysLocal: + makePinContextMenu(false, true); + break; + case VfsItemAvailability::AllHydrated: + case VfsItemAvailability::Mixed: + makePinContextMenu(true, true); + break; + case VfsItemAvailability::AllDehydrated: + case VfsItemAvailability::OnlineOnly: + makePinContextMenu(true, false); + break; + } + } + } + + listener->sendMessage(QString("GET_MENU_ITEMS:END")); +} + +DirectEditor* SocketApi::getDirectEditorForLocalFile(const QString &localFile) +{ + FileData fileData = FileData::get(localFile); + auto capabilities = fileData.folder->accountState()->account()->capabilities(); + + if (fileData.folder && fileData.folder->accountState()->isConnected()) { + const auto record = fileData.journalRecord(); + const auto mimeMatchMode = record.isVirtualFile() ? QMimeDatabase::MatchExtension : QMimeDatabase::MatchDefault; + + QMimeDatabase db; + QMimeType type = db.mimeTypeForFile(localFile, mimeMatchMode); + + DirectEditor* editor = capabilities.getDirectEditorForMimetype(type); + if (!editor) { + editor = capabilities.getDirectEditorForOptionalMimetype(type); + } + return editor; + } + + return nullptr; +} + +#if GUI_TESTING +void SocketApi::command_ASYNC_LIST_WIDGETS(const QSharedPointer &job) +{ + QString response; + for (auto &widget : allObjects(QApplication::allWidgets())) { + auto objectName = widget->objectName(); + if (!objectName.isEmpty()) { + response += objectName + ":" + widget->property("text").toString() + ", "; + } + } + job->resolve(response); +} + +void SocketApi::command_ASYNC_INVOKE_WIDGET_METHOD(const QSharedPointer &job) +{ + auto &arguments = job->arguments(); + + auto widget = findWidget(arguments["objectName"].toString()); + if (!widget) { + job->reject(QLatin1String("widget not found")); + return; + } + + QMetaObject::invokeMethod(widget, arguments["method"].toString().toUtf8().constData()); + job->resolve(); +} + +void SocketApi::command_ASYNC_GET_WIDGET_PROPERTY(const QSharedPointer &job) +{ + QString widgetName = job->arguments()[QLatin1String("objectName")].toString(); + auto widget = findWidget(widgetName); + if (!widget) { + QString message = QString(QLatin1String("Widget not found: 2: %1")).arg(widgetName); + job->reject(message); + return; + } + + auto propertyName = job->arguments()[QLatin1String("property")].toString(); + + auto segments = propertyName.split('.'); + + QObject* currentObject = widget; + QString value; + for(int i = 0;iproperty(segment.toUtf8().constData()); + + if(var.canConvert()) { + var.convert(QMetaType::QString); + value = var.value(); + break; + } + + auto tmpObject = var.value(); + if(tmpObject) { + currentObject = tmpObject; + } else { + QString message = QString(QLatin1String("Widget not found: 3: %1")).arg(widgetName); + job->reject(message); + return; + } + } + + job->resolve(value); +} + +void SocketApi::command_ASYNC_SET_WIDGET_PROPERTY(const QSharedPointer &job) +{ + auto &arguments = job->arguments(); + QString widgetName = arguments["objectName"].toString(); + auto widget = findWidget(widgetName); + if (!widget) { + QString message = QString(QLatin1String("Widget not found: 4: %1")).arg(widgetName); + job->reject(message); + return; + } + widget->setProperty(arguments["property"].toString().toUtf8().constData(), + arguments["value"]); + + job->resolve(); +} + +void SocketApi::command_ASYNC_WAIT_FOR_WIDGET_SIGNAL(const QSharedPointer &job) +{ + auto &arguments = job->arguments(); + QString widgetName = arguments["objectName"].toString(); + auto widget = findWidget(arguments["objectName"].toString()); + if (!widget) { + QString message = QString(QLatin1String("Widget not found: 5: %1")).arg(widgetName); + job->reject(message); + return; + } + + ListenerClosure *closure = new ListenerClosure([job]() { job->resolve("signal emitted"); }); + + auto signalSignature = arguments["signalSignature"].toString(); + signalSignature.prepend("2"); + auto utf8 = signalSignature.toUtf8(); + auto signalSignatureFinal = utf8.constData(); + connect(widget, signalSignatureFinal, closure, SLOT(closureSlot()), Qt::QueuedConnection); +} + +void SocketApi::command_ASYNC_TRIGGER_MENU_ACTION(const QSharedPointer &job) +{ + auto &arguments = job->arguments(); + + auto objectName = arguments["objectName"].toString(); + auto widget = findWidget(objectName); + if (!widget) { + QString message = QString(QLatin1String("Object not found: 1: %1")).arg(objectName); + job->reject(message); + return; + } + + auto children = widget->findChildren(); + for (auto childWidget : children) { + // foo is the popupwidget! + auto actions = childWidget->actions(); + for (auto action : actions) { + if (action->objectName() == arguments["actionName"].toString()) { + action->trigger(); + + job->resolve("action found"); + return; + } + } + } + + QString message = QString(QLatin1String("Action not found: 1: %1")).arg(arguments["actionName"].toString()); + job->reject(message); +} + +void SocketApi::command_ASYNC_ASSERT_ICON_IS_EQUAL(const QSharedPointer &job) +{ + auto widget = findWidget(job->arguments()[QLatin1String("queryString")].toString()); + if (!widget) { + QString message = QString(QLatin1String("Object not found: 6: %1")).arg(job->arguments()["queryString"].toString()); + job->reject(message); + return; + } + + auto propertyName = job->arguments()[QLatin1String("propertyPath")].toString(); + + auto segments = propertyName.split('.'); + + QObject* currentObject = widget; + QIcon value; + for(int i = 0;iproperty(segment.toUtf8().constData()); + + if(var.canConvert()) { + var.convert(QMetaType::QIcon); + value = var.value(); + break; + } + + auto tmpObject = var.value(); + if(tmpObject) { + currentObject = tmpObject; + } else { + job->reject(QString(QLatin1String("Icon not found: %1")).arg(propertyName)); + } + } + + auto iconName = job->arguments()[QLatin1String("iconName")].toString(); + if (value.name() == iconName) { + job->resolve(); + } else { + job->reject("iconName " + iconName + " does not match: " + value.name()); + } + +} +#endif + +QString SocketApi::buildRegisterPathMessage(const QString &path) +{ + QFileInfo fi(path); + QString message = QLatin1String("REGISTER_PATH:"); + message.append(QDir::toNativeSeparators(fi.absoluteFilePath())); + return message; +} + +} // namespace OCC + +#include "socketapi.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,172 @@ +/* + * Copyright (C) by Dominik Schmidt + * + * 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 SOCKETAPI_H +#define SOCKETAPI_H + +#include "syncfileitem.h" +#include "common/syncfilestatus.h" +#include "sharedialog.h" // for the ShareDialogStartPage +#include "common/syncjournalfilerecord.h" + +#include "config.h" + +#if defined(Q_OS_MAC) +#include "socketapisocket_mac.h" +#else +#include +using SocketApiServer = QLocalServer; +#endif + +class QUrl; +class QLocalSocket; +class QStringList; + +namespace OCC { + +class SyncFileStatus; +class Folder; +class SocketListener; +class DirectEditor; +class SocketApiJob; + +Q_DECLARE_LOGGING_CATEGORY(lcSocketApi) + +/** + * @brief The SocketApi class + * @ingroup gui + */ +class SocketApi : public QObject +{ + Q_OBJECT + +public: + explicit SocketApi(QObject *parent = nullptr); + virtual ~SocketApi(); + +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, ShareDialogStartPage startPage); + +private slots: + void slotNewConnection(); + void onLostConnection(); + void slotSocketDestroyed(QObject *obj); + void slotReadSocket(); + + static void copyUrlToClipboard(const QString &link); + static void emailPrivateLink(const QString &link); + static void openPrivateLink(const QString &link); + +private: + // Helper structure for getting information on a file + // based on its local path - used for nearly all remote + // actions. + struct FileData + { + static FileData get(const QString &localFile); + SyncFileStatus syncFileStatus() const; + SyncJournalFileRecord journalRecord() const; + FileData parentFolder() const; + + // Relative path of the file locally, without any vfs suffix + QString folderRelativePathNoVfsSuffix() const; + + Folder *folder; + // Absolute path of the file locally. (May be a virtual file) + QString localPath; + // Relative path of the file locally, as in the DB. (May be a virtual file) + QString folderRelativePath; + // Path of the file on the server (In case of virtual file, it points to the actual file) + QString serverRelativePath; + }; + + void broadcastMessage(const QString &msg, bool doWait = false); + + // opens share dialog, sends reply + void processShareRequest(const QString &localFile, SocketListener *listener, ShareDialogStartPage startPage); + + Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString &argument, SocketListener *listener); + Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString &argument, SocketListener *listener); + + Q_INVOKABLE void command_VERSION(const QString &argument, SocketListener *listener); + + Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString &argument, SocketListener *listener); + + // The context menu actions + Q_INVOKABLE void command_SHARE(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_MANAGE_PUBLIC_LINKS(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_COPY_PUBLIC_LINK(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_MAKE_AVAILABLE_LOCALLY(const QString &filesArg, SocketListener *listener); + Q_INVOKABLE void command_MAKE_ONLINE_ONLY(const QString &filesArg, SocketListener *listener); + Q_INVOKABLE void command_RESOLVE_CONFLICT(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_DELETE_ITEM(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_MOVE_ITEM(const QString &localFile, SocketListener *listener); + + // Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 +#ifdef Q_OS_WIN + Q_INVOKABLE void command_COPYASPATH(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_OPENNEWWINDOW(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_OPEN(const QString &localFile, SocketListener *listener); +#endif + + // Fetch the private link and call targetFun + void fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun); + + /** Sends translated/branded strings that may be useful to the integration */ + Q_INVOKABLE void command_GET_STRINGS(const QString &argument, SocketListener *listener); + + // Sends the context menu options relating to sharing to listener + void sendSharingContextMenuOptions(const FileData &fileData, SocketListener *listener, bool enabled); + + /** Send the list of menu item. (added in version 1.1) + * argument is a list of files for which the menu should be shown, separated by '\x1e' + * Reply with GET_MENU_ITEMS:BEGIN + * followed by several MENU_ITEM:[Action]:[flag]:[Text] + * If flag contains 'd', the menu should be disabled + * and ends with GET_MENU_ITEMS:END + */ + Q_INVOKABLE void command_GET_MENU_ITEMS(const QString &argument, SocketListener *listener); + + /// Direct Editing + Q_INVOKABLE void command_EDIT(const QString &localFile, SocketListener *listener); + DirectEditor* getDirectEditorForLocalFile(const QString &localFile); + +#if GUI_TESTING + Q_INVOKABLE void command_ASYNC_ASSERT_ICON_IS_EQUAL(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_LIST_WIDGETS(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_INVOKE_WIDGET_METHOD(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_GET_WIDGET_PROPERTY(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_SET_WIDGET_PROPERTY(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_WAIT_FOR_WIDGET_SIGNAL(const QSharedPointer &job); + Q_INVOKABLE void command_ASYNC_TRIGGER_MENU_ACTION(const QSharedPointer &job); +#endif + + QString buildRegisterPathMessage(const QString &path); + + QSet _registeredAliases; + QList _listeners; + SocketApiServer _localServer; +}; +} + +#endif // SOCKETAPI_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi_p.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi_p.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapi_p.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapi_p.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,142 @@ +/* + * Copyright (C) by Dominik Schmidt + * Copyright (C) by Klaas Freitag + * Copyright (C) by Roeland Jago Douma + * + * 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 SOCKETAPI_P_H +#define SOCKETAPI_P_H + +#include +#include +#include + +#include +#include + +#include +#include + +namespace OCC { + +class BloomFilter +{ + // Initialize with m=1024 bits and k=2 (high and low 16 bits of a qHash). + // For a client navigating in less than 100 directories, this gives us a probability less than + // (1-e^(-2*100/1024))^2 = 0.03147872136 false positives. + const static int NumBits = 1024; + +public: + BloomFilter() + : hashBits(NumBits) + { + } + + void storeHash(uint hash) + { + hashBits.setBit((hash & 0xFFFF) % NumBits); // NOLINT it's uint all the way and the modulo puts us back in the 0..1023 range + hashBits.setBit((hash >> 16) % NumBits); // NOLINT + } + bool isHashMaybeStored(uint hash) const + { + return hashBits.testBit((hash & 0xFFFF) % NumBits) // NOLINT + && hashBits.testBit((hash >> 16) % NumBits); // NOLINT + } + +private: + QBitArray hashBits; +}; + +class SocketListener +{ +public: + QPointer socket; + + explicit SocketListener(QIODevice *socket) + : socket(socket) + { + } + + void sendMessage(const QString &message, bool doWait = false) const; + + void sendMessageIfDirectoryMonitored(const QString &message, uint systemDirectoryHash) const + { + if (_monitoredDirectoriesBloomFilter.isHashMaybeStored(systemDirectoryHash)) + sendMessage(message, false); + } + + void registerMonitoredDirectory(uint systemDirectoryHash) + { + _monitoredDirectoriesBloomFilter.storeHash(systemDirectoryHash); + } + +private: + BloomFilter _monitoredDirectoriesBloomFilter; +}; + +class ListenerClosure : public QObject +{ + Q_OBJECT +public: + using CallbackFunction = std::function; + ListenerClosure(CallbackFunction callback) + : callback_(callback) + { + } + +public slots: + void closureSlot() + { + callback_(); + deleteLater(); + } + +private: + CallbackFunction callback_; +}; + +class SocketApiJob : public QObject +{ + Q_OBJECT +public: + SocketApiJob(const QString &jobId, SocketListener *socketListener, const QJsonObject &arguments) + : _jobId(jobId) + , _socketListener(socketListener) + , _arguments(arguments) + { + } + + void resolve(const QString &response = QString()) + { + _socketListener->sendMessage(QLatin1String("RESOLVE|") + _jobId + '|' + response); + } + + void resolve(const QJsonObject &response) { resolve(QJsonDocument{ response }.toJson()); } + + const QJsonObject &arguments() { return _arguments; } + + void reject(const QString &response) + { + _socketListener->sendMessage(QLatin1String("REJECT|") + _jobId + '|' + response); + } + +private: + QString _jobId; + SocketListener *_socketListener; + QJsonObject _arguments; +}; +} + +Q_DECLARE_METATYPE(OCC::SocketListener *) + +#endif // SOCKETAPI_P_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapisocket_mac.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapisocket_mac.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapisocket_mac.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapisocket_mac.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,69 @@ +/* + * Copyright (C) by Jocelyn Turcotte + * + * 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 SOCKETAPISOCKET_OSX_H +#define SOCKETAPISOCKET_OSX_H + +#include +#include + +class SocketApiServerPrivate; +class SocketApiSocketPrivate; + +class SocketApiSocket : public QIODevice +{ + Q_OBJECT +public: + SocketApiSocket(QObject *parent, SocketApiSocketPrivate *p); + ~SocketApiSocket(); + + qint64 readData(char *data, qint64 maxlen) override; + qint64 writeData(const char *data, qint64 len) override; + + bool isSequential() const override { return true; } + qint64 bytesAvailable() const override; + bool canReadLine() const override; + +signals: + void disconnected(); + +private: + // Use Qt's p-impl system to hide objective-c types from C++ code including this file + Q_DECLARE_PRIVATE(SocketApiSocket) + QScopedPointer d_ptr; + friend class SocketApiServerPrivate; +}; + +class SocketApiServer : public QObject +{ + Q_OBJECT +public: + SocketApiServer(); + ~SocketApiServer(); + + void close(); + bool listen(const QString &name); + SocketApiSocket *nextPendingConnection(); + + static bool removeServer(const QString &) { return false; } + +signals: + void newConnection(); + +private: + Q_DECLARE_PRIVATE(SocketApiServer) + QScopedPointer d_ptr; +}; + +#endif // SOCKETAPISOCKET_OSX_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapisocket_mac.mm nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapisocket_mac.mm --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/socketapisocket_mac.mm 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/socketapisocket_mac.mm 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,245 @@ +/* + * Copyright (C) by Jocelyn Turcotte + * + * 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 "socketapisocket_mac.h" +#import + +@protocol ChannelProtocol +- (void)sendMessage:(NSData*)msg; +@end + +@protocol RemoteEndProtocol +- (void)registerTransmitter:(id)tx; +@end + +@interface LocalEnd : NSObject +@property SocketApiSocketPrivate *wrapper; +- (instancetype)initWithWrapper:(SocketApiSocketPrivate *)wrapper; +@end + +@interface Server : NSObject +@property SocketApiServerPrivate *wrapper; +- (instancetype)initWithWrapper:(SocketApiServerPrivate *)wrapper; +- (void)registerClient:(NSDistantObject *)remoteEnd; +@end + +class SocketApiSocketPrivate +{ +public: + SocketApiSocket *q_ptr; + + SocketApiSocketPrivate(NSDistantObject *remoteEnd); + ~SocketApiSocketPrivate(); + + // release remoteEnd + void disconnectRemote(); + + NSDistantObject *remoteEnd; + LocalEnd *localEnd; + QByteArray inBuffer; + bool isRemoteDisconnected = false; +}; + +class SocketApiServerPrivate +{ +public: + SocketApiServer *q_ptr; + + SocketApiServerPrivate(); + ~SocketApiServerPrivate(); + + QList pendingConnections; + NSConnection *connection; + Server *server; +}; + + +@implementation LocalEnd +- (instancetype)initWithWrapper:(SocketApiSocketPrivate *)wrapper +{ + self = [super init]; + self->_wrapper = wrapper; + return self; +} + +- (void)sendMessage:(NSData*)msg +{ + if (_wrapper) { + _wrapper->inBuffer += QByteArray::fromRawNSData(msg); + emit _wrapper->q_ptr->readyRead(); + } +} + +- (void)connectionDidDie:(NSNotification*)notification +{ +#pragma unused(notification) + if (_wrapper) { + _wrapper->disconnectRemote(); + emit _wrapper->q_ptr->disconnected(); + } +} +@end + +@implementation Server +- (instancetype)initWithWrapper:(SocketApiServerPrivate *)wrapper +{ + self = [super init]; + self->_wrapper = wrapper; + return self; +} + +- (void)registerClient:(NSDistantObject *)remoteEnd +{ + // This saves a few mach messages that would otherwise be needed to query the interface + [remoteEnd setProtocolForProxy:@protocol(RemoteEndProtocol)]; + + SocketApiServer *server = _wrapper->q_ptr; + SocketApiSocketPrivate *socketPrivate = new SocketApiSocketPrivate(remoteEnd); + SocketApiSocket *socket = new SocketApiSocket(server, socketPrivate); + _wrapper->pendingConnections.append(socket); + emit server->newConnection(); + + [remoteEnd registerTransmitter:socketPrivate->localEnd]; +} +@end + + +SocketApiSocket::SocketApiSocket(QObject *parent, SocketApiSocketPrivate *p) + : QIODevice(parent) + , d_ptr(p) +{ + Q_D(SocketApiSocket); + d->q_ptr = this; + open(ReadWrite); +} + +SocketApiSocket::~SocketApiSocket() +{ +} + +qint64 SocketApiSocket::readData(char *data, qint64 maxlen) +{ + Q_D(SocketApiSocket); + qint64 len = std::min(maxlen, static_cast(d->inBuffer.size())); + memcpy(data, d->inBuffer.constData(), len); + d->inBuffer.remove(0, len); + return len; +} + +qint64 SocketApiSocket::writeData(const char *data, qint64 len) +{ + Q_D(SocketApiSocket); + if (d->isRemoteDisconnected) + return -1; + + @try { + // FIXME: The NSConnection will make this block unless the function is marked as "oneway" + // in the protocol. This isn't async and reduces our performances but this currectly avoids + // a Mach queue deadlock during requests bursts of the legacy OwnCloudFinder extension. + // Since FinderSync already runs in a separate process, blocking isn't too critical. + [d->remoteEnd sendMessage:[NSData dataWithBytesNoCopy:const_cast(data) length:len freeWhenDone:NO]]; + return len; + } @catch(NSException* e) { + // connectionDidDie can be notified too late, also interpret any sending exception as a disconnection. + d->disconnectRemote(); + emit disconnected(); + return -1; + } +} + +qint64 SocketApiSocket::bytesAvailable() const +{ + Q_D(const SocketApiSocket); + return d->inBuffer.size() + QIODevice::bytesAvailable(); +} + +bool SocketApiSocket::canReadLine() const +{ + Q_D(const SocketApiSocket); + return d->inBuffer.indexOf('\n', int(pos())) != -1 || QIODevice::canReadLine(); +} + +SocketApiSocketPrivate::SocketApiSocketPrivate(NSDistantObject *remoteEnd) + : remoteEnd(remoteEnd) + , localEnd([[LocalEnd alloc] initWithWrapper:this]) +{ + [remoteEnd retain]; + // (Ab)use our objective-c object just to catch the notification + [[NSNotificationCenter defaultCenter] addObserver:localEnd + selector:@selector(connectionDidDie:) + name:NSConnectionDidDieNotification + object:[remoteEnd connectionForProxy]]; +} + +SocketApiSocketPrivate::~SocketApiSocketPrivate() +{ + disconnectRemote(); + + // The DO vended localEnd might still be referenced by the connection + localEnd.wrapper = nil; + [localEnd release]; +} + +void SocketApiSocketPrivate::disconnectRemote() +{ + if (isRemoteDisconnected) + return; + isRemoteDisconnected = true; + + [remoteEnd release]; +} + +SocketApiServer::SocketApiServer() + : d_ptr(new SocketApiServerPrivate) +{ + Q_D(SocketApiServer); + d->q_ptr = this; +} + +SocketApiServer::~SocketApiServer() +{ +} + +void SocketApiServer::close() +{ + // Assume we'll be destroyed right after +} + +bool SocketApiServer::listen(const QString &name) +{ + Q_D(SocketApiServer); + // Set the name of the root object + return [d->connection registerName:name.toNSString()]; +} + +SocketApiSocket *SocketApiServer::nextPendingConnection() +{ + Q_D(SocketApiServer); + return d->pendingConnections.takeFirst(); +} + +SocketApiServerPrivate::SocketApiServerPrivate() +{ + // Create the connection and server object to vend over Disributed Objects + connection = [[NSConnection alloc] init]; + server = [[Server alloc] initWithWrapper:this]; + [connection setRootObject:server]; +} + +SocketApiServerPrivate::~SocketApiServerPrivate() +{ + [connection release]; + server.wrapper = nil; + [server release]; +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sslerrordialog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sslerrordialog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sslerrordialog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sslerrordialog.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -13,7 +13,6 @@ */ #include "configfile.h" #include "sslerrordialog.h" -#include "theme.h" #include #include @@ -69,8 +68,6 @@ QPushButton *cancelButton = _ui->_dialogButtonBox->button(QDialogButtonBox::Cancel); okButton->setEnabled(false); - - _ui->_cbTrustConnect->setEnabled(!Theme::instance()->forbidBadSSL()); connect(_ui->_cbTrustConnect, &QAbstractButton::clicked, okButton, &QWidget::setEnabled); @@ -108,8 +105,6 @@ QStringList errorStrings; - QStringList additionalErrorStrings; - QList trustedCerts = _account->approvedCerts(); for (int i = 0; i < errors.count(); ++i) { @@ -120,8 +115,6 @@ errorStrings += error.errorString(); if (!error.certificate().isNull()) { _unknownCerts.append(error.certificate()); - } else { - additionalErrorStrings.append(error.errorString()); } } @@ -153,17 +146,6 @@ msg += QL("
"); } } - - if (!additionalErrorStrings.isEmpty()) { - msg += QL("

") + tr("Additional errors:") + QL("

"); - - for (const auto &errorString : additionalErrorStrings) { - msg += QL("
"); - msg += QL("

") + errorString + QL("

"); - msg += QL("
"); - } - } - msg += QL(""); auto *doc = new QTextDocument(nullptr); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sslerrordialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sslerrordialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/sslerrordialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/sslerrordialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -49,7 +49,7 @@ Q_OBJECT public: explicit SslErrorDialog(AccountPtr account, QWidget *parent = nullptr); - ~SslErrorDialog() override; + ~SslErrorDialog(); bool checkFailingCertsKnown(const QList &errors); bool trustConnection(); QList unknownCerts() const { return _unknownCerts; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/syncrunfilelog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/syncrunfilelog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/syncrunfilelog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/syncrunfilelog.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -12,7 +12,7 @@ * for more details. */ -#include +#include #include "syncrunfilelog.h" #include "common/utility.h" @@ -104,10 +104,9 @@ } QString ts = QString::fromLatin1(item._responseTimeStamp); if (ts.length() > 6) { - const QRegularExpression rx(R"((\d\d:\d\d:\d\d))"); - const auto rxMatch = rx.match(ts); - if (rxMatch.hasMatch()) { - ts = rxMatch.captured(0); + QRegExp rx(R"((\d\d:\d\d:\d\d))"); + if (ts.contains(rx)) { + ts = rx.cap(0); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/systray.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/systray.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/systray.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/systray.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,12 +17,8 @@ #include "theme.h" #include "config.h" #include "common/utility.h" -#include "tray/svgimageprovider.h" -#include "tray/usermodel.h" -#include "wheelhandler.h" -#include "tray/unifiedsearchresultimageprovider.h" +#include "tray/UserModel.h" #include "configfile.h" -#include "accessmanager.h" #include #include @@ -60,12 +56,8 @@ { _trayEngine = trayEngine; - _trayEngine->setNetworkAccessManagerFactory(&_accessManagerFactory); - _trayEngine->addImportPath("qrc:/qml/theme"); _trayEngine->addImageProvider("avatars", new ImageProvider); - _trayEngine->addImageProvider(QLatin1String("svgimage-custom-color"), new OCC::Ui::SvgImageProvider); - _trayEngine->addImageProvider(QLatin1String("unified-search-result-icon"), new UnifiedSearchResultImageProvider); } Systray::Systray() @@ -95,8 +87,6 @@ } ); - qmlRegisterType("com.nextcloud.desktopclient", 1, 0, "WheelHandler"); - #ifndef Q_OS_MAC auto contextMenu = new QMenu(); if (AccountManager::instance()->accounts().isEmpty()) { @@ -508,14 +498,4 @@ #endif } -AccessManagerFactory::AccessManagerFactory() - : QQmlNetworkAccessManagerFactory() -{ -} - -QNetworkAccessManager* AccessManagerFactory::create(QObject *parent) -{ - return new AccessManager(parent); -} - } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/systray.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/systray.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/systray.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/systray.h 2022-01-03 12:25:12.000000000 +0000 @@ -18,9 +18,7 @@ #include #include "accountmanager.h" -#include "tray/usermodel.h" - -#include +#include "tray/UserModel.h" class QScreen; class QQmlApplicationEngine; @@ -30,14 +28,6 @@ namespace OCC { -class AccessManagerFactory : public QQmlNetworkAccessManagerFactory -{ -public: - AccessManagerFactory(); - - QNetworkAccessManager* create(QObject *parent) override; -}; - #ifdef Q_OS_OSX bool canOsXSendUserNotification(); void sendOsXUserNotification(const QString &title, const QString &message); @@ -58,7 +48,7 @@ public: static Systray *instance(); - ~Systray() override = default; + virtual ~Systray() = default; enum class TaskBarPosition { Bottom, Left, Top, Right }; Q_ENUM(TaskBarPosition); @@ -89,7 +79,6 @@ void hideWindow(); void showWindow(); void openShareDialog(const QString &sharePath, const QString &localPath); - void showFileActivityDialog(const QString &sharePath, const QString &localPath); public slots: void slotNewUserSelected(); @@ -115,8 +104,6 @@ bool _isOpen = false; bool _syncIsPaused = true; QPointer _trayEngine; - - AccessManagerFactory _accessManagerFactory; }; } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitydata.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitydata.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitydata.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitydata.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +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. - */ - -#include - -#include "activitydata.h" - - -namespace OCC { - -bool operator<(const Activity &rhs, const Activity &lhs) -{ - return rhs._dateTime > lhs._dateTime; -} - -bool operator==(const Activity &rhs, const Activity &lhs) -{ - return (rhs._type == lhs._type && rhs._id == lhs._id && rhs._accName == lhs._accName); -} - -Activity::Identifier Activity::ident() const -{ - return Identifier(_id, _accName); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityData.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityData.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityData.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityData.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,36 @@ +/* + * 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 + +#include "ActivityData.h" + + +namespace OCC { + +bool operator<(const Activity &rhs, const Activity &lhs) +{ + return rhs._dateTime > lhs._dateTime; +} + +bool operator==(const Activity &rhs, const Activity &lhs) +{ + return (rhs._type == lhs._type && rhs._id == lhs._id && rhs._accName == lhs._accName); +} + +Activity::Identifier Activity::ident() const +{ + return Identifier(_id, _accName); +} +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitydata.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitydata.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitydata.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitydata.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +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 ACTIVITYDATA_H -#define ACTIVITYDATA_H - -#include -#include - -namespace OCC { -/** - * @brief The ActivityLink class describes actions of an activity - * - * These are part of notifications which are mapped into activities. - */ - -class ActivityLink -{ - Q_GADGET - - Q_PROPERTY(QString label MEMBER _label) - Q_PROPERTY(QString link MEMBER _link) - Q_PROPERTY(QByteArray verb MEMBER _verb) - Q_PROPERTY(bool primary MEMBER _primary) - -public: - QString _label; - QString _link; - QByteArray _verb; - bool _primary; -}; - -/* ==================================================================== */ -/** - * @brief Activity Structure - * @ingroup gui - * - * contains all the information describing a single activity. - */ - -class Activity -{ -public: - using Identifier = QPair; - - enum Type { - ActivityType, - NotificationType, - SyncResultType, - SyncFileItemType - }; - - Type _type; - qlonglong _id; - QString _fileAction; - QString _objectType; - QString _subject; - QString _message; - QString _folder; - QString _file; - QUrl _link; - QDateTime _dateTime; - qint64 _expireAtMsecs = -1; - QString _accName; - QString _icon; - - // Stores information about the error - int _status; - - QVector _links; - /** - * @brief Sort operator to sort the list youngest first. - * @param val - * @return - */ - - - Identifier ident() const; -}; - -bool operator==(const Activity &rhs, const Activity &lhs); -bool operator<(const Activity &rhs, const Activity &lhs); - -/* ==================================================================== */ -/** - * @brief The ActivityList - * @ingroup gui - * - * A QList based list of Activities - */ -using ActivityList = QList; -} - -Q_DECLARE_METATYPE(OCC::Activity::Type) -Q_DECLARE_METATYPE(OCC::ActivityLink) - -#endif // ACTIVITYDATA_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityData.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityData.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityData.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityData.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * 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 ACTIVITYDATA_H +#define ACTIVITYDATA_H + +#include +#include + +namespace OCC { +/** + * @brief The ActivityLink class describes actions of an activity + * + * These are part of notifications which are mapped into activities. + */ + +class ActivityLink +{ + Q_GADGET + + Q_PROPERTY(QString label MEMBER _label) + Q_PROPERTY(QString link MEMBER _link) + Q_PROPERTY(QByteArray verb MEMBER _verb) + Q_PROPERTY(bool primary MEMBER _primary) + +public: + QString _label; + QString _link; + QByteArray _verb; + bool _primary; +}; + +/* ==================================================================== */ +/** + * @brief Activity Structure + * @ingroup gui + * + * contains all the information describing a single activity. + */ + +class Activity +{ +public: + using Identifier = QPair; + + enum Type { + ActivityType, + NotificationType, + SyncResultType, + SyncFileItemType + }; + + Type _type; + qlonglong _id; + QString _fileAction; + QString _objectType; + QString _subject; + QString _message; + QString _folder; + QString _file; + QUrl _link; + QDateTime _dateTime; + qint64 _expireAtMsecs = -1; + QString _accName; + QString _icon; + + // Stores information about the error + int _status; + + QVector _links; + /** + * @brief Sort operator to sort the list youngest first. + * @param val + * @return + */ + + + Identifier ident() const; +}; + +bool operator==(const Activity &rhs, const Activity &lhs); +bool operator<(const Activity &rhs, const Activity &lhs); + +/* ==================================================================== */ +/** + * @brief The ActivityList + * @ingroup gui + * + * A QList based list of Activities + */ +using ActivityList = QList; +} + +Q_DECLARE_METATYPE(OCC::Activity::Type) +Q_DECLARE_METATYPE(OCC::ActivityLink) + +#endif // ACTIVITYDATA_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityItem.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityItem.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityItem.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityItem.qml 2022-01-03 12:25:12.000000000 +0000 @@ -7,17 +7,12 @@ MouseArea { id: activityMouseArea - - readonly property int maxActionButtons: 2 - property Flickable flickable - - signal fileActivityButtonClicked(string absolutePath) - enabled: (path !== "" || link !== "") hoverEnabled: true - + Rectangle { anchors.fill: parent + anchors.margins: 2 color: (parent.containsMouse ? Style.lightHover : "transparent") } @@ -40,7 +35,7 @@ Image { id: activityIcon Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.leftMargin: 20 + Layout.leftMargin: 8 Layout.preferredWidth: shareButton.icon.width Layout.preferredHeight: shareButton.icon.height verticalAlignment: Qt.AlignCenter @@ -52,12 +47,13 @@ Column { id: activityTextColumn - Layout.leftMargin: 14 + Layout.leftMargin: 8 Layout.topMargin: 4 Layout.bottomMargin: 4 Layout.fillWidth: true + Layout.fillHeight: true spacing: 4 - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.alignment: Qt.AlignLeft Text { id: activityTextTitle @@ -110,7 +106,7 @@ } Repeater { - model: activityItem.links.length > maxActionButtons ? 1 : activityItem.links.length + model: activityItem.links.length > activityListView.maxActionButtons ? 1 : activityItem.links.length ActivityActionButton { id: activityActionButton @@ -143,31 +139,6 @@ } } - - Button { - id: shareButton - - Layout.preferredWidth: parent.height - Layout.fillHeight: true - Layout.alignment: Qt.AlignRight - flat: true - hoverEnabled: true - visible: displayActions && (path !== "") - display: AbstractButton.IconOnly - icon.source: "qrc:///client/theme/share.svg" - icon.color: "transparent" - background: Rectangle { - color: parent.hovered ? Style.lightHover : "transparent" - } - ToolTip.visible: hovered - ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval - ToolTip.text: qsTr("Open share dialog") - onClicked: Systray.openShareDialog(displayPath, absolutePath) - - Accessible.role: Accessible.Button - Accessible.name: qsTr("Share %1").arg(displayPath) - Accessible.onPressAction: shareButton.clicked() - } Button { id: moreActionsButton @@ -178,7 +149,7 @@ flat: true hoverEnabled: true - visible: displayActions && ((path !== "") || (activityItem.links.length > maxActionButtons)) + visible: activityItem.links.length > activityListView.maxActionButtons display: AbstractButton.IconOnly icon.source: "qrc:///client/theme/more.svg" icon.color: "transparent" @@ -186,7 +157,7 @@ color: parent.hovered ? Style.lightHover : "transparent" } ToolTip.visible: hovered - ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval + ToolTip.delay: 1000 ToolTip.text: qsTr("Show more actions") Accessible.role: Accessible.Button @@ -196,9 +167,18 @@ onClicked: moreActionsButtonContextMenu.popup(); Connections { - target: flickable + target: trayWindow + onActiveChanged: { + if (!trayWindow.active) { + moreActionsButtonContextMenu.close(); + } + } + } + + Connections { + target: activityListView - function onMovementStarted() { + onMovementStarted: { moreActionsButtonContextMenu.close(); } } @@ -219,7 +199,7 @@ // transform model to contain indexed actions with primary action filtered out function actionListToContextMenuList(actionList) { // early out with non-altered data - if (activityItem.links.length <= maxActionButtons) { + if (activityItem.links.length <= activityListView.maxActionButtons) { return actionList; } @@ -235,11 +215,6 @@ return reducedActionList; } - - MenuItem { - text: qsTr("View activity") - onClicked: fileActivityButtonClicked(absolutePath) - } Repeater { id: moreActionsButtonContextMenuRepeater @@ -255,6 +230,31 @@ } } } + + Button { + id: shareButton + + Layout.preferredWidth: (path === "") ? 0 : parent.height + Layout.preferredHeight: parent.height + Layout.alignment: Qt.AlignRight + flat: true + hoverEnabled: true + visible: (path === "") ? false : true + display: AbstractButton.IconOnly + icon.source: "qrc:///client/theme/share.svg" + icon.color: "transparent" + background: Rectangle { + color: parent.hovered ? Style.lightHover : "transparent" + } + ToolTip.visible: hovered + ToolTip.delay: 1000 + ToolTip.text: qsTr("Open share dialog") + onClicked: Systray.openShareDialog(displayPath,absolutePath) + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Share %1").arg(displayPath) + Accessible.onPressAction: shareButton.clicked() + } } } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitylistmodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitylistmodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitylistmodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitylistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,637 +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. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "account.h" -#include "accountstate.h" -#include "accountmanager.h" -#include "conflictdialog.h" -#include "folderman.h" -#include "iconjob.h" -#include "accessmanager.h" -#include "owncloudgui.h" -#include "guiutility.h" -#include "invalidfilenamedialog.h" - -#include "activitydata.h" -#include "activitylistmodel.h" - -#include "theme.h" - -namespace OCC { - -Q_LOGGING_CATEGORY(lcActivity, "nextcloud.gui.activity", QtInfoMsg) - -ActivityListModel::ActivityListModel(QObject *parent) - : QAbstractListModel(parent) -{ -} - -ActivityListModel::ActivityListModel(AccountState *accountState, - QObject *parent) - : QAbstractListModel(parent) - , _accountState(accountState) -{ -} - -QHash ActivityListModel::roleNames() const -{ - QHash roles; - roles[DisplayPathRole] = "displayPath"; - roles[PathRole] = "path"; - roles[AbsolutePathRole] = "absolutePath"; - roles[LinkRole] = "link"; - roles[MessageRole] = "message"; - roles[ActionRole] = "type"; - roles[ActionIconRole] = "icon"; - roles[ActionTextRole] = "subject"; - roles[ActionsLinksRole] = "links"; - roles[ActionTextColorRole] = "activityTextTitleColor"; - roles[ObjectTypeRole] = "objectType"; - roles[PointInTimeRole] = "dateTime"; - roles[DisplayActions] = "displayActions"; - return roles; -} - -void ActivityListModel::setAccountState(AccountState *state) -{ - _accountState = state; -} - -void ActivityListModel::setCurrentlyFetching(bool value) -{ - _currentlyFetching = value; -} - -bool ActivityListModel::currentlyFetching() const -{ - return _currentlyFetching; -} - -void ActivityListModel::setDoneFetching(bool value) -{ - _doneFetching = value; -} - -void ActivityListModel::setHideOldActivities(bool value) -{ - _hideOldActivities = value; -} - -void ActivityListModel::setDisplayActions(bool value) -{ - _displayActions = value; -} - -QVariant ActivityListModel::data(const QModelIndex &index, int role) const -{ - Activity a; - - if (!index.isValid()) - return QVariant(); - - a = _finalList.at(index.row()); - AccountStatePtr ast = AccountManager::instance()->account(a._accName); - if (!ast && _accountState != ast.data()) - return QVariant(); - - switch (role) { - case DisplayPathRole: - if (!a._file.isEmpty()) { - auto folder = FolderMan::instance()->folder(a._folder); - QString relPath(a._file); - if (folder) { - relPath.prepend(folder->remotePath()); - } - const auto localFiles = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account()); - if (localFiles.count() > 0) { - if (relPath.startsWith('/') || relPath.startsWith('\\')) { - return relPath.remove(0, 1); - } else { - return relPath; - } - } - } - return QString(); - case PathRole: - if (!a._file.isEmpty()) { - const auto folder = FolderMan::instance()->folder(a._folder); - - QString relPath(a._file); - if (folder) { - relPath.prepend(folder->remotePath()); - } - - // get relative path to the file so we can open it in the file manager - const auto localFiles = FolderMan::instance()->findFileInLocalFolders(QFileInfo(relPath).path(), ast->account()); - - if (localFiles.isEmpty()) { - return QString(); - } - - // If this is an E2EE file or folder, pretend we got no path, this leads to - // hiding the share button which is what we want - if (folder) { - SyncJournalFileRecord rec; - folder->journalDb()->getFileRecord(a._file.mid(1), &rec); - if (rec.isValid() && (rec._isE2eEncrypted || !rec._e2eMangledName.isEmpty())) { - return QString(); - } - } - - return QUrl::fromLocalFile(localFiles.constFirst()); - } - return QString(); - case AbsolutePathRole: { - const auto folder = FolderMan::instance()->folder(a._folder); - QString relPath(a._file); - if (!a._file.isEmpty()) { - if (folder) { - relPath.prepend(folder->remotePath()); - } - const auto localFiles = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account()); - if (!localFiles.empty()) { - return localFiles.constFirst(); - } else { - qWarning("File not local folders while processing absolute path request."); - return QString(); - } - } else { - qWarning("Received an absolute path request for an activity without a file path."); - return QString(); - } - } - case ActionsLinksRole: { - QList customList; - foreach (ActivityLink activityLink, a._links) { - customList << QVariant::fromValue(activityLink); - } - return customList; - } - case ActionIconRole: { - if (a._type == Activity::NotificationType) { - return "qrc:///client/theme/black/bell.svg"; - } else if (a._type == Activity::SyncResultType) { - return "qrc:///client/theme/black/state-error.svg"; - } else if (a._type == Activity::SyncFileItemType) { - if (a._status == SyncFileItem::NormalError - || a._status == SyncFileItem::FatalError - || a._status == SyncFileItem::DetailError - || a._status == SyncFileItem::BlacklistedError) { - return "qrc:///client/theme/black/state-error.svg"; - } else if (a._status == SyncFileItem::SoftError - || a._status == SyncFileItem::Conflict - || a._status == SyncFileItem::Restoration - || a._status == SyncFileItem::FileLocked - || a._status == SyncFileItem::FileNameInvalid) { - return "qrc:///client/theme/black/state-warning.svg"; - } else if (a._status == SyncFileItem::FileIgnored) { - return "qrc:///client/theme/black/state-info.svg"; - } else { - // File sync successful - if (a._fileAction == "file_created") { - return "qrc:///client/theme/colored/add.svg"; - } else if (a._fileAction == "file_deleted") { - return "qrc:///client/theme/colored/delete.svg"; - } else { - return "qrc:///client/theme/change.svg"; - } - } - } else { - // We have an activity - if (a._icon.isEmpty()) { - return "qrc:///client/theme/black/activity.svg"; - } - - return a._icon; - } - } - case ObjectTypeRole: - return a._objectType; - case ActionRole: { - switch (a._type) { - case Activity::ActivityType: - return "Activity"; - case Activity::NotificationType: - return "Notification"; - case Activity::SyncFileItemType: - return "File"; - case Activity::SyncResultType: - return "Sync"; - default: - return QVariant(); - } - } - case ActionTextRole: - return a._subject; - case ActionTextColorRole: - return a._id == -1 ? QLatin1String("#808080") : QLatin1String("#222"); // FIXME: This is a temporary workaround for _showMoreActivitiesAvailableEntry - case MessageRole: - return a._message; - case LinkRole: { - if (a._link.isEmpty()) { - return ""; - } else { - return a._link; - } - } - case AccountRole: - return a._accName; - case PointInTimeRole: - //return a._id == -1 ? "" : QString("%1 - %2").arg(Utility::timeAgoInWords(a._dateTime.toLocalTime()), a._dateTime.toLocalTime().toString(Qt::DefaultLocaleShortDate)); - return a._id == -1 ? "" : Utility::timeAgoInWords(a._dateTime.toLocalTime()); - case AccountConnectedRole: - return (ast && ast->isConnected()); - case DisplayActions: - return _displayActions; - default: - return QVariant(); - } - return QVariant(); -} - -int ActivityListModel::rowCount(const QModelIndex &) const -{ - return _finalList.count(); -} - -bool ActivityListModel::canFetchMore(const QModelIndex &) const -{ - // We need to be connected to be able to fetch more - if (_accountState && _accountState->isConnected()) { - // If the fetching is reported to be done or we are currently fetching we can't fetch more - if (!_doneFetching && !_currentlyFetching) { - return true; - } - } - - return false; -} - -void ActivityListModel::startFetchJob() -{ - if (!_accountState->isConnected()) { - return; - } - auto *job = new JsonApiJob(_accountState->account(), QLatin1String("ocs/v2.php/apps/activity/api/v2/activity"), this); - QObject::connect(job, &JsonApiJob::jsonReceived, - this, &ActivityListModel::activitiesReceived); - - QUrlQuery params; - params.addQueryItem(QLatin1String("since"), QString::number(_currentItem)); - params.addQueryItem(QLatin1String("limit"), QString::number(50)); - job->addQueryParams(params); - - _currentlyFetching = true; - qCInfo(lcActivity) << "Start fetching activities for " << _accountState->account()->displayName(); - job->start(); -} - -void ActivityListModel::activitiesReceived(const QJsonDocument &json, int statusCode) -{ - auto activities = json.object().value("ocs").toObject().value("data").toArray(); - - ActivityList list; - auto ast = _accountState; - if (!ast) { - return; - } - - if (activities.size() == 0) { - _doneFetching = true; - } - - _currentlyFetching = false; - - QDateTime oldestDate = QDateTime::currentDateTime(); - oldestDate = oldestDate.addDays(_maxActivitiesDays * -1); - - foreach (auto activ, activities) { - auto json = activ.toObject(); - - Activity a; - a._type = Activity::ActivityType; - a._objectType = json.value("object_type").toString(); - a._accName = ast->account()->displayName(); - a._id = json.value("activity_id").toInt(); - a._fileAction = json.value("type").toString(); - a._subject = json.value("subject").toString(); - a._message = json.value("message").toString(); - a._file = json.value("object_name").toString(); - a._link = QUrl(json.value("link").toString()); - a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate); - a._icon = json.value("icon").toString(); - - list.append(a); - _currentItem = list.last()._id; - - _totalActivitiesFetched++; - if (_totalActivitiesFetched == _maxActivities - || (_hideOldActivities && a._dateTime < oldestDate)) { - _showMoreActivitiesAvailableEntry = true; - _doneFetching = true; - break; - } - } - - _activityLists.append(list); - - emit activityJobStatusCode(statusCode); - - combineActivityLists(); -} - -void ActivityListModel::addErrorToActivityList(Activity activity) -{ - qCInfo(lcActivity) << "Error successfully added to the notification list: " << activity._subject; - _notificationErrorsLists.prepend(activity); - combineActivityLists(); -} - -void ActivityListModel::addIgnoredFileToList(Activity newActivity) -{ - qCInfo(lcActivity) << "First checking for duplicates then add file to the notification list of ignored files: " << newActivity._file; - - bool duplicate = false; - if (_listOfIgnoredFiles.size() == 0) { - _notificationIgnoredFiles = newActivity; - _notificationIgnoredFiles._subject = tr("Files from the ignore list as well as symbolic links are not synced."); - _listOfIgnoredFiles.append(newActivity); - return; - } - - foreach (Activity activity, _listOfIgnoredFiles) { - if (activity._file == newActivity._file) { - duplicate = true; - break; - } - } - - if (!duplicate) { - _notificationIgnoredFiles._message.append(", " + newActivity._file); - } -} - -void ActivityListModel::addNotificationToActivityList(Activity activity) -{ - qCInfo(lcActivity) << "Notification successfully added to the notification list: " << activity._subject; - _notificationLists.prepend(activity); - combineActivityLists(); -} - -void ActivityListModel::clearNotifications() -{ - qCInfo(lcActivity) << "Clear the notifications"; - _notificationLists.clear(); - combineActivityLists(); -} - -void ActivityListModel::removeActivityFromActivityList(int row) -{ - Activity activity = _finalList.at(row); - removeActivityFromActivityList(activity); - combineActivityLists(); -} - -void ActivityListModel::addSyncFileItemToActivityList(Activity activity) -{ - qCInfo(lcActivity) << "Successfully added to the activity list: " << activity._subject; - _syncFileItemLists.prepend(activity); - combineActivityLists(); -} - -void ActivityListModel::removeActivityFromActivityList(Activity activity) -{ - qCInfo(lcActivity) << "Activity/Notification/Error successfully dismissed: " << activity._subject; - qCInfo(lcActivity) << "Trying to remove Activity/Notification/Error from view... "; - - int index = -1; - if (activity._type == Activity::ActivityType) { - index = _activityLists.indexOf(activity); - if (index != -1) - _activityLists.removeAt(index); - } else if (activity._type == Activity::NotificationType) { - index = _notificationLists.indexOf(activity); - if (index != -1) - _notificationLists.removeAt(index); - } else { - index = _notificationErrorsLists.indexOf(activity); - if (index != -1) - _notificationErrorsLists.removeAt(index); - } - - if (index != -1) { - qCInfo(lcActivity) << "Activity/Notification/Error successfully removed from the list."; - qCInfo(lcActivity) << "Updating Activity/Notification/Error view."; - combineActivityLists(); - } -} - -void ActivityListModel::triggerDefaultAction(int activityIndex) -{ - if (activityIndex < 0 || activityIndex >= _finalList.size()) { - qCWarning(lcActivity) << "Couldn't trigger default action at index" << activityIndex << "/ final list size:" << _finalList.size(); - return; - } - - const auto modelIndex = index(activityIndex); - const auto path = data(modelIndex, PathRole).toUrl(); - - const auto activity = _finalList.at(activityIndex); - if (activity._status == SyncFileItem::Conflict) { - Q_ASSERT(!activity._file.isEmpty()); - Q_ASSERT(!activity._folder.isEmpty()); - Q_ASSERT(Utility::isConflictFile(activity._file)); - - const auto folder = FolderMan::instance()->folder(activity._folder); - - const auto conflictedRelativePath = activity._file; - const auto baseRelativePath = folder->journalDb()->conflictFileBaseName(conflictedRelativePath.toUtf8()); - - const auto dir = QDir(folder->path()); - const auto conflictedPath = dir.filePath(conflictedRelativePath); - const auto basePath = dir.filePath(baseRelativePath); - - const auto baseName = QFileInfo(basePath).fileName(); - - if (!_currentConflictDialog.isNull()) { - _currentConflictDialog->close(); - } - _currentConflictDialog = new ConflictDialog; - _currentConflictDialog->setBaseFilename(baseName); - _currentConflictDialog->setLocalVersionFilename(conflictedPath); - _currentConflictDialog->setRemoteVersionFilename(basePath); - _currentConflictDialog->setAttribute(Qt::WA_DeleteOnClose); - connect(_currentConflictDialog, &ConflictDialog::accepted, folder, [folder]() { - folder->scheduleThisFolderSoon(); - }); - _currentConflictDialog->open(); - ownCloudGui::raiseDialog(_currentConflictDialog); - return; - } else if (activity._status == SyncFileItem::FileNameInvalid) { - if (!_currentInvalidFilenameDialog.isNull()) { - _currentInvalidFilenameDialog->close(); - } - - auto folder = FolderMan::instance()->folder(activity._folder); - const auto folderDir = QDir(folder->path()); - _currentInvalidFilenameDialog = new InvalidFilenameDialog(_accountState->account(), folder, - folderDir.filePath(activity._file)); - connect(_currentInvalidFilenameDialog, &InvalidFilenameDialog::accepted, folder, [folder]() { - folder->scheduleThisFolderSoon(); - }); - _currentInvalidFilenameDialog->open(); - ownCloudGui::raiseDialog(_currentInvalidFilenameDialog); - return; - } - - if (path.isValid()) { - QDesktopServices::openUrl(path); - } else { - const auto link = data(modelIndex, LinkRole).toUrl(); - Utility::openBrowser(link); - } -} - -void ActivityListModel::triggerAction(int activityIndex, int actionIndex) -{ - if (activityIndex < 0 || activityIndex >= _finalList.size()) { - qCWarning(lcActivity) << "Couldn't trigger action on activity at index" << activityIndex << "/ final list size:" << _finalList.size(); - return; - } - - const auto activity = _finalList[activityIndex]; - - if (actionIndex < 0 || actionIndex >= activity._links.size()) { - qCWarning(lcActivity) << "Couldn't trigger action at index" << actionIndex << "/ actions list size:" << activity._links.size(); - return; - } - - const auto action = activity._links[actionIndex]; - - if (action._verb == "WEB") { - Utility::openBrowser(QUrl(action._link)); - return; - } - - emit sendNotificationRequest(activity._accName, action._link, action._verb, activityIndex); -} - -AccountState *ActivityListModel::accountState() const -{ - return _accountState; -} - -void ActivityListModel::combineActivityLists() -{ - ActivityList resultList; - - if (_notificationErrorsLists.count() > 0) { - std::sort(_notificationErrorsLists.begin(), _notificationErrorsLists.end()); - resultList.append(_notificationErrorsLists); - } - if (_listOfIgnoredFiles.size() > 0) - resultList.append(_notificationIgnoredFiles); - - if (_notificationLists.count() > 0) { - std::sort(_notificationLists.begin(), _notificationLists.end()); - resultList.append(_notificationLists); - } - - if (_syncFileItemLists.count() > 0) { - std::sort(_syncFileItemLists.begin(), _syncFileItemLists.end()); - resultList.append(_syncFileItemLists); - } - - if (_activityLists.count() > 0) { - std::sort(_activityLists.begin(), _activityLists.end()); - resultList.append(_activityLists); - - if(_showMoreActivitiesAvailableEntry) { - Activity a; - a._type = Activity::ActivityType; - a._accName = _accountState->account()->displayName(); - a._id = -1; - a._subject = tr("For more activities please open the Activity app."); - a._dateTime = QDateTime::currentDateTime(); - - AccountApp *app = _accountState->findApp(QLatin1String("activity")); - if(app) { - a._link = app->url(); - } - - resultList.append(a); - } - } - - beginResetModel(); - _finalList.clear(); - endResetModel(); - - if (resultList.count() > 0) { - beginInsertRows(QModelIndex(), 0, resultList.count() - 1); - _finalList = resultList; - endInsertRows(); - } -} - -bool ActivityListModel::canFetchActivities() const -{ - return _accountState->isConnected() && _accountState->account()->capabilities().hasActivities(); -} - -void ActivityListModel::fetchMore(const QModelIndex &) -{ - if (canFetchActivities()) { - startFetchJob(); - } else { - _doneFetching = true; - combineActivityLists(); - } -} - -void ActivityListModel::slotRefreshActivity() -{ - _activityLists.clear(); - _doneFetching = false; - _currentItem = 0; - _totalActivitiesFetched = 0; - _showMoreActivitiesAvailableEntry = false; - - if (canFetchActivities()) { - startFetchJob(); - } else { - _doneFetching = true; - combineActivityLists(); - } -} - -void ActivityListModel::slotRemoveAccount() -{ - _finalList.clear(); - _activityLists.clear(); - _currentlyFetching = false; - _doneFetching = false; - _currentItem = 0; - _totalActivitiesFetched = 0; - _showMoreActivitiesAvailableEntry = false; -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityListModel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityListModel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityListModel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityListModel.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,577 @@ +/* + * 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 +#include +#include +#include +#include +#include + +#include "account.h" +#include "accountstate.h" +#include "accountmanager.h" +#include "conflictdialog.h" +#include "folderman.h" +#include "iconjob.h" +#include "accessmanager.h" +#include "owncloudgui.h" +#include "guiutility.h" + +#include "ActivityData.h" +#include "ActivityListModel.h" + +#include "theme.h" + +namespace OCC { + +Q_LOGGING_CATEGORY(lcActivity, "nextcloud.gui.activity", QtInfoMsg) + +ActivityListModel::ActivityListModel(AccountState *accountState, QObject *parent) + : QAbstractListModel(parent) + , _accountState(accountState) +{ +} + +QHash ActivityListModel::roleNames() const +{ + QHash roles; + roles[DisplayPathRole] = "displayPath"; + roles[PathRole] = "path"; + roles[AbsolutePathRole] = "absolutePath"; + roles[LinkRole] = "link"; + roles[MessageRole] = "message"; + roles[ActionRole] = "type"; + roles[ActionIconRole] = "icon"; + roles[ActionTextRole] = "subject"; + roles[ActionsLinksRole] = "links"; + roles[ActionTextColorRole] = "activityTextTitleColor"; + roles[ObjectTypeRole] = "objectType"; + roles[PointInTimeRole] = "dateTime"; + return roles; +} + +QVariant ActivityListModel::data(const QModelIndex &index, int role) const +{ + Activity a; + + if (!index.isValid()) + return QVariant(); + + a = _finalList.at(index.row()); + AccountStatePtr ast = AccountManager::instance()->account(a._accName); + if (!ast && _accountState != ast.data()) + return QVariant(); + + switch (role) { + case DisplayPathRole: + if (!a._file.isEmpty()) { + auto folder = FolderMan::instance()->folder(a._folder); + QString relPath(a._file); + if (folder) { + relPath.prepend(folder->remotePath()); + } + const auto localFiles = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account()); + if (localFiles.count() > 0) { + if (relPath.startsWith('/') || relPath.startsWith('\\')) { + return relPath.remove(0, 1); + } else { + return relPath; + } + } + } + return QString(); + case PathRole: + if (!a._file.isEmpty()) { + const auto folder = FolderMan::instance()->folder(a._folder); + + QString relPath(a._file); + if (folder) { + relPath.prepend(folder->remotePath()); + } + + // get relative path to the file so we can open it in the file manager + const auto localFiles = FolderMan::instance()->findFileInLocalFolders(QFileInfo(relPath).path(), ast->account()); + + if (localFiles.isEmpty()) { + return QString(); + } + + // If this is an E2EE file or folder, pretend we got no path, this leads to + // hiding the share button which is what we want + if (folder) { + SyncJournalFileRecord rec; + folder->journalDb()->getFileRecord(a._file.mid(1), &rec); + if (rec.isValid() && (rec._isE2eEncrypted || !rec._e2eMangledName.isEmpty())) { + return QString(); + } + } + + return QUrl::fromLocalFile(localFiles.constFirst()); + } + return QString(); + case AbsolutePathRole: { + const auto folder = FolderMan::instance()->folder(a._folder); + QString relPath(a._file); + if (!a._file.isEmpty()) { + if (folder) { + relPath.prepend(folder->remotePath()); + } + const auto localFiles = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account()); + if (!localFiles.empty()) { + return localFiles.constFirst(); + } else { + qWarning("File not local folders while processing absolute path request."); + return QString(); + } + } else { + qWarning("Received an absolute path request for an activity without a file path."); + return QString(); + } + } + case ActionsLinksRole: { + QList customList; + foreach (ActivityLink activityLink, a._links) { + customList << QVariant::fromValue(activityLink); + } + return customList; + } + case ActionIconRole: { + if (a._type == Activity::NotificationType) { + return "qrc:///client/theme/black/bell.svg"; + } else if (a._type == Activity::SyncResultType) { + return "qrc:///client/theme/black/state-error.svg"; + } else if (a._type == Activity::SyncFileItemType) { + if (a._status == SyncFileItem::NormalError + || a._status == SyncFileItem::FatalError + || a._status == SyncFileItem::DetailError + || a._status == SyncFileItem::BlacklistedError) { + return "qrc:///client/theme/black/state-error.svg"; + } else if (a._status == SyncFileItem::SoftError + || a._status == SyncFileItem::Conflict + || a._status == SyncFileItem::Restoration + || a._status == SyncFileItem::FileLocked + || a._status == SyncFileItem::FileNameInvalid) { + return "qrc:///client/theme/black/state-warning.svg"; + } else if (a._status == SyncFileItem::FileIgnored) { + return "qrc:///client/theme/black/state-info.svg"; + } else { + // File sync successful + if (a._fileAction == "file_created") { + return "qrc:///client/theme/colored/add.svg"; + } else if (a._fileAction == "file_deleted") { + return "qrc:///client/theme/colored/delete.svg"; + } else { + return "qrc:///client/theme/change.svg"; + } + } + } else { + // We have an activity + if (a._icon.isEmpty()) { + return "qrc:///client/theme/black/activity.svg"; + } + + return a._icon; + } + } + case ObjectTypeRole: + return a._objectType; + case ActionRole: { + switch (a._type) { + case Activity::ActivityType: + return "Activity"; + case Activity::NotificationType: + return "Notification"; + case Activity::SyncFileItemType: + return "File"; + case Activity::SyncResultType: + return "Sync"; + default: + return QVariant(); + } + } + case ActionTextRole: + return a._subject; + case ActionTextColorRole: + return a._id == -1 ? QLatin1String("#808080") : QLatin1String("#222"); // FIXME: This is a temporary workaround for _showMoreActivitiesAvailableEntry + case MessageRole: + return a._message; + case LinkRole: { + if (a._link.isEmpty()) { + return ""; + } else { + return a._link; + } + } + case AccountRole: + return a._accName; + case PointInTimeRole: + //return a._id == -1 ? "" : QString("%1 - %2").arg(Utility::timeAgoInWords(a._dateTime.toLocalTime()), a._dateTime.toLocalTime().toString(Qt::DefaultLocaleShortDate)); + return a._id == -1 ? "" : Utility::timeAgoInWords(a._dateTime.toLocalTime()); + case AccountConnectedRole: + return (ast && ast->isConnected()); + default: + return QVariant(); + } + return QVariant(); +} + +int ActivityListModel::rowCount(const QModelIndex &) const +{ + return _finalList.count(); +} + +bool ActivityListModel::canFetchMore(const QModelIndex &) const +{ + // We need to be connected to be able to fetch more + if (_accountState && _accountState->isConnected()) { + // If the fetching is reported to be done or we are currently fetching we can't fetch more + if (!_doneFetching && !_currentlyFetching) { + return true; + } + } + + return false; +} + +void ActivityListModel::startFetchJob() +{ + if (!_accountState->isConnected()) { + return; + } + auto *job = new JsonApiJob(_accountState->account(), QLatin1String("ocs/v2.php/apps/activity/api/v2/activity"), this); + QObject::connect(job, &JsonApiJob::jsonReceived, + this, &ActivityListModel::slotActivitiesReceived); + + QUrlQuery params; + params.addQueryItem(QLatin1String("since"), QString::number(_currentItem)); + params.addQueryItem(QLatin1String("limit"), QString::number(50)); + job->addQueryParams(params); + + _currentlyFetching = true; + qCInfo(lcActivity) << "Start fetching activities for " << _accountState->account()->displayName(); + job->start(); +} + +void ActivityListModel::slotActivitiesReceived(const QJsonDocument &json, int statusCode) +{ + auto activities = json.object().value("ocs").toObject().value("data").toArray(); + + ActivityList list; + auto ast = _accountState; + if (!ast) { + return; + } + + if (activities.size() == 0) { + _doneFetching = true; + } + + _currentlyFetching = false; + + QDateTime oldestDate = QDateTime::currentDateTime(); + oldestDate = oldestDate.addDays(_maxActivitiesDays * -1); + + foreach (auto activ, activities) { + auto json = activ.toObject(); + + Activity a; + a._type = Activity::ActivityType; + a._objectType = json.value("object_type").toString(); + a._accName = ast->account()->displayName(); + a._id = json.value("activity_id").toInt(); + a._fileAction = json.value("type").toString(); + a._subject = json.value("subject").toString(); + a._message = json.value("message").toString(); + a._file = json.value("object_name").toString(); + a._link = QUrl(json.value("link").toString()); + a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate); + a._icon = json.value("icon").toString(); + + list.append(a); + _currentItem = list.last()._id; + + _totalActivitiesFetched++; + if(_totalActivitiesFetched == _maxActivities || + a._dateTime < oldestDate) { + + _showMoreActivitiesAvailableEntry = true; + _doneFetching = true; + break; + } + } + + _activityLists.append(list); + + emit activityJobStatusCode(statusCode); + + combineActivityLists(); +} + +void ActivityListModel::addErrorToActivityList(Activity activity) +{ + qCInfo(lcActivity) << "Error successfully added to the notification list: " << activity._subject; + _notificationErrorsLists.prepend(activity); + combineActivityLists(); +} + +void ActivityListModel::addIgnoredFileToList(Activity newActivity) +{ + qCInfo(lcActivity) << "First checking for duplicates then add file to the notification list of ignored files: " << newActivity._file; + + bool duplicate = false; + if (_listOfIgnoredFiles.size() == 0) { + _notificationIgnoredFiles = newActivity; + _notificationIgnoredFiles._subject = tr("Files from the ignore list as well as symbolic links are not synced."); + _listOfIgnoredFiles.append(newActivity); + return; + } + + foreach (Activity activity, _listOfIgnoredFiles) { + if (activity._file == newActivity._file) { + duplicate = true; + break; + } + } + + if (!duplicate) { + _notificationIgnoredFiles._message.append(", " + newActivity._file); + } +} + +void ActivityListModel::addNotificationToActivityList(Activity activity) +{ + qCInfo(lcActivity) << "Notification successfully added to the notification list: " << activity._subject; + _notificationLists.prepend(activity); + combineActivityLists(); +} + +void ActivityListModel::clearNotifications() +{ + qCInfo(lcActivity) << "Clear the notifications"; + _notificationLists.clear(); + combineActivityLists(); +} + +void ActivityListModel::removeActivityFromActivityList(int row) +{ + Activity activity = _finalList.at(row); + removeActivityFromActivityList(activity); + combineActivityLists(); +} + +void ActivityListModel::addSyncFileItemToActivityList(Activity activity) +{ + qCInfo(lcActivity) << "Successfully added to the activity list: " << activity._subject; + _syncFileItemLists.prepend(activity); + combineActivityLists(); +} + +void ActivityListModel::removeActivityFromActivityList(Activity activity) +{ + qCInfo(lcActivity) << "Activity/Notification/Error successfully dismissed: " << activity._subject; + qCInfo(lcActivity) << "Trying to remove Activity/Notification/Error from view... "; + + int index = -1; + if (activity._type == Activity::ActivityType) { + index = _activityLists.indexOf(activity); + if (index != -1) + _activityLists.removeAt(index); + } else if (activity._type == Activity::NotificationType) { + index = _notificationLists.indexOf(activity); + if (index != -1) + _notificationLists.removeAt(index); + } else { + index = _notificationErrorsLists.indexOf(activity); + if (index != -1) + _notificationErrorsLists.removeAt(index); + } + + if (index != -1) { + qCInfo(lcActivity) << "Activity/Notification/Error successfully removed from the list."; + qCInfo(lcActivity) << "Updating Activity/Notification/Error view."; + combineActivityLists(); + } +} + +void ActivityListModel::triggerDefaultAction(int activityIndex) +{ + if (activityIndex < 0 || activityIndex >= _finalList.size()) { + qCWarning(lcActivity) << "Couldn't trigger default action at index" << activityIndex << "/ final list size:" << _finalList.size(); + return; + } + + const auto modelIndex = index(activityIndex); + const auto path = data(modelIndex, PathRole).toUrl(); + + const auto activity = _finalList.at(activityIndex); + if (activity._status == SyncFileItem::Conflict) { + Q_ASSERT(!activity._file.isEmpty()); + Q_ASSERT(!activity._folder.isEmpty()); + Q_ASSERT(Utility::isConflictFile(activity._file)); + + const auto folder = FolderMan::instance()->folder(activity._folder); + + const auto conflictedRelativePath = activity._file; + const auto baseRelativePath = folder->journalDb()->conflictFileBaseName(conflictedRelativePath.toUtf8()); + + const auto dir = QDir(folder->path()); + const auto conflictedPath = dir.filePath(conflictedRelativePath); + const auto basePath = dir.filePath(baseRelativePath); + + const auto baseName = QFileInfo(basePath).fileName(); + + if (!_currentConflictDialog.isNull()) { + _currentConflictDialog->close(); + } + _currentConflictDialog = new ConflictDialog; + _currentConflictDialog->setBaseFilename(baseName); + _currentConflictDialog->setLocalVersionFilename(conflictedPath); + _currentConflictDialog->setRemoteVersionFilename(basePath); + _currentConflictDialog->setAttribute(Qt::WA_DeleteOnClose); + connect(_currentConflictDialog, &ConflictDialog::accepted, folder, [folder]() { + folder->scheduleThisFolderSoon(); + }); + _currentConflictDialog->open(); + ownCloudGui::raiseDialog(_currentConflictDialog); + return; + } + + if (path.isValid()) { + QDesktopServices::openUrl(path); + } else { + const auto link = data(modelIndex, LinkRole).toUrl(); + Utility::openBrowser(link); + } +} + +void ActivityListModel::triggerAction(int activityIndex, int actionIndex) +{ + if (activityIndex < 0 || activityIndex >= _finalList.size()) { + qCWarning(lcActivity) << "Couldn't trigger action on activity at index" << activityIndex << "/ final list size:" << _finalList.size(); + return; + } + + const auto activity = _finalList[activityIndex]; + + if (actionIndex < 0 || actionIndex >= activity._links.size()) { + qCWarning(lcActivity) << "Couldn't trigger action at index" << actionIndex << "/ actions list size:" << activity._links.size(); + return; + } + + const auto action = activity._links[actionIndex]; + + if (action._verb == "WEB") { + Utility::openBrowser(QUrl(action._link)); + return; + } + + emit sendNotificationRequest(activity._accName, action._link, action._verb, activityIndex); +} + +void ActivityListModel::combineActivityLists() +{ + ActivityList resultList; + + if (_notificationErrorsLists.count() > 0) { + std::sort(_notificationErrorsLists.begin(), _notificationErrorsLists.end()); + resultList.append(_notificationErrorsLists); + } + if (_listOfIgnoredFiles.size() > 0) + resultList.append(_notificationIgnoredFiles); + + if (_notificationLists.count() > 0) { + std::sort(_notificationLists.begin(), _notificationLists.end()); + resultList.append(_notificationLists); + } + + if (_syncFileItemLists.count() > 0) { + std::sort(_syncFileItemLists.begin(), _syncFileItemLists.end()); + resultList.append(_syncFileItemLists); + } + + if (_activityLists.count() > 0) { + std::sort(_activityLists.begin(), _activityLists.end()); + resultList.append(_activityLists); + + if(_showMoreActivitiesAvailableEntry) { + Activity a; + a._type = Activity::ActivityType; + a._accName = _accountState->account()->displayName(); + a._id = -1; + a._subject = tr("For more activities please open the Activity app."); + a._dateTime = QDateTime::currentDateTime(); + + AccountApp *app = _accountState->findApp(QLatin1String("activity")); + if(app) { + a._link = app->url(); + } + + resultList.append(a); + } + } + + beginResetModel(); + _finalList.clear(); + endResetModel(); + + if (resultList.count() > 0) { + beginInsertRows(QModelIndex(), 0, resultList.count() - 1); + _finalList = resultList; + endInsertRows(); + } +} + +bool ActivityListModel::canFetchActivities() const +{ + return _accountState->isConnected() && _accountState->account()->capabilities().hasActivities(); +} + +void ActivityListModel::fetchMore(const QModelIndex &) +{ + if (canFetchActivities()) { + startFetchJob(); + } else { + _doneFetching = true; + combineActivityLists(); + } +} + +void ActivityListModel::slotRefreshActivity() +{ + _activityLists.clear(); + _doneFetching = false; + _currentItem = 0; + _totalActivitiesFetched = 0; + _showMoreActivitiesAvailableEntry = false; + + if (canFetchActivities()) { + startFetchJob(); + } else { + _doneFetching = true; + combineActivityLists(); + } +} + +void ActivityListModel::slotRemoveAccount() +{ + _finalList.clear(); + _activityLists.clear(); + _currentlyFetching = false; + _doneFetching = false; + _currentItem = 0; + _totalActivitiesFetched = 0; + _showMoreActivitiesAvailableEntry = false; +} +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitylistmodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitylistmodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/activitylistmodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/activitylistmodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,143 +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 ACTIVITYLISTMODEL_H -#define ACTIVITYLISTMODEL_H - -#include - -#include "activitydata.h" - -class QJsonDocument; - -namespace OCC { - -Q_DECLARE_LOGGING_CATEGORY(lcActivity) - -class AccountState; -class ConflictDialog; -class InvalidFilenameDialog; - -/** - * @brief The ActivityListModel - * @ingroup gui - * - * Simple list model to provide the list view with data. - */ - -class ActivityListModel : public QAbstractListModel -{ - Q_OBJECT - - Q_PROPERTY(AccountState *accountState READ accountState CONSTANT) -public: - enum DataRole { - ActionIconRole = Qt::UserRole + 1, - UserIconRole, - AccountRole, - ObjectTypeRole, - ActionsLinksRole, - ActionTextRole, - ActionTextColorRole, - ActionRole, - MessageRole, - DisplayPathRole, - PathRole, - AbsolutePathRole, - LinkRole, - PointInTimeRole, - AccountConnectedRole, - SyncFileStatusRole, - DisplayActions, - }; - Q_ENUM(DataRole) - - explicit ActivityListModel(QObject *parent = nullptr); - - explicit ActivityListModel(AccountState *accountState, - QObject *parent = nullptr); - - QVariant data(const QModelIndex &index, int role) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - bool canFetchMore(const QModelIndex &) const override; - void fetchMore(const QModelIndex &) override; - - ActivityList activityList() { return _finalList; } - ActivityList errorsList() { return _notificationErrorsLists; } - void addNotificationToActivityList(Activity activity); - void clearNotifications(); - void addErrorToActivityList(Activity activity); - void addIgnoredFileToList(Activity newActivity); - void addSyncFileItemToActivityList(Activity activity); - void removeActivityFromActivityList(int row); - void removeActivityFromActivityList(Activity activity); - - Q_INVOKABLE void triggerDefaultAction(int activityIndex); - Q_INVOKABLE void triggerAction(int activityIndex, int actionIndex); - - AccountState *accountState() const; - -public slots: - void slotRefreshActivity(); - void slotRemoveAccount(); - -signals: - void activityJobStatusCode(int statusCode); - void sendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row); - -protected: - void activitiesReceived(const QJsonDocument &json, int statusCode); - QHash roleNames() const override; - - void setAccountState(AccountState *state); - void setCurrentlyFetching(bool value); - bool currentlyFetching() const; - void setDoneFetching(bool value); - void setHideOldActivities(bool value); - void setDisplayActions(bool value); - - virtual void startFetchJob(); - -private: - void combineActivityLists(); - bool canFetchActivities() const; - - ActivityList _activityLists; - ActivityList _syncFileItemLists; - ActivityList _notificationLists; - ActivityList _listOfIgnoredFiles; - Activity _notificationIgnoredFiles; - ActivityList _notificationErrorsLists; - ActivityList _finalList; - int _currentItem = 0; - - bool _displayActions = true; - - int _totalActivitiesFetched = 0; - int _maxActivities = 100; - int _maxActivitiesDays = 30; - bool _showMoreActivitiesAvailableEntry = false; - - QPointer _currentConflictDialog; - QPointer _currentInvalidFilenameDialog; - - AccountState *_accountState = nullptr; - bool _currentlyFetching = false; - bool _doneFetching = false; - bool _hideOldActivities = true; -}; -} - -#endif // ACTIVITYLISTMODEL_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityListModel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityListModel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityListModel.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityListModel.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,121 @@ +/* + * 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 ACTIVITYLISTMODEL_H +#define ACTIVITYLISTMODEL_H + +#include + +#include "ActivityData.h" + +class QJsonDocument; + +namespace OCC { + +Q_DECLARE_LOGGING_CATEGORY(lcActivity) + +class AccountState; +class ConflictDialog; + +/** + * @brief The ActivityListModel + * @ingroup gui + * + * Simple list model to provide the list view with data. + */ + +class ActivityListModel : public QAbstractListModel +{ + Q_OBJECT +public: + enum DataRole { + ActionIconRole = Qt::UserRole + 1, + UserIconRole, + AccountRole, + ObjectTypeRole, + ActionsLinksRole, + ActionTextRole, + ActionTextColorRole, + ActionRole, + MessageRole, + DisplayPathRole, + PathRole, + AbsolutePathRole, + LinkRole, + PointInTimeRole, + AccountConnectedRole, + SyncFileStatusRole}; + + explicit ActivityListModel(AccountState *accountState, QObject* parent = nullptr); + + QVariant data(const QModelIndex &index, int role) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + + bool canFetchMore(const QModelIndex &) const override; + void fetchMore(const QModelIndex &) override; + + ActivityList activityList() { return _finalList; } + ActivityList errorsList() { return _notificationErrorsLists; } + void addNotificationToActivityList(Activity activity); + void clearNotifications(); + void addErrorToActivityList(Activity activity); + void addIgnoredFileToList(Activity newActivity); + void addSyncFileItemToActivityList(Activity activity); + void removeActivityFromActivityList(int row); + void removeActivityFromActivityList(Activity activity); + + Q_INVOKABLE void triggerDefaultAction(int activityIndex); + Q_INVOKABLE void triggerAction(int activityIndex, int actionIndex); + +public slots: + void slotRefreshActivity(); + void slotRemoveAccount(); + +private slots: + void slotActivitiesReceived(const QJsonDocument &json, int statusCode); + +signals: + void activityJobStatusCode(int statusCode); + void sendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row); + +protected: + QHash roleNames() const override; + +private: + void startFetchJob(); + void combineActivityLists(); + bool canFetchActivities() const; + + ActivityList _activityLists; + ActivityList _syncFileItemLists; + ActivityList _notificationLists; + ActivityList _listOfIgnoredFiles; + Activity _notificationIgnoredFiles; + ActivityList _notificationErrorsLists; + ActivityList _finalList; + AccountState *_accountState; + bool _currentlyFetching = false; + bool _doneFetching = false; + int _currentItem = 0; + + int _totalActivitiesFetched = 0; + int _maxActivities = 100; + int _maxActivitiesDays = 30; + bool _showMoreActivitiesAvailableEntry = false; + + QPointer _currentConflictDialog; +}; +} + +#endif // ACTIVITYLISTMODEL_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityList.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityList.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/ActivityList.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/ActivityList.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -import Style 1.0 - -import com.nextcloud.desktopclient 1.0 as NC - -ScrollView { - id: controlRoot - property alias model: activityList.model - - signal showFileActivity(string displayPath, string absolutePath) - signal activityItemClicked(int index) - - contentWidth: availableWidth - padding: 1 - - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - - data: NC.WheelHandler { - target: controlRoot.contentItem - } - - ListView { - id: activityList - - keyNavigationEnabled: true - - Accessible.role: Accessible.List - Accessible.name: qsTr("Activity list") - - clip: true - - delegate: ActivityItem { - width: activityList.contentWidth - height: Style.trayWindowHeaderHeight - flickable: activityList - onClicked: activityItemClicked(model.index) - onFileActivityButtonClicked: showFileActivity(displayPath, absolutePath) - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/AutoSizingMenu.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/AutoSizingMenu.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/AutoSizingMenu.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/AutoSizingMenu.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.3 - -Menu { - width: { - var result = 0; - var padding = 0; - for (var i = 0; i < count; ++i) { - var item = itemAt(i); - result = Math.max(item.contentItem.implicitWidth, result); - padding = Math.max(item.padding, padding); - } - return result + padding * 2; - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/FileActivityDialog.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/FileActivityDialog.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/FileActivityDialog.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/FileActivityDialog.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -import QtQuick.Window 2.15 - -import com.nextcloud.desktopclient 1.0 as NC - -Window { - id: dialog - - property alias model: activityModel - - NC.FileActivityListModel { - id: activityModel - } - - width: 500 - height: 500 - - ActivityList { - anchors.fill: parent - model: dialog.model - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/HeaderButton.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/HeaderButton.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/HeaderButton.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/HeaderButton.qml 2022-01-03 12:25:12.000000000 +0000 @@ -25,7 +25,7 @@ Layout.preferredHeight: Style.trayWindowHeaderHeight background: Rectangle { - color: root.hovered || root.visualFocus ? "white" : "transparent" + color: root.hovered ? "white" : "transparent" opacity: 0.2 } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationcache.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationcache.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationcache.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationcache.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -#include "notificationcache.h" - -namespace OCC { - -bool NotificationCache::contains(const Notification ¬ification) const -{ - return _notifications.find(calculateKey(notification)) != _notifications.end(); -} - -void NotificationCache::insert(const Notification ¬ification) -{ - _notifications.insert(calculateKey(notification)); -} - -void NotificationCache::clear() -{ - _notifications.clear(); -} - -uint NotificationCache::calculateKey(const Notification ¬ification) const -{ - return qHash(notification.title + notification.message); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationCache.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationCache.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationCache.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationCache.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,24 @@ +#include "NotificationCache.h" + +namespace OCC { + +bool NotificationCache::contains(const Notification ¬ification) const +{ + return _notifications.find(calculateKey(notification)) != _notifications.end(); +} + +void NotificationCache::insert(const Notification ¬ification) +{ + _notifications.insert(calculateKey(notification)); +} + +void NotificationCache::clear() +{ + _notifications.clear(); +} + +uint NotificationCache::calculateKey(const Notification ¬ification) const +{ + return qHash(notification.title + notification.message); +} +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationcache.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationcache.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationcache.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationcache.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -#pragma once - -#include - -namespace OCC { - -class NotificationCache -{ -public: - struct Notification - { - QString title; - QString message; - }; - - bool contains(const Notification ¬ification) const; - - void insert(const Notification ¬ification); - - void clear(); - -private: - uint calculateKey(const Notification ¬ification) const; - - - QSet _notifications; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationCache.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationCache.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationCache.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationCache.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,28 @@ +#pragma once + +#include + +namespace OCC { + +class NotificationCache +{ +public: + struct Notification + { + QString title; + QString message; + }; + + bool contains(const Notification ¬ification) const; + + void insert(const Notification ¬ification); + + void clear(); + +private: + uint calculateKey(const Notification ¬ification) const; + + + QSet _notifications; +}; +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationhandler.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationhandler.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationhandler.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationhandler.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,149 +0,0 @@ -#include "notificationhandler.h" - -#include "accountstate.h" -#include "capabilities.h" -#include "networkjobs.h" - -#include "iconjob.h" - -#include -#include - -namespace OCC { - -Q_LOGGING_CATEGORY(lcServerNotification, "nextcloud.gui.servernotification", QtInfoMsg) - -const QString notificationsPath = QLatin1String("ocs/v2.php/apps/notifications/api/v2/notifications"); -const char propertyAccountStateC[] = "oc_account_state"; -const int successStatusCode = 200; -const int notModifiedStatusCode = 304; - -ServerNotificationHandler::ServerNotificationHandler(AccountState *accountState, QObject *parent) - : QObject(parent) - , _accountState(accountState) -{ -} - -void ServerNotificationHandler::slotFetchNotifications() -{ - // check connectivity and credentials - if (!(_accountState && _accountState->isConnected() && _accountState->account() && _accountState->account()->credentials() && _accountState->account()->credentials()->ready())) { - deleteLater(); - return; - } - // check if the account has notifications enabled. If the capabilities are - // not yet valid, its assumed that notifications are available. - if (_accountState->account()->capabilities().isValid()) { - if (!_accountState->account()->capabilities().notificationsAvailable()) { - qCInfo(lcServerNotification) << "Account" << _accountState->account()->displayName() << "does not have notifications enabled."; - deleteLater(); - return; - } - } - - // if the previous notification job has finished, start next. - _notificationJob = new JsonApiJob(_accountState->account(), notificationsPath, this); - QObject::connect(_notificationJob.data(), &JsonApiJob::jsonReceived, - this, &ServerNotificationHandler::slotNotificationsReceived); - QObject::connect(_notificationJob.data(), &JsonApiJob::etagResponseHeaderReceived, - this, &ServerNotificationHandler::slotEtagResponseHeaderReceived); - QObject::connect(_notificationJob.data(), &JsonApiJob::allowDesktopNotificationsChanged, - this, &ServerNotificationHandler::slotAllowDesktopNotificationsChanged); - _notificationJob->setProperty(propertyAccountStateC, QVariant::fromValue(_accountState)); - _notificationJob->addRawHeader("If-None-Match", _accountState->notificationsEtagResponseHeader()); - _notificationJob->start(); -} - -void ServerNotificationHandler::slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode) -{ - if (statusCode == successStatusCode) { - qCWarning(lcServerNotification) << "New Notification ETag Response Header received " << value; - auto *account = qvariant_cast(sender()->property(propertyAccountStateC)); - account->setNotificationsEtagResponseHeader(value); - } -} - -void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(bool isAllowed) -{ - auto *account = qvariant_cast(sender()->property(propertyAccountStateC)); - if (account != nullptr) { - account->setDesktopNotificationsAllowed(isAllowed); - } -} - -void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &json, int statusCode) -{ - if (statusCode != successStatusCode && statusCode != notModifiedStatusCode) { - qCWarning(lcServerNotification) << "Notifications failed with status code " << statusCode; - deleteLater(); - return; - } - - if (statusCode == notModifiedStatusCode) { - qCWarning(lcServerNotification) << "Status code " << statusCode << " Not Modified - No new notifications."; - deleteLater(); - return; - } - - auto notifies = json.object().value("ocs").toObject().value("data").toArray(); - - auto *ai = qvariant_cast(sender()->property(propertyAccountStateC)); - - ActivityList list; - - foreach (auto element, notifies) { - Activity a; - auto json = element.toObject(); - a._type = Activity::NotificationType; - a._accName = ai->account()->displayName(); - a._id = json.value("notification_id").toInt(); - - //need to know, specially for remote_share - a._objectType = json.value("object_type").toString(); - a._status = 0; - - a._subject = json.value("subject").toString(); - a._message = json.value("message").toString(); - a._icon = json.value("icon").toString(); - - QUrl link(json.value("link").toString()); - if (!link.isEmpty()) { - if (link.host().isEmpty()) { - link.setScheme(ai->account()->url().scheme()); - link.setHost(ai->account()->url().host()); - } - if (link.port() == -1) { - link.setPort(ai->account()->url().port()); - } - } - a._link = link; - a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate); - - auto actions = json.value("actions").toArray(); - foreach (auto action, actions) { - auto actionJson = action.toObject(); - ActivityLink al; - al._label = QUrl::fromPercentEncoding(actionJson.value("label").toString().toUtf8()); - al._link = actionJson.value("link").toString(); - al._verb = actionJson.value("type").toString().toUtf8(); - al._primary = actionJson.value("primary").toBool(); - - a._links.append(al); - } - - // Add another action to dismiss notification on server - // https://github.com/owncloud/notifications/blob/master/docs/ocs-endpoint-v1.md#deleting-a-notification-for-a-user - ActivityLink al; - al._label = tr("Dismiss"); - al._link = Utility::concatUrlPath(ai->account()->url(), notificationsPath + "/" + QString::number(a._id)).toString(); - al._verb = "DELETE"; - al._primary = false; - a._links.append(al); - - list.append(a); - } - emit newNotificationList(list); - - deleteLater(); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationHandler.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationHandler.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationHandler.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationHandler.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,161 @@ +#include "NotificationHandler.h" + +#include "accountstate.h" +#include "capabilities.h" +#include "networkjobs.h" + +#include "iconjob.h" + +#include +#include + +namespace OCC { + +Q_LOGGING_CATEGORY(lcServerNotification, "nextcloud.gui.servernotification", QtInfoMsg) + +const QString notificationsPath = QLatin1String("ocs/v2.php/apps/notifications/api/v2/notifications"); +const char propertyAccountStateC[] = "oc_account_state"; +const int successStatusCode = 200; +const int notModifiedStatusCode = 304; +QMap ServerNotificationHandler::iconCache; + +ServerNotificationHandler::ServerNotificationHandler(AccountState *accountState, QObject *parent) + : QObject(parent) + , _accountState(accountState) +{ +} + +void ServerNotificationHandler::slotFetchNotifications() +{ + // check connectivity and credentials + if (!(_accountState && _accountState->isConnected() && _accountState->account() && _accountState->account()->credentials() && _accountState->account()->credentials()->ready())) { + deleteLater(); + return; + } + // check if the account has notifications enabled. If the capabilities are + // not yet valid, its assumed that notifications are available. + if (_accountState->account()->capabilities().isValid()) { + if (!_accountState->account()->capabilities().notificationsAvailable()) { + qCInfo(lcServerNotification) << "Account" << _accountState->account()->displayName() << "does not have notifications enabled."; + deleteLater(); + return; + } + } + + // if the previous notification job has finished, start next. + _notificationJob = new JsonApiJob(_accountState->account(), notificationsPath, this); + QObject::connect(_notificationJob.data(), &JsonApiJob::jsonReceived, + this, &ServerNotificationHandler::slotNotificationsReceived); + QObject::connect(_notificationJob.data(), &JsonApiJob::etagResponseHeaderReceived, + this, &ServerNotificationHandler::slotEtagResponseHeaderReceived); + QObject::connect(_notificationJob.data(), &JsonApiJob::allowDesktopNotificationsChanged, + this, &ServerNotificationHandler::slotAllowDesktopNotificationsChanged); + _notificationJob->setProperty(propertyAccountStateC, QVariant::fromValue(_accountState)); + _notificationJob->addRawHeader("If-None-Match", _accountState->notificationsEtagResponseHeader()); + _notificationJob->start(); +} + +void ServerNotificationHandler::slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode) +{ + if (statusCode == successStatusCode) { + qCWarning(lcServerNotification) << "New Notification ETag Response Header received " << value; + auto *account = qvariant_cast(sender()->property(propertyAccountStateC)); + account->setNotificationsEtagResponseHeader(value); + } +} + +void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(bool isAllowed) +{ + auto *account = qvariant_cast(sender()->property(propertyAccountStateC)); + if (account != nullptr) { + account->setDesktopNotificationsAllowed(isAllowed); + } +} + +void ServerNotificationHandler::slotIconDownloaded(QByteArray iconData) +{ + iconCache.insert(sender()->property("activityId").toInt(),iconData); +} + +void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &json, int statusCode) +{ + if (statusCode != successStatusCode && statusCode != notModifiedStatusCode) { + qCWarning(lcServerNotification) << "Notifications failed with status code " << statusCode; + deleteLater(); + return; + } + + if (statusCode == notModifiedStatusCode) { + qCWarning(lcServerNotification) << "Status code " << statusCode << " Not Modified - No new notifications."; + deleteLater(); + return; + } + + auto notifies = json.object().value("ocs").toObject().value("data").toArray(); + + auto *ai = qvariant_cast(sender()->property(propertyAccountStateC)); + + ActivityList list; + + foreach (auto element, notifies) { + Activity a; + auto json = element.toObject(); + a._type = Activity::NotificationType; + a._accName = ai->account()->displayName(); + a._id = json.value("notification_id").toInt(); + + //need to know, specially for remote_share + a._objectType = json.value("object_type").toString(); + a._status = 0; + + a._subject = json.value("subject").toString(); + a._message = json.value("message").toString(); + a._icon = json.value("icon").toString(); + + if (!a._icon.isEmpty()) { + auto *iconJob = new IconJob(QUrl(a._icon)); + iconJob->setProperty("activityId", a._id); + connect(iconJob, &IconJob::jobFinished, this, &ServerNotificationHandler::slotIconDownloaded); + } + + QUrl link(json.value("link").toString()); + if (!link.isEmpty()) { + if (link.host().isEmpty()) { + link.setScheme(ai->account()->url().scheme()); + link.setHost(ai->account()->url().host()); + } + if (link.port() == -1) { + link.setPort(ai->account()->url().port()); + } + } + a._link = link; + a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate); + + auto actions = json.value("actions").toArray(); + foreach (auto action, actions) { + auto actionJson = action.toObject(); + ActivityLink al; + al._label = QUrl::fromPercentEncoding(actionJson.value("label").toString().toUtf8()); + al._link = actionJson.value("link").toString(); + al._verb = actionJson.value("type").toString().toUtf8(); + al._primary = actionJson.value("primary").toBool(); + + a._links.append(al); + } + + // Add another action to dismiss notification on server + // https://github.com/owncloud/notifications/blob/master/docs/ocs-endpoint-v1.md#deleting-a-notification-for-a-user + ActivityLink al; + al._label = tr("Dismiss"); + al._link = Utility::concatUrlPath(ai->account()->url(), notificationsPath + "/" + QString::number(a._id)).toString(); + al._verb = "DELETE"; + al._primary = false; + a._links.append(al); + + list.append(a); + } + emit newNotificationList(list); + + deleteLater(); +} +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationhandler.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationhandler.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/notificationhandler.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/notificationhandler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -#ifndef NOTIFICATIONHANDLER_H -#define NOTIFICATIONHANDLER_H - -#include - -#include "usermodel.h" - -class QJsonDocument; - -namespace OCC { - -class ServerNotificationHandler : public QObject -{ - Q_OBJECT -public: - explicit ServerNotificationHandler(AccountState *accountState, QObject *parent = nullptr); - -signals: - void newNotificationList(ActivityList); - -public slots: - void slotFetchNotifications(); - -private slots: - void slotNotificationsReceived(const QJsonDocument &json, int statusCode); - void slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode); - void slotAllowDesktopNotificationsChanged(bool isAllowed); - -private: - QPointer _notificationJob; - AccountState *_accountState; -}; -} - -#endif // NOTIFICATIONHANDLER_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationHandler.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationHandler.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/NotificationHandler.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/NotificationHandler.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,37 @@ +#ifndef NOTIFICATIONHANDLER_H +#define NOTIFICATIONHANDLER_H + +#include + +#include "UserModel.h" + +class QJsonDocument; + +namespace OCC { + +class ServerNotificationHandler : public QObject +{ + Q_OBJECT +public: + explicit ServerNotificationHandler(AccountState *accountState, QObject *parent = nullptr); + static QMap iconCache; + +signals: + void newNotificationList(ActivityList); + +public slots: + void slotFetchNotifications(); + +private slots: + void slotNotificationsReceived(const QJsonDocument &json, int statusCode); + void slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode); + void slotIconDownloaded(QByteArray iconData); + void slotAllowDesktopNotificationsChanged(bool isAllowed); + +private: + QPointer _notificationJob; + AccountState *_accountState; +}; +} + +#endif // NOTIFICATIONHANDLER_H \ No newline at end of file diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/svgimageprovider.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/svgimageprovider.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/svgimageprovider.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/svgimageprovider.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 "svgimageprovider.h" -#include "iconutils.h" - -#include - -namespace OCC { -namespace Ui { - Q_LOGGING_CATEGORY(lcSvgImageProvider, "nextcloud.gui.svgimageprovider", QtInfoMsg) - - SvgImageProvider::SvgImageProvider() - : QQuickImageProvider(QQuickImageProvider::Image) - { - } - - QImage SvgImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) - { - Q_ASSERT(!id.isEmpty()); - - const auto idSplit = id.split(QStringLiteral("/"), Qt::SkipEmptyParts); - - if (idSplit.isEmpty()) { - qCWarning(lcSvgImageProvider) << "Image id is incorrect!"; - return {}; - } - - const auto pixmapName = idSplit.at(0); - const auto pixmapColor = idSplit.size() > 1 ? QColor(idSplit.at(1)) : QColorConstants::Svg::black; - - if (pixmapName.isEmpty() || !pixmapColor.isValid()) { - qCWarning(lcSvgImageProvider) << "Image id is incorrect!"; - return {}; - } - - return IconUtils::createSvgImageWithCustomColor(pixmapName, pixmapColor, size, requestedSize); - } -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/svgimageprovider.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/svgimageprovider.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/svgimageprovider.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/svgimageprovider.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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. - */ - -#pragma once - -#include - -namespace OCC { -namespace Ui { - class SvgImageProvider : public QQuickImageProvider - { - public: - SvgImageProvider(); - QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override; - }; -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/SyncStatus.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/SyncStatus.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/SyncStatus.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/SyncStatus.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.15 - -import Style 1.0 - -import com.nextcloud.desktopclient 1.0 as NC - -RowLayout { - id: layout - - property alias model: syncStatus - - spacing: 0 - - NC.SyncStatusSummary { - id: syncStatus - } - - Image { - id: syncIcon - - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - Layout.topMargin: 16 - Layout.bottomMargin: 16 - Layout.leftMargin: 16 - - source: syncStatus.syncIcon - sourceSize.width: 32 - sourceSize.height: 32 - rotation: syncStatus.syncing ? 0 : 0 - } - - RotationAnimator { - target: syncIcon - running: syncStatus.syncing - from: 0 - to: 360 - loops: Animation.Infinite - duration: 3000 - } - - ColumnLayout { - id: syncProgressLayout - - Layout.alignment: Qt.AlignVCenter - Layout.topMargin: 8 - Layout.rightMargin: 16 - Layout.leftMargin: 10 - Layout.bottomMargin: 8 - Layout.fillWidth: true - Layout.fillHeight: true - - Text { - id: syncProgressText - - Layout.fillWidth: true - - text: syncStatus.syncStatusString - verticalAlignment: Text.AlignVCenter - font.pixelSize: Style.topLinePixelSize - font.bold: true - } - - Loader { - Layout.fillWidth: true - - active: syncStatus.syncing; - visible: syncStatus.syncing - - sourceComponent: ProgressBar { - id: syncProgressBar - - value: syncStatus.syncProgress - } - } - - Text { - id: syncProgressDetailText - - Layout.fillWidth: true - - text: syncStatus.syncStatusDetailString - visible: syncStatus.syncStatusDetailString !== "" - color: "#808080" - font.pixelSize: Style.subLinePixelSize - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/syncstatussummary.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/syncstatussummary.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/syncstatussummary.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/syncstatussummary.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,346 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "syncstatussummary.h" -#include "accountfwd.h" -#include "folderman.h" -#include "navigationpanehelper.h" -#include "networkjobs.h" -#include "syncresult.h" -#include "tray/usermodel.h" - -#include - -namespace { - -OCC::SyncResult::Status determineSyncStatus(const OCC::SyncResult &syncResult) -{ - const auto status = syncResult.status(); - - if (status == OCC::SyncResult::Success || status == OCC::SyncResult::Problem) { - if (syncResult.hasUnresolvedConflicts()) { - return OCC::SyncResult::Problem; - } - return OCC::SyncResult::Success; - } else if (status == OCC::SyncResult::SyncPrepare || status == OCC::SyncResult::Undefined) { - return OCC::SyncResult::SyncRunning; - } - return status; -} -} - -namespace OCC { - -Q_LOGGING_CATEGORY(lcSyncStatusModel, "nextcloud.gui.syncstatusmodel", QtInfoMsg) - -SyncStatusSummary::SyncStatusSummary(QObject *parent) - : QObject(parent) -{ - const auto folderMan = FolderMan::instance(); - connect(folderMan, &FolderMan::folderListChanged, this, &SyncStatusSummary::onFolderListChanged); - connect(folderMan, &FolderMan::folderSyncStateChange, this, &SyncStatusSummary::onFolderSyncStateChanged); -} - -bool SyncStatusSummary::reloadNeeded(AccountState *accountState) const -{ - if (_accountState.data() == accountState) { - return false; - } - return true; -} - -void SyncStatusSummary::load() -{ - const auto currentUser = UserModel::instance()->currentUser(); - if (!currentUser) { - return; - } - setAccountState(currentUser->accountState()); - clearFolderErrors(); - connectToFoldersProgress(FolderMan::instance()->map()); - initSyncState(); -} - -double SyncStatusSummary::syncProgress() const -{ - return _progress; -} - -QUrl SyncStatusSummary::syncIcon() const -{ - return _syncIcon; -} - -bool SyncStatusSummary::syncing() const -{ - return _isSyncing; -} - -void SyncStatusSummary::onFolderListChanged(const OCC::Folder::Map &folderMap) -{ - connectToFoldersProgress(folderMap); -} - -void SyncStatusSummary::markFolderAsError(const Folder *folder) -{ - _foldersWithErrors.insert(folder->alias()); -} - -void SyncStatusSummary::markFolderAsSuccess(const Folder *folder) -{ - _foldersWithErrors.erase(folder->alias()); -} - -bool SyncStatusSummary::folderErrors() const -{ - return _foldersWithErrors.size() != 0; -} - -bool SyncStatusSummary::folderError(const Folder *folder) const -{ - return _foldersWithErrors.find(folder->alias()) != _foldersWithErrors.end(); -} - -void SyncStatusSummary::clearFolderErrors() -{ - _foldersWithErrors.clear(); -} - -void SyncStatusSummary::setSyncStateForFolder(const Folder *folder) -{ - if (_accountState && !_accountState->isConnected()) { - setSyncing(false); - setSyncStatusString(tr("Offline")); - setSyncStatusDetailString(""); - setSyncIcon(Theme::instance()->folderOffline()); - return; - } - - const auto state = determineSyncStatus(folder->syncResult()); - - switch (state) { - case SyncResult::Success: - case SyncResult::SyncPrepare: - // Success should only be shown if all folders were fine - if (!folderErrors() || folderError(folder)) { - setSyncing(false); - setSyncStatusString(tr("All synced!")); - setSyncStatusDetailString(""); - setSyncIcon(Theme::instance()->syncStatusOk()); - markFolderAsSuccess(folder); - } - break; - case SyncResult::Error: - case SyncResult::SetupError: - setSyncing(false); - setSyncStatusString(tr("Some files couldn't be synced!")); - setSyncStatusDetailString(tr("See below for errors")); - setSyncIcon(Theme::instance()->syncStatusError()); - markFolderAsError(folder); - break; - case SyncResult::SyncRunning: - case SyncResult::NotYetStarted: - setSyncing(true); - setSyncStatusString(tr("Syncing")); - setSyncStatusDetailString(""); - setSyncIcon(Theme::instance()->syncStatusRunning()); - break; - case SyncResult::Paused: - case SyncResult::SyncAbortRequested: - setSyncing(false); - setSyncStatusString(tr("Sync paused")); - setSyncStatusDetailString(""); - setSyncIcon(Theme::instance()->syncStatusPause()); - break; - case SyncResult::Problem: - case SyncResult::Undefined: - setSyncing(false); - setSyncStatusString(tr("Some files could not be synced!")); - setSyncStatusDetailString(tr("See below for warnings")); - setSyncIcon(Theme::instance()->syncStatusWarning()); - markFolderAsError(folder); - break; - } -} - -void SyncStatusSummary::onFolderSyncStateChanged(const Folder *folder) -{ - if (!folder) { - return; - } - - if (!_accountState || folder->accountState() != _accountState.data()) { - return; - } - - setSyncStateForFolder(folder); -} - -constexpr double calculateOverallPercent( - qint64 totalFileCount, qint64 completedFile, qint64 totalSize, qint64 completedSize) -{ - int overallPercent = 0; - if (totalFileCount > 0) { - // Add one 'byte' for each file so the percentage is moving when deleting or renaming files - overallPercent = qRound(double(completedSize + completedFile) / double(totalSize + totalFileCount) * 100.0); - } - overallPercent = qBound(0, overallPercent, 100); - return overallPercent / 100.0; -} - -void SyncStatusSummary::onFolderProgressInfo(const ProgressInfo &progress) -{ - const qint64 completedSize = progress.completedSize(); - const qint64 currentFile = progress.currentFile(); - const qint64 completedFile = progress.completedFiles(); - const qint64 totalSize = qMax(completedSize, progress.totalSize()); - const qint64 totalFileCount = qMax(currentFile, progress.totalFiles()); - - setSyncProgress(calculateOverallPercent(totalFileCount, completedFile, totalSize, completedSize)); - - if (totalSize > 0) { - const auto completedSizeString = Utility::octetsToString(completedSize); - const auto totalSizeString = Utility::octetsToString(totalSize); - - if (progress.trustEta()) { - setSyncStatusDetailString( - tr("%1 of %2 · %3 left") - .arg(completedSizeString, totalSizeString) - .arg(Utility::durationToDescriptiveString1(progress.totalProgress().estimatedEta))); - } else { - setSyncStatusDetailString(tr("%1 of %2").arg(completedSizeString, totalSizeString)); - } - } - - if (totalFileCount > 0) { - setSyncStatusString(tr("Syncing file %1 of %2").arg(currentFile).arg(totalFileCount)); - } -} - -void SyncStatusSummary::setSyncing(bool value) -{ - if (value == _isSyncing) { - return; - } - - _isSyncing = value; - emit syncingChanged(); -} - -void SyncStatusSummary::setSyncProgress(double value) -{ - if (_progress == value) { - return; - } - - _progress = value; - emit syncProgressChanged(); -} - -void SyncStatusSummary::setSyncStatusString(const QString &value) -{ - if (_syncStatusString == value) { - return; - } - - _syncStatusString = value; - emit syncStatusStringChanged(); -} - -QString SyncStatusSummary::syncStatusString() const -{ - return _syncStatusString; -} - -QString SyncStatusSummary::syncStatusDetailString() const -{ - return _syncStatusDetailString; -} - -void SyncStatusSummary::setSyncIcon(const QUrl &value) -{ - if (_syncIcon == value) { - return; - } - - _syncIcon = value; - emit syncIconChanged(); -} - -void SyncStatusSummary::setSyncStatusDetailString(const QString &value) -{ - if (_syncStatusDetailString == value) { - return; - } - - _syncStatusDetailString = value; - emit syncStatusDetailStringChanged(); -} - -void SyncStatusSummary::connectToFoldersProgress(const Folder::Map &folderMap) -{ - for (const auto &folder : folderMap) { - if (folder->accountState() == _accountState.data()) { - connect( - folder, &Folder::progressInfo, this, &SyncStatusSummary::onFolderProgressInfo, Qt::UniqueConnection); - } else { - disconnect(folder, &Folder::progressInfo, this, &SyncStatusSummary::onFolderProgressInfo); - } - } -} - -void SyncStatusSummary::onIsConnectedChanged() -{ - setSyncStateToConnectedState(); -} - -void SyncStatusSummary::setSyncStateToConnectedState() -{ - setSyncing(false); - setSyncStatusDetailString(""); - if (_accountState && !_accountState->isConnected()) { - setSyncStatusString(tr("Offline")); - setSyncIcon(Theme::instance()->folderOffline()); - } else { - setSyncStatusString(tr("All synced!")); - setSyncIcon(Theme::instance()->syncStatusOk()); - } -} - -void SyncStatusSummary::setAccountState(AccountStatePtr accountState) -{ - if (!reloadNeeded(accountState.data())) { - return; - } - if (_accountState) { - disconnect( - _accountState.data(), &AccountState::isConnectedChanged, this, &SyncStatusSummary::onIsConnectedChanged); - } - _accountState = accountState; - connect(_accountState.data(), &AccountState::isConnectedChanged, this, &SyncStatusSummary::onIsConnectedChanged); -} - -void SyncStatusSummary::initSyncState() -{ - auto syncStateFallbackNeeded = true; - for (const auto &folder : FolderMan::instance()->map()) { - onFolderSyncStateChanged(folder); - syncStateFallbackNeeded = false; - } - - if (syncStateFallbackNeeded) { - setSyncStateToConnectedState(); - } -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/syncstatussummary.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/syncstatussummary.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/syncstatussummary.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/syncstatussummary.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include "account.h" -#include "accountfwd.h" -#include "accountstate.h" -#include "folderman.h" - -#include -#include - -#include - -namespace OCC { - -class SyncStatusSummary : public QObject -{ - Q_OBJECT - - Q_PROPERTY(double syncProgress READ syncProgress NOTIFY syncProgressChanged) - Q_PROPERTY(QUrl syncIcon READ syncIcon NOTIFY syncIconChanged) - Q_PROPERTY(bool syncing READ syncing NOTIFY syncingChanged) - Q_PROPERTY(QString syncStatusString READ syncStatusString NOTIFY syncStatusStringChanged) - Q_PROPERTY(QString syncStatusDetailString READ syncStatusDetailString NOTIFY syncStatusDetailStringChanged) - -public: - explicit SyncStatusSummary(QObject *parent = nullptr); - - double syncProgress() const; - QUrl syncIcon() const; - bool syncing() const; - QString syncStatusString() const; - QString syncStatusDetailString() const; - -signals: - void syncProgressChanged(); - void syncIconChanged(); - void syncingChanged(); - void syncStatusStringChanged(); - void syncStatusDetailStringChanged(); - -public slots: - void load(); - -private: - void connectToFoldersProgress(const Folder::Map &map); - - void onFolderListChanged(const OCC::Folder::Map &folderMap); - void onFolderProgressInfo(const ProgressInfo &progress); - void onFolderSyncStateChanged(const Folder *folder); - void onIsConnectedChanged(); - - void setSyncStateForFolder(const Folder *folder); - void markFolderAsError(const Folder *folder); - void markFolderAsSuccess(const Folder *folder); - bool folderErrors() const; - bool folderError(const Folder *folder) const; - void clearFolderErrors(); - void setSyncStateToConnectedState(); - bool reloadNeeded(AccountState *accountState) const; - void initSyncState(); - - void setSyncProgress(double value); - void setSyncing(bool value); - void setSyncStatusString(const QString &value); - void setSyncStatusDetailString(const QString &value); - void setSyncIcon(const QUrl &value); - void setAccountState(AccountStatePtr accountState); - - AccountStatePtr _accountState; - std::set _foldersWithErrors; - - QUrl _syncIcon = Theme::instance()->syncStatusOk(); - double _progress = 1.0; - bool _isSyncing = false; - QString _syncStatusString = tr("All synced!"); - QString _syncStatusDetailString; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchInputContainer.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchInputContainer.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchInputContainer.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchInputContainer.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.3 -import QtGraphicalEffects 1.0 -import Style 1.0 - -TextField { - id: trayWindowUnifiedSearchTextField - - property bool isSearchInProgress: false - - readonly property color textFieldIconsColor: Style.menuBorder - - readonly property int textFieldIconsOffset: 10 - - readonly property double textFieldIconsScaleFactor: 0.6 - - readonly property int textFieldHorizontalPaddingOffset: 14 - - signal clearText() - - leftPadding: trayWindowUnifiedSearchTextFieldSearchIcon.width + trayWindowUnifiedSearchTextFieldSearchIcon.anchors.leftMargin + textFieldHorizontalPaddingOffset - rightPadding: trayWindowUnifiedSearchTextFieldClearTextButton.width + trayWindowUnifiedSearchTextFieldClearTextButton.anchors.rightMargin + textFieldHorizontalPaddingOffset - - placeholderText: qsTr("Search files, messages, events …") - - selectByMouse: true - - background: Rectangle { - radius: 5 - border.color: parent.activeFocus ? Style.ncBlue : Style.menuBorder - border.width: 1 - } - - Image { - id: trayWindowUnifiedSearchTextFieldSearchIcon - - anchors { - left: parent.left - leftMargin: parent.textFieldIconsOffset - verticalCenter: parent.verticalCenter - } - - visible: !trayWindowUnifiedSearchTextField.isSearchInProgress - - smooth: true; - antialiasing: true - mipmap: true - source: "image://svgimage-custom-color/search.svg" + "/" + trayWindowUnifiedSearchTextField.textFieldIconsColor - sourceSize: Qt.size(parent.height * parent.textFieldIconsScaleFactor, parent.height * parent.textFieldIconsScaleFactor) - } - - BusyIndicator { - id: trayWindowUnifiedSearchTextFieldIconInProgress - running: visible - visible: trayWindowUnifiedSearchTextField.isSearchInProgress - anchors { - left: trayWindowUnifiedSearchTextField.left - bottom: trayWindowUnifiedSearchTextField.bottom - leftMargin: trayWindowUnifiedSearchTextField.textFieldIconsOffset - 4 - topMargin: 4 - bottomMargin: 4 - verticalCenter: trayWindowUnifiedSearchTextField.verticalCenter - } - width: height - } - - Image { - id: trayWindowUnifiedSearchTextFieldClearTextButton - - anchors { - right: parent.right - rightMargin: parent.textFieldIconsOffset - verticalCenter: parent.verticalCenter - } - - smooth: true; - antialiasing: true - mipmap: true - - visible: parent.text - source: "image://svgimage-custom-color/clear.svg" + "/" + trayWindowUnifiedSearchTextField.textFieldIconsColor - sourceSize: Qt.size(parent.height * parent.textFieldIconsScaleFactor, parent.height * parent.textFieldIconsScaleFactor) - - MouseArea { - id: trayWindowUnifiedSearchTextFieldClearTextButtonMouseArea - - anchors.fill: parent - - onClicked: trayWindowUnifiedSearchTextField.clearText() - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresult.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresult.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresult.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresult.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 - -#include "unifiedsearchresult.h" - -namespace OCC { - -QString UnifiedSearchResult::typeAsString(UnifiedSearchResult::Type type) -{ - QString result; - - switch (type) { - case Default: - result = QStringLiteral("Default"); - break; - - case FetchMoreTrigger: - result = QStringLiteral("FetchMoreTrigger"); - break; - } - return result; -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 -import Style 1.0 - -ColumnLayout { - id: unifiedSearchResultItemFetchMore - - property bool isFetchMoreInProgress: false - - property bool isWihinViewPort: false - - property int fontSize: Style.topLinePixelSize - - property string textColor: "grey" - - Accessible.role: Accessible.ListItem - Accessible.name: unifiedSearchResultItemFetchMoreText.text - Accessible.onPressAction: unifiedSearchResultMouseArea.clicked() - - Label { - id: unifiedSearchResultItemFetchMoreText - text: qsTr("Load more results") - visible: !unifiedSearchResultItemFetchMore.isFetchMoreInProgress - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - Layout.fillWidth: true - Layout.fillHeight: true - font.pixelSize: unifiedSearchResultItemFetchMore.fontSize - color: unifiedSearchResultItemFetchMore.textColor - } - - BusyIndicator { - id: unifiedSearchResultItemFetchMoreIconInProgress - running: visible - visible: unifiedSearchResultItemFetchMore.isFetchMoreInProgress && unifiedSearchResultItemFetchMore.isWihinViewPort - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.preferredWidth: parent.height * 0.70 - Layout.preferredHeight: parent.height * 0.70 - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresult.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresult.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresult.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresult.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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. - */ - -#pragma once - -#include - -#include - -namespace OCC { - -/** - * @brief The UnifiedSearchResult class - * @ingroup gui - * Simple data structure that represents single Unified Search result - */ - -struct UnifiedSearchResult -{ - enum Type : quint8 { - Default, - FetchMoreTrigger, - }; - - static QString typeAsString(UnifiedSearchResult::Type type); - - QString _title; - QString _subline; - QString _providerId; - QString _providerName; - bool _isRounded = false; - qint32 _order = std::numeric_limits::max(); - QUrl _resourceUrl; - QString _icons; - Type _type = Type::Default; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultimageprovider.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultimageprovider.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultimageprovider.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultimageprovider.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,131 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 "unifiedsearchresultimageprovider.h" - -#include "usermodel.h" - -#include -#include -#include - -namespace { -class AsyncImageResponse : public QQuickImageResponse -{ -public: - AsyncImageResponse(const QString &id, const QSize &requestedSize) - { - if (id.isEmpty()) { - setImageAndEmitFinished(); - return; - } - - _imagePaths = id.split(QLatin1Char(';'), Qt::SkipEmptyParts); - _requestedImageSize = requestedSize; - - if (_imagePaths.isEmpty()) { - setImageAndEmitFinished(); - } else { - processNextImage(); - } - } - - void setImageAndEmitFinished(const QImage &image = {}) - { - _image = image; - emit finished(); - } - - QQuickTextureFactory *textureFactory() const override - { - return QQuickTextureFactory::textureFactoryForImage(_image); - } - -private: - void processNextImage() - { - if (_index < 0 || _index >= _imagePaths.size()) { - setImageAndEmitFinished(); - return; - } - - if (_imagePaths.at(_index).startsWith(QStringLiteral(":/client"))) { - setImageAndEmitFinished(QIcon(_imagePaths.at(_index)).pixmap(_requestedImageSize).toImage()); - return; - } - - const auto currentUser = OCC::UserModel::instance()->currentUser(); - if (currentUser && currentUser->account()) { - const QUrl iconUrl(_imagePaths.at(_index)); - if (iconUrl.isValid() && !iconUrl.scheme().isEmpty()) { - // fetch the remote resource - const auto reply = currentUser->account()->sendRawRequest(QByteArrayLiteral("GET"), iconUrl); - connect(reply, &QNetworkReply::finished, this, &AsyncImageResponse::slotProcessNetworkReply); - ++_index; - return; - } - } - - setImageAndEmitFinished(); - } - -private slots: - void slotProcessNetworkReply() - { - const auto reply = qobject_cast(sender()); - if (!reply) { - setImageAndEmitFinished(); - return; - } - - const QByteArray imageData = reply->readAll(); - // server returns "[]" for some some file previews (have no idea why), so, we use another image - // from the list if available - if (imageData.isEmpty() || imageData == QByteArrayLiteral("[]")) { - processNextImage(); - } else { - if (imageData.startsWith(QByteArrayLiteral(" - * - * 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. - */ - -#pragma once - -#include -#include - -namespace OCC { - -/** - * @brief The UnifiedSearchResultImageProvider - * @ingroup gui - * Allows to fetch Unified Search result icon from the server or used a local resource - */ - -class UnifiedSearchResultImageProvider : public QQuickAsyncImageProvider -{ -public: - QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) override; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItem.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItem.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItem.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItem.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.9 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 -import Style 1.0 -import QtGraphicalEffects 1.0 - -RowLayout { - id: unifiedSearchResultItemDetails - - property string title: "" - property string subline: "" - property string icons: "" - property string iconPlaceholder: "" - property bool isRounded: false - - - property int textLeftMargin: 18 - property int textRightMargin: 16 - property int iconWidth: 24 - property int iconLeftMargin: 12 - - property int titleFontSize: Style.topLinePixelSize - property int sublineFontSize: Style.subLinePixelSize - - property string titleColor: "black" - property string sublineColor: "grey" - - Accessible.role: Accessible.ListItem - Accessible.name: resultTitle - Accessible.onPressAction: unifiedSearchResultMouseArea.clicked() - - ColumnLayout { - id: unifiedSearchResultImageContainer - visible: true - Layout.preferredWidth: unifiedSearchResultItemDetails.iconWidth + 10 - Layout.preferredHeight: unifiedSearchResultItemDetails.height - Image { - id: unifiedSearchResultThumbnail - visible: false - asynchronous: true - source: "image://unified-search-result-icon/" + icons - cache: true - sourceSize.width: imageData.width - sourceSize.height: imageData.height - width: imageData.width - height: imageData.height - } - Rectangle { - id: mask - visible: false - radius: isRounded ? width / 2 : 0 - width: imageData.width - height: imageData.height - } - OpacityMask { - id: imageData - visible: !unifiedSearchResultThumbnailPlaceholder.visible && icons - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.leftMargin: iconLeftMargin - Layout.preferredWidth: unifiedSearchResultItemDetails.iconWidth - Layout.preferredHeight: unifiedSearchResultItemDetails.iconWidth - source: unifiedSearchResultThumbnail - maskSource: mask - } - Image { - id: unifiedSearchResultThumbnailPlaceholder - visible: icons && iconPlaceholder && unifiedSearchResultThumbnail.status !== Image.Ready - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - Layout.leftMargin: iconLeftMargin - verticalAlignment: Qt.AlignCenter - cache: true - source: iconPlaceholder - sourceSize.height: unifiedSearchResultItemDetails.iconWidth - sourceSize.width: unifiedSearchResultItemDetails.iconWidth - Layout.preferredWidth: unifiedSearchResultItemDetails.iconWidth - Layout.preferredHeight: unifiedSearchResultItemDetails.iconWidth - } - } - - ColumnLayout { - id: unifiedSearchResultTextContainer - Layout.fillWidth: true - - Label { - id: unifiedSearchResultTitleText - text: title.replace(/[\r\n]+/g, " ") - Layout.leftMargin: textLeftMargin - Layout.rightMargin: textRightMargin - Layout.fillWidth: true - elide: Text.ElideRight - font.pixelSize: unifiedSearchResultItemDetails.titleFontSize - color: unifiedSearchResultItemDetails.titleColor - } - Label { - id: unifiedSearchResultTextSubline - text: subline.replace(/[\r\n]+/g, " ") - elide: Text.ElideRight - font.pixelSize: unifiedSearchResultItemDetails.sublineFontSize - Layout.leftMargin: textLeftMargin - Layout.rightMargin: textRightMargin - Layout.fillWidth: true - color: unifiedSearchResultItemDetails.sublineColor - } - } - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItemSkeletonContainer.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.3 -import Style 1.0 - -Column { - id: unifiedSearchResultsListViewSkeletonColumn - - property int textLeftMargin: 18 - property int textRightMargin: 16 - property int iconWidth: 24 - property int iconLeftMargin: 12 - property int itemHeight: Style.trayWindowHeaderHeight - property int titleFontSize: Style.topLinePixelSize - property int sublineFontSize: Style.subLinePixelSize - property string titleColor: "black" - property string sublineColor: "grey" - property string iconColor: "#afafaf" - - Repeater { - model: 10 - UnifiedSearchResultItemSkeleton { - textLeftMargin: unifiedSearchResultsListViewSkeletonColumn.textLeftMargin - textRightMargin: unifiedSearchResultsListViewSkeletonColumn.textRightMargin - iconWidth: unifiedSearchResultsListViewSkeletonColumn.iconWidth - iconLeftMargin: unifiedSearchResultsListViewSkeletonColumn.iconLeftMargin - width: unifiedSearchResultsListViewSkeletonColumn.width - height: unifiedSearchResultsListViewSkeletonColumn.itemHeight - index: model.index - titleFontSize: unifiedSearchResultsListViewSkeletonColumn.titleFontSize - sublineFontSize: unifiedSearchResultsListViewSkeletonColumn.sublineFontSize - titleColor: unifiedSearchResultsListViewSkeletonColumn.titleColor - sublineColor: unifiedSearchResultsListViewSkeletonColumn.sublineColor - iconColor: unifiedSearchResultsListViewSkeletonColumn.iconColor - } - } - - OpacityAnimator { - target: unifiedSearchResultsListViewSkeletonColumn; - from: 0.5; - to: 1; - duration: 800 - running: unifiedSearchResultsListViewSkeletonColumn.visible - loops: Animation.Infinite; - easing { - type: Easing.InOutBounce; - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItemSkeleton.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItemSkeleton.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultItemSkeleton.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultItemSkeleton.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Layouts 1.2 -import Style 1.0 - -RowLayout { - id: unifiedSearchResultSkeletonItemDetails - - property int textLeftMargin: 18 - property int textRightMargin: 16 - property int iconWidth: 24 - property int iconLeftMargin: 12 - - property int titleFontSize: Style.topLinePixelSize - property int sublineFontSize: Style.subLinePixelSize - - property string titleColor: "black" - property string sublineColor: "grey" - - property string iconColor: "#afafaf" - - property int index: 0 - - Accessible.role: Accessible.ListItem - Accessible.name: qsTr("Search result skeleton.").arg(index) - - Rectangle { - id: unifiedSearchResultSkeletonThumbnail - color: unifiedSearchResultSkeletonItemDetails.iconColor - Layout.preferredWidth: unifiedSearchResultSkeletonItemDetails.iconWidth - Layout.preferredHeight: unifiedSearchResultSkeletonItemDetails.iconWidth - Layout.leftMargin: unifiedSearchResultSkeletonItemDetails.iconLeftMargin - Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter - } - - ColumnLayout { - id: unifiedSearchResultSkeletonTextContainer - Layout.fillWidth: true - - Rectangle { - id: unifiedSearchResultSkeletonTitleText - color: unifiedSearchResultSkeletonItemDetails.titleColor - Layout.preferredHeight: unifiedSearchResultSkeletonItemDetails.titleFontSize - Layout.leftMargin: unifiedSearchResultSkeletonItemDetails.textLeftMargin - Layout.rightMargin: unifiedSearchResultSkeletonItemDetails.textRightMargin - Layout.fillWidth: true - } - - Rectangle { - id: unifiedSearchResultSkeletonTextSubline - color: unifiedSearchResultSkeletonItemDetails.sublineColor - Layout.preferredHeight: unifiedSearchResultSkeletonItemDetails.sublineFontSize - Layout.leftMargin: unifiedSearchResultSkeletonItemDetails.textLeftMargin - Layout.rightMargin: unifiedSearchResultSkeletonItemDetails.textRightMargin - Layout.fillWidth: true - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultListItem.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultListItem.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultListItem.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultListItem.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.3 -import Style 1.0 - -MouseArea { - id: unifiedSearchResultMouseArea - - property int textLeftMargin: 18 - property int textRightMargin: 16 - property int iconWidth: 24 - property int iconLeftMargin: 12 - - property int titleFontSize: Style.topLinePixelSize - property int sublineFontSize: Style.subLinePixelSize - - property string titleColor: "black" - property string sublineColor: "grey" - - property string currentFetchMoreInProgressProviderId: "" - - readonly property bool isFetchMoreTrigger: model.typeAsString === "FetchMoreTrigger" - - property bool isFetchMoreInProgress: currentFetchMoreInProgressProviderId === model.providerId - property bool isSearchInProgress: false - - property bool isPooled: false - - property var fetchMoreTriggerClicked: function(){} - property var resultClicked: function(){} - - enabled: !isFetchMoreTrigger || !isSearchInProgress - hoverEnabled: enabled - - ToolTip { - visible: unifiedSearchResultMouseArea.containsMouse - text: isFetchMoreTrigger ? qsTr("Load more results") : model.resultTitle + "\n\n" + model.subline - delay: Qt.styleHints.mousePressAndHoldInterval - } - - Rectangle { - id: unifiedSearchResultHoverBackground - anchors.fill: parent - color: (parent.containsMouse ? Style.lightHover : "transparent") - } - - Loader { - active: !isFetchMoreTrigger - sourceComponent: UnifiedSearchResultItem { - width: unifiedSearchResultMouseArea.width - height: unifiedSearchResultMouseArea.height - title: model.resultTitle - subline: model.subline - icons: model.icons - iconPlaceholder: model.imagePlaceholder - isRounded: model.isRounded - textLeftMargin: unifiedSearchResultMouseArea.textLeftMargin - textRightMargin: unifiedSearchResultMouseArea.textRightMargin - iconWidth: unifiedSearchResultMouseArea.iconWidth - iconLeftMargin: unifiedSearchResultMouseArea.iconLeftMargin - titleFontSize: unifiedSearchResultMouseArea.titleFontSize - sublineFontSize: unifiedSearchResultMouseArea.sublineFontSize - titleColor: unifiedSearchResultMouseArea.titleColor - sublineColor: unifiedSearchResultMouseArea.sublineColor - } - } - - Loader { - active: isFetchMoreTrigger - sourceComponent: UnifiedSearchResultFetchMoreTrigger { - isFetchMoreInProgress: unifiedSearchResultMouseArea.isFetchMoreInProgress - width: unifiedSearchResultMouseArea.width - height: unifiedSearchResultMouseArea.height - isWihinViewPort: !unifiedSearchResultMouseArea.isPooled - fontSize: unifiedSearchResultMouseArea.titleFontSize - textColor: unifiedSearchResultMouseArea.sublineColor - } - } - - onClicked: { - if (isFetchMoreTrigger) { - unifiedSearchResultMouseArea.fetchMoreTriggerClicked(model.providerId) - } else { - unifiedSearchResultMouseArea.resultClicked(model.providerId, model.resourceUrlRole) - } - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultNothingFound.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultNothingFound.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultNothingFound.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultNothingFound.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 -import Style 1.0 - -ColumnLayout { - id: unifiedSearchResultNothingFoundContainer - - required property string text - - spacing: 8 - anchors.leftMargin: 10 - anchors.rightMargin: 10 - - Image { - id: unifiedSearchResultsNoResultsLabelIcon - source: "qrc:///client/theme/magnifying-glass.svg" - sourceSize.width: Style.trayWindowHeaderHeight / 2 - sourceSize.height: Style.trayWindowHeaderHeight / 2 - Layout.alignment: Qt.AlignHCenter - } - - Label { - id: unifiedSearchResultsNoResultsLabel - text: qsTr("No results for") - color: Style.menuBorder - font.pixelSize: Style.subLinePixelSize * 1.25 - wrapMode: Text.Wrap - Layout.fillWidth: true - Layout.preferredHeight: Style.trayWindowHeaderHeight / 2 - horizontalAlignment: Text.AlignHCenter - } - - Label { - id: unifiedSearchResultsNoResultsLabelDetails - text: unifiedSearchResultNothingFoundContainer.text - color: "black" - font.pixelSize: Style.topLinePixelSize * 1.25 - wrapMode: Text.Wrap - maximumLineCount: 2 - elide: Text.ElideRight - Layout.fillWidth: true - Layout.preferredHeight: Style.trayWindowHeaderHeight / 2 - horizontalAlignment: Text.AlignHCenter - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultSectionItem.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultSectionItem.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UnifiedSearchResultSectionItem.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UnifiedSearchResultSectionItem.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -import QtQml 2.15 -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Layouts 1.2 -import Style 1.0 - -Label { - required property string section - - topPadding: 8 - bottomPadding: 8 - leftPadding: 16 - - text: section - font.pixelSize: Style.topLinePixelSize - color: Style.ncBlue - - Accessible.role: Accessible.Separator - Accessible.name: qsTr("Search results section %1").arg(section) -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultslistmodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultslistmodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultslistmodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultslistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,709 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 "unifiedsearchresultslistmodel.h" - -#include "account.h" -#include "accountstate.h" -#include "guiutility.h" -#include "folderman.h" -#include "networkjobs.h" - -#include - -#include -#include - -namespace { -QString imagePlaceholderUrlForProviderId(const QString &providerId) -{ - if (providerId.contains(QStringLiteral("message"), Qt::CaseInsensitive) - || providerId.contains(QStringLiteral("talk"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/wizard-talk.svg"); - } else if (providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/edit.svg"); - } else if (providerId.contains(QStringLiteral("deck"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/deck.svg"); - } else if (providerId.contains(QStringLiteral("calendar"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/calendar.svg"); - } else if (providerId.contains(QStringLiteral("mail"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/email.svg"); - } else if (providerId.contains(QStringLiteral("comment"), Qt::CaseInsensitive)) { - return QStringLiteral("qrc:///client/theme/black/comment.svg"); - } - - return QStringLiteral("qrc:///client/theme/change.svg"); -} - -QString localIconPathFromIconPrefix(const QString &iconNameWithPrefix) -{ - if (iconNameWithPrefix.contains(QStringLiteral("message"), Qt::CaseInsensitive) - || iconNameWithPrefix.contains(QStringLiteral("talk"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/wizard-talk.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("folder"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/folder.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("deck"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/deck.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("contacts"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/wizard-groupware.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("calendar"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/calendar.svg"); - } else if (iconNameWithPrefix.contains(QStringLiteral("mail"), Qt::CaseInsensitive)) { - return QStringLiteral(":/client/theme/black/email.svg"); - } - - return QStringLiteral(":/client/theme/change.svg"); -} - -QString iconUrlForDefaultIconName(const QString &defaultIconName) -{ - const QUrl urlForIcon{defaultIconName}; - - if (urlForIcon.isValid() && !urlForIcon.scheme().isEmpty()) { - return defaultIconName; - } - - if (defaultIconName.startsWith(QStringLiteral("icon-"))) { - const auto parts = defaultIconName.split(QLatin1Char('-')); - - if (parts.size() > 1) { - const QString iconFilePath = QStringLiteral(":/client/theme/") + parts[1] + QStringLiteral(".svg"); - - if (QFile::exists(iconFilePath)) { - return iconFilePath; - } - - const QString blackIconFilePath = QStringLiteral(":/client/theme/black/") + parts[1] + QStringLiteral(".svg"); - - if (QFile::exists(blackIconFilePath)) { - return blackIconFilePath; - } - } - - const auto iconNameFromIconPrefix = localIconPathFromIconPrefix(defaultIconName); - - if (!iconNameFromIconPrefix.isEmpty()) { - return iconNameFromIconPrefix; - } - } - - return QStringLiteral(":/client/theme/change.svg"); -} - -QString generateUrlForThumbnail(const QString &thumbnailUrl, const QUrl &serverUrl) -{ - auto serverUrlCopy = serverUrl; - auto thumbnailUrlCopy = thumbnailUrl; - - if (thumbnailUrlCopy.startsWith(QLatin1Char('/')) || thumbnailUrlCopy.startsWith(QLatin1Char('\\'))) { - // relative image resource URL, just needs some concatenation with current server URL - // some icons may contain parameters after (?) - const QStringList thumbnailUrlCopySplitted = thumbnailUrlCopy.contains(QLatin1Char('?')) - ? thumbnailUrlCopy.split(QLatin1Char('?'), Qt::SkipEmptyParts) - : QStringList{thumbnailUrlCopy}; - Q_ASSERT(!thumbnailUrlCopySplitted.isEmpty()); - serverUrlCopy.setPath(thumbnailUrlCopySplitted[0]); - thumbnailUrlCopy = serverUrlCopy.toString(); - if (thumbnailUrlCopySplitted.size() > 1) { - thumbnailUrlCopy += QLatin1Char('?') + thumbnailUrlCopySplitted[1]; - } - } - - return thumbnailUrlCopy; -} - -QString generateUrlForIcon(const QString &fallackIcon, const QUrl &serverUrl) -{ - auto serverUrlCopy = serverUrl; - - auto fallackIconCopy = fallackIcon; - - if (fallackIconCopy.startsWith(QLatin1Char('/')) || fallackIconCopy.startsWith(QLatin1Char('\\'))) { - // relative image resource URL, just needs some concatenation with current server URL - // some icons may contain parameters after (?) - const QStringList fallackIconPathSplitted = - fallackIconCopy.contains(QLatin1Char('?')) ? fallackIconCopy.split(QLatin1Char('?')) : QStringList{fallackIconCopy}; - Q_ASSERT(!fallackIconPathSplitted.isEmpty()); - serverUrlCopy.setPath(fallackIconPathSplitted[0]); - fallackIconCopy = serverUrlCopy.toString(); - if (fallackIconPathSplitted.size() > 1) { - fallackIconCopy += QLatin1Char('?') + fallackIconPathSplitted[1]; - } - } else if (!fallackIconCopy.isEmpty()) { - // could be one of names for standard icons (e.g. icon-mail) - const auto defaultIconUrl = iconUrlForDefaultIconName(fallackIconCopy); - if (!defaultIconUrl.isEmpty()) { - fallackIconCopy = defaultIconUrl; - } - } - - return fallackIconCopy; -} - -QString iconsFromThumbnailAndFallbackIcon(const QString &thumbnailUrl, const QString &fallackIcon, const QUrl &serverUrl) -{ - if (thumbnailUrl.isEmpty() && fallackIcon.isEmpty()) { - return {}; - } - - if (serverUrl.isEmpty()) { - const QStringList listImages = {thumbnailUrl, fallackIcon}; - return listImages.join(QLatin1Char(';')); - } - - const auto urlForThumbnail = generateUrlForThumbnail(thumbnailUrl, serverUrl); - const auto urlForFallackIcon = generateUrlForIcon(fallackIcon, serverUrl); - - if (urlForThumbnail.isEmpty() && !urlForFallackIcon.isEmpty()) { - return urlForFallackIcon; - } - - if (!urlForThumbnail.isEmpty() && urlForFallackIcon.isEmpty()) { - return urlForThumbnail; - } - - const QStringList listImages{urlForThumbnail, urlForFallackIcon}; - return listImages.join(QLatin1Char(';')); -} - -constexpr int searchTermEditingFinishedSearchStartDelay = 800; - -// server-side bug of returning the cursor > 0 and isPaginated == 'true', using '5' as it is done on Android client's end now -constexpr int minimumEntresNumberToShowLoadMore = 5; -} -namespace OCC { -Q_LOGGING_CATEGORY(lcUnifiedSearch, "nextcloud.gui.unifiedsearch", QtInfoMsg) - -UnifiedSearchResultsListModel::UnifiedSearchResultsListModel(AccountState *accountState, QObject *parent) - : QAbstractListModel(parent) - , _accountState(accountState) -{ -} - -QVariant UnifiedSearchResultsListModel::data(const QModelIndex &index, int role) const -{ - Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid)); - - switch (role) { - case ProviderNameRole: - return _results.at(index.row())._providerName; - case ProviderIdRole: - return _results.at(index.row())._providerId; - case ImagePlaceholderRole: - return imagePlaceholderUrlForProviderId(_results.at(index.row())._providerId); - case IconsRole: - return _results.at(index.row())._icons; - case TitleRole: - return _results.at(index.row())._title; - case SublineRole: - return _results.at(index.row())._subline; - case ResourceUrlRole: - return _results.at(index.row())._resourceUrl; - case RoundedRole: - return _results.at(index.row())._isRounded; - case TypeRole: - return _results.at(index.row())._type; - case TypeAsStringRole: - return UnifiedSearchResult::typeAsString(_results.at(index.row())._type); - } - - return {}; -} - -int UnifiedSearchResultsListModel::rowCount(const QModelIndex &parent) const -{ - if (parent.isValid()) { - return 0; - } - - return _results.size(); -} - -QHash UnifiedSearchResultsListModel::roleNames() const -{ - auto roles = QAbstractListModel::roleNames(); - roles[ProviderNameRole] = "providerName"; - roles[ProviderIdRole] = "providerId"; - roles[IconsRole] = "icons"; - roles[ImagePlaceholderRole] = "imagePlaceholder"; - roles[TitleRole] = "resultTitle"; - roles[SublineRole] = "subline"; - roles[ResourceUrlRole] = "resourceUrlRole"; - roles[TypeRole] = "type"; - roles[TypeAsStringRole] = "typeAsString"; - roles[RoundedRole] = "isRounded"; - return roles; -} - -QString UnifiedSearchResultsListModel::searchTerm() const -{ - return _searchTerm; -} - -QString UnifiedSearchResultsListModel::errorString() const -{ - return _errorString; -} - -QString UnifiedSearchResultsListModel::currentFetchMoreInProgressProviderId() const -{ - return _currentFetchMoreInProgressProviderId; -} - -void UnifiedSearchResultsListModel::setSearchTerm(const QString &term) -{ - if (term == _searchTerm) { - return; - } - - _searchTerm = term; - emit searchTermChanged(); - - if (!_errorString.isEmpty()) { - _errorString.clear(); - emit errorStringChanged(); - } - - disconnectAndClearSearchJobs(); - - clearCurrentFetchMoreInProgressProviderId(); - - disconnect(&_unifiedSearchTextEditingFinishedTimer, &QTimer::timeout, this, - &UnifiedSearchResultsListModel::slotSearchTermEditingFinished); - - if (_unifiedSearchTextEditingFinishedTimer.isActive()) { - _unifiedSearchTextEditingFinishedTimer.stop(); - } - - if (!_searchTerm.isEmpty()) { - _unifiedSearchTextEditingFinishedTimer.setInterval(searchTermEditingFinishedSearchStartDelay); - connect(&_unifiedSearchTextEditingFinishedTimer, &QTimer::timeout, this, - &UnifiedSearchResultsListModel::slotSearchTermEditingFinished); - _unifiedSearchTextEditingFinishedTimer.start(); - } - - if (!_results.isEmpty()) { - beginResetModel(); - _results.clear(); - endResetModel(); - } -} - -bool UnifiedSearchResultsListModel::isSearchInProgress() const -{ - return !_searchJobConnections.isEmpty(); -} - -void UnifiedSearchResultsListModel::resultClicked(const QString &providerId, const QUrl &resourceUrl) const -{ - const QUrlQuery urlQuery{resourceUrl}; - const auto dir = urlQuery.queryItemValue(QStringLiteral("dir"), QUrl::ComponentFormattingOption::FullyDecoded); - const auto fileName = - urlQuery.queryItemValue(QStringLiteral("scrollto"), QUrl::ComponentFormattingOption::FullyDecoded); - - if (providerId.contains(QStringLiteral("file"), Qt::CaseInsensitive) && !dir.isEmpty() && !fileName.isEmpty()) { - if (!_accountState || !_accountState->account()) { - return; - } - - const QString relativePath = dir + QLatin1Char('/') + fileName; - const auto localFiles = - FolderMan::instance()->findFileInLocalFolders(QFileInfo(relativePath).path(), _accountState->account()); - - if (!localFiles.isEmpty()) { - qCInfo(lcUnifiedSearch) << "Opening file:" << localFiles.constFirst(); - QDesktopServices::openUrl(QUrl::fromLocalFile(localFiles.constFirst())); - return; - } - } - Utility::openBrowser(resourceUrl); -} - -void UnifiedSearchResultsListModel::fetchMoreTriggerClicked(const QString &providerId) -{ - if (isSearchInProgress() || !_currentFetchMoreInProgressProviderId.isEmpty()) { - return; - } - - const auto providerInfo = _providers.value(providerId, {}); - - if (!providerInfo._id.isEmpty() && providerInfo._id == providerId && providerInfo._isPaginated) { - // Load more items - _currentFetchMoreInProgressProviderId = providerId; - emit currentFetchMoreInProgressProviderIdChanged(); - startSearchForProvider(providerId, providerInfo._cursor); - } -} - -void UnifiedSearchResultsListModel::slotSearchTermEditingFinished() -{ - disconnect(&_unifiedSearchTextEditingFinishedTimer, &QTimer::timeout, this, - &UnifiedSearchResultsListModel::slotSearchTermEditingFinished); - - if (!_accountState || !_accountState->account()) { - qCCritical(lcUnifiedSearch) << QString("Account state is invalid. Could not start search!"); - return; - } - - if (_providers.isEmpty()) { - auto job = new JsonApiJob(_accountState->account(), QLatin1String("ocs/v2.php/search/providers")); - QObject::connect(job, &JsonApiJob::jsonReceived, this, &UnifiedSearchResultsListModel::slotFetchProvidersFinished); - job->start(); - } else { - startSearch(); - } -} - -void UnifiedSearchResultsListModel::slotFetchProvidersFinished(const QJsonDocument &json, int statusCode) -{ - const auto job = qobject_cast(sender()); - - if (!job) { - qCCritical(lcUnifiedSearch) << QString("Failed to fetch providers.").arg(_searchTerm); - _errorString += tr("Failed to fetch providers.") + QLatin1Char('\n'); - emit errorStringChanged(); - return; - } - - if (statusCode != 200) { - qCCritical(lcUnifiedSearch) << QString("%1: Failed to fetch search providers for '%2'. Error: %3") - .arg(statusCode) - .arg(_searchTerm) - .arg(job->errorString()); - _errorString += - tr("Failed to fetch search providers for '%1'. Error: %2").arg(_searchTerm).arg(job->errorString()) - + QLatin1Char('\n'); - emit errorStringChanged(); - return; - } - const auto providerList = - json.object().value(QStringLiteral("ocs")).toObject().value(QStringLiteral("data")).toVariant().toList(); - - for (const auto &provider : providerList) { - const auto providerMap = provider.toMap(); - const auto id = providerMap[QStringLiteral("id")].toString(); - const auto name = providerMap[QStringLiteral("name")].toString(); - if (!name.isEmpty() && id != QStringLiteral("talk-message-current")) { - UnifiedSearchProvider newProvider; - newProvider._name = name; - newProvider._id = id; - newProvider._order = providerMap[QStringLiteral("order")].toInt(); - _providers.insert(newProvider._id, newProvider); - } - } - - if (!_providers.empty()) { - startSearch(); - } -} - -void UnifiedSearchResultsListModel::slotSearchForProviderFinished(const QJsonDocument &json, int statusCode) -{ - Q_ASSERT(_accountState && _accountState->account()); - - const auto job = qobject_cast(sender()); - - if (!job) { - qCCritical(lcUnifiedSearch) << QString("Search has failed for '%2'.").arg(_searchTerm); - _errorString += tr("Search has failed for '%2'.").arg(_searchTerm) + QLatin1Char('\n'); - emit errorStringChanged(); - return; - } - - const auto providerId = job->property("providerId").toString(); - - if (providerId.isEmpty()) { - return; - } - - if (!_searchJobConnections.isEmpty()) { - _searchJobConnections.remove(providerId); - - if (_searchJobConnections.isEmpty()) { - emit isSearchInProgressChanged(); - } - } - - if (providerId == _currentFetchMoreInProgressProviderId) { - clearCurrentFetchMoreInProgressProviderId(); - } - - if (statusCode != 200) { - qCCritical(lcUnifiedSearch) << QString("%1: Search has failed for '%2'. Error: %3") - .arg(statusCode) - .arg(_searchTerm) - .arg(job->errorString()); - _errorString += - tr("Search has failed for '%1'. Error: %2").arg(_searchTerm).arg(job->errorString()) + QLatin1Char('\n'); - emit errorStringChanged(); - return; - } - - const auto data = json.object().value(QStringLiteral("ocs")).toObject().value(QStringLiteral("data")).toObject(); - if (!data.isEmpty()) { - parseResultsForProvider(data, providerId, job->property("appendResults").toBool()); - } -} - -void UnifiedSearchResultsListModel::startSearch() -{ - Q_ASSERT(_accountState && _accountState->account()); - - disconnectAndClearSearchJobs(); - - if (!_accountState || !_accountState->account()) { - return; - } - - if (!_results.isEmpty()) { - beginResetModel(); - _results.clear(); - endResetModel(); - } - - for (const auto &provider : _providers) { - startSearchForProvider(provider._id); - } -} - -void UnifiedSearchResultsListModel::startSearchForProvider(const QString &providerId, qint32 cursor) -{ - Q_ASSERT(_accountState && _accountState->account()); - - if (!_accountState || !_accountState->account()) { - return; - } - - auto job = new JsonApiJob(_accountState->account(), - QLatin1String("ocs/v2.php/search/providers/%1/search").arg(providerId)); - - QUrlQuery params; - params.addQueryItem(QStringLiteral("term"), _searchTerm); - if (cursor > 0) { - params.addQueryItem(QStringLiteral("cursor"), QString::number(cursor)); - job->setProperty("appendResults", true); - } - job->setProperty("providerId", providerId); - job->addQueryParams(params); - const auto wasSearchInProgress = isSearchInProgress(); - _searchJobConnections.insert(providerId, - QObject::connect( - job, &JsonApiJob::jsonReceived, this, &UnifiedSearchResultsListModel::slotSearchForProviderFinished)); - if (isSearchInProgress() && !wasSearchInProgress) { - emit isSearchInProgressChanged(); - } - job->start(); -} - -void UnifiedSearchResultsListModel::parseResultsForProvider(const QJsonObject &data, const QString &providerId, bool fetchedMore) -{ - const auto cursor = data.value(QStringLiteral("cursor")).toInt(); - const auto entries = data.value(QStringLiteral("entries")).toVariant().toList(); - - auto &provider = _providers[providerId]; - - if (provider._id.isEmpty() && fetchedMore) { - _providers.remove(providerId); - return; - } - - if (entries.isEmpty()) { - // we may have received false pagination information from the server, such as, we expect more - // results available via pagination, but, there are no more left, so, we need to stop paginating for - // this provider - provider._isPaginated = false; - - if (fetchedMore) { - removeFetchMoreTrigger(provider._id); - } - - return; - } - - provider._isPaginated = data.value(QStringLiteral("isPaginated")).toBool(); - provider._cursor = cursor; - - if (provider._pageSize == -1) { - provider._pageSize = cursor; - } - - if ((provider._pageSize != -1 && entries.size() < provider._pageSize) - || entries.size() < minimumEntresNumberToShowLoadMore) { - // for some providers we are still getting a non-null cursor and isPaginated true even thought - // there are no more results to paginate - provider._isPaginated = false; - } - - QVector newEntries; - - const auto makeResourceUrl = [](const QString &resourceUrl, const QUrl &accountUrl) { - QUrl finalResurceUrl(resourceUrl); - if (finalResurceUrl.scheme().isEmpty() && accountUrl.scheme().isEmpty()) { - finalResurceUrl = accountUrl; - finalResurceUrl.setPath(resourceUrl); - } - return finalResurceUrl; - }; - - for (const auto &entry : entries) { - const auto entryMap = entry.toMap(); - if (entryMap.isEmpty()) { - continue; - } - UnifiedSearchResult result; - result._providerId = provider._id; - result._order = provider._order; - result._providerName = provider._name; - result._isRounded = entryMap.value(QStringLiteral("rounded")).toBool(); - result._title = entryMap.value(QStringLiteral("title")).toString(); - result._subline = entryMap.value(QStringLiteral("subline")).toString(); - - const auto resourceUrl = entryMap.value(QStringLiteral("resourceUrl")).toString(); - const auto accountUrl = (_accountState && _accountState->account()) ? _accountState->account()->url() : QUrl(); - - result._resourceUrl = makeResourceUrl(resourceUrl, accountUrl); - result._icons = iconsFromThumbnailAndFallbackIcon(entryMap.value(QStringLiteral("thumbnailUrl")).toString(), - entryMap.value(QStringLiteral("icon")).toString(), accountUrl); - - newEntries.push_back(result); - } - - if (fetchedMore) { - appendResultsToProvider(newEntries, provider); - } else { - appendResults(newEntries, provider); - } -} - -void UnifiedSearchResultsListModel::appendResults(QVector results, const UnifiedSearchProvider &provider) -{ - if (provider._cursor > 0 && provider._isPaginated) { - UnifiedSearchResult fetchMoreTrigger; - fetchMoreTrigger._providerId = provider._id; - fetchMoreTrigger._providerName = provider._name; - fetchMoreTrigger._order = provider._order; - fetchMoreTrigger._type = UnifiedSearchResult::Type::FetchMoreTrigger; - results.push_back(fetchMoreTrigger); - } - - - if (_results.isEmpty()) { - beginInsertRows({}, 0, results.size() - 1); - _results = results; - endInsertRows(); - return; - } - - // insertion is done with sorting (first -> by order, then -> by name) - const auto itToInsertTo = std::find_if(std::begin(_results), std::end(_results), - [&provider](const UnifiedSearchResult ¤t) { - // insert before other results of higher order when possible - if (current._order > provider._order) { - return true; - } else { - if (current._order == provider._order) { - // insert before results of higher QString value when possible - return current._providerName > provider._name; - } - - return false; - } - }); - - const auto first = static_cast(std::distance(std::begin(_results), itToInsertTo)); - const auto last = first + results.size() - 1; - - beginInsertRows({}, first, last); - std::copy(std::begin(results), std::end(results), std::inserter(_results, itToInsertTo)); - endInsertRows(); -} - -void UnifiedSearchResultsListModel::appendResultsToProvider(const QVector &results, const UnifiedSearchProvider &provider) -{ - if (results.isEmpty()) { - return; - } - - const auto providerId = provider._id; - /* we need to find the last result that is not a fetch-more-trigger or category-separator for the current - provider */ - const auto itLastResultForProviderReverse = - std::find_if(std::rbegin(_results), std::rend(_results), [&providerId](const UnifiedSearchResult &result) { - return result._providerId == providerId && result._type == UnifiedSearchResult::Type::Default; - }); - - if (itLastResultForProviderReverse != std::rend(_results)) { - // #1 Insert rows - // convert reverse_iterator to iterator - const auto itLastResultForProvider = (itLastResultForProviderReverse + 1).base(); - const auto first = static_cast(std::distance(std::begin(_results), itLastResultForProvider + 1)); - const auto last = first + results.size() - 1; - beginInsertRows({}, first, last); - std::copy(std::begin(results), std::end(results), std::inserter(_results, itLastResultForProvider + 1)); - endInsertRows(); - - // #2 Remove the FetchMoreTrigger item if there are no more results to load for this provider - if (!provider._isPaginated) { - removeFetchMoreTrigger(providerId); - } - } -} - -void UnifiedSearchResultsListModel::removeFetchMoreTrigger(const QString &providerId) -{ - const auto itFetchMoreTriggerForProviderReverse = std::find_if( - std::rbegin(_results), - std::rend(_results), - [providerId](const UnifiedSearchResult &result) { - return result._providerId == providerId && result._type == UnifiedSearchResult::Type::FetchMoreTrigger; - }); - - if (itFetchMoreTriggerForProviderReverse != std::rend(_results)) { - // convert reverse_iterator to iterator - const auto itFetchMoreTriggerForProvider = (itFetchMoreTriggerForProviderReverse + 1).base(); - - if (itFetchMoreTriggerForProvider != std::end(_results) - && itFetchMoreTriggerForProvider != std::begin(_results)) { - const auto eraseIndex = static_cast(std::distance(std::begin(_results), itFetchMoreTriggerForProvider)); - Q_ASSERT(eraseIndex >= 0 && eraseIndex < static_cast(_results.size())); - beginRemoveRows({}, eraseIndex, eraseIndex); - _results.erase(itFetchMoreTriggerForProvider); - endRemoveRows(); - } - } -} - -void UnifiedSearchResultsListModel::disconnectAndClearSearchJobs() -{ - for (const auto &connection : _searchJobConnections) { - if (connection) { - QObject::disconnect(connection); - } - } - - if (!_searchJobConnections.isEmpty()) { - _searchJobConnections.clear(); - emit isSearchInProgressChanged(); - } -} - -void UnifiedSearchResultsListModel::clearCurrentFetchMoreInProgressProviderId() -{ - if (!_currentFetchMoreInProgressProviderId.isEmpty()) { - _currentFetchMoreInProgressProviderId.clear(); - emit currentFetchMoreInProgressProviderIdChanged(); - } -} - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultslistmodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultslistmodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/unifiedsearchresultslistmodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/unifiedsearchresultslistmodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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. - */ - -#pragma once - -#include "unifiedsearchresult.h" - -#include - -#include - -namespace OCC { -class AccountState; - -/** - * @brief The UnifiedSearchResultsListModel - * @ingroup gui - * Simple list model to provide the list view with data for the Unified Search results. - */ - -class UnifiedSearchResultsListModel : public QAbstractListModel -{ - Q_OBJECT - - Q_PROPERTY(bool isSearchInProgress READ isSearchInProgress NOTIFY isSearchInProgressChanged) - Q_PROPERTY(QString currentFetchMoreInProgressProviderId READ currentFetchMoreInProgressProviderId NOTIFY - currentFetchMoreInProgressProviderIdChanged) - Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged) - Q_PROPERTY(QString searchTerm READ searchTerm WRITE setSearchTerm NOTIFY searchTermChanged) - - struct UnifiedSearchProvider - { - QString _id; - QString _name; - qint32 _cursor = -1; // current pagination value - qint32 _pageSize = -1; // how many max items per step of pagination - bool _isPaginated = false; - qint32 _order = std::numeric_limits::max(); // sorting order (smaller number has bigger priority) - }; - -public: - enum DataRole { - ProviderNameRole = Qt::UserRole + 1, - ProviderIdRole, - ImagePlaceholderRole, - IconsRole, - TitleRole, - SublineRole, - ResourceUrlRole, - RoundedRole, - TypeRole, - TypeAsStringRole, - }; - - explicit UnifiedSearchResultsListModel(AccountState *accountState, QObject *parent = nullptr); - - QVariant data(const QModelIndex &index, int role) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - bool isSearchInProgress() const; - - QString currentFetchMoreInProgressProviderId() const; - QString searchTerm() const; - QString errorString() const; - - Q_INVOKABLE void resultClicked(const QString &providerId, const QUrl &resourceUrl) const; - Q_INVOKABLE void fetchMoreTriggerClicked(const QString &providerId); - - QHash roleNames() const override; - -private: - void startSearch(); - void startSearchForProvider(const QString &providerId, qint32 cursor = -1); - - void parseResultsForProvider(const QJsonObject &data, const QString &providerId, bool fetchedMore = false); - - // append initial search results to the list - void appendResults(QVector results, const UnifiedSearchProvider &provider); - - // append pagination results to existing results from the initial search - void appendResultsToProvider(const QVector &results, const UnifiedSearchProvider &provider); - - void removeFetchMoreTrigger(const QString &providerId); - - void disconnectAndClearSearchJobs(); - - void clearCurrentFetchMoreInProgressProviderId(); - -signals: - void currentFetchMoreInProgressProviderIdChanged(); - void isSearchInProgressChanged(); - void errorStringChanged(); - void searchTermChanged(); - -public slots: - void setSearchTerm(const QString &term); - -private slots: - void slotSearchTermEditingFinished(); - void slotFetchProvidersFinished(const QJsonDocument &json, int statusCode); - void slotSearchForProviderFinished(const QJsonDocument &json, int statusCode); - -private: - QMap _providers; - QVector _results; - - QString _searchTerm; - QString _errorString; - - QString _currentFetchMoreInProgressProviderId; - - QMap _searchJobConnections; - - QTimer _unifiedSearchTextEditingFinishedTimer; - - AccountState *_accountState = nullptr; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserLine.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserLine.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserLine.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserLine.qml 2022-01-03 12:25:12.000000000 +0000 @@ -14,12 +14,6 @@ Accessible.role: Accessible.MenuItem Accessible.name: qsTr("Account entry") - property variant dialog; - property variant comp; - activeFocusOnTab: false - - signal showUserStatusSelectorDialog(int id) - RowLayout { id: userLineLayout spacing: 0 @@ -36,19 +30,29 @@ Accessible.role: Accessible.Button Accessible.name: qsTr("Switch to account") + " " + name - onClicked: if (!isCurrentUser) { - UserModel.switchCurrentUser(id) - } else { - accountMenu.close() + MouseArea { + anchors.fill: parent + hoverEnabled: true + onContainsMouseChanged: { + accountStatusIndicatorBackground.color = (containsMouse ? "#f6f6f6" : "white") + } + onClicked: { + if (!isCurrentUser) { + UserModel.switchCurrentUser(id) + } else { + accountMenu.close() + } + } } + background: Item { height: parent.height width: userLine.menu ? userLine.menu.width : 0 Rectangle { anchors.fill: parent anchors.margins: 1 - color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent" + color: parent.parent.hovered ? Style.lightHover : "transparent" } } @@ -72,7 +76,7 @@ height: width anchors.bottom: accountAvatar.bottom anchors.right: accountAvatar.right - color: accountButton.hovered || accountButton.visualFocus ? "#f6f6f6" : "white" + color: "white" radius: width*0.5 } Image { @@ -154,16 +158,21 @@ Accessible.name: qsTr("Account actions") Accessible.onPressAction: userMoreButtonMouseArea.clicked() - onClicked: { - if (userMoreButtonMenu.visible) { - userMoreButtonMenu.close() - } else { - userMoreButtonMenu.popup() + MouseArea { + id: userMoreButtonMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: { + if (userMoreButtonMenu.visible) { + userMoreButtonMenu.close() + } else { + userMoreButtonMenu.popup() + } } } background: Rectangle { - color: userMoreButton.hovered || userMoreButton.visualFocus ? "grey" : "transparent" + color: userMoreButtonMouseArea.containsMouse ? "grey" : "transparent" opacity: 0.2 height: userMoreButton.height - 2 y: userMoreButton.y + 1 @@ -180,28 +189,6 @@ } MenuItem { - visible: model.isConnected && model.serverHasUserStatus - height: visible ? implicitHeight : 0 - text: qsTr("Set status") - font.pixelSize: Style.topLinePixelSize - hoverEnabled: true - onClicked: { - showUserStatusSelectorDialog(index) - accountMenu.close() - } - - background: Item { - height: parent.height - width: parent.menu.width - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.parent.hovered ? Style.lightHover : "transparent" - } - } - } - - MenuItem { text: model.isConnected ? qsTr("Log out") : qsTr("Log in") font.pixelSize: Style.topLinePixelSize hoverEnabled: true diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/usermodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/usermodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/usermodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/usermodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1157 +0,0 @@ -#include "notificationhandler.h" -#include "usermodel.h" - -#include "accountmanager.h" -#include "owncloudgui.h" -#include -#include "userstatusselectormodel.h" -#include "syncengine.h" -#include "ocsjob.h" -#include "configfile.h" -#include "notificationconfirmjob.h" -#include "logger.h" -#include "guiutility.h" -#include "syncfileitem.h" -#include "tray/activitylistmodel.h" -#include "tray/notificationcache.h" -#include "tray/unifiedsearchresultslistmodel.h" -#include "userstatusconnector.h" - -#include -#include -#include -#include -#include -#include - -// time span in milliseconds which has to be between two -// refreshes of the notifications -#define NOTIFICATION_REQUEST_FREE_PERIOD 15000 - -namespace { -constexpr qint64 expiredActivitiesCheckIntervalMsecs = 1000 * 60; -constexpr qint64 activityDefaultExpirationTimeMsecs = 1000 * 60 * 10; -} - -namespace OCC { - -User::User(AccountStatePtr &account, const bool &isCurrent, QObject *parent) - : QObject(parent) - , _account(account) - , _isCurrentUser(isCurrent) - , _activityModel(new ActivityListModel(_account.data(), this)) - , _unifiedSearchResultsModel(new UnifiedSearchResultsListModel(_account.data(), this)) - , _notificationRequestsRunning(0) -{ - connect(ProgressDispatcher::instance(), &ProgressDispatcher::progressInfo, - this, &User::slotProgressInfo); - connect(ProgressDispatcher::instance(), &ProgressDispatcher::itemCompleted, - this, &User::slotItemCompleted); - connect(ProgressDispatcher::instance(), &ProgressDispatcher::syncError, - this, &User::slotAddError); - connect(ProgressDispatcher::instance(), &ProgressDispatcher::addErrorToGui, - this, &User::slotAddErrorToGui); - - connect(&_notificationCheckTimer, &QTimer::timeout, - this, &User::slotRefresh); - - connect(&_expiredActivitiesCheckTimer, &QTimer::timeout, - this, &User::slotCheckExpiredActivities); - - connect(_account.data(), &AccountState::stateChanged, - [=]() { if (isConnected()) {slotRefreshImmediately();} }); - connect(_account.data(), &AccountState::stateChanged, this, &User::accountStateChanged); - connect(_account.data(), &AccountState::hasFetchedNavigationApps, - this, &User::slotRebuildNavigationAppList); - connect(_account->account().data(), &Account::accountChangedDisplayName, this, &User::nameChanged); - - connect(FolderMan::instance(), &FolderMan::folderListChanged, this, &User::hasLocalFolderChanged); - - connect(this, &User::guiLog, Logger::instance(), &Logger::guiLog); - - connect(_account->account().data(), &Account::accountChangedAvatar, this, &User::avatarChanged); - connect(_account->account().data(), &Account::userStatusChanged, this, &User::statusChanged); - connect(_account.data(), &AccountState::desktopNotificationsAllowedChanged, this, &User::desktopNotificationsAllowedChanged); - - connect(_activityModel, &ActivityListModel::sendNotificationRequest, this, &User::slotSendNotificationRequest); -} - -void User::showDesktopNotification(const QString &title, const QString &message) -{ - ConfigFile cfg; - if (!cfg.optionalServerNotifications() || !isDesktopNotificationsAllowed()) { - return; - } - - // after one hour, clear the gui log notification store - constexpr qint64 clearGuiLogInterval = 60 * 60 * 1000; - if (_guiLogTimer.elapsed() > clearGuiLogInterval) { - _notificationCache.clear(); - } - - const NotificationCache::Notification notification { title, message }; - if (_notificationCache.contains(notification)) { - return; - } - - _notificationCache.insert(notification); - emit guiLog(notification.title, notification.message); - // restart the gui log timer now that we show a new notification - _guiLogTimer.start(); -} - -void User::slotBuildNotificationDisplay(const ActivityList &list) -{ - _activityModel->clearNotifications(); - - foreach (auto activity, list) { - if (_blacklistedNotifications.contains(activity)) { - qCInfo(lcActivity) << "Activity in blacklist, skip"; - continue; - } - const auto message = AccountManager::instance()->accounts().count() == 1 ? "" : activity._accName; - showDesktopNotification(activity._subject, message); - _activityModel->addNotificationToActivityList(activity); - } -} - -void User::setNotificationRefreshInterval(std::chrono::milliseconds interval) -{ - if (!checkPushNotificationsAreReady()) { - qCDebug(lcActivity) << "Starting Notification refresh timer with " << interval.count() / 1000 << " sec interval"; - _notificationCheckTimer.start(interval.count()); - } -} - -void User::slotPushNotificationsReady() -{ - qCInfo(lcActivity) << "Push notifications are ready"; - - if (_notificationCheckTimer.isActive()) { - // as we are now able to use push notifications - let's stop the polling timer - _notificationCheckTimer.stop(); - } - - connectPushNotifications(); -} - -void User::slotDisconnectPushNotifications() -{ - disconnect(_account->account()->pushNotifications(), &PushNotifications::notificationsChanged, this, &User::slotReceivedPushNotification); - disconnect(_account->account()->pushNotifications(), &PushNotifications::activitiesChanged, this, &User::slotReceivedPushActivity); - - disconnect(_account->account().data(), &Account::pushNotificationsDisabled, this, &User::slotDisconnectPushNotifications); - - // connection to WebSocket may have dropped or an error occured, so we need to bring back the polling until we have re-established the connection - setNotificationRefreshInterval(ConfigFile().notificationRefreshInterval()); -} - -void User::slotReceivedPushNotification(Account *account) -{ - if (account->id() == _account->account()->id()) { - slotRefreshNotifications(); - } -} - -void User::slotReceivedPushActivity(Account *account) -{ - if (account->id() == _account->account()->id()) { - slotRefreshActivities(); - } -} - -void User::slotCheckExpiredActivities() -{ - for (const Activity &activity : _activityModel->errorsList()) { - if (activity._expireAtMsecs > 0 && QDateTime::currentDateTime().toMSecsSinceEpoch() >= activity._expireAtMsecs) { - _activityModel->removeActivityFromActivityList(activity); - } - } - - if (_activityModel->errorsList().size() == 0) { - _expiredActivitiesCheckTimer.stop(); - } -} - -void User::connectPushNotifications() const -{ - connect(_account->account().data(), &Account::pushNotificationsDisabled, this, &User::slotDisconnectPushNotifications, Qt::UniqueConnection); - - connect(_account->account()->pushNotifications(), &PushNotifications::notificationsChanged, this, &User::slotReceivedPushNotification, Qt::UniqueConnection); - connect(_account->account()->pushNotifications(), &PushNotifications::activitiesChanged, this, &User::slotReceivedPushActivity, Qt::UniqueConnection); -} - -bool User::checkPushNotificationsAreReady() const -{ - const auto pushNotifications = _account->account()->pushNotifications(); - - const auto pushActivitiesAvailable = _account->account()->capabilities().availablePushNotifications() & PushNotificationType::Activities; - const auto pushNotificationsAvailable = _account->account()->capabilities().availablePushNotifications() & PushNotificationType::Notifications; - - const auto pushActivitiesAndNotificationsAvailable = pushActivitiesAvailable && pushNotificationsAvailable; - - if (pushActivitiesAndNotificationsAvailable && pushNotifications && pushNotifications->isReady()) { - connectPushNotifications(); - return true; - } else { - connect(_account->account().data(), &Account::pushNotificationsReady, this, &User::slotPushNotificationsReady, Qt::UniqueConnection); - return false; - } -} - -void User::slotRefreshImmediately() { - if (_account.data() && _account.data()->isConnected()) { - slotRefreshActivities(); - } - slotRefreshNotifications(); -} - -void User::slotRefresh() -{ - slotRefreshUserStatus(); - - if (checkPushNotificationsAreReady()) { - // we are relying on WebSocket push notifications - ignore refresh attempts from UI - _timeSinceLastCheck[_account.data()].invalidate(); - return; - } - - // QElapsedTimer isn't actually constructed as invalid. - if (!_timeSinceLastCheck.contains(_account.data())) { - _timeSinceLastCheck[_account.data()].invalidate(); - } - QElapsedTimer &timer = _timeSinceLastCheck[_account.data()]; - - // Fetch Activities only if visible and if last check is longer than 15 secs ago - if (timer.isValid() && timer.elapsed() < NOTIFICATION_REQUEST_FREE_PERIOD) { - qCDebug(lcActivity) << "Do not check as last check is only secs ago: " << timer.elapsed() / 1000; - return; - } - if (_account.data() && _account.data()->isConnected()) { - if (!timer.isValid()) { - slotRefreshActivities(); - } - slotRefreshNotifications(); - timer.start(); - } -} - -void User::slotRefreshActivities() -{ - _activityModel->slotRefreshActivity(); -} - -void User::slotRefreshUserStatus() -{ - if (_account.data() && _account.data()->isConnected()) { - _account->account()->userStatusConnector()->fetchUserStatus(); - } -} - -void User::slotRefreshNotifications() -{ - // start a server notification handler if no notification requests - // are running - if (_notificationRequestsRunning == 0) { - auto *snh = new ServerNotificationHandler(_account.data()); - connect(snh, &ServerNotificationHandler::newNotificationList, - this, &User::slotBuildNotificationDisplay); - - snh->slotFetchNotifications(); - } else { - qCWarning(lcActivity) << "Notification request counter not zero."; - } -} - -void User::slotRebuildNavigationAppList() -{ - emit serverHasTalkChanged(); - // Rebuild App list - UserAppsModel::instance()->buildAppList(); -} - -void User::slotNotificationRequestFinished(int statusCode) -{ - int row = sender()->property("activityRow").toInt(); - - // the ocs API returns stat code 100 or 200 inside the xml if it succeeded. - if (statusCode != OCS_SUCCESS_STATUS_CODE && statusCode != OCS_SUCCESS_STATUS_CODE_V2) { - qCWarning(lcActivity) << "Notification Request to Server failed, leave notification visible."; - } else { - // to do use the model to rebuild the list or remove the item - qCWarning(lcActivity) << "Notification Request to Server successed, rebuilding list."; - _activityModel->removeActivityFromActivityList(row); - } -} - -void User::slotEndNotificationRequest(int replyCode) -{ - _notificationRequestsRunning--; - slotNotificationRequestFinished(replyCode); -} - -void User::slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row) -{ - qCInfo(lcActivity) << "Server Notification Request " << verb << link << "on account" << accountName; - - const QStringList validVerbs = QStringList() << "GET" - << "PUT" - << "POST" - << "DELETE"; - - if (validVerbs.contains(verb)) { - AccountStatePtr acc = AccountManager::instance()->account(accountName); - if (acc) { - auto *job = new NotificationConfirmJob(acc->account()); - QUrl l(link); - job->setLinkAndVerb(l, verb); - job->setProperty("activityRow", QVariant::fromValue(row)); - connect(job, &AbstractNetworkJob::networkError, - this, &User::slotNotifyNetworkError); - connect(job, &NotificationConfirmJob::jobFinished, - this, &User::slotNotifyServerFinished); - job->start(); - - // count the number of running notification requests. If this member var - // is larger than zero, no new fetching of notifications is started - _notificationRequestsRunning++; - } - } else { - qCWarning(lcActivity) << "Notification Links: Invalid verb:" << verb; - } -} - -void User::slotNotifyNetworkError(QNetworkReply *reply) -{ - auto *job = qobject_cast(sender()); - if (!job) { - return; - } - - int resultCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - - slotEndNotificationRequest(resultCode); - qCWarning(lcActivity) << "Server notify job failed with code " << resultCode; -} - -void User::slotNotifyServerFinished(const QString &reply, int replyCode) -{ - auto *job = qobject_cast(sender()); - if (!job) { - return; - } - - slotEndNotificationRequest(replyCode); - qCInfo(lcActivity) << "Server Notification reply code" << replyCode << reply; -} - -void User::slotProgressInfo(const QString &folder, const ProgressInfo &progress) -{ - if (progress.status() == ProgressInfo::Reconcile) { - // Wipe all non-persistent entries - as well as the persistent ones - // in cases where a local discovery was done. - auto f = FolderMan::instance()->folder(folder); - if (!f) - return; - const auto &engine = f->syncEngine(); - const auto style = engine.lastLocalDiscoveryStyle(); - foreach (Activity activity, _activityModel->errorsList()) { - if (activity._expireAtMsecs != -1) { - // we process expired activities in a different slot - continue; - } - if (activity._folder != folder) { - continue; - } - - if (style == LocalDiscoveryStyle::FilesystemOnly) { - _activityModel->removeActivityFromActivityList(activity); - continue; - } - - if (activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()) { - _activityModel->removeActivityFromActivityList(activity); - continue; - } - - if (activity._status == SyncFileItem::FileLocked && !QFileInfo(f->path() + activity._file).exists()) { - _activityModel->removeActivityFromActivityList(activity); - continue; - } - - - if (activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()) { - _activityModel->removeActivityFromActivityList(activity); - continue; - } - - - if (!QFileInfo(f->path() + activity._file).exists()) { - _activityModel->removeActivityFromActivityList(activity); - continue; - } - - auto path = QFileInfo(activity._file).dir().path().toUtf8(); - if (path == ".") - path.clear(); - - if (engine.shouldDiscoverLocally(path)) - _activityModel->removeActivityFromActivityList(activity); - } - } - - if (progress.status() == ProgressInfo::Done) { - // We keep track very well of pending conflicts. - // Inform other components about them. - QStringList conflicts; - foreach (Activity activity, _activityModel->errorsList()) { - if (activity._folder == folder - && activity._status == SyncFileItem::Conflict) { - conflicts.append(activity._file); - } - } - - emit ProgressDispatcher::instance()->folderConflicts(folder, conflicts); - } -} - -void User::slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category) -{ - auto folderInstance = FolderMan::instance()->folder(folderAlias); - if (!folderInstance) - return; - - if (folderInstance->accountState() == _account.data()) { - qCWarning(lcActivity) << "Item " << folderInstance->shortGuiLocalPath() << " retrieved resulted in " << message; - - Activity activity; - activity._type = Activity::SyncResultType; - activity._status = SyncResult::Error; - activity._dateTime = QDateTime::fromString(QDateTime::currentDateTime().toString(), Qt::ISODate); - activity._subject = message; - activity._message = folderInstance->shortGuiLocalPath(); - activity._link = folderInstance->shortGuiLocalPath(); - activity._accName = folderInstance->accountState()->account()->displayName(); - activity._folder = folderAlias; - - - if (category == ErrorCategory::InsufficientRemoteStorage) { - ActivityLink link; - link._label = tr("Retry all uploads"); - link._link = folderInstance->path(); - link._verb = ""; - link._primary = true; - activity._links.append(link); - } - - // add 'other errors' to activity list - _activityModel->addErrorToActivityList(activity); - } -} - -void User::slotAddErrorToGui(const QString &folderAlias, SyncFileItem::Status status, const QString &errorMessage, const QString &subject) -{ - const auto folderInstance = FolderMan::instance()->folder(folderAlias); - if (!folderInstance) { - return; - } - - if (folderInstance->accountState() == _account.data()) { - qCWarning(lcActivity) << "Item " << folderInstance->shortGuiLocalPath() << " retrieved resulted in " << errorMessage; - - Activity activity; - activity._type = Activity::SyncFileItemType; - activity._status = status; - const auto currentDateTime = QDateTime::currentDateTime(); - activity._dateTime = QDateTime::fromString(currentDateTime.toString(), Qt::ISODate); - activity._expireAtMsecs = currentDateTime.addMSecs(activityDefaultExpirationTimeMsecs).toMSecsSinceEpoch(); - activity._subject = !subject.isEmpty() ? subject : folderInstance->shortGuiLocalPath(); - activity._message = errorMessage; - activity._link = folderInstance->shortGuiLocalPath(); - activity._accName = folderInstance->accountState()->account()->displayName(); - activity._folder = folderAlias; - - // add 'other errors' to activity list - _activityModel->addErrorToActivityList(activity); - - showDesktopNotification(activity._subject, activity._message); - - if (!_expiredActivitiesCheckTimer.isActive()) { - _expiredActivitiesCheckTimer.start(expiredActivitiesCheckIntervalMsecs); - } - } -} - -bool User::isActivityOfCurrentAccount(const Folder *folder) const -{ - return folder->accountState() == _account.data(); -} - -bool User::isUnsolvableConflict(const SyncFileItemPtr &item) const -{ - // We just care about conflict issues that we are able to resolve - return item->_status == SyncFileItem::Conflict && !Utility::isConflictFile(item->_file); -} - -void User::processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr &item) -{ - Activity activity; - activity._type = Activity::SyncFileItemType; //client activity - activity._status = item->_status; - activity._dateTime = QDateTime::currentDateTime(); - activity._message = item->_originalFile; - activity._link = folder->accountState()->account()->url(); - activity._accName = folder->accountState()->account()->displayName(); - activity._file = item->_file; - activity._folder = folder->alias(); - activity._fileAction = ""; - - if (item->_instruction == CSYNC_INSTRUCTION_REMOVE) { - activity._fileAction = "file_deleted"; - } else if (item->_instruction == CSYNC_INSTRUCTION_NEW) { - activity._fileAction = "file_created"; - } else if (item->_instruction == CSYNC_INSTRUCTION_RENAME) { - activity._fileAction = "file_renamed"; - } else { - activity._fileAction = "file_changed"; - } - - if (item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success) { - qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully."; - - if (item->_direction != SyncFileItem::Up) { - activity._message = tr("Synced %1").arg(item->_originalFile); - } else if (activity._fileAction == "file_renamed") { - activity._message = tr("You renamed %1").arg(item->_originalFile); - } else if (activity._fileAction == "file_deleted") { - activity._message = tr("You deleted %1").arg(item->_originalFile); - } else if (activity._fileAction == "file_created") { - activity._message = tr("You created %1").arg(item->_originalFile); - } else { - activity._message = tr("You changed %1").arg(item->_originalFile); - } - - _activityModel->addSyncFileItemToActivityList(activity); - } else { - qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString; - activity._subject = item->_errorString; - - if (item->_status == SyncFileItem::Status::FileIgnored) { - _activityModel->addIgnoredFileToList(activity); - } else { - // add 'protocol error' to activity list - if (item->_status == SyncFileItem::Status::FileNameInvalid) { - showDesktopNotification(item->_file, activity._subject); - } - _activityModel->addErrorToActivityList(activity); - } - } -} - -void User::slotItemCompleted(const QString &folder, const SyncFileItemPtr &item) -{ - auto folderInstance = FolderMan::instance()->folder(folder); - - if (!folderInstance || !isActivityOfCurrentAccount(folderInstance) || isUnsolvableConflict(item)) { - return; - } - - qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in " << item->_errorString; - processCompletedSyncItem(folderInstance, item); -} - -AccountPtr User::account() const -{ - return _account->account(); -} - -AccountStatePtr User::accountState() const -{ - return _account; -} - -void User::setCurrentUser(const bool &isCurrent) -{ - _isCurrentUser = isCurrent; -} - -Folder *User::getFolder() const -{ - foreach (Folder *folder, FolderMan::instance()->map()) { - if (folder->accountState() == _account.data()) { - return folder; - } - } - - return nullptr; -} - -ActivityListModel *User::getActivityModel() -{ - return _activityModel; -} - -UnifiedSearchResultsListModel *User::getUnifiedSearchResultsListModel() const -{ - return _unifiedSearchResultsModel; -} - -void User::openLocalFolder() -{ - const auto folder = getFolder(); - - if (folder) { - QDesktopServices::openUrl(QUrl::fromLocalFile(folder->path())); - } -} - -void User::login() const -{ - _account->account()->resetRejectedCertificates(); - _account->signIn(); -} - -void User::logout() const -{ - _account->signOutByUi(); -} - -QString User::name() const -{ - // If davDisplayName is empty (can be several reasons, simplest is missing login at startup), fall back to username - QString name = _account->account()->davDisplayName(); - if (name == "") { - name = _account->account()->credentials()->user(); - } - return name; -} - -QString User::server(bool shortened) const -{ - QString serverUrl = _account->account()->url().toString(); - if (shortened) { - serverUrl.replace(QLatin1String("https://"), QLatin1String("")); - serverUrl.replace(QLatin1String("http://"), QLatin1String("")); - } - return serverUrl; -} - -UserStatus::OnlineStatus User::status() const -{ - return _account->account()->userStatusConnector()->userStatus().state(); -} - -QString User::statusMessage() const -{ - return _account->account()->userStatusConnector()->userStatus().message(); -} - -QUrl User::statusIcon() const -{ - return _account->account()->userStatusConnector()->userStatus().stateIcon(); -} - -QString User::statusEmoji() const -{ - return _account->account()->userStatusConnector()->userStatus().icon(); -} - -bool User::serverHasUserStatus() const -{ - return _account->account()->capabilities().userStatus(); -} - -QImage User::avatar() const -{ - return AvatarJob::makeCircularAvatar(_account->account()->avatar()); -} - -QString User::avatarUrl() const -{ - if (avatar().isNull()) { - return QString(); - } - - return QStringLiteral("image://avatars/") + _account->account()->id(); -} - -bool User::hasLocalFolder() const -{ - return getFolder() != nullptr; -} - -bool User::serverHasTalk() const -{ - return talkApp() != nullptr; -} - -AccountApp *User::talkApp() const -{ - return _account->findApp(QStringLiteral("spreed")); -} - -bool User::hasActivities() const -{ - return _account->account()->capabilities().hasActivities(); -} - -AccountAppList User::appList() const -{ - return _account->appList(); -} - -bool User::isCurrentUser() const -{ - return _isCurrentUser; -} - -bool User::isConnected() const -{ - return (_account->connectionStatus() == AccountState::ConnectionStatus::Connected); -} - - -bool User::isDesktopNotificationsAllowed() const -{ - return _account.data()->isDesktopNotificationsAllowed(); -} - -void User::removeAccount() const -{ - AccountManager::instance()->deleteAccount(_account.data()); - AccountManager::instance()->save(); -} - -/*-------------------------------------------------------------------------------------*/ - -UserModel *UserModel::_instance = nullptr; - -UserModel *UserModel::instance() -{ - if (!_instance) { - _instance = new UserModel(); - } - return _instance; -} - -UserModel::UserModel(QObject *parent) - : QAbstractListModel(parent) -{ - // TODO: Remember selected user from last quit via settings file - if (AccountManager::instance()->accounts().size() > 0) { - buildUserList(); - } - - connect(AccountManager::instance(), &AccountManager::accountAdded, - this, &UserModel::buildUserList); -} - -void UserModel::buildUserList() -{ - for (int i = 0; i < AccountManager::instance()->accounts().size(); i++) { - auto user = AccountManager::instance()->accounts().at(i); - addUser(user); - } - if (_init) { - _users.first()->setCurrentUser(true); - _init = false; - } -} - -Q_INVOKABLE int UserModel::numUsers() -{ - return _users.size(); -} - -Q_INVOKABLE int UserModel::currentUserId() const -{ - return _currentUserId; -} - -Q_INVOKABLE bool UserModel::isUserConnected(const int &id) -{ - if (id < 0 || id >= _users.size()) - return false; - - return _users[id]->isConnected(); -} - -QImage UserModel::avatarById(const int &id) -{ - if (id < 0 || id >= _users.size()) - return {}; - - return _users[id]->avatar(); -} - -Q_INVOKABLE QString UserModel::currentUserServer() -{ - if (_currentUserId < 0 || _currentUserId >= _users.size()) - return {}; - - return _users[_currentUserId]->server(); -} - -void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent) -{ - bool containsUser = false; - for (const auto &u : qAsConst(_users)) { - if (u->account() == user->account()) { - containsUser = true; - continue; - } - } - - if (!containsUser) { - int row = rowCount(); - beginInsertRows(QModelIndex(), row, row); - - User *u = new User(user, isCurrent); - - connect(u, &User::avatarChanged, this, [this, row] { - emit dataChanged(index(row, 0), index(row, 0), {UserModel::AvatarRole}); - }); - - connect(u, &User::statusChanged, this, [this, row] { - emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusIconRole, - UserModel::StatusEmojiRole, - UserModel::StatusMessageRole}); - }); - - connect(u, &User::desktopNotificationsAllowedChanged, this, [this, row] { - emit dataChanged(index(row, 0), index(row, 0), { UserModel::DesktopNotificationsAllowedRole }); - }); - - connect(u, &User::accountStateChanged, this, [this, row] { - emit dataChanged(index(row, 0), index(row, 0), { UserModel::IsConnectedRole }); - }); - - _users << u; - if (isCurrent) { - _currentUserId = _users.indexOf(_users.last()); - } - - endInsertRows(); - ConfigFile cfg; - _users.last()->setNotificationRefreshInterval(cfg.notificationRefreshInterval()); - emit newUserSelected(); - } -} - -int UserModel::currentUserIndex() -{ - return _currentUserId; -} - -Q_INVOKABLE void UserModel::openCurrentAccountLocalFolder() -{ - if (_currentUserId < 0 || _currentUserId >= _users.size()) - return; - - _users[_currentUserId]->openLocalFolder(); -} - -Q_INVOKABLE void UserModel::openCurrentAccountTalk() -{ - if (!currentUser()) - return; - - const auto talkApp = currentUser()->talkApp(); - if (talkApp) { - Utility::openBrowser(talkApp->url()); - } else { - qCWarning(lcActivity) << "The Talk app is not enabled on" << currentUser()->server(); - } -} - -Q_INVOKABLE void UserModel::openCurrentAccountServer() -{ - if (_currentUserId < 0 || _currentUserId >= _users.size()) - return; - - QString url = _users[_currentUserId]->server(false); - if (!url.startsWith("http://") && !url.startsWith("https://")) { - url = "https://" + _users[_currentUserId]->server(false); - } - - QDesktopServices::openUrl(url); -} - -Q_INVOKABLE void UserModel::switchCurrentUser(const int &id) -{ - if (_currentUserId < 0 || _currentUserId >= _users.size()) - return; - - _users[_currentUserId]->setCurrentUser(false); - _users[id]->setCurrentUser(true); - _currentUserId = id; - emit newUserSelected(); -} - -Q_INVOKABLE void UserModel::login(const int &id) -{ - if (id < 0 || id >= _users.size()) - return; - - _users[id]->login(); -} - -Q_INVOKABLE void UserModel::logout(const int &id) -{ - if (id < 0 || id >= _users.size()) - return; - - _users[id]->logout(); -} - -Q_INVOKABLE void UserModel::removeAccount(const int &id) -{ - if (id < 0 || id >= _users.size()) - return; - - QMessageBox messageBox(QMessageBox::Question, - tr("Confirm Account Removal"), - tr("

Do you really want to remove the connection to the account %1?

" - "

Note: This will not delete any files.

") - .arg(_users[id]->name()), - QMessageBox::NoButton); - QPushButton *yesButton = - messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); - messageBox.addButton(tr("Cancel"), QMessageBox::NoRole); - - messageBox.exec(); - if (messageBox.clickedButton() != yesButton) { - return; - } - - if (_users[id]->isCurrentUser() && _users.count() > 1) { - id == 0 ? switchCurrentUser(1) : switchCurrentUser(0); - } - - _users[id]->logout(); - _users[id]->removeAccount(); - - beginRemoveRows(QModelIndex(), id, id); - _users.removeAt(id); - endRemoveRows(); -} - -std::shared_ptr UserModel::userStatusConnector(int id) -{ - if (id < 0 || id >= _users.size()) { - return nullptr; - } - - return _users[id]->account()->userStatusConnector(); -} - -int UserModel::rowCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return _users.count(); -} - -QVariant UserModel::data(const QModelIndex &index, int role) const -{ - if (index.row() < 0 || index.row() >= _users.count()) { - return QVariant(); - } - - if (role == NameRole) { - return _users[index.row()]->name(); - } else if (role == ServerRole) { - return _users[index.row()]->server(); - } else if (role == ServerHasUserStatusRole) { - return _users[index.row()]->serverHasUserStatus(); - } else if (role == StatusIconRole) { - return _users[index.row()]->statusIcon(); - } else if (role == StatusEmojiRole) { - return _users[index.row()]->statusEmoji(); - } else if (role == StatusMessageRole) { - return _users[index.row()]->statusMessage(); - } else if (role == DesktopNotificationsAllowedRole) { - return _users[index.row()]->isDesktopNotificationsAllowed(); - } else if (role == AvatarRole) { - return _users[index.row()]->avatarUrl(); - } else if (role == IsCurrentUserRole) { - return _users[index.row()]->isCurrentUser(); - } else if (role == IsConnectedRole) { - return _users[index.row()]->isConnected(); - } else if (role == IdRole) { - return index.row(); - } - return QVariant(); -} - -QHash UserModel::roleNames() const -{ - QHash roles; - roles[NameRole] = "name"; - roles[ServerRole] = "server"; - roles[ServerHasUserStatusRole] = "serverHasUserStatus"; - roles[StatusIconRole] = "statusIcon"; - roles[StatusEmojiRole] = "statusEmoji"; - roles[StatusMessageRole] = "statusMessage"; - roles[DesktopNotificationsAllowedRole] = "desktopNotificationsAllowed"; - roles[AvatarRole] = "avatar"; - roles[IsCurrentUserRole] = "isCurrentUser"; - roles[IsConnectedRole] = "isConnected"; - roles[IdRole] = "id"; - return roles; -} - -ActivityListModel *UserModel::currentActivityModel() -{ - if (currentUserIndex() < 0 || currentUserIndex() >= _users.size()) - return nullptr; - - return _users[currentUserIndex()]->getActivityModel(); -} - -void UserModel::fetchCurrentActivityModel() -{ - if (currentUserId() < 0 || currentUserId() >= _users.size()) - return; - - _users[currentUserId()]->slotRefresh(); -} - -AccountAppList UserModel::appList() const -{ - if (_currentUserId < 0 || _currentUserId >= _users.size()) - return {}; - - return _users[_currentUserId]->appList(); -} - -User *UserModel::currentUser() const -{ - if (currentUserId() < 0 || currentUserId() >= _users.size()) - return nullptr; - - return _users[currentUserId()]; -} - -int UserModel::findUserIdForAccount(AccountState *account) const -{ - const auto it = std::find_if(std::cbegin(_users), std::cend(_users), [=](const User *user) { - return user->account()->id() == account->account()->id(); - }); - - if (it == std::cend(_users)) { - return -1; - } - - const auto id = std::distance(std::cbegin(_users), it); - return id; -} - -/*-------------------------------------------------------------------------------------*/ - -ImageProvider::ImageProvider() - : QQuickImageProvider(QQuickImageProvider::Image) -{ -} - -QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) -{ - Q_UNUSED(size) - Q_UNUSED(requestedSize) - - const auto makeIcon = [](const QString &path) { - QImage image(128, 128, QImage::Format_ARGB32); - image.fill(Qt::GlobalColor::transparent); - QPainter painter(&image); - QSvgRenderer renderer(path); - renderer.render(&painter); - return image; - }; - - if (id == QLatin1String("fallbackWhite")) { - return makeIcon(QStringLiteral(":/client/theme/white/user.svg")); - } - - if (id == QLatin1String("fallbackBlack")) { - return makeIcon(QStringLiteral(":/client/theme/black/user.svg")); - } - - const int uid = id.toInt(); - return UserModel::instance()->avatarById(uid); -} - -/*-------------------------------------------------------------------------------------*/ - -UserAppsModel *UserAppsModel::_instance = nullptr; - -UserAppsModel *UserAppsModel::instance() -{ - if (!_instance) { - _instance = new UserAppsModel(); - } - return _instance; -} - -UserAppsModel::UserAppsModel(QObject *parent) - : QAbstractListModel(parent) -{ -} - -void UserAppsModel::buildAppList() -{ - if (rowCount() > 0) { - beginRemoveRows(QModelIndex(), 0, rowCount() - 1); - _apps.clear(); - endRemoveRows(); - } - - if (UserModel::instance()->appList().count() > 0) { - const auto talkApp = UserModel::instance()->currentUser()->talkApp(); - foreach (AccountApp *app, UserModel::instance()->appList()) { - // Filter out Talk because we have a dedicated button for it - if (talkApp && app->id() == talkApp->id()) - continue; - - beginInsertRows(QModelIndex(), rowCount(), rowCount()); - _apps << app; - endInsertRows(); - } - } -} - -void UserAppsModel::openAppUrl(const QUrl &url) -{ - Utility::openBrowser(url); -} - -int UserAppsModel::rowCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return _apps.count(); -} - -QVariant UserAppsModel::data(const QModelIndex &index, int role) const -{ - if (index.row() < 0 || index.row() >= _apps.count()) { - return QVariant(); - } - - if (role == NameRole) { - return _apps[index.row()]->name(); - } else if (role == UrlRole) { - return _apps[index.row()]->url(); - } else if (role == IconUrlRole) { - return _apps[index.row()]->iconUrl().toString(); - } - return QVariant(); -} - -QHash UserAppsModel::roleNames() const -{ - QHash roles; - roles[NameRole] = "appName"; - roles[UrlRole] = "appUrl"; - roles[IconUrlRole] = "appIconUrl"; - return roles; -} - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserModel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserModel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserModel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserModel.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,1133 @@ +#include "NotificationHandler.h" +#include "UserModel.h" + +#include "accountmanager.h" +#include "owncloudgui.h" +#include +#include "syncengine.h" +#include "ocsjob.h" +#include "configfile.h" +#include "notificationconfirmjob.h" +#include "logger.h" +#include "guiutility.h" +#include "syncfileitem.h" +#include "tray/NotificationCache.h" + +#include +#include +#include +#include +#include +#include + +// time span in milliseconds which has to be between two +// refreshes of the notifications +#define NOTIFICATION_REQUEST_FREE_PERIOD 15000 + +namespace { + constexpr qint64 expiredActivitiesCheckIntervalMsecs = 1000 * 60; + constexpr qint64 activityDefaultExpirationTimeMsecs = 1000 * 60 * 10; +} + +namespace OCC { + +User::User(AccountStatePtr &account, const bool &isCurrent, QObject *parent) + : QObject(parent) + , _account(account) + , _isCurrentUser(isCurrent) + , _activityModel(new ActivityListModel(_account.data())) + , _notificationRequestsRunning(0) +{ + connect(ProgressDispatcher::instance(), &ProgressDispatcher::progressInfo, + this, &User::slotProgressInfo); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::itemCompleted, + this, &User::slotItemCompleted); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::syncError, + this, &User::slotAddError); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::addErrorToGui, + this, &User::slotAddErrorToGui); + + connect(&_notificationCheckTimer, &QTimer::timeout, + this, &User::slotRefresh); + + connect(&_expiredActivitiesCheckTimer, &QTimer::timeout, + this, &User::slotCheckExpiredActivities); + + connect(_account.data(), &AccountState::stateChanged, + [=]() { if (isConnected()) {slotRefreshImmediately();} }); + connect(_account.data(), &AccountState::stateChanged, this, &User::accountStateChanged); + connect(_account.data(), &AccountState::hasFetchedNavigationApps, + this, &User::slotRebuildNavigationAppList); + connect(_account->account().data(), &Account::accountChangedDisplayName, this, &User::nameChanged); + + connect(FolderMan::instance(), &FolderMan::folderListChanged, this, &User::hasLocalFolderChanged); + + connect(this, &User::guiLog, Logger::instance(), &Logger::guiLog); + + connect(_account->account().data(), &Account::accountChangedAvatar, this, &User::avatarChanged); + connect(_account.data(), &AccountState::statusChanged, this, &User::statusChanged); + connect(_account.data(), &AccountState::desktopNotificationsAllowedChanged, this, &User::desktopNotificationsAllowedChanged); + + connect(_activityModel, &ActivityListModel::sendNotificationRequest, this, &User::slotSendNotificationRequest); +} + +void User::showDesktopNotification(const QString &title, const QString &message) +{ + ConfigFile cfg; + if (!cfg.optionalServerNotifications() || !isDesktopNotificationsAllowed()) { + return; + } + + // after one hour, clear the gui log notification store + constexpr quint64 clearGuiLogInterval = 60 * 60 * 1000; + if (_guiLogTimer.elapsed() > clearGuiLogInterval) { + _notificationCache.clear(); + } + + const NotificationCache::Notification notification { title, message }; + if (_notificationCache.contains(notification)) { + return; + } + + _notificationCache.insert(notification); + emit guiLog(notification.title, notification.message); + // restart the gui log timer now that we show a new notification + _guiLogTimer.start(); +} + +void User::slotBuildNotificationDisplay(const ActivityList &list) +{ + _activityModel->clearNotifications(); + + foreach (auto activity, list) { + if (_blacklistedNotifications.contains(activity)) { + qCInfo(lcActivity) << "Activity in blacklist, skip"; + continue; + } + const auto message = AccountManager::instance()->accounts().count() == 1 ? "" : activity._accName; + showDesktopNotification(activity._subject, message); + _activityModel->addNotificationToActivityList(activity); + } +} + +void User::setNotificationRefreshInterval(std::chrono::milliseconds interval) +{ + if (!checkPushNotificationsAreReady()) { + qCDebug(lcActivity) << "Starting Notification refresh timer with " << interval.count() / 1000 << " sec interval"; + _notificationCheckTimer.start(interval.count()); + } +} + +void User::slotPushNotificationsReady() +{ + qCInfo(lcActivity) << "Push notifications are ready"; + + if (_notificationCheckTimer.isActive()) { + // as we are now able to use push notifications - let's stop the polling timer + _notificationCheckTimer.stop(); + } + + connectPushNotifications(); +} + +void User::slotDisconnectPushNotifications() +{ + disconnect(_account->account()->pushNotifications(), &PushNotifications::notificationsChanged, this, &User::slotReceivedPushNotification); + disconnect(_account->account()->pushNotifications(), &PushNotifications::activitiesChanged, this, &User::slotReceivedPushActivity); + + disconnect(_account->account().data(), &Account::pushNotificationsDisabled, this, &User::slotDisconnectPushNotifications); + + // connection to WebSocket may have dropped or an error occured, so we need to bring back the polling until we have re-established the connection + setNotificationRefreshInterval(ConfigFile().notificationRefreshInterval()); +} + +void User::slotReceivedPushNotification(Account *account) +{ + if (account->id() == _account->account()->id()) { + slotRefreshNotifications(); + } +} + +void User::slotReceivedPushActivity(Account *account) +{ + if (account->id() == _account->account()->id()) { + slotRefreshActivities(); + } +} + +void User::slotCheckExpiredActivities() +{ + for (const Activity &activity : _activityModel->errorsList()) { + if (activity._expireAtMsecs > 0 && QDateTime::currentDateTime().toMSecsSinceEpoch() >= activity._expireAtMsecs) { + _activityModel->removeActivityFromActivityList(activity); + } + } + + if (_activityModel->errorsList().size() == 0) { + _expiredActivitiesCheckTimer.stop(); + } +} + +void User::connectPushNotifications() const +{ + connect(_account->account().data(), &Account::pushNotificationsDisabled, this, &User::slotDisconnectPushNotifications, Qt::UniqueConnection); + + connect(_account->account()->pushNotifications(), &PushNotifications::notificationsChanged, this, &User::slotReceivedPushNotification, Qt::UniqueConnection); + connect(_account->account()->pushNotifications(), &PushNotifications::activitiesChanged, this, &User::slotReceivedPushActivity, Qt::UniqueConnection); +} + +bool User::checkPushNotificationsAreReady() const +{ + const auto pushNotifications = _account->account()->pushNotifications(); + + const auto pushActivitiesAvailable = _account->account()->capabilities().availablePushNotifications() & PushNotificationType::Activities; + const auto pushNotificationsAvailable = _account->account()->capabilities().availablePushNotifications() & PushNotificationType::Notifications; + + const auto pushActivitiesAndNotificationsAvailable = pushActivitiesAvailable && pushNotificationsAvailable; + + if (pushActivitiesAndNotificationsAvailable && pushNotifications && pushNotifications->isReady()) { + connectPushNotifications(); + return true; + } else { + connect(_account->account().data(), &Account::pushNotificationsReady, this, &User::slotPushNotificationsReady, Qt::UniqueConnection); + return false; + } +} + +void User::slotRefreshImmediately() { + if (_account.data() && _account.data()->isConnected()) { + slotRefreshActivities(); + } + slotRefreshNotifications(); +} + +void User::slotRefresh() +{ + slotRefreshUserStatus(); + + if (checkPushNotificationsAreReady()) { + // we are relying on WebSocket push notifications - ignore refresh attempts from UI + _timeSinceLastCheck[_account.data()].invalidate(); + return; + } + + // QElapsedTimer isn't actually constructed as invalid. + if (!_timeSinceLastCheck.contains(_account.data())) { + _timeSinceLastCheck[_account.data()].invalidate(); + } + QElapsedTimer &timer = _timeSinceLastCheck[_account.data()]; + + // Fetch Activities only if visible and if last check is longer than 15 secs ago + if (timer.isValid() && timer.elapsed() < NOTIFICATION_REQUEST_FREE_PERIOD) { + qCDebug(lcActivity) << "Do not check as last check is only secs ago: " << timer.elapsed() / 1000; + return; + } + if (_account.data() && _account.data()->isConnected()) { + if (!timer.isValid()) { + slotRefreshActivities(); + } + slotRefreshNotifications(); + timer.start(); + } +} + +void User::slotRefreshActivities() +{ + _activityModel->slotRefreshActivity(); +} + +void User::slotRefreshUserStatus() +{ + if (_account.data() && _account.data()->isConnected()) { + _account.data()->fetchUserStatus(); + } +} + +void User::slotRefreshNotifications() +{ + // start a server notification handler if no notification requests + // are running + if (_notificationRequestsRunning == 0) { + auto *snh = new ServerNotificationHandler(_account.data()); + connect(snh, &ServerNotificationHandler::newNotificationList, + this, &User::slotBuildNotificationDisplay); + + snh->slotFetchNotifications(); + } else { + qCWarning(lcActivity) << "Notification request counter not zero."; + } +} + +void User::slotRebuildNavigationAppList() +{ + emit serverHasTalkChanged(); + // Rebuild App list + UserAppsModel::instance()->buildAppList(); +} + +void User::slotNotificationRequestFinished(int statusCode) +{ + int row = sender()->property("activityRow").toInt(); + + // the ocs API returns stat code 100 or 200 inside the xml if it succeeded. + if (statusCode != OCS_SUCCESS_STATUS_CODE && statusCode != OCS_SUCCESS_STATUS_CODE_V2) { + qCWarning(lcActivity) << "Notification Request to Server failed, leave notification visible."; + } else { + // to do use the model to rebuild the list or remove the item + qCWarning(lcActivity) << "Notification Request to Server successed, rebuilding list."; + _activityModel->removeActivityFromActivityList(row); + } +} + +void User::slotEndNotificationRequest(int replyCode) +{ + _notificationRequestsRunning--; + slotNotificationRequestFinished(replyCode); +} + +void User::slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row) +{ + qCInfo(lcActivity) << "Server Notification Request " << verb << link << "on account" << accountName; + + const QStringList validVerbs = QStringList() << "GET" + << "PUT" + << "POST" + << "DELETE"; + + if (validVerbs.contains(verb)) { + AccountStatePtr acc = AccountManager::instance()->account(accountName); + if (acc) { + auto *job = new NotificationConfirmJob(acc->account()); + QUrl l(link); + job->setLinkAndVerb(l, verb); + job->setProperty("activityRow", QVariant::fromValue(row)); + connect(job, &AbstractNetworkJob::networkError, + this, &User::slotNotifyNetworkError); + connect(job, &NotificationConfirmJob::jobFinished, + this, &User::slotNotifyServerFinished); + job->start(); + + // count the number of running notification requests. If this member var + // is larger than zero, no new fetching of notifications is started + _notificationRequestsRunning++; + } + } else { + qCWarning(lcActivity) << "Notification Links: Invalid verb:" << verb; + } +} + +void User::slotNotifyNetworkError(QNetworkReply *reply) +{ + auto *job = qobject_cast(sender()); + if (!job) { + return; + } + + int resultCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + slotEndNotificationRequest(resultCode); + qCWarning(lcActivity) << "Server notify job failed with code " << resultCode; +} + +void User::slotNotifyServerFinished(const QString &reply, int replyCode) +{ + auto *job = qobject_cast(sender()); + if (!job) { + return; + } + + slotEndNotificationRequest(replyCode); + qCInfo(lcActivity) << "Server Notification reply code" << replyCode << reply; +} + +void User::slotProgressInfo(const QString &folder, const ProgressInfo &progress) +{ + if (progress.status() == ProgressInfo::Reconcile) { + // Wipe all non-persistent entries - as well as the persistent ones + // in cases where a local discovery was done. + auto f = FolderMan::instance()->folder(folder); + if (!f) + return; + const auto &engine = f->syncEngine(); + const auto style = engine.lastLocalDiscoveryStyle(); + foreach (Activity activity, _activityModel->errorsList()) { + if (activity._expireAtMsecs != -1) { + // we process expired activities in a different slot + continue; + } + if (activity._folder != folder) { + continue; + } + + if (style == LocalDiscoveryStyle::FilesystemOnly) { + _activityModel->removeActivityFromActivityList(activity); + continue; + } + + if (activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()) { + _activityModel->removeActivityFromActivityList(activity); + continue; + } + + if (activity._status == SyncFileItem::FileLocked && !QFileInfo(f->path() + activity._file).exists()) { + _activityModel->removeActivityFromActivityList(activity); + continue; + } + + + if (activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()) { + _activityModel->removeActivityFromActivityList(activity); + continue; + } + + + if (!QFileInfo(f->path() + activity._file).exists()) { + _activityModel->removeActivityFromActivityList(activity); + continue; + } + + auto path = QFileInfo(activity._file).dir().path().toUtf8(); + if (path == ".") + path.clear(); + + if (engine.shouldDiscoverLocally(path)) + _activityModel->removeActivityFromActivityList(activity); + } + } + + if (progress.status() == ProgressInfo::Done) { + // We keep track very well of pending conflicts. + // Inform other components about them. + QStringList conflicts; + foreach (Activity activity, _activityModel->errorsList()) { + if (activity._folder == folder + && activity._status == SyncFileItem::Conflict) { + conflicts.append(activity._file); + } + } + + emit ProgressDispatcher::instance()->folderConflicts(folder, conflicts); + } +} + +void User::slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category) +{ + auto folderInstance = FolderMan::instance()->folder(folderAlias); + if (!folderInstance) + return; + + if (folderInstance->accountState() == _account.data()) { + qCWarning(lcActivity) << "Item " << folderInstance->shortGuiLocalPath() << " retrieved resulted in " << message; + + Activity activity; + activity._type = Activity::SyncResultType; + activity._status = SyncResult::Error; + activity._dateTime = QDateTime::fromString(QDateTime::currentDateTime().toString(), Qt::ISODate); + activity._subject = message; + activity._message = folderInstance->shortGuiLocalPath(); + activity._link = folderInstance->shortGuiLocalPath(); + activity._accName = folderInstance->accountState()->account()->displayName(); + activity._folder = folderAlias; + + + if (category == ErrorCategory::InsufficientRemoteStorage) { + ActivityLink link; + link._label = tr("Retry all uploads"); + link._link = folderInstance->path(); + link._verb = ""; + link._primary = true; + activity._links.append(link); + } + + // add 'other errors' to activity list + _activityModel->addErrorToActivityList(activity); + } +} + +void User::slotAddErrorToGui(const QString &folderAlias, SyncFileItem::Status status, const QString &errorMessage, const QString &subject) +{ + const auto folderInstance = FolderMan::instance()->folder(folderAlias); + if (!folderInstance) { + return; + } + + if (folderInstance->accountState() == _account.data()) { + qCWarning(lcActivity) << "Item " << folderInstance->shortGuiLocalPath() << " retrieved resulted in " << errorMessage; + + Activity activity; + activity._type = Activity::SyncFileItemType; + activity._status = status; + const auto currentDateTime = QDateTime::currentDateTime(); + activity._dateTime = QDateTime::fromString(currentDateTime.toString(), Qt::ISODate); + activity._expireAtMsecs = currentDateTime.addMSecs(activityDefaultExpirationTimeMsecs).toMSecsSinceEpoch(); + activity._subject = !subject.isEmpty() ? subject : folderInstance->shortGuiLocalPath(); + activity._message = errorMessage; + activity._link = folderInstance->shortGuiLocalPath(); + activity._accName = folderInstance->accountState()->account()->displayName(); + activity._folder = folderAlias; + + // add 'other errors' to activity list + _activityModel->addErrorToActivityList(activity); + + showDesktopNotification(activity._subject, activity._message); + + if (!_expiredActivitiesCheckTimer.isActive()) { + _expiredActivitiesCheckTimer.start(expiredActivitiesCheckIntervalMsecs); + } + } +} + +bool User::isActivityOfCurrentAccount(const Folder *folder) const +{ + return folder->accountState() == _account.data(); +} + +bool User::isUnsolvableConflict(const SyncFileItemPtr &item) const +{ + // We just care about conflict issues that we are able to resolve + return item->_status == SyncFileItem::Conflict && !Utility::isConflictFile(item->_file); +} + +void User::processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr &item) +{ + Activity activity; + activity._type = Activity::SyncFileItemType; //client activity + activity._status = item->_status; + activity._dateTime = QDateTime::currentDateTime(); + activity._message = item->_originalFile; + activity._link = folder->accountState()->account()->url(); + activity._accName = folder->accountState()->account()->displayName(); + activity._file = item->_file; + activity._folder = folder->alias(); + activity._fileAction = ""; + + if (item->_instruction == CSYNC_INSTRUCTION_REMOVE) { + activity._fileAction = "file_deleted"; + } else if (item->_instruction == CSYNC_INSTRUCTION_NEW) { + activity._fileAction = "file_created"; + } else if (item->_instruction == CSYNC_INSTRUCTION_RENAME) { + activity._fileAction = "file_renamed"; + } else { + activity._fileAction = "file_changed"; + } + + if (item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success) { + qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully."; + + if (item->_direction != SyncFileItem::Up) { + activity._message = tr("Synced %1").arg(item->_originalFile); + } else if (activity._fileAction == "file_renamed") { + activity._message = tr("You renamed %1").arg(item->_originalFile); + } else if (activity._fileAction == "file_deleted") { + activity._message = tr("You deleted %1").arg(item->_originalFile); + } else if (activity._fileAction == "file_created") { + activity._message = tr("You created %1").arg(item->_originalFile); + } else { + activity._message = tr("You changed %1").arg(item->_originalFile); + } + + _activityModel->addSyncFileItemToActivityList(activity); + } else { + qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString; + activity._subject = item->_errorString; + + if (item->_status == SyncFileItem::Status::FileIgnored) { + _activityModel->addIgnoredFileToList(activity); + } else { + // add 'protocol error' to activity list + if (item->_status == SyncFileItem::Status::FileNameInvalid) { + showDesktopNotification(item->_file, activity._subject); + } + _activityModel->addErrorToActivityList(activity); + } + } +} + +void User::slotItemCompleted(const QString &folder, const SyncFileItemPtr &item) +{ + auto folderInstance = FolderMan::instance()->folder(folder); + + if (!folderInstance || !isActivityOfCurrentAccount(folderInstance) || isUnsolvableConflict(item)) { + return; + } + + qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in " << item->_errorString; + processCompletedSyncItem(folderInstance, item); +} + +AccountPtr User::account() const +{ + return _account->account(); +} + +void User::setCurrentUser(const bool &isCurrent) +{ + _isCurrentUser = isCurrent; +} + +Folder *User::getFolder() const +{ + foreach (Folder *folder, FolderMan::instance()->map()) { + if (folder->accountState() == _account.data()) { + return folder; + } + } + + return nullptr; +} + +ActivityListModel *User::getActivityModel() +{ + return _activityModel; +} + +void User::openLocalFolder() +{ + const auto folder = getFolder(); + + if (folder) { + QDesktopServices::openUrl(QUrl::fromLocalFile(folder->path())); + } +} + +void User::login() const +{ + _account->account()->resetRejectedCertificates(); + _account->signIn(); +} + +void User::logout() const +{ + _account->signOutByUi(); +} + +QString User::name() const +{ + // If davDisplayName is empty (can be several reasons, simplest is missing login at startup), fall back to username + QString name = _account->account()->davDisplayName(); + if (name == "") { + name = _account->account()->credentials()->user(); + } + return name; +} + +QString User::server(bool shortened) const +{ + QString serverUrl = _account->account()->url().toString(); + if (shortened) { + serverUrl.replace(QLatin1String("https://"), QLatin1String("")); + serverUrl.replace(QLatin1String("http://"), QLatin1String("")); + } + return serverUrl; +} + +UserStatus::Status User::status() const +{ + return _account->status(); +} + +QString User::statusMessage() const +{ + return _account->statusMessage(); +} + +QUrl User::statusIcon() const +{ + return _account->statusIcon(); +} + +QString User::statusEmoji() const +{ + return _account->statusEmoji(); +} + +bool User::serverHasUserStatus() const +{ + return _account->account()->capabilities().userStatus(); +} + +QImage User::avatar() const +{ + return AvatarJob::makeCircularAvatar(_account->account()->avatar()); +} + +QString User::avatarUrl() const +{ + if (avatar().isNull()) { + return QString(); + } + + return QStringLiteral("image://avatars/") + _account->account()->id(); +} + +bool User::hasLocalFolder() const +{ + return getFolder() != nullptr; +} + +bool User::serverHasTalk() const +{ + return talkApp() != nullptr; +} + +AccountApp *User::talkApp() const +{ + return _account->findApp(QStringLiteral("spreed")); +} + +bool User::hasActivities() const +{ + return _account->account()->capabilities().hasActivities(); +} + +AccountAppList User::appList() const +{ + return _account->appList(); +} + +bool User::isCurrentUser() const +{ + return _isCurrentUser; +} + +bool User::isConnected() const +{ + return (_account->connectionStatus() == AccountState::ConnectionStatus::Connected); +} + + +bool User::isDesktopNotificationsAllowed() const +{ + return _account.data()->isDesktopNotificationsAllowed(); +} + +void User::removeAccount() const +{ + AccountManager::instance()->deleteAccount(_account.data()); + AccountManager::instance()->save(); +} + +/*-------------------------------------------------------------------------------------*/ + +UserModel *UserModel::_instance = nullptr; + +UserModel *UserModel::instance() +{ + if (!_instance) { + _instance = new UserModel(); + } + return _instance; +} + +UserModel::UserModel(QObject *parent) + : QAbstractListModel(parent) +{ + // TODO: Remember selected user from last quit via settings file + if (AccountManager::instance()->accounts().size() > 0) { + buildUserList(); + } + + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &UserModel::buildUserList); +} + +void UserModel::buildUserList() +{ + for (int i = 0; i < AccountManager::instance()->accounts().size(); i++) { + auto user = AccountManager::instance()->accounts().at(i); + addUser(user); + } + if (_init) { + _users.first()->setCurrentUser(true); + _init = false; + } +} + +Q_INVOKABLE int UserModel::numUsers() +{ + return _users.size(); +} + +Q_INVOKABLE int UserModel::currentUserId() const +{ + return _currentUserId; +} + +Q_INVOKABLE bool UserModel::isUserConnected(const int &id) +{ + if (id < 0 || id >= _users.size()) + return false; + + return _users[id]->isConnected(); +} + +QImage UserModel::avatarById(const int &id) +{ + if (id < 0 || id >= _users.size()) + return {}; + + return _users[id]->avatar(); +} + +Q_INVOKABLE QString UserModel::currentUserServer() +{ + if (_currentUserId < 0 || _currentUserId >= _users.size()) + return {}; + + return _users[_currentUserId]->server(); +} + +void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent) +{ + bool containsUser = false; + for (const auto &u : qAsConst(_users)) { + if (u->account() == user->account()) { + containsUser = true; + continue; + } + } + + if (!containsUser) { + int row = rowCount(); + beginInsertRows(QModelIndex(), row, row); + + User *u = new User(user, isCurrent); + + connect(u, &User::avatarChanged, this, [this, row] { + emit dataChanged(index(row, 0), index(row, 0), {UserModel::AvatarRole}); + }); + + connect(u, &User::statusChanged, this, [this, row] { + emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusIconRole, + UserModel::StatusEmojiRole, + UserModel::StatusMessageRole}); + }); + + connect(u, &User::desktopNotificationsAllowedChanged, this, [this, row] { + emit dataChanged(index(row, 0), index(row, 0), { UserModel::DesktopNotificationsAllowedRole }); + }); + + connect(u, &User::accountStateChanged, this, [this, row] { + emit dataChanged(index(row, 0), index(row, 0), { UserModel::IsConnectedRole }); + }); + + _users << u; + if (isCurrent) { + _currentUserId = _users.indexOf(_users.last()); + } + + endInsertRows(); + ConfigFile cfg; + _users.last()->setNotificationRefreshInterval(cfg.notificationRefreshInterval()); + emit newUserSelected(); + } +} + +int UserModel::currentUserIndex() +{ + return _currentUserId; +} + +Q_INVOKABLE void UserModel::openCurrentAccountLocalFolder() +{ + if (_currentUserId < 0 || _currentUserId >= _users.size()) + return; + + _users[_currentUserId]->openLocalFolder(); +} + +Q_INVOKABLE void UserModel::openCurrentAccountTalk() +{ + if (!currentUser()) + return; + + const auto talkApp = currentUser()->talkApp(); + if (talkApp) { + Utility::openBrowser(talkApp->url()); + } else { + qCWarning(lcActivity) << "The Talk app is not enabled on" << currentUser()->server(); + } +} + +Q_INVOKABLE void UserModel::openCurrentAccountServer() +{ + if (_currentUserId < 0 || _currentUserId >= _users.size()) + return; + + QString url = _users[_currentUserId]->server(false); + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "https://" + _users[_currentUserId]->server(false); + } + + QDesktopServices::openUrl(url); +} + +Q_INVOKABLE void UserModel::switchCurrentUser(const int &id) +{ + if (_currentUserId < 0 || _currentUserId >= _users.size()) + return; + + _users[_currentUserId]->setCurrentUser(false); + _users[id]->setCurrentUser(true); + _currentUserId = id; + emit newUserSelected(); +} + +Q_INVOKABLE void UserModel::login(const int &id) +{ + if (id < 0 || id >= _users.size()) + return; + + _users[id]->login(); +} + +Q_INVOKABLE void UserModel::logout(const int &id) +{ + if (id < 0 || id >= _users.size()) + return; + + _users[id]->logout(); +} + +Q_INVOKABLE void UserModel::removeAccount(const int &id) +{ + if (id < 0 || id >= _users.size()) + return; + + QMessageBox messageBox(QMessageBox::Question, + tr("Confirm Account Removal"), + tr("

Do you really want to remove the connection to the account %1?

" + "

Note: This will not delete any files.

") + .arg(_users[id]->name()), + QMessageBox::NoButton); + QPushButton *yesButton = + messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole); + messageBox.addButton(tr("Cancel"), QMessageBox::NoRole); + + messageBox.exec(); + if (messageBox.clickedButton() != yesButton) { + return; + } + + if (_users[id]->isCurrentUser() && _users.count() > 1) { + id == 0 ? switchCurrentUser(1) : switchCurrentUser(0); + } + + _users[id]->logout(); + _users[id]->removeAccount(); + + beginRemoveRows(QModelIndex(), id, id); + _users.removeAt(id); + endRemoveRows(); +} + +int UserModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return _users.count(); +} + +QVariant UserModel::data(const QModelIndex &index, int role) const +{ + if (index.row() < 0 || index.row() >= _users.count()) { + return QVariant(); + } + + if (role == NameRole) { + return _users[index.row()]->name(); + } else if (role == ServerRole) { + return _users[index.row()]->server(); + } else if (role == ServerHasUserStatusRole) { + return _users[index.row()]->serverHasUserStatus(); + } else if (role == StatusIconRole) { + return _users[index.row()]->statusIcon(); + } else if (role == StatusEmojiRole) { + return _users[index.row()]->statusEmoji(); + } else if (role == StatusMessageRole) { + return _users[index.row()]->statusMessage(); + } else if (role == DesktopNotificationsAllowedRole) { + return _users[index.row()]->isDesktopNotificationsAllowed(); + } else if (role == AvatarRole) { + return _users[index.row()]->avatarUrl(); + } else if (role == IsCurrentUserRole) { + return _users[index.row()]->isCurrentUser(); + } else if (role == IsConnectedRole) { + return _users[index.row()]->isConnected(); + } else if (role == IdRole) { + return index.row(); + } + return QVariant(); +} + +QHash UserModel::roleNames() const +{ + QHash roles; + roles[NameRole] = "name"; + roles[ServerRole] = "server"; + roles[ServerHasUserStatusRole] = "serverHasUserStatus"; + roles[StatusIconRole] = "statusIcon"; + roles[StatusEmojiRole] = "statusEmoji"; + roles[StatusMessageRole] = "statusMessage"; + roles[DesktopNotificationsAllowedRole] = "desktopNotificationsAllowed"; + roles[AvatarRole] = "avatar"; + roles[IsCurrentUserRole] = "isCurrentUser"; + roles[IsConnectedRole] = "isConnected"; + roles[IdRole] = "id"; + return roles; +} + +ActivityListModel *UserModel::currentActivityModel() +{ + if (currentUserIndex() < 0 || currentUserIndex() >= _users.size()) + return nullptr; + + return _users[currentUserIndex()]->getActivityModel(); +} + +void UserModel::fetchCurrentActivityModel() +{ + if (currentUserId() < 0 || currentUserId() >= _users.size()) + return; + + _users[currentUserId()]->slotRefresh(); +} + +AccountAppList UserModel::appList() const +{ + if (_currentUserId < 0 || _currentUserId >= _users.size()) + return {}; + + return _users[_currentUserId]->appList(); +} + +User *UserModel::currentUser() const +{ + if (currentUserId() < 0 || currentUserId() >= _users.size()) + return nullptr; + + return _users[currentUserId()]; +} + +int UserModel::findUserIdForAccount(AccountState *account) const +{ + const auto it = std::find_if(std::cbegin(_users), std::cend(_users), [=](const User *user) { + return user->account()->id() == account->account()->id(); + }); + + if (it == std::cend(_users)) { + return -1; + } + + const auto id = std::distance(std::cbegin(_users), it); + return id; +} + +/*-------------------------------------------------------------------------------------*/ + +ImageProvider::ImageProvider() + : QQuickImageProvider(QQuickImageProvider::Image) +{ +} + +QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) +{ + Q_UNUSED(size) + Q_UNUSED(requestedSize) + + const auto makeIcon = [](const QString &path) { + QImage image(128, 128, QImage::Format_ARGB32); + image.fill(Qt::GlobalColor::transparent); + QPainter painter(&image); + QSvgRenderer renderer(path); + renderer.render(&painter); + return image; + }; + + if (id == QLatin1String("fallbackWhite")) { + return makeIcon(QStringLiteral(":/client/theme/white/user.svg")); + } + + if (id == QLatin1String("fallbackBlack")) { + return makeIcon(QStringLiteral(":/client/theme/black/user.svg")); + } + + const int uid = id.toInt(); + return UserModel::instance()->avatarById(uid); +} + +/*-------------------------------------------------------------------------------------*/ + +UserAppsModel *UserAppsModel::_instance = nullptr; + +UserAppsModel *UserAppsModel::instance() +{ + if (!_instance) { + _instance = new UserAppsModel(); + } + return _instance; +} + +UserAppsModel::UserAppsModel(QObject *parent) + : QAbstractListModel(parent) +{ +} + +void UserAppsModel::buildAppList() +{ + if (rowCount() > 0) { + beginRemoveRows(QModelIndex(), 0, rowCount() - 1); + _apps.clear(); + endRemoveRows(); + } + + if (UserModel::instance()->appList().count() > 0) { + const auto talkApp = UserModel::instance()->currentUser()->talkApp(); + foreach (AccountApp *app, UserModel::instance()->appList()) { + // Filter out Talk because we have a dedicated button for it + if (talkApp && app->id() == talkApp->id()) + continue; + + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + _apps << app; + endInsertRows(); + } + } +} + +void UserAppsModel::openAppUrl(const QUrl &url) +{ + Utility::openBrowser(url); +} + +int UserAppsModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return _apps.count(); +} + +QVariant UserAppsModel::data(const QModelIndex &index, int role) const +{ + if (index.row() < 0 || index.row() >= _apps.count()) { + return QVariant(); + } + + if (role == NameRole) { + return _apps[index.row()]->name(); + } else if (role == UrlRole) { + return _apps[index.row()]->url(); + } else if (role == IconUrlRole) { + return _apps[index.row()]->iconUrl().toString(); + } + return QVariant(); +} + +QHash UserAppsModel::roleNames() const +{ + QHash roles; + roles[NameRole] = "appName"; + roles[UrlRole] = "appUrl"; + roles[IconUrlRole] = "appIconUrl"; + return roles; +} + +} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/usermodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/usermodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/usermodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/usermodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,246 +0,0 @@ -#ifndef USERMODEL_H -#define USERMODEL_H - -#include -#include -#include -#include -#include -#include - -#include "activitylistmodel.h" -#include "accountfwd.h" -#include "accountmanager.h" -#include "folderman.h" -#include "notificationcache.h" -#include "userstatusselectormodel.h" -#include "userstatusconnector.h" -#include - -namespace OCC { -class UnifiedSearchResultsListModel; - -class User : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString name READ name NOTIFY nameChanged) - Q_PROPERTY(QString server READ server CONSTANT) - Q_PROPERTY(bool serverHasUserStatus READ serverHasUserStatus CONSTANT) - Q_PROPERTY(QUrl statusIcon READ statusIcon NOTIFY statusChanged) - Q_PROPERTY(QString statusEmoji READ statusEmoji NOTIFY statusChanged) - Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusChanged) - Q_PROPERTY(bool desktopNotificationsAllowed READ isDesktopNotificationsAllowed NOTIFY desktopNotificationsAllowedChanged) - Q_PROPERTY(bool hasLocalFolder READ hasLocalFolder NOTIFY hasLocalFolderChanged) - Q_PROPERTY(bool serverHasTalk READ serverHasTalk NOTIFY serverHasTalkChanged) - Q_PROPERTY(QString avatar READ avatarUrl NOTIFY avatarChanged) - Q_PROPERTY(bool isConnected READ isConnected NOTIFY accountStateChanged) - Q_PROPERTY(UnifiedSearchResultsListModel* unifiedSearchResultsListModel READ getUnifiedSearchResultsListModel CONSTANT) -public: - User(AccountStatePtr &account, const bool &isCurrent = false, QObject *parent = nullptr); - - AccountPtr account() const; - AccountStatePtr accountState() const; - - bool isConnected() const; - bool isCurrentUser() const; - void setCurrentUser(const bool &isCurrent); - Folder *getFolder() const; - ActivityListModel *getActivityModel(); - UnifiedSearchResultsListModel *getUnifiedSearchResultsListModel() const; - void openLocalFolder(); - QString name() const; - QString server(bool shortened = true) const; - bool hasLocalFolder() const; - bool serverHasTalk() const; - bool serverHasUserStatus() const; - AccountApp *talkApp() const; - bool hasActivities() const; - AccountAppList appList() const; - QImage avatar() const; - void login() const; - void logout() const; - void removeAccount() const; - QString avatarUrl() const; - bool isDesktopNotificationsAllowed() const; - UserStatus::OnlineStatus status() const; - QString statusMessage() const; - QUrl statusIcon() const; - QString statusEmoji() const; - void processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr &item); - -signals: - void guiLog(const QString &, const QString &); - void nameChanged(); - void hasLocalFolderChanged(); - void serverHasTalkChanged(); - void avatarChanged(); - void accountStateChanged(); - void statusChanged(); - void desktopNotificationsAllowedChanged(); - -public slots: - void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item); - void slotProgressInfo(const QString &folder, const ProgressInfo &progress); - void slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category); - void slotAddErrorToGui(const QString &folderAlias, SyncFileItem::Status status, const QString &errorMessage, const QString &subject = {}); - void slotNotificationRequestFinished(int statusCode); - void slotNotifyNetworkError(QNetworkReply *reply); - void slotEndNotificationRequest(int replyCode); - void slotNotifyServerFinished(const QString &reply, int replyCode); - void slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row); - void slotBuildNotificationDisplay(const ActivityList &list); - void slotRefreshNotifications(); - void slotRefreshActivities(); - void slotRefresh(); - void slotRefreshUserStatus(); - void slotRefreshImmediately(); - void setNotificationRefreshInterval(std::chrono::milliseconds interval); - void slotRebuildNavigationAppList(); - -private: - void slotPushNotificationsReady(); - void slotDisconnectPushNotifications(); - void slotReceivedPushNotification(Account *account); - void slotReceivedPushActivity(Account *account); - void slotCheckExpiredActivities(); - - void connectPushNotifications() const; - bool checkPushNotificationsAreReady() const; - - bool isActivityOfCurrentAccount(const Folder *folder) const; - bool isUnsolvableConflict(const SyncFileItemPtr &item) const; - - void showDesktopNotification(const QString &title, const QString &message); - -private: - AccountStatePtr _account; - bool _isCurrentUser; - ActivityListModel *_activityModel; - UnifiedSearchResultsListModel *_unifiedSearchResultsModel; - ActivityList _blacklistedNotifications; - - QTimer _expiredActivitiesCheckTimer; - QTimer _notificationCheckTimer; - QHash _timeSinceLastCheck; - - QElapsedTimer _guiLogTimer; - NotificationCache _notificationCache; - - // number of currently running notification requests. If non zero, - // no query for notifications is started. - int _notificationRequestsRunning; -}; - -class UserModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY(User* currentUser READ currentUser NOTIFY newUserSelected) - Q_PROPERTY(int currentUserId READ currentUserId NOTIFY newUserSelected) -public: - static UserModel *instance(); - ~UserModel() override = default; - - void addUser(AccountStatePtr &user, const bool &isCurrent = false); - int currentUserIndex(); - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - - QImage avatarById(const int &id); - - User *currentUser() const; - - int findUserIdForAccount(AccountState *account) const; - - Q_INVOKABLE void fetchCurrentActivityModel(); - Q_INVOKABLE void openCurrentAccountLocalFolder(); - Q_INVOKABLE void openCurrentAccountTalk(); - Q_INVOKABLE void openCurrentAccountServer(); - Q_INVOKABLE int numUsers(); - Q_INVOKABLE QString currentUserServer(); - int currentUserId() const; - Q_INVOKABLE bool isUserConnected(const int &id); - Q_INVOKABLE void switchCurrentUser(const int &id); - Q_INVOKABLE void login(const int &id); - Q_INVOKABLE void logout(const int &id); - Q_INVOKABLE void removeAccount(const int &id); - - Q_INVOKABLE std::shared_ptr userStatusConnector(int id); - - ActivityListModel *currentActivityModel(); - - enum UserRoles { - NameRole = Qt::UserRole + 1, - ServerRole, - ServerHasUserStatusRole, - StatusIconRole, - StatusEmojiRole, - StatusMessageRole, - DesktopNotificationsAllowedRole, - AvatarRole, - IsCurrentUserRole, - IsConnectedRole, - IdRole - }; - - AccountAppList appList() const; - -signals: - Q_INVOKABLE void addAccount(); - Q_INVOKABLE void newUserSelected(); - -protected: - QHash roleNames() const override; - -private: - static UserModel *_instance; - UserModel(QObject *parent = nullptr); - QList _users; - int _currentUserId = 0; - bool _init = true; - - void buildUserList(); -}; - -class ImageProvider : public QQuickImageProvider -{ -public: - ImageProvider(); - QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override; -}; - -class UserAppsModel : public QAbstractListModel -{ - Q_OBJECT -public: - static UserAppsModel *instance(); - ~UserAppsModel() override = default; - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - - enum UserAppsRoles { - NameRole = Qt::UserRole + 1, - UrlRole, - IconUrlRole - }; - - void buildAppList(); - -public slots: - void openAppUrl(const QUrl &url); - -protected: - QHash roleNames() const override; - -private: - static UserAppsModel *_instance; - UserAppsModel(QObject *parent = nullptr); - - AccountAppList _apps; -}; - -} -#endif // USERMODEL_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserModel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserModel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/UserModel.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/UserModel.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,236 @@ +#ifndef USERMODEL_H +#define USERMODEL_H + +#include +#include +#include +#include +#include +#include + +#include "ActivityListModel.h" +#include "accountmanager.h" +#include "folderman.h" +#include "NotificationCache.h" +#include + +namespace OCC { + +class User : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString name READ name NOTIFY nameChanged) + Q_PROPERTY(QString server READ server CONSTANT) + Q_PROPERTY(bool serverHasUserStatus READ serverHasUserStatus CONSTANT) + Q_PROPERTY(QUrl statusIcon READ statusIcon NOTIFY statusChanged) + Q_PROPERTY(QString statusEmoji READ statusEmoji NOTIFY statusChanged) + Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusChanged) + Q_PROPERTY(bool desktopNotificationsAllowed READ isDesktopNotificationsAllowed NOTIFY desktopNotificationsAllowedChanged) + Q_PROPERTY(bool hasLocalFolder READ hasLocalFolder NOTIFY hasLocalFolderChanged) + Q_PROPERTY(bool serverHasTalk READ serverHasTalk NOTIFY serverHasTalkChanged) + Q_PROPERTY(QString avatar READ avatarUrl NOTIFY avatarChanged) + Q_PROPERTY(bool isConnected READ isConnected NOTIFY accountStateChanged) +public: + User(AccountStatePtr &account, const bool &isCurrent = false, QObject *parent = nullptr); + + AccountPtr account() const; + + bool isConnected() const; + bool isCurrentUser() const; + void setCurrentUser(const bool &isCurrent); + Folder *getFolder() const; + ActivityListModel *getActivityModel(); + void openLocalFolder(); + QString name() const; + QString server(bool shortened = true) const; + bool hasLocalFolder() const; + bool serverHasTalk() const; + bool serverHasUserStatus() const; + AccountApp *talkApp() const; + bool hasActivities() const; + AccountAppList appList() const; + QImage avatar() const; + void login() const; + void logout() const; + void removeAccount() const; + QString avatarUrl() const; + bool isDesktopNotificationsAllowed() const; + UserStatus::Status status() const; + QString statusMessage() const; + QUrl statusIcon() const; + QString statusEmoji() const; + void processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr &item); + +signals: + void guiLog(const QString &, const QString &); + void nameChanged(); + void hasLocalFolderChanged(); + void serverHasTalkChanged(); + void avatarChanged(); + void accountStateChanged(); + void statusChanged(); + void desktopNotificationsAllowedChanged(); + +public slots: + void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item); + void slotProgressInfo(const QString &folder, const ProgressInfo &progress); + void slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category); + void slotAddErrorToGui(const QString &folderAlias, SyncFileItem::Status status, const QString &errorMessage, const QString &subject = {}); + void slotNotificationRequestFinished(int statusCode); + void slotNotifyNetworkError(QNetworkReply *reply); + void slotEndNotificationRequest(int replyCode); + void slotNotifyServerFinished(const QString &reply, int replyCode); + void slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row); + void slotBuildNotificationDisplay(const ActivityList &list); + void slotRefreshNotifications(); + void slotRefreshActivities(); + void slotRefresh(); + void slotRefreshUserStatus(); + void slotRefreshImmediately(); + void setNotificationRefreshInterval(std::chrono::milliseconds interval); + void slotRebuildNavigationAppList(); + +private: + void slotPushNotificationsReady(); + void slotDisconnectPushNotifications(); + void slotReceivedPushNotification(Account *account); + void slotReceivedPushActivity(Account *account); + void slotCheckExpiredActivities(); + + void connectPushNotifications() const; + bool checkPushNotificationsAreReady() const; + + bool isActivityOfCurrentAccount(const Folder *folder) const; + bool isUnsolvableConflict(const SyncFileItemPtr &item) const; + + void showDesktopNotification(const QString &title, const QString &message); + +private: + AccountStatePtr _account; + bool _isCurrentUser; + ActivityListModel *_activityModel; + ActivityList _blacklistedNotifications; + + QTimer _expiredActivitiesCheckTimer; + QTimer _notificationCheckTimer; + QHash _timeSinceLastCheck; + + QElapsedTimer _guiLogTimer; + NotificationCache _notificationCache; + + // number of currently running notification requests. If non zero, + // no query for notifications is started. + int _notificationRequestsRunning; +}; + +class UserModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY(User* currentUser READ currentUser NOTIFY newUserSelected) + Q_PROPERTY(int currentUserId READ currentUserId NOTIFY newUserSelected) +public: + static UserModel *instance(); + virtual ~UserModel() = default; + + void addUser(AccountStatePtr &user, const bool &isCurrent = false); + int currentUserIndex(); + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + QImage avatarById(const int &id); + + User *currentUser() const; + + int findUserIdForAccount(AccountState *account) const; + + Q_INVOKABLE void fetchCurrentActivityModel(); + Q_INVOKABLE void openCurrentAccountLocalFolder(); + Q_INVOKABLE void openCurrentAccountTalk(); + Q_INVOKABLE void openCurrentAccountServer(); + Q_INVOKABLE int numUsers(); + Q_INVOKABLE QString currentUserServer(); + int currentUserId() const; + Q_INVOKABLE bool isUserConnected(const int &id); + Q_INVOKABLE void switchCurrentUser(const int &id); + Q_INVOKABLE void login(const int &id); + Q_INVOKABLE void logout(const int &id); + Q_INVOKABLE void removeAccount(const int &id); + + ActivityListModel *currentActivityModel(); + + enum UserRoles { + NameRole = Qt::UserRole + 1, + ServerRole, + ServerHasUserStatusRole, + StatusIconRole, + StatusEmojiRole, + StatusMessageRole, + DesktopNotificationsAllowedRole, + AvatarRole, + IsCurrentUserRole, + IsConnectedRole, + IdRole + }; + + AccountAppList appList() const; + +signals: + Q_INVOKABLE void addAccount(); + Q_INVOKABLE void newUserSelected(); + +protected: + QHash roleNames() const override; + +private: + static UserModel *_instance; + UserModel(QObject *parent = nullptr); + QList _users; + int _currentUserId = 0; + bool _init = true; + + void buildUserList(); +}; + +class ImageProvider : public QQuickImageProvider +{ +public: + ImageProvider(); + QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override; +}; + +class UserAppsModel : public QAbstractListModel +{ + Q_OBJECT +public: + static UserAppsModel *instance(); + virtual ~UserAppsModel() = default; + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + enum UserAppsRoles { + NameRole = Qt::UserRole + 1, + UrlRole, + IconUrlRole + }; + + void buildAppList(); + +public slots: + void openAppUrl(const QUrl &url); + +protected: + QHash roleNames() const override; + +private: + static UserAppsModel *_instance; + UserAppsModel(QObject *parent = nullptr); + + AccountAppList _apps; +}; + +} +#endif // USERMODEL_H Binary files /tmp/tmpk4pug5g6/03jeUE8zrL/nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/.wheelhandler.h.swo and /tmp/tmpk4pug5g6/Q0S5mSqZ8D/nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/.wheelhandler.h.swo differ diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/Window.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/Window.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/tray/Window.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/tray/Window.qml 2022-01-03 12:25:12.000000000 +0000 @@ -1,11 +1,10 @@ import QtQml 2.12 import QtQml.Models 2.1 -import QtQuick 2.15 +import QtQuick 2.9 import QtQuick.Window 2.3 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 import QtGraphicalEffects 1.0 -import "../" // Custom qml modules are in /theme (and included by resources.qrc) import Style 1.0 @@ -23,15 +22,8 @@ flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint - property var fileActivityDialogAbsolutePath: "" readonly property int maxMenuHeight: Style.trayWindowHeight - Style.trayWindowHeaderHeight - 2 * Style.trayWindowBorderWidth - function openFileActivityDialog(displayPath, absolutePath) { - fileActivityDialogLoader.displayPath = displayPath - fileActivityDialogLoader.absolutePath = absolutePath - fileActivityDialogLoader.refresh() - } - Component.onCompleted: Systray.forceWindowInit(trayWindow) // Close tray window when focus is lost (e.g. click somewhere else on the screen) @@ -51,20 +43,18 @@ // see also id:accountMenu below userLineInstantiator.active = false; userLineInstantiator.active = true; - syncStatus.model.load(); } Connections { target: UserModel - function onNewUserSelected() { + onNewUserSelected: { accountMenu.close(); - syncStatus.model.load(); } } Connections { target: Systray - function onShowWindow() { + onShowWindow: { accountMenu.close(); appsMenu.close(); Systray.positionWindow(trayWindow); @@ -76,14 +66,10 @@ Systray.setOpened(); UserModel.fetchCurrentActivityModel(); } - function onHideWindow() { + onHideWindow: { trayWindow.hide(); Systray.setClosed(); } - - function onShowFileActivityDialog(displayPath, absolutePath) { - openFileActivityDialog(displayPath, absolutePath) - } } OpacityMask { @@ -102,11 +88,6 @@ Rectangle { id: trayWindowBackground - property bool isUnifiedSearchActive: unifiedSearchResultsListViewSkeleton.visible - || unifiedSearchResultNothingFound.visible - || unifiedSearchResultsErrorLabel.visible - || unifiedSearchResultsListView.visible - anchors.fill: parent radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius border.width: Style.trayWindowBorderWidth @@ -142,180 +123,176 @@ Accessible.name: qsTr("Current account") Accessible.onPressAction: currentAccountButton.clicked() - // We call open() instead of popup() because we want to position it - // exactly below the dropdown button, not the mouse - onClicked: { - syncPauseButton.text = Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all") - if (accountMenu.visible) { - accountMenu.close() - } else { - accountMenu.open() - } - } + MouseArea { + id: accountBtnMouseArea - Loader { - id: userStatusSelectorDialogLoader - } + anchors.fill: parent + hoverEnabled: Style.hoverEffectsEnabled - Menu { - id: accountMenu + // We call open() instead of popup() because we want to position it + // exactly below the dropdown button, not the mouse + onClicked: { + syncPauseButton.text = Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all") + if (accountMenu.visible) { + accountMenu.close() + } else { + accountMenu.open() + } + } - // x coordinate grows towards the right - // y coordinate grows towards the bottom - x: (currentAccountButton.x + 2) - y: (currentAccountButton.y + Style.trayWindowHeaderHeight + 2) + Menu { + id: accountMenu - width: (Style.currentAccountButtonWidth - 2) - height: Math.min(implicitHeight, maxMenuHeight) - closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape + // x coordinate grows towards the right + // y coordinate grows towards the bottom + x: (currentAccountButton.x + 2) + y: (currentAccountButton.y + Style.trayWindowHeaderHeight + 2) - background: Rectangle { - border.color: Style.menuBorder - radius: Style.currentAccountButtonRadius - } + width: (Style.currentAccountButtonWidth - 2) + height: Math.min(implicitHeight, maxMenuHeight) + closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape - onClosed: { - // HACK: reload account Instantiator immediately by restting it - could be done better I guess - // see also onVisibleChanged above - userLineInstantiator.active = false; - userLineInstantiator.active = true; - } + background: Rectangle { + border.color: Style.menuBorder + radius: Style.currentAccountButtonRadius + } - Instantiator { - id: userLineInstantiator - model: UserModel - delegate: UserLine { - onShowUserStatusSelectorDialog: { - userStatusSelectorDialogLoader.source = "qrc:/qml/src/gui/UserStatusSelectorDialog.qml" - userStatusSelectorDialogLoader.item.title = qsTr("Set user status") - userStatusSelectorDialogLoader.item.model.load(index) - userStatusSelectorDialogLoader.item.show() - } + onClosed: { + // HACK: reload account Instantiator immediately by restting it - could be done better I guess + // see also onVisibleChanged above + userLineInstantiator.active = false; + userLineInstantiator.active = true; } - onObjectAdded: accountMenu.insertItem(index, object) - onObjectRemoved: accountMenu.removeItem(object) - } - MenuItem { - id: addAccountButton - height: Style.addAccountButtonHeight - hoverEnabled: true - - background: Item { - height: parent.height - width: parent.menu.width - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent" - } + Instantiator { + id: userLineInstantiator + model: UserModel + delegate: UserLine {} + onObjectAdded: accountMenu.insertItem(index, object) + onObjectRemoved: accountMenu.removeItem(object) } - RowLayout { - anchors.fill: parent - spacing: 0 + MenuItem { + id: addAccountButton + height: Style.addAccountButtonHeight + hoverEnabled: true - Image { - Layout.leftMargin: 12 - verticalAlignment: Qt.AlignCenter - source: "qrc:///client/theme/black/add.svg" - sourceSize.width: Style.headerButtonIconSize - sourceSize.height: Style.headerButtonIconSize - } - Label { - Layout.leftMargin: 14 - text: qsTr("Add account") - color: "black" - font.pixelSize: Style.topLinePixelSize - } - // Filler on the right - Item { - Layout.fillWidth: true - Layout.fillHeight: true + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered ? Style.lightHover : "transparent" + } } - } - onClicked: UserModel.addAccount() - Accessible.role: Accessible.MenuItem - Accessible.name: qsTr("Add new account") - Accessible.onPressAction: addAccountButton.clicked() - } + RowLayout { + anchors.fill: parent + spacing: 0 + + Image { + Layout.leftMargin: 12 + verticalAlignment: Qt.AlignCenter + source: "qrc:///client/theme/black/add.svg" + sourceSize.width: Style.headerButtonIconSize + sourceSize.height: Style.headerButtonIconSize + } + Label { + Layout.leftMargin: 14 + text: qsTr("Add account") + color: "black" + font.pixelSize: Style.topLinePixelSize + } + // Filler on the right + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + } + onClicked: UserModel.addAccount() - MenuSeparator { - contentItem: Rectangle { - implicitHeight: 1 - color: Style.menuBorder + Accessible.role: Accessible.MenuItem + Accessible.name: qsTr("Add new account") + Accessible.onPressAction: addAccountButton.clicked() } - } - MenuItem { - id: syncPauseButton - font.pixelSize: Style.topLinePixelSize - hoverEnabled: true - onClicked: Systray.pauseResumeSync() - - background: Item { - height: parent.height - width: parent.menu.width - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent" + MenuSeparator { + contentItem: Rectangle { + implicitHeight: 1 + color: Style.menuBorder } } - Accessible.role: Accessible.MenuItem - Accessible.name: Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all") - Accessible.onPressAction: syncPauseButton.clicked() - } + MenuItem { + id: syncPauseButton + font.pixelSize: Style.topLinePixelSize + hoverEnabled: true + onClicked: Systray.pauseResumeSync() - MenuItem { - id: settingsButton - text: qsTr("Settings") - font.pixelSize: Style.topLinePixelSize - hoverEnabled: true - onClicked: Systray.openSettings() - - background: Item { - height: parent.height - width: parent.menu.width - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent" + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered ? Style.lightHover : "transparent" + } } + + Accessible.role: Accessible.MenuItem + Accessible.name: Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all") + Accessible.onPressAction: syncPauseButton.clicked() } - Accessible.role: Accessible.MenuItem - Accessible.name: text - Accessible.onPressAction: settingsButton.clicked() - } + MenuItem { + id: settingsButton + text: qsTr("Settings") + font.pixelSize: Style.topLinePixelSize + hoverEnabled: true + onClicked: Systray.openSettings() - MenuItem { - id: exitButton - text: qsTr("Exit"); - font.pixelSize: Style.topLinePixelSize - hoverEnabled: true - onClicked: Systray.shutdown() - - background: Item { - height: parent.height - width: parent.menu.width - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent" + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered ? Style.lightHover : "transparent" + } } + + Accessible.role: Accessible.MenuItem + Accessible.name: text + Accessible.onPressAction: settingsButton.clicked() } - Accessible.role: Accessible.MenuItem - Accessible.name: text - Accessible.onPressAction: exitButton.clicked() + MenuItem { + id: exitButton + text: qsTr("Exit"); + font.pixelSize: Style.topLinePixelSize + hoverEnabled: true + onClicked: Systray.shutdown() + + background: Item { + height: parent.height + width: parent.menu.width + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: parent.parent.hovered ? Style.lightHover : "transparent" + } + } + + Accessible.role: Accessible.MenuItem + Accessible.name: text + Accessible.onPressAction: exitButton.clicked() + } } } background: Rectangle { - color: parent.hovered || parent.visualFocus ? "white" : "transparent" + color: accountBtnMouseArea.containsMouse ? "white" : "transparent" opacity: 0.2 } @@ -419,7 +396,7 @@ visible: UserModel.currentUser.statusMessage !== "" width: Style.currentAccountLabelWidth text: UserModel.currentUser.statusMessage !== "" - ? UserModel.currentUser.statusMessage + ? UserModel.currentUser.statusMessage : UserModel.currentUser.server elide: Text.ElideRight color: Style.ncTextColor @@ -451,20 +428,20 @@ Item { Layout.fillWidth: true } - + RowLayout { id: openLocalFolderRowLayout spacing: 0 Layout.preferredWidth: Style.trayWindowHeaderHeight Layout.preferredHeight: Style.trayWindowHeaderHeight Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - + HeaderButton { id: openLocalFolderButton visible: UserModel.currentUser.hasLocalFolder icon.source: "qrc:///client/theme/white/folder.svg" onClicked: UserModel.openCurrentAccountLocalFolder() - + Rectangle { id: folderStateIndicatorBackground width: Style.folderStateIndicatorSize @@ -475,7 +452,7 @@ radius: width*0.5 z: 1 } - + Image { id: folderStateIndicator visible: UserModel.currentUser.hasLocalFolder @@ -483,17 +460,19 @@ ? Style.stateOnlineImageSource : Style.stateOfflineImageSource cache: false - + anchors.top: openLocalFolderButton.verticalCenter - anchors.left: openLocalFolderButton.horizontalCenter + anchors.left: openLocalFolderButton.horizontalCenter sourceSize.width: Style.folderStateIndicatorSize sourceSize.height: Style.folderStateIndicatorSize - + Accessible.role: Accessible.Indicator Accessible.name: UserModel.currentUser.isConnected ? qsTr("Connected") : qsTr("Disconnected") z: 2 } } + + Accessible.role: Accessible.Button Accessible.name: qsTr("Open local folder of current account") @@ -501,11 +480,11 @@ HeaderButton { id: trayWindowTalkButton - + visible: UserModel.currentUser.serverHasTalk icon.source: "qrc:///client/theme/white/talk-app.svg" onClicked: UserModel.openCurrentAccountTalk() - + Accessible.role: Accessible.Button Accessible.name: qsTr("Open Nextcloud Talk in browser") Accessible.onPressAction: trayWindowTalkButton.clicked() @@ -514,7 +493,7 @@ HeaderButton { id: trayWindowAppsButton icon.source: "qrc:///client/theme/white/more-apps.svg" - + onClicked: { if(appsMenu.count <= 0) { UserModel.openCurrentAccountServer() @@ -529,10 +508,12 @@ Accessible.name: qsTr("More apps") Accessible.onPressAction: trayWindowAppsButton.clicked() - AutoSizingMenu { + Menu { id: appsMenu y: (trayWindowAppsButton.y + trayWindowAppsButton.height + 2) readonly property Item listContentItem: contentItem.contentItem + width: Math.min(listContentItem.childrenRect.width + 4, Style.trayWindowWidth / 2) + height: Math.min(implicitHeight, maxMenuHeight) closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape background: Rectangle { @@ -550,9 +531,24 @@ text: appName font.pixelSize: Style.topLinePixelSize icon.source: appIconUrl + width: contentItem.implicitWidth + leftPadding + rightPadding onTriggered: UserAppsModel.openAppUrl(appUrl) hoverEnabled: true + background: Item { + width: appsMenu.width + height: parent.height + + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: appEntry.hovered ? Style.lightHover : "transparent" + } + + Accessible.role: Accessible.PopupMenu + Accessible.name: qsTr("Apps menu") + } + Accessible.role: Accessible.MenuItem Accessible.name: qsTr("Open %1 in browser").arg(appName) Accessible.onPressAction: appEntry.triggered() @@ -563,198 +559,31 @@ } } // Rectangle trayWindowHeaderBackground - UnifiedSearchInputContainer { - id: trayWindowUnifiedSearchInputContainer - height: Style.trayWindowHeaderHeight * 0.65 - - anchors { - top: trayWindowHeaderBackground.bottom - left: trayWindowBackground.left - right: trayWindowBackground.right - - margins: { - top: 10 - } - } - - text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - readOnly: !UserModel.currentUser.isConnected || UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - isSearchInProgress: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress - onTextEdited: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = trayWindowUnifiedSearchInputContainer.text } - onClearText: { UserModel.currentUser.unifiedSearchResultsListModel.searchTerm = "" } - } - - ErrorBox { - id: unifiedSearchResultsErrorLabel - visible: UserModel.currentUser.unifiedSearchResultsListModel.errorString && !unifiedSearchResultsListView.visible && ! UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress && ! UserModel.currentUser.unifiedSearchResultsListModel.currentFetchMoreInProgressProviderId - text: UserModel.currentUser.unifiedSearchResultsListModel.errorString - color: Style.errorBoxBackgroundColor - backgroundColor: Style.errorBoxTextColor - borderColor: "transparent" - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowBackground.left - anchors.right: trayWindowBackground.right - anchors.margins: 10 - } - - UnifiedSearchResultNothingFound { - id: unifiedSearchResultNothingFound - visible: false - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowBackground.left - anchors.right: trayWindowBackground.right - anchors.topMargin: 10 - - text: UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - - property bool isSearchRunning: UserModel.currentUser.unifiedSearchResultsListModel.isSearchInProgress - property bool isSearchResultsEmpty: unifiedSearchResultsListView.count === 0 - property bool nothingFound: text && isSearchResultsEmpty && !UserModel.currentUser.unifiedSearchResultsListModel.errorString - - onIsSearchRunningChanged: { - if (unifiedSearchResultNothingFound.isSearchRunning) { - visible = false; - } else { - if (nothingFound) { - visible = true; - } - } - } - - onTextChanged: { - visible = false; - } - - onIsSearchResultsEmptyChanged: { - if (!unifiedSearchResultNothingFound.isSearchResultsEmpty) { - visible = false; - } - } - } - - UnifiedSearchResultItemSkeletonContainer { - id: unifiedSearchResultsListViewSkeleton - visible: !unifiedSearchResultNothingFound.visible && !unifiedSearchResultsListView.visible && ! UserModel.currentUser.unifiedSearchResultsListModel.errorString && UserModel.currentUser.unifiedSearchResultsListModel.searchTerm - anchors.top: trayWindowUnifiedSearchInputContainer.bottom + ListView { + id: activityListView + anchors.top: trayWindowHeaderBackground.bottom anchors.left: trayWindowBackground.left anchors.right: trayWindowBackground.right anchors.bottom: trayWindowBackground.bottom - textLeftMargin: trayWindowBackground.Style.unifiedSearchResultTextLeftMargin - textRightMargin: trayWindowBackground.Style.unifiedSearchResultTextRightMargin - iconWidth: trayWindowBackground.Style.unifiedSearchResulIconWidth - iconLeftMargin: trayWindowBackground.Style.unifiedSearchResulIconLeftMargin - itemHeight: trayWindowBackground.Style.unifiedSearchItemHeight - titleFontSize: trayWindowBackground.Style.unifiedSearchResulTitleFontSize - sublineFontSize: trayWindowBackground.Style.unifiedSearchResulSublineFontSize - titleColor: trayWindowBackground.Style.unifiedSearchResulTitleColor - sublineColor: trayWindowBackground.Style.unifiedSearchResulSublineColor - iconColor: "#afafaf" - } - - ScrollView { - id: controlRoot - padding: 1 - contentWidth: availableWidth - - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - - data: WheelHandler { - target: controlRoot.contentItem + clip: true + ScrollBar.vertical: ScrollBar { + id: listViewScrollbar } - visible: unifiedSearchResultsListView.count > 0 - - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowBackground.left - anchors.right: trayWindowBackground.right - anchors.bottom: trayWindowBackground.bottom - - ListView { - id: unifiedSearchResultsListView - spacing: 4 - clip: true - - keyNavigationEnabled: true - - reuseItems: true - - Accessible.role: Accessible.List - Accessible.name: qsTr("Unified search results list") - - model: UserModel.currentUser.unifiedSearchResultsListModel - - delegate: UnifiedSearchResultListItem { - width: unifiedSearchResultsListView.width - height: trayWindowBackground.Style.unifiedSearchItemHeight - isSearchInProgress: unifiedSearchResultsListView.model.isSearchInProgress - textLeftMargin: trayWindowBackground.Style.unifiedSearchResultTextLeftMargin - textRightMargin: trayWindowBackground.Style.unifiedSearchResultTextRightMargin - iconWidth: trayWindowBackground.Style.unifiedSearchResulIconWidth - iconLeftMargin: trayWindowBackground.Style.unifiedSearchResulIconLeftMargin - titleFontSize: trayWindowBackground.Style.unifiedSearchResulTitleFontSize - sublineFontSize: trayWindowBackground.Style.unifiedSearchResulSublineFontSize - titleColor: trayWindowBackground.Style.unifiedSearchResulTitleColor - sublineColor: trayWindowBackground.Style.unifiedSearchResulSublineColor - currentFetchMoreInProgressProviderId: unifiedSearchResultsListView.model.currentFetchMoreInProgressProviderId - fetchMoreTriggerClicked: unifiedSearchResultsListView.model.fetchMoreTriggerClicked - resultClicked: unifiedSearchResultsListView.model.resultClicked - ListView.onPooled: isPooled = true - ListView.onReused: isPooled = false - } - section.property: "providerName" - section.criteria: ViewSection.FullString - section.delegate: UnifiedSearchResultSectionItem { - width: unifiedSearchResultsListView.width - } - } - } + readonly property int maxActionButtons: 2 - SyncStatus { - id: syncStatus + keyNavigationEnabled: true - visible: !trayWindowBackground.isUnifiedSearchActive + Accessible.role: Accessible.List + Accessible.name: qsTr("Activity list") - anchors.top: trayWindowUnifiedSearchInputContainer.bottom - anchors.left: trayWindowBackground.left - anchors.right: trayWindowBackground.right - } - - ActivityList { - visible: !trayWindowBackground.isUnifiedSearchActive - anchors.top: syncStatus.bottom - anchors.left: trayWindowBackground.left - anchors.right: trayWindowBackground.right - anchors.bottom: trayWindowBackground.bottom - - activeFocusOnTab: true model: activityModel - onShowFileActivity: { - openFileActivityDialog(displayPath, absolutePath) - } - onActivityItemClicked: { - model.triggerDefaultAction(index) - } - } - - Loader { - id: fileActivityDialogLoader - - property string displayPath: "" - property string absolutePath: "" - function refresh() { - active = true - item.model.load(activityModel.accountState, absolutePath) - item.show() + delegate: ActivityItem { + width: activityListView.width + height: Style.trayWindowHeaderHeight + onClicked: activityModel.triggerDefaultAction(model.index) } - - active: false - sourceComponent: FileActivityDialog { - title: qsTr("%1 - File activity").arg(fileActivityDialogLoader.displayPath) - onClosing: fileActivityDialogLoader.active = false - } - - onLoaded: refresh() } - } // Rectangle trayWindowBackground + } // Rectangle trayWindowBackground } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/ocupdater.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/ocupdater.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/ocupdater.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/ocupdater.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -106,8 +106,8 @@ && !updateSucceeded() /* Someone might have run the updater manually between restarts */) { const auto messageBoxStartInstaller = new QMessageBox(QMessageBox::Information, tr("New %1 update ready").arg(Theme::instance()->appNameGUI()), - tr("A new update for %1 is about to be installed. The updater may ask " - "for additional privileges during the process. Your computer may reboot to complete the installation.") + tr("A new update for %1 is about to be installed. The updater may ask\n" + "for additional privileges during the process.") .arg(Theme::instance()->appNameGUI()), QMessageBox::Ok, nullptr); @@ -144,7 +144,7 @@ } } -QString OCUpdater::statusString(UpdateStatusStringFormat format) const +QString OCUpdater::statusString() const { QString updateVersion = _updateInfo.versionString(); @@ -153,20 +153,12 @@ return tr("Downloading %1. Please wait …").arg(updateVersion); case DownloadComplete: return tr("%1 available. Restart application to start the update.").arg(updateVersion); - case DownloadFailed: { - if (format == UpdateStatusStringFormat::Html) { - return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web()); - } + case DownloadFailed: return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web()); - } case DownloadTimedOut: return tr("Could not check for new updates."); - case UpdateOnlyAvailableThroughSystem: { - if (format == UpdateStatusStringFormat::Html) { - return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web()); - } + case UpdateOnlyAvailableThroughSystem: return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web()); - } case CheckingServer: return tr("Checking update server …"); case Unknown: @@ -222,7 +214,7 @@ }; QString msiLogFile = cfg.configPath() + "msi.log"; - QString command = QString("&{msiexec /promptrestart /passive /i '%1' /L*V '%2'| Out-Null ; &'%3'}") + QString command = QString("&{msiexec /norestart /passive /i '%1' /L*V '%2'| Out-Null ; &'%3'}") .arg(preparePathForPowershell(updateFile)) .arg(preparePathForPowershell(msiLogFile)) .arg(preparePathForPowershell(QCoreApplication::applicationFilePath())); @@ -461,7 +453,7 @@ ico->setPixmap(infoIcon.pixmap(iconSize)); auto lbl = new QLabel; QString txt = tr("

A new version of the %1 Client is available but the updating process failed.

" - "

%2 has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.

") + "

%2 has been downloaded. The installed version is %3.

") .arg(Utility::escape(Theme::instance()->appNameGUI()), Utility::escape(targetVersion), Utility::escape(clientVersion())); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/ocupdater.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/ocupdater.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/ocupdater.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/ocupdater.h 2022-01-03 12:25:12.000000000 +0000 @@ -97,11 +97,6 @@ DownloadFailed, DownloadTimedOut, UpdateOnlyAvailableThroughSystem }; - - enum UpdateStatusStringFormat { - PlainText, - Html, - }; explicit OCUpdater(const QUrl &url); void setUpdateUrl(const QUrl &url); @@ -110,7 +105,7 @@ void checkForUpdate() override; - QString statusString(UpdateStatusStringFormat format = PlainText) const; + QString statusString() const; int downloadState() const; void setDownloadState(DownloadState state); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/sparkleupdater.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/sparkleupdater.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/sparkleupdater.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/sparkleupdater.h 2022-01-03 12:25:12.000000000 +0000 @@ -26,7 +26,7 @@ Q_OBJECT public: SparkleUpdater(const QUrl &appCastUrl); - ~SparkleUpdater() override; + ~SparkleUpdater(); void setUpdateUrl(const QUrl &url); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/updater.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/updater.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/updater/updater.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/updater/updater.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -118,7 +118,7 @@ { #ifdef Q_OS_LINUX QProcess process; - process.start(QLatin1String("lsb_release"), { QStringLiteral("-a") }); + process.start(QLatin1String("lsb_release -a")); process.waitForFinished(); QByteArray output = process.readAllStandardOutput(); qCDebug(lcUpdater) << "Sys Info size: " << output.length(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatus.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatus.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatus.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatus.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,143 @@ +/* + * Copyright (C) by Camila + * + * 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 "userstatus.h" +#include "account.h" +#include "accountstate.h" +#include "networkjobs.h" +#include "folderman.h" +#include "creds/abstractcredentials.h" +#include "theme.h" +#include "capabilities.h" + +#include +#include +#include + +namespace OCC { + +Q_LOGGING_CATEGORY(lcUserStatus, "nextcloud.gui.userstatus", QtInfoMsg) + +namespace { + UserStatus::Status stringToEnum(const QString &status) + { + // it needs to match the Status enum + const QHash preDefinedStatus{ + {"online", UserStatus::Status::Online}, + {"dnd", UserStatus::Status::DoNotDisturb}, + {"away", UserStatus::Status::Away}, + {"offline", UserStatus::Status::Offline}, + {"invisible", UserStatus::Status::Invisible} + }; + + // api should return invisible, dnd,... toLower() it is to make sure + // it matches _preDefinedStatus, otherwise the default is online (0) + return preDefinedStatus.value(status.toLower(), UserStatus::Status::Online); + } + + QString enumToString(UserStatus::Status status) + { + switch (status) { + case UserStatus::Status::Away: + return QObject::tr("Away"); + case UserStatus::Status::DoNotDisturb: + return QObject::tr("Do not disturb"); + case UserStatus::Status::Invisible: + case UserStatus::Status::Offline: + return QObject::tr("Offline"); + case UserStatus::Status::Online: + return QObject::tr("Online"); + } + + Q_UNREACHABLE(); + } +} + +UserStatus::UserStatus(QObject *parent) + : QObject(parent) +{ +} + +void UserStatus::fetchUserStatus(AccountPtr account) +{ + if (!account->capabilities().userStatus()) { + return; + } + + if (_job) { + _job->deleteLater(); + } + + _job = new JsonApiJob(account, QStringLiteral("/ocs/v2.php/apps/user_status/api/v1/user_status"), this); + connect(_job.data(), &JsonApiJob::jsonReceived, this, &UserStatus::slotFetchUserStatusFinished); + _job->start(); +} + +void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode) +{ + const QJsonObject defaultValues { + {"icon", ""}, + {"message", ""}, + {"status", "online"}, + {"messageIsPredefined", "false"}, + {"statusIsUserDefined", "false"} + }; + + if (statusCode != 200) { + qCInfo(lcUserStatus) << "Slot fetch UserStatus finished with status code" << statusCode; + qCInfo(lcUserStatus) << "Using then default values as if user has not set any status" << defaultValues; + } + + const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues); + + _emoji = retrievedData.value("icon").toString().trimmed(); + _status = stringToEnum(retrievedData.value("status").toString()); + _message = retrievedData.value("message").toString().trimmed(); + + emit fetchUserStatusFinished(); +} + +UserStatus::Status UserStatus::status() const +{ + return _status; +} + +QString UserStatus::message() const +{ + return _message; +} + +QString UserStatus::emoji() const +{ + return _emoji; +} + +QUrl UserStatus::icon() const +{ + switch (_status) { + case Status::Away: + return Theme::instance()->statusAwayImageSource(); + case Status::DoNotDisturb: + return Theme::instance()->statusDoNotDisturbImageSource(); + case Status::Invisible: + case Status::Offline: + return Theme::instance()->statusInvisibleImageSource(); + case Status::Online: + return Theme::instance()->statusOnlineImageSource(); + } + + Q_UNREACHABLE(); +} + +} // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatus.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatus.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatus.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatus.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * Copyright (C) by Camila + * + * 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 USERSTATUS_H +#define USERSTATUS_H + +#include +#include "accountfwd.h" + +namespace OCC { + +class JsonApiJob; + +class UserStatus : public QObject +{ + Q_OBJECT + +public: + explicit UserStatus(QObject *parent = nullptr); + enum class Status { + Online, + DoNotDisturb, + Away, + Offline, + Invisible + }; + Q_ENUM(Status); + void fetchUserStatus(AccountPtr account); + Status status() const; + QString message() const; + QString emoji() const; + QUrl icon() const; + +private slots: + void slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode); + +signals: + void fetchUserStatusFinished(); + +private: + QPointer _job; // the currently running job + Status _status = Status::Online; + QString _message; + QString _emoji; +}; + + +} // namespace OCC + +#endif //USERSTATUS_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/UserStatusSelectorDialog.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/UserStatusSelectorDialog.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/UserStatusSelectorDialog.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/UserStatusSelectorDialog.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -import QtQuick.Window 2.15 - -import com.nextcloud.desktopclient 1.0 as NC - -Window { - id: dialog - - property NC.UserStatusSelectorModel model: NC.UserStatusSelectorModel { - onFinished: dialog.close() - } - - minimumWidth: view.implicitWidth - minimumHeight: view.implicitHeight - maximumWidth: view.implicitWidth - maximumHeight: view.implicitHeight - width: maximumWidth - height: maximumHeight - - visible: true - - flags: Qt.Dialog - - UserStatusSelector { - id: view - userStatusSelectorModel: model - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatusselectormodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatusselectormodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatusselectormodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatusselectormodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,468 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "userstatusselectormodel.h" -#include "tray/usermodel.h" - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -namespace OCC { - -Q_LOGGING_CATEGORY(lcUserStatusDialogModel, "nextcloud.gui.userstatusdialogmodel", QtInfoMsg) - -UserStatusSelectorModel::UserStatusSelectorModel(QObject *parent) - : QObject(parent) - , _dateTimeProvider(new DateTimeProvider) -{ - _userStatus.setIcon("😀"); -} - -UserStatusSelectorModel::UserStatusSelectorModel(std::shared_ptr userStatusConnector, QObject *parent) - : QObject(parent) - , _userStatusConnector(userStatusConnector) - , _userStatus("no-id", "", "😀", UserStatus::OnlineStatus::Online, false, {}) - , _dateTimeProvider(new DateTimeProvider) -{ - _userStatus.setIcon("😀"); - init(); -} - -UserStatusSelectorModel::UserStatusSelectorModel(std::shared_ptr userStatusConnector, - std::unique_ptr dateTimeProvider, - QObject *parent) - : QObject(parent) - , _userStatusConnector(userStatusConnector) - , _dateTimeProvider(std::move(dateTimeProvider)) -{ - _userStatus.setIcon("😀"); - init(); -} - -UserStatusSelectorModel::UserStatusSelectorModel(const UserStatus &userStatus, - std::unique_ptr dateTimeProvider, QObject *parent) - : QObject(parent) - , _userStatus(userStatus) - , _dateTimeProvider(std::move(dateTimeProvider)) -{ - _userStatus.setIcon("😀"); -} - -UserStatusSelectorModel::UserStatusSelectorModel(const UserStatus &userStatus, - QObject *parent) - : QObject(parent) - , _userStatus(userStatus) -{ - _userStatus.setIcon("😀"); -} - -void UserStatusSelectorModel::load(int id) -{ - reset(); - _userStatusConnector = UserModel::instance()->userStatusConnector(id); - init(); -} - -void UserStatusSelectorModel::reset() -{ - if (_userStatusConnector) { - disconnect(_userStatusConnector.get(), &UserStatusConnector::userStatusFetched, this, - &UserStatusSelectorModel::onUserStatusFetched); - disconnect(_userStatusConnector.get(), &UserStatusConnector::predefinedStatusesFetched, this, - &UserStatusSelectorModel::onPredefinedStatusesFetched); - disconnect(_userStatusConnector.get(), &UserStatusConnector::error, this, - &UserStatusSelectorModel::onError); - disconnect(_userStatusConnector.get(), &UserStatusConnector::userStatusSet, this, - &UserStatusSelectorModel::onUserStatusSet); - disconnect(_userStatusConnector.get(), &UserStatusConnector::messageCleared, this, - &UserStatusSelectorModel::onMessageCleared); - } - _userStatusConnector = nullptr; -} - -void UserStatusSelectorModel::init() -{ - if (!_userStatusConnector) { - return; - } - - connect(_userStatusConnector.get(), &UserStatusConnector::userStatusFetched, this, - &UserStatusSelectorModel::onUserStatusFetched); - connect(_userStatusConnector.get(), &UserStatusConnector::predefinedStatusesFetched, this, - &UserStatusSelectorModel::onPredefinedStatusesFetched); - connect(_userStatusConnector.get(), &UserStatusConnector::error, this, - &UserStatusSelectorModel::onError); - connect(_userStatusConnector.get(), &UserStatusConnector::userStatusSet, this, - &UserStatusSelectorModel::onUserStatusSet); - connect(_userStatusConnector.get(), &UserStatusConnector::messageCleared, this, - &UserStatusSelectorModel::onMessageCleared); - - _userStatusConnector->fetchUserStatus(); - _userStatusConnector->fetchPredefinedStatuses(); -} - -void UserStatusSelectorModel::onUserStatusSet() -{ - emit finished(); -} - -void UserStatusSelectorModel::onMessageCleared() -{ - emit finished(); -} - -void UserStatusSelectorModel::onError(UserStatusConnector::Error error) -{ - qCWarning(lcUserStatusDialogModel) << "Error:" << error; - - switch (error) { - case UserStatusConnector::Error::CouldNotFetchPredefinedUserStatuses: - setError(tr("Could not fetch predefined statuses. Make sure you are connected to the server.")); - return; - - case UserStatusConnector::Error::CouldNotFetchUserStatus: - setError(tr("Could not fetch user status. Make sure you are connected to the server.")); - return; - - case UserStatusConnector::Error::UserStatusNotSupported: - setError(tr("User status feature is not supported. You will not be able to set your user status.")); - return; - - case UserStatusConnector::Error::EmojisNotSupported: - setError(tr("Emojis feature is not supported. Some user status functionality may not work.")); - return; - - case UserStatusConnector::Error::CouldNotSetUserStatus: - setError(tr("Could not set user status. Make sure you are connected to the server.")); - return; - - case UserStatusConnector::Error::CouldNotClearMessage: - setError(tr("Could not clear user status message. Make sure you are connected to the server.")); - return; - } - - Q_UNREACHABLE(); -} - -void UserStatusSelectorModel::setError(const QString &reason) -{ - _errorMessage = reason; - emit errorMessageChanged(); -} - -void UserStatusSelectorModel::clearError() -{ - setError(""); -} - -void UserStatusSelectorModel::setOnlineStatus(UserStatus::OnlineStatus status) -{ - if (status == _userStatus.state()) { - return; - } - - _userStatus.setState(status); - emit onlineStatusChanged(); -} - -QUrl UserStatusSelectorModel::onlineIcon() const -{ - return Theme::instance()->statusOnlineImageSource(); -} - -QUrl UserStatusSelectorModel::awayIcon() const -{ - return Theme::instance()->statusAwayImageSource(); -} -QUrl UserStatusSelectorModel::dndIcon() const -{ - return Theme::instance()->statusDoNotDisturbImageSource(); -} -QUrl UserStatusSelectorModel::invisibleIcon() const -{ - return Theme::instance()->statusInvisibleImageSource(); -} - -UserStatus::OnlineStatus UserStatusSelectorModel::onlineStatus() const -{ - return _userStatus.state(); -} - -QString UserStatusSelectorModel::userStatusMessage() const -{ - return _userStatus.message(); -} - -void UserStatusSelectorModel::setUserStatusMessage(const QString &message) -{ - _userStatus.setMessage(message); - _userStatus.setMessagePredefined(false); - emit userStatusChanged(); -} - -void UserStatusSelectorModel::setUserStatusEmoji(const QString &emoji) -{ - _userStatus.setIcon(emoji); - _userStatus.setMessagePredefined(false); - emit userStatusChanged(); -} - -QString UserStatusSelectorModel::userStatusEmoji() const -{ - return _userStatus.icon(); -} - -void UserStatusSelectorModel::onUserStatusFetched(const UserStatus &userStatus) -{ - if (userStatus.state() != UserStatus::OnlineStatus::Offline) { - _userStatus.setState(userStatus.state()); - } - _userStatus.setMessage(userStatus.message()); - _userStatus.setMessagePredefined(userStatus.messagePredefined()); - _userStatus.setId(userStatus.id()); - _userStatus.setClearAt(userStatus.clearAt()); - - if (!userStatus.icon().isEmpty()) { - _userStatus.setIcon(userStatus.icon()); - } - - emit userStatusChanged(); - emit onlineStatusChanged(); - emit clearAtChanged(); -} - -Optional UserStatusSelectorModel::clearStageTypeToDateTime(ClearStageType type) const -{ - switch (type) { - case ClearStageType::DontClear: - return {}; - - case ClearStageType::HalfHour: { - ClearAt clearAt; - clearAt._type = ClearAtType::Period; - clearAt._period = 60 * 30; - return clearAt; - } - - case ClearStageType::OneHour: { - ClearAt clearAt; - clearAt._type = ClearAtType::Period; - clearAt._period = 60 * 60; - return clearAt; - } - - case ClearStageType::FourHour: { - ClearAt clearAt; - clearAt._type = ClearAtType::Period; - clearAt._period = 60 * 60 * 4; - return clearAt; - } - - case ClearStageType::Today: { - ClearAt clearAt; - clearAt._type = ClearAtType::EndOf; - clearAt._endof = "day"; - return clearAt; - } - - case ClearStageType::Week: { - ClearAt clearAt; - clearAt._type = ClearAtType::EndOf; - clearAt._endof = "week"; - return clearAt; - } - - default: - Q_UNREACHABLE(); - } -} - -void UserStatusSelectorModel::setUserStatus() -{ - Q_ASSERT(_userStatusConnector); - if (!_userStatusConnector) { - return; - } - - clearError(); - _userStatusConnector->setUserStatus(_userStatus); -} - -void UserStatusSelectorModel::clearUserStatus() -{ - Q_ASSERT(_userStatusConnector); - if (!_userStatusConnector) { - return; - } - - clearError(); - _userStatusConnector->clearMessage(); -} - -void UserStatusSelectorModel::onPredefinedStatusesFetched(const std::vector &statuses) -{ - _predefinedStatuses = statuses; - emit predefinedStatusesChanged(); -} - -UserStatus UserStatusSelectorModel::predefinedStatus(int index) const -{ - Q_ASSERT(0 <= index && index < static_cast(_predefinedStatuses.size())); - return _predefinedStatuses[index]; -} - -int UserStatusSelectorModel::predefinedStatusesCount() const -{ - return static_cast(_predefinedStatuses.size()); -} - -void UserStatusSelectorModel::setPredefinedStatus(int index) -{ - Q_ASSERT(0 <= index && index < static_cast(_predefinedStatuses.size())); - - _userStatus.setMessagePredefined(true); - const auto predefinedStatus = _predefinedStatuses[index]; - _userStatus.setId(predefinedStatus.id()); - _userStatus.setMessage(predefinedStatus.message()); - _userStatus.setIcon(predefinedStatus.icon()); - _userStatus.setClearAt(predefinedStatus.clearAt()); - - emit userStatusChanged(); - emit clearAtChanged(); -} - -QString UserStatusSelectorModel::clearAtStageToString(ClearStageType stage) const -{ - switch (stage) { - case ClearStageType::DontClear: - return tr("Don't clear"); - - case ClearStageType::HalfHour: - return tr("30 minutes"); - - case ClearStageType::OneHour: - return tr("1 hour"); - - case ClearStageType::FourHour: - return tr("4 hours"); - - case ClearStageType::Today: - return tr("Today"); - - case ClearStageType::Week: - return tr("This week"); - - default: - Q_UNREACHABLE(); - } -} - -QStringList UserStatusSelectorModel::clearAtValues() const -{ - QStringList clearAtStages; - std::transform(_clearStages.begin(), _clearStages.end(), - std::back_inserter(clearAtStages), - [this](const ClearStageType &stage) { return clearAtStageToString(stage); }); - - return clearAtStages; -} - -void UserStatusSelectorModel::setClearAt(int index) -{ - Q_ASSERT(0 <= index && index < static_cast(_clearStages.size())); - _userStatus.setClearAt(clearStageTypeToDateTime(_clearStages[index])); - emit clearAtChanged(); -} - -QString UserStatusSelectorModel::errorMessage() const -{ - return _errorMessage; -} - -QString UserStatusSelectorModel::timeDifferenceToString(int differenceSecs) const -{ - if (differenceSecs < 60) { - return tr("Less than a minute"); - } else if (differenceSecs < 60 * 60) { - const auto minutesLeft = std::ceil(differenceSecs / 60.0); - if (minutesLeft == 1) { - return tr("1 minute"); - } else { - return tr("%1 minutes").arg(minutesLeft); - } - } else if (differenceSecs < 60 * 60 * 24) { - const auto hoursLeft = std::ceil(differenceSecs / 60.0 / 60.0); - if (hoursLeft == 1) { - return tr("1 hour"); - } else { - return tr("%1 hours").arg(hoursLeft); - } - } else { - const auto daysLeft = std::ceil(differenceSecs / 60.0 / 60.0 / 24.0); - if (daysLeft == 1) { - return tr("1 day"); - } else { - return tr("%1 days").arg(daysLeft); - } - } -} - -QString UserStatusSelectorModel::clearAtReadable(const Optional &clearAt) const -{ - if (clearAt) { - switch (clearAt->_type) { - case ClearAtType::Period: { - return timeDifferenceToString(clearAt->_period); - } - - case ClearAtType::Timestamp: { - const int difference = static_cast(clearAt->_timestamp - _dateTimeProvider->currentDateTime().toTime_t()); - return timeDifferenceToString(difference); - } - - case ClearAtType::EndOf: { - if (clearAt->_endof == "day") { - return tr("Today"); - } else if (clearAt->_endof == "week") { - return tr("This week"); - } - Q_UNREACHABLE(); - } - - default: - Q_UNREACHABLE(); - } - } - return tr("Don't clear"); -} - -QString UserStatusSelectorModel::predefinedStatusClearAt(int index) const -{ - return clearAtReadable(predefinedStatus(index).clearAt()); -} - -QString UserStatusSelectorModel::clearAt() const -{ - return clearAtReadable(_userStatus.clearAt()); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatusselectormodel.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatusselectormodel.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/userstatusselectormodel.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/userstatusselectormodel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,143 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include "common/result.h" - -#include -#include - -#include -#include -#include - -#include -#include -#include - -namespace OCC { - -class UserStatusSelectorModel : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QString userStatusMessage READ userStatusMessage NOTIFY userStatusChanged) - Q_PROPERTY(QString userStatusEmoji READ userStatusEmoji WRITE setUserStatusEmoji NOTIFY userStatusChanged) - Q_PROPERTY(OCC::UserStatus::OnlineStatus onlineStatus READ onlineStatus WRITE setOnlineStatus NOTIFY onlineStatusChanged) - Q_PROPERTY(int predefinedStatusesCount READ predefinedStatusesCount NOTIFY predefinedStatusesChanged) - Q_PROPERTY(QStringList clearAtValues READ clearAtValues CONSTANT) - Q_PROPERTY(QString clearAt READ clearAt NOTIFY clearAtChanged) - Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY errorMessageChanged) - Q_PROPERTY(QUrl onlineIcon READ onlineIcon CONSTANT) - Q_PROPERTY(QUrl awayIcon READ awayIcon CONSTANT) - Q_PROPERTY(QUrl dndIcon READ dndIcon CONSTANT) - Q_PROPERTY(QUrl invisibleIcon READ invisibleIcon CONSTANT) - -public: - explicit UserStatusSelectorModel(QObject *parent = nullptr); - - explicit UserStatusSelectorModel(std::shared_ptr userStatusConnector, - QObject *parent = nullptr); - - explicit UserStatusSelectorModel(std::shared_ptr userStatusConnector, - std::unique_ptr dateTimeProvider, - QObject *parent = nullptr); - - explicit UserStatusSelectorModel(const UserStatus &userStatus, - std::unique_ptr dateTimeProvider, - QObject *parent = nullptr); - - explicit UserStatusSelectorModel(const UserStatus &userStatus, - QObject *parent = nullptr); - - Q_INVOKABLE void load(int id); - - Q_REQUIRED_RESULT UserStatus::OnlineStatus onlineStatus() const; - Q_INVOKABLE void setOnlineStatus(OCC::UserStatus::OnlineStatus status); - - Q_REQUIRED_RESULT QUrl onlineIcon() const; - Q_REQUIRED_RESULT QUrl awayIcon() const; - Q_REQUIRED_RESULT QUrl dndIcon() const; - Q_REQUIRED_RESULT QUrl invisibleIcon() const; - - Q_REQUIRED_RESULT QString userStatusMessage() const; - Q_INVOKABLE void setUserStatusMessage(const QString &message); - void setUserStatusEmoji(const QString &emoji); - Q_REQUIRED_RESULT QString userStatusEmoji() const; - - Q_INVOKABLE void setUserStatus(); - Q_INVOKABLE void clearUserStatus(); - - Q_REQUIRED_RESULT int predefinedStatusesCount() const; - Q_INVOKABLE UserStatus predefinedStatus(int index) const; - Q_INVOKABLE QString predefinedStatusClearAt(int index) const; - Q_INVOKABLE void setPredefinedStatus(int index); - - Q_REQUIRED_RESULT QStringList clearAtValues() const; - Q_REQUIRED_RESULT QString clearAt() const; - Q_INVOKABLE void setClearAt(int index); - - Q_REQUIRED_RESULT QString errorMessage() const; - -signals: - void errorMessageChanged(); - void userStatusChanged(); - void onlineStatusChanged(); - void clearAtChanged(); - void predefinedStatusesChanged(); - void finished(); - -private: - enum class ClearStageType { - DontClear, - HalfHour, - OneHour, - FourHour, - Today, - Week - }; - - void init(); - void reset(); - void onUserStatusFetched(const UserStatus &userStatus); - void onPredefinedStatusesFetched(const std::vector &statuses); - void onUserStatusSet(); - void onMessageCleared(); - void onError(UserStatusConnector::Error error); - - Q_REQUIRED_RESULT QString clearAtStageToString(ClearStageType stage) const; - Q_REQUIRED_RESULT QString clearAtReadable(const Optional &clearAt) const; - Q_REQUIRED_RESULT QString timeDifferenceToString(int differenceSecs) const; - Q_REQUIRED_RESULT Optional clearStageTypeToDateTime(ClearStageType type) const; - void setError(const QString &reason); - void clearError(); - - std::shared_ptr _userStatusConnector {}; - std::vector _predefinedStatuses; - UserStatus _userStatus; - std::unique_ptr _dateTimeProvider; - - QString _errorMessage; - - std::vector _clearStages = { - ClearStageType::DontClear, - ClearStageType::HalfHour, - ClearStageType::OneHour, - ClearStageType::FourHour, - ClearStageType::Today, - ClearStageType::Week - }; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/UserStatusSelector.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/UserStatusSelector.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/UserStatusSelector.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/UserStatusSelector.qml 1970-01-01 00:00:00.000000000 +0000 @@ -1,200 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -import QtQuick 2.6 -import QtQuick.Dialogs 1.3 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtQuick.Window 2.15 -import com.nextcloud.desktopclient 1.0 as NC - -ColumnLayout { - id: rootLayout - spacing: 0 - property NC.UserStatusSelectorModel userStatusSelectorModel - - FontMetrics { - id: metrics - } - - Text { - Layout.topMargin: 16 - Layout.leftMargin: 8 - Layout.rightMargin: 8 - Layout.bottomMargin: 8 - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - font.bold: true - text: qsTr("Online status") - } - - GridLayout { - Layout.margins: 8 - Layout.alignment: Qt.AlignTop - columns: 2 - rows: 2 - columnSpacing: 8 - rowSpacing: 8 - - Button { - Layout.fillWidth: true - checked: NC.UserStatus.Online == userStatusSelectorModel.onlineStatus - checkable: true - icon.source: userStatusSelectorModel.onlineIcon - icon.color: "transparent" - text: qsTr("Online") - onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Online) - implicitWidth: 100 - } - Button { - Layout.fillWidth: true - checked: NC.UserStatus.Away == userStatusSelectorModel.onlineStatus - checkable: true - icon.source: userStatusSelectorModel.awayIcon - icon.color: "transparent" - text: qsTr("Away") - onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Away) - implicitWidth: 100 - - } - Button { - Layout.fillWidth: true - checked: NC.UserStatus.DoNotDisturb == userStatusSelectorModel.onlineStatus - checkable: true - icon.source: userStatusSelectorModel.dndIcon - icon.color: "transparent" - text: qsTr("Do not disturb") - onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.DoNotDisturb) - implicitWidth: 100 - } - Button { - Layout.fillWidth: true - checked: NC.UserStatus.Invisible == userStatusSelectorModel.onlineStatus - checkable: true - icon.source: userStatusSelectorModel.invisibleIcon - icon.color: "transparent" - text: qsTr("Invisible") - onClicked: userStatusSelectorModel.setOnlineStatus(NC.UserStatus.Invisible) - implicitWidth: 100 - } - } - - Text { - Layout.topMargin: 16 - Layout.leftMargin: 8 - Layout.rightMargin: 8 - Layout.bottomMargin: 8 - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - font.bold: true - text: qsTr("Status message") - } - - RowLayout { - Layout.topMargin: 8 - Layout.leftMargin: 8 - Layout.rightMargin: 8 - Layout.bottomMargin: 16 - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - - Button { - Layout.preferredWidth: userStatusMessageTextField.height // metrics.height * 2 - Layout.preferredHeight: userStatusMessageTextField.height // metrics.height * 2 - text: userStatusSelectorModel.userStatusEmoji - onClicked: emojiDialog.open() - } - - Popup { - id: emojiDialog - padding: 0 - margins: 0 - - anchors.centerIn: Overlay.overlay - - EmojiPicker { - id: emojiPicker - - onChosen: { - userStatusSelectorModel.userStatusEmoji = emoji - emojiDialog.close() - } - } - } - - TextField { - id: userStatusMessageTextField - Layout.fillWidth: true - placeholderText: qsTr("What is your status?") - text: userStatusSelectorModel.userStatusMessage - selectByMouse: true - onEditingFinished: userStatusSelectorModel.setUserStatusMessage(text) - } - } - - Repeater { - model: userStatusSelectorModel.predefinedStatusesCount - - Button { - id: control - Layout.fillWidth: true - flat: !hovered - hoverEnabled: true - text: userStatusSelectorModel.predefinedStatus(index).icon + " " + userStatusSelectorModel.predefinedStatus(index).message + " - " + userStatusSelectorModel.predefinedStatusClearAt(index) - onClicked: userStatusSelectorModel.setPredefinedStatus(index) - } - } - - RowLayout { - Layout.topMargin: 16 - Layout.leftMargin: 8 - Layout.rightMargin: 8 - Layout.bottomMargin: 8 - Layout.alignment: Qt.AlignTop - - Text { - text: qsTr("Clear status message after") - } - - ComboBox { - Layout.fillWidth: true - model: userStatusSelectorModel.clearAtValues - displayText: userStatusSelectorModel.clearAt - onActivated: userStatusSelectorModel.setClearAt(index) - } - } - - RowLayout { - Layout.margins: 8 - Layout.alignment: Qt.AlignTop - - Button { - Layout.fillWidth: true - text: qsTr("Clear status message") - onClicked: userStatusSelectorModel.clearUserStatus() - } - Button { - highlighted: true - Layout.fillWidth: true - text: qsTr("Set status message") - onClicked: userStatusSelectorModel.setUserStatus() - } - } - - ErrorBox { - Layout.margins: 8 - Layout.fillWidth: true - - visible: userStatusSelectorModel.errorMessage != "" - text: "Error: " + userStatusSelectorModel.errorMessage - } -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/flow2authwidget.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/flow2authwidget.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/flow2authwidget.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/flow2authwidget.h 2022-01-03 12:25:12.000000000 +0000 @@ -31,7 +31,7 @@ Q_OBJECT public: Flow2AuthWidget(QWidget *parent = nullptr); - ~Flow2AuthWidget() override; + virtual ~Flow2AuthWidget(); void startAuth(Account *account); void resetAuth(Account *account = nullptr); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudadvancedsetuppage.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudadvancedsetuppage.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudadvancedsetuppage.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudadvancedsetuppage.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -57,13 +57,7 @@ setupCustomization(); connect(_ui.pbSelectLocalFolder, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectFolder); - setButtonText(QWizard::FinishButton, tr("Connect")); - - if (Theme::instance()->enforceVirtualFilesSyncFolder()) { - _ui.rSyncEverything->setDisabled(true); - _ui.rSelectiveSync->setDisabled(true); - _ui.bSelectiveSync->setDisabled(true); - } + setButtonText(QWizard::NextButton, tr("Connect")); connect(_ui.rSyncEverything, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSyncEverythingClicked); connect(_ui.rSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); @@ -140,8 +134,8 @@ } _checking = false; - _ui.lSelectiveSyncSizeLabel->clear(); - _ui.lSyncEverythingSizeLabel->clear(); + _ui.lSelectiveSyncSizeLabel->setText(QString()); + _ui.lSyncEverythingSizeLabel->setText(QString()); // Update the local folder - this is not guaranteed to find a good one QString goodLocalFolder = FolderMan::instance()->findGoodPathForNewSyncFolder(localFolder(), serverUrl()); @@ -151,7 +145,7 @@ updateStatus(); // ensure "next" gets the focus, not obSelectLocalFolder - QTimer::singleShot(0, wizard()->button(QWizard::FinishButton), qOverload<>(&QWidget::setFocus)); + QTimer::singleShot(0, wizard()->button(QWizard::NextButton), SLOT(setFocus())); auto acc = static_cast(wizard())->account(); auto quotaJob = new PropfindJob(acc, _remoteFolder, this); @@ -262,10 +256,10 @@ if (_remoteFolder.isEmpty() || _remoteFolder == QLatin1String("/")) { t = ""; } else { - t = Utility::escape(tr(R"(%1 folder "%2" is synced to local folder "%3")") + t = Utility::escape(tr("%1 folder '%2' is synced to local folder '%3'") .arg(Theme::instance()->appName(), _remoteFolder, QDir::toNativeSeparators(locFolder))); - _ui.rSyncEverything->setText(tr("Sync the folder \"%1\"").arg(_remoteFolder)); + _ui.rSyncEverything->setText(tr("Sync the folder '%1'").arg(_remoteFolder)); } const bool dirNotEmpty(QDir(locFolder).entryList(QDir::AllEntries | QDir::NoDotAndDotDot).count() > 0); @@ -333,8 +327,7 @@ int OwncloudAdvancedSetupPage::nextId() const { - // tells the caller that this is the last dialog page - return -1; + return WizardCommon::Page_Result; } QString OwncloudAdvancedSetupPage::localFolder() const diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudconnectionmethoddialog.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudconnectionmethoddialog.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudconnectionmethoddialog.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudconnectionmethoddialog.h 2022-01-03 12:25:12.000000000 +0000 @@ -36,7 +36,7 @@ public: explicit OwncloudConnectionMethodDialog(QWidget *parent = nullptr); - ~OwncloudConnectionMethodDialog() override; + ~OwncloudConnectionMethodDialog(); enum { Closed = 0, No_TLS, diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudsetuppage.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudsetuppage.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudsetuppage.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudsetuppage.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -217,10 +217,8 @@ case DetermineAuthTypeJob::WebViewFlow: return WizardCommon::Page_WebView; #endif // WITH_WEBENGINE - case DetermineAuthTypeJob::NoAuthType: - return WizardCommon::Page_HttpCreds; } - Q_UNREACHABLE(); + return WizardCommon::Page_HttpCreds; } QString OwncloudSetupPage::url() const diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudsetuppage.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudsetuppage.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudsetuppage.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudsetuppage.h 2022-01-03 12:25:12.000000000 +0000 @@ -43,7 +43,7 @@ Q_OBJECT public: OwncloudSetupPage(QWidget *parent = nullptr); - ~OwncloudSetupPage() override; + ~OwncloudSetupPage(); bool isComplete() const override; void initializePage() override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardcommon.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardcommon.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardcommon.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardcommon.h 2022-01-03 12:25:12.000000000 +0000 @@ -50,6 +50,7 @@ Page_WebView, #endif // WITH_WEBENGINE Page_AdvancedSetup, + Page_Result }; } // ns WizardCommon diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizard.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizard.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizard.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizard.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -25,6 +25,7 @@ #include "wizard/owncloudhttpcredspage.h" #include "wizard/owncloudoauthcredspage.h" #include "wizard/owncloudadvancedsetuppage.h" +#include "wizard/owncloudwizardresultpage.h" #include "wizard/webviewpage.h" #include "wizard/flow2authcredspage.h" @@ -52,6 +53,7 @@ , _browserCredsPage(new OwncloudOAuthCredsPage) , _flow2CredsPage(new Flow2AuthCredsPage) , _advancedSetupPage(new OwncloudAdvancedSetupPage(this)) + , _resultPage(new OwncloudWizardResultPage) #ifdef WITH_WEBENGINE , _webViewPage(new WebViewPage(this)) #else // WITH_WEBENGINE @@ -67,6 +69,7 @@ setPage(WizardCommon::Page_OAuthCreds, _browserCredsPage); setPage(WizardCommon::Page_Flow2AuthCreds, _flow2CredsPage); setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); + setPage(WizardCommon::Page_Result, _resultPage); #ifdef WITH_WEBENGINE setPage(WizardCommon::Page_WebView, _webViewPage); #endif // WITH_WEBENGINE @@ -206,9 +209,16 @@ _registration = registration; } + +void OwncloudWizard::enableFinishOnResultWidget(bool enable) +{ + _resultPage->setComplete(enable); +} + void OwncloudWizard::setRemoteFolder(const QString &remoteFolder) { _advancedSetupPage->setRemoteFolder(remoteFolder); + _resultPage->setRemoteFolder(remoteFolder); } void OwncloudWizard::successfulStep() @@ -239,17 +249,13 @@ break; case WizardCommon::Page_ServerSetup: + case WizardCommon::Page_Result: qCWarning(lcWizard, "Should not happen at this stage."); break; } ownCloudGui::raiseDialog(this); - if (nextId() == -1) { - disconnect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); - emit basicSetupFinished(QDialog::Accepted); - } else { - next(); - } + next(); } void OwncloudWizard::setAuthType(DetermineAuthTypeJob::AuthType type) @@ -294,7 +300,7 @@ id == WizardCommon::Page_Flow2AuthCreds) { setButtonLayout({ QWizard::Stretch, QWizard::BackButton }); } else if (id == WizardCommon::Page_AdvancedSetup) { - setButtonLayout({ QWizard::Stretch, QWizard::CustomButton1, QWizard::BackButton, QWizard::FinishButton }); + setButtonLayout({ QWizard::Stretch, QWizard::CustomButton1, QWizard::BackButton, QWizard::NextButton }); setNextButtonAsDefault(); } else { setButtonLayout({ QWizard::Stretch, QWizard::BackButton, QWizard::NextButton }); @@ -305,6 +311,14 @@ emit clearPendingRequests(); } + if (id == WizardCommon::Page_Result) { + disconnect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); + emit basicSetupFinished(QDialog::Accepted); + appendToConfigurationLog(QString()); + // Immediately close on show, we currently don't want this page anymore + done(Accepted); + } + if (id == WizardCommon::Page_AdvancedSetup && (_credentialsPage == _browserCredsPage || _credentialsPage == _flow2CredsPage)) { // For OAuth, disable the back button in the Page_AdvancedSetup because we don't want // to re-open the browser. @@ -421,7 +435,6 @@ acceptButton = msgBox->addButton(tr("Enable experimental placeholder mode"), QMessageBox::AcceptRole); msgBox->addButton(tr("Stay safe"), QMessageBox::RejectRole); break; - case Vfs::XAttr: case Vfs::Off: Q_UNREACHABLE(); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizard.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizard.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizard.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizard.h 2022-01-03 12:25:12.000000000 +0000 @@ -68,6 +68,8 @@ bool useVirtualFileSync() const; bool isConfirmBigFolderChecked() const; + void enableFinishOnResultWidget(bool enable); + void displayError(const QString &, bool retryHTTPonly); AbstractCredentials *getCredentials() const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,100 @@ +/* + * Copyright (C) by Klaas Freitag + * Copyright (C) by Krzesimir Nowak + * + * 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 +#include +#include + +#include "guiutility.h" +#include "wizard/owncloudwizardresultpage.h" +#include "wizard/owncloudwizardcommon.h" +#include "theme.h" + +namespace OCC { + +OwncloudWizardResultPage::OwncloudWizardResultPage() + : QWizardPage() +{ + _ui.setupUi(this); + // no fields to register. + + setTitle(WizardCommon::subTitleTemplate().arg(tr("Everything set up!"))); + // required to show header in QWizard's modern style + setSubTitle(QLatin1String(" ")); + + _ui.pbOpenLocal->setText(tr("Open Local Folder")); + // TODO: File doesn't exist anymore - unneccessary or replacement needed? + _ui.pbOpenLocal->setIcon(QIcon(QLatin1String(":/client/theme/folder-sync.png"))); + _ui.pbOpenLocal->setIconSize(QSize(48, 48)); + _ui.pbOpenLocal->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + connect(_ui.pbOpenLocal, &QAbstractButton::clicked, this, &OwncloudWizardResultPage::slotOpenLocal); + + Theme *theme = Theme::instance(); + QIcon appIcon = theme->applicationIcon(); + _ui.pbOpenServer->setText(tr("Open %1 in Browser").arg(theme->appNameGUI())); + _ui.pbOpenServer->setIcon(appIcon.pixmap(48)); + _ui.pbOpenServer->setIconSize(QSize(48, 48)); + _ui.pbOpenServer->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + connect(_ui.pbOpenServer, &QAbstractButton::clicked, this, &OwncloudWizardResultPage::slotOpenServer); + setupCustomization(); +} + +OwncloudWizardResultPage::~OwncloudWizardResultPage() = default; + +void OwncloudWizardResultPage::setComplete(bool complete) +{ + _complete = complete; + emit completeChanged(); +} + +bool OwncloudWizardResultPage::isComplete() const +{ + return _complete; +} + +void OwncloudWizardResultPage::initializePage() +{ + _ui.localFolderLabel->setText(QString()); +} + +void OwncloudWizardResultPage::setRemoteFolder(const QString &remoteFolder) +{ + _remoteFolder = remoteFolder; +} + +void OwncloudWizardResultPage::setupCustomization() +{ + // set defaults for the customize labels. + _ui.topLabel->setText(QString()); + _ui.topLabel->hide(); + + QVariant variant = Theme::instance()->customMedia(Theme::oCSetupResultTop); + WizardCommon::setupCustomMedia(variant, _ui.topLabel); +} + +void OwncloudWizardResultPage::slotOpenLocal() +{ + const QString localFolder = wizard()->property("localFolder").toString(); + QDesktopServices::openUrl(QUrl::fromLocalFile(localFolder)); +} + +void OwncloudWizardResultPage::slotOpenServer() +{ + Theme *theme = Theme::instance(); + QUrl url = QUrl(field("OCUrl").toString() + theme->wizardUrlPostfix()); + Utility::openBrowser(url); +} + +} // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.h 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.h 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright (C) by Klaas Freitag + * Copyright (C) by Krzesimir Nowak + * + * 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 MIRALL_OWNCLOUD_WIZARD_RESULT_PAGE_H +#define MIRALL_OWNCLOUD_WIZARD_RESULT_PAGE_H + +#include + +#include "ui_owncloudwizardresultpage.h" + +namespace OCC { + +/** + * @brief The OwncloudWizardResultPage class + * @ingroup gui + */ +class OwncloudWizardResultPage : public QWizardPage +{ + Q_OBJECT +public: + OwncloudWizardResultPage(); + ~OwncloudWizardResultPage(); + + bool isComplete() const override; + void initializePage() override; + void setRemoteFolder(const QString &remoteFolder); + +public slots: + void setComplete(bool complete); + +protected slots: + void slotOpenLocal(); + void slotOpenServer(); + +protected: + void setupCustomization(); + +private: + QString _localFolder; + QString _remoteFolder; + bool _complete = false; + + Ui_OwncloudWizardResultPage _ui; +}; + +} // namespace OCC + +#endif diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.ui nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.ui --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/owncloudwizardresultpage.ui 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/owncloudwizardresultpage.ui 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,207 @@ + + + OwncloudWizardResultPage + + + + 0 + 0 + 473 + 366 + + + + Form + + + + + + TextLabel + + + true + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 48 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 200 + 80 + + + + PushButton + + + Qt::ToolButtonTextUnderIcon + + + + + + + + 0 + 0 + + + + + 200 + 80 + + + + PushButton + + + Qt::ToolButtonTextUnderIcon + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + + + + + Your entire account is synced to the local folder + + + true + + + + + + + Qt::Vertical + + + + 336 + 13 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 48 + 20 + + + + + + + + + + + diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/webview.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/webview.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/webview.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/webview.h 2022-01-03 12:25:12.000000000 +0000 @@ -21,7 +21,7 @@ Q_OBJECT public: WebView(QWidget *parent = nullptr); - ~WebView() override; + virtual ~WebView(); void setUrl(const QUrl &url); signals: diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/webviewpage.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/webviewpage.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/gui/wizard/webviewpage.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/gui/wizard/webviewpage.h 2022-01-03 12:25:12.000000000 +0000 @@ -14,7 +14,7 @@ Q_OBJECT public: WebViewPage(QWidget *parent = nullptr); - ~WebViewPage() override; + ~WebViewPage(); void initializePage() override; void cleanupPage() override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractnetworkjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractnetworkjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractnetworkjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractnetworkjob.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -139,26 +139,6 @@ return reply; } -QNetworkReply *AbstractNetworkJob::sendRequest(const QByteArray &verb, const QUrl &url, - QNetworkRequest req, const QByteArray &requestBody) -{ - auto reply = _account->sendRawRequest(verb, url, req, requestBody); - _requestBody = nullptr; - adoptRequest(reply); - return reply; -} - -QNetworkReply *AbstractNetworkJob::sendRequest(const QByteArray &verb, - const QUrl &url, - QNetworkRequest req, - QHttpMultiPart *requestBody) -{ - auto reply = _account->sendRawRequest(verb, url, req, requestBody); - _requestBody = nullptr; - adoptRequest(reply); - return reply; -} - void AbstractNetworkJob::adoptRequest(QNetworkReply *reply) { addTimer(reply); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractnetworkjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractnetworkjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractnetworkjob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractnetworkjob.h 2022-01-03 12:25:12.000000000 +0000 @@ -41,7 +41,7 @@ Q_OBJECT public: explicit AbstractNetworkJob(AccountPtr account, const QString &path, QObject *parent = nullptr); - ~AbstractNetworkJob() override; + virtual ~AbstractNetworkJob(); virtual void start(); @@ -77,7 +77,7 @@ bool timedOut() const { return _timedout; } /** Returns an error message, if any. */ - virtual QString errorString() const; + QString errorString() const; /** Like errorString, but also checking the reply body for information. * @@ -128,9 +128,6 @@ QNetworkRequest req = QNetworkRequest(), QIODevice *requestBody = nullptr); - QNetworkReply *sendRequest(const QByteArray &verb, const QUrl &url, - QNetworkRequest req, const QByteArray &requestBody); - // sendRequest does not take a relative path instead of an url, // but the old API allowed that. We have this undefined overload // to help catch usage errors @@ -138,9 +135,6 @@ QNetworkRequest req = QNetworkRequest(), QIODevice *requestBody = nullptr); - QNetworkReply *sendRequest(const QByteArray &verb, const QUrl &url, - QNetworkRequest req, QHttpMultiPart *requestBody); - /** Makes this job drive a pre-made QNetworkReply * * This reply cannot have a QIODevice request body because we can't get diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractpropagateremotedeleteencrypted.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractpropagateremotedeleteencrypted.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/abstractpropagateremotedeleteencrypted.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/abstractpropagateremotedeleteencrypted.h 2022-01-03 12:25:12.000000000 +0000 @@ -32,7 +32,7 @@ Q_OBJECT public: AbstractPropagateRemoteDeleteEncrypted(OwncloudPropagator *propagator, SyncFileItemPtr item, QObject *parent); - ~AbstractPropagateRemoteDeleteEncrypted() override = default; + virtual ~AbstractPropagateRemoteDeleteEncrypted() = default; QNetworkReply::NetworkError networkError() const; QString errorString() const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/accessmanager.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/accessmanager.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/accessmanager.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/accessmanager.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -51,7 +51,9 @@ QByteArray AccessManager::generateRequestId() { - return QUuid::createUuid().toByteArray(QUuid::WithoutBraces); + // Use a UUID with the starting and ending curly brace removed. + auto uuid = QUuid::createUuid().toByteArray(); + return uuid.mid(1, uuid.size() - 2); } QNetworkReply *AccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/account.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/account.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/account.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/account.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -13,8 +13,6 @@ */ #include "account.h" -#include "accountfwd.h" -#include "clientsideencryptionjobs.h" #include "cookiejar.h" #include "networkjobs.h" #include "configfile.h" @@ -25,11 +23,8 @@ #include "pushnotifications.h" #include "version.h" -#include - #include "common/asserts.h" #include "clientsideencryption.h" -#include "ocsuserstatusconnector.h" #include #include @@ -46,10 +41,7 @@ #include #include #include -#include -#include -#include #include #include "creds/abstractcredentials.h" @@ -57,7 +49,6 @@ namespace { constexpr int pushNotificationsReconnectInterval = 1000 * 60 * 2; -constexpr int usernamePrefillServerVersinMinSupportedMajor = 24; } namespace OCC { @@ -99,7 +90,6 @@ void Account::setSharedThis(AccountPtr sharedThis) { _sharedThis = sharedThis.toWeakRef(); - setupUserStatusConnector(); } QString Account::davPathBase() @@ -344,36 +334,6 @@ return _am->sendCustomRequest(req, verb, data); } -QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, const QByteArray &data) -{ - req.setUrl(url); - req.setSslConfiguration(this->getOrCreateSslConfig()); - if (verb == "HEAD" && data.isEmpty()) { - return _am->head(req); - } else if (verb == "GET" && data.isEmpty()) { - return _am->get(req); - } else if (verb == "POST") { - return _am->post(req, data); - } else if (verb == "PUT") { - return _am->put(req, data); - } else if (verb == "DELETE" && data.isEmpty()) { - return _am->deleteResource(req); - } - return _am->sendCustomRequest(req, verb, data); -} - -QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QHttpMultiPart *data) -{ - req.setUrl(url); - req.setSslConfiguration(this->getOrCreateSslConfig()); - if (verb == "PUT") { - return _am->put(req, data); - } else if (verb == "POST") { - return _am->post(req, data); - } - return _am->sendCustomRequest(req, verb, data); -} - SimpleNetworkJob *Account::sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data) { auto job = new SimpleNetworkJob(sharedFromThis()); @@ -403,15 +363,13 @@ sslConfig.setSslOption(QSsl::SslOptionDisableSessionSharing, false); sslConfig.setSslOption(QSsl::SslOptionDisableSessionPersistence, false); - sslConfig.setOcspStaplingEnabled(Theme::instance()->enableStaplingOCSP()); - return sslConfig; } void Account::setApprovedCerts(const QList certs) { _approvedCerts = certs; - QSslConfiguration::defaultConfiguration().addCaCertificates(certs); + QSslSocket::addDefaultCaCertificates(certs); } void Account::addApprovedCerts(const QList certs) @@ -472,9 +430,6 @@ << "\n"; } - qCInfo(lcAccount()) << "ssl errors" << out; - qCInfo(lcAccount()) << reply->sslConfiguration().peerCertificateChain(); - bool allPreviouslyRejected = true; foreach (const QSslError &error, errors) { if (!_rejectedCertificates.contains(error.certificate())) { @@ -506,7 +461,7 @@ return; if (!approvedCerts.isEmpty()) { - QSslConfiguration::defaultConfiguration().addCaCertificates(approvedCerts); + QSslSocket::addDefaultCaCertificates(approvedCerts); addApprovedCerts(approvedCerts); emit wantsAccountSaved(this); @@ -586,21 +541,9 @@ { _capabilities = Capabilities(caps); - setupUserStatusConnector(); trySetupPushNotifications(); } -void Account::setupUserStatusConnector() -{ - _userStatusConnector = std::make_shared(sharedFromThis()); - connect(_userStatusConnector.get(), &UserStatusConnector::userStatusFetched, this, [this](const UserStatus &) { - emit userStatusChanged(); - }); - connect(_userStatusConnector.get(), &UserStatusConnector::messageCleared, this, [this] { - emit userStatusChanged(); - }); -} - QString Account::serverVersion() const { return _serverVersion; @@ -630,11 +573,6 @@ NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_MINOR, NEXTCLOUD_SERVER_VERSION_MIN_SUPPORTED_PATCH); } -bool Account::isUsernamePrefillSupported() const -{ - return serverVersionInt() >= makeServerVersion(usernamePrefillServerVersinMinSupportedMajor, 0, 0); -} - void Account::setServerVersion(const QString &version) { if (version == _serverVersion) { @@ -705,8 +643,7 @@ job->start(); } -void Account::deleteAppPassword() -{ +void Account::deleteAppPassword(){ const QString kck = AbstractCredentials::keychainKey( url().toString(), credentials()->user() + app_password, @@ -734,25 +671,6 @@ job->start(); } -void Account::deleteAppToken() -{ - const auto deleteAppTokenJob = new DeleteJob(sharedFromThis(), QStringLiteral("/ocs/v2.php/core/apppassword")); - connect(deleteAppTokenJob, &DeleteJob::finishedSignal, this, [this]() { - if (const auto deleteJob = qobject_cast(QObject::sender())) { - const auto httpCode = deleteJob->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if (httpCode != 200) { - qCWarning(lcAccount) << "AppToken remove failed for user: " << displayName() << " with code: " << httpCode; - } else { - qCInfo(lcAccount) << "AppToken for user: " << displayName() << " has been removed."; - } - } else { - Q_ASSERT(false); - qCWarning(lcAccount) << "The sender is not a DeleteJob instance."; - } - }); - deleteAppTokenJob->start(); -} - void Account::fetchDirectEditors(const QUrl &directEditingURL, const QString &directEditingETag) { if(directEditingURL.isEmpty() || directEditingETag.isEmpty()) @@ -803,9 +721,4 @@ return _pushNotifications; } -std::shared_ptr Account::userStatusConnector() const -{ - return _userStatusConnector; -} - } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/account.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/account.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/account.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/account.h 2022-01-03 12:25:12.000000000 +0000 @@ -55,7 +55,6 @@ class AccessManager; class SimpleNetworkJob; class PushNotifications; -class UserStatusConnector; /** * @brief Reimplement this to handle SSL errors from libsync @@ -85,7 +84,7 @@ public: static AccountPtr create(); - ~Account() override; + ~Account(); AccountPtr sharedFromThis(); @@ -151,12 +150,6 @@ QNetworkRequest req = QNetworkRequest(), QIODevice *data = nullptr); - QNetworkReply *sendRawRequest(const QByteArray &verb, - const QUrl &url, QNetworkRequest req, const QByteArray &data); - - QNetworkReply *sendRawRequest(const QByteArray &verb, - const QUrl &url, QNetworkRequest req, QHttpMultiPart *data); - /** Create and start network job for a simple one-off request. * * More complicated requests typically create their own job types. @@ -230,8 +223,6 @@ */ bool serverVersionUnsupported() const; - bool isUsernamePrefillSupported() const; - /** True when the server connection is using HTTP2 */ bool isHttp2Supported() { return _http2Supported; } void setHttp2Supported(bool value) { _http2Supported = value; } @@ -254,19 +245,14 @@ void writeAppPasswordOnce(QString appPassword); void deleteAppPassword(); - void deleteAppToken(); - /// Direct Editing // Check for the directEditing capability void fetchDirectEditors(const QUrl &directEditingURL, const QString &directEditingETag); - void setupUserStatusConnector(); void trySetupPushNotifications(); PushNotifications *pushNotifications() const; void setPushNotificationsReconnectInterval(int interval); - std::shared_ptr userStatusConnector() const; - public slots: /// Used when forgetting credentials void clearQNAMCache(); @@ -299,8 +285,6 @@ void pushNotificationsReady(Account *account); void pushNotificationsDisabled(Account *account); - void userStatusChanged(); - protected Q_SLOTS: void slotCredentialsFetched(); void slotCredentialsAsked(); @@ -357,8 +341,6 @@ PushNotifications *_pushNotifications = nullptr; - std::shared_ptr _userStatusConnector; - /* IMPORTANT - remove later - FIXME MS@2019-12-07 --> * TODO: For "Log out" & "Remove account": Remove client CA certs and KEY! * diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bandwidthmanager.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bandwidthmanager.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bandwidthmanager.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bandwidthmanager.h 2022-01-03 12:25:12.000000000 +0000 @@ -35,7 +35,7 @@ Q_OBJECT public: BandwidthManager(OwncloudPropagator *p); - ~BandwidthManager() override; + ~BandwidthManager(); bool usingAbsoluteUploadLimit() { return _currentUploadLimit > 0; } bool usingRelativeUploadLimit() { return _currentUploadLimit < 0; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bulkpropagatorjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bulkpropagatorjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bulkpropagatorjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bulkpropagatorjob.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,719 +0,0 @@ -/* - * Copyright 2021 (c) Matthieu Gallien - * - * 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 "bulkpropagatorjob.h" - -#include "putmultifilejob.h" -#include "owncloudpropagator_p.h" -#include "syncfileitem.h" -#include "syncengine.h" -#include "propagateupload.h" -#include "propagatorjobs.h" -#include "filesystem.h" -#include "account.h" -#include "common/utility.h" -#include "common/checksums.h" -#include "networkjobs.h" - -#include -#include -#include -#include -#include -#include - -namespace OCC { - -Q_LOGGING_CATEGORY(lcBulkPropagatorJob, "nextcloud.sync.propagator.bulkupload", QtInfoMsg) - -} - -namespace { - -QByteArray getEtagFromJsonReply(const QJsonObject &reply) -{ - const auto ocEtag = OCC::parseEtag(reply.value("OC-ETag").toString().toLatin1()); - const auto ETag = OCC::parseEtag(reply.value("ETag").toString().toLatin1()); - const auto etag = OCC::parseEtag(reply.value("etag").toString().toLatin1()); - QByteArray ret = ocEtag; - if (ret.isEmpty()) { - ret = ETag; - } - if (ret.isEmpty()) { - ret = etag; - } - if (ocEtag.length() > 0 && ocEtag != etag && ocEtag != ETag) { - qCDebug(OCC::lcBulkPropagatorJob) << "Quite peculiar, we have an etag != OC-Etag [no problem!]" << etag << ETag << ocEtag; - } - return ret; -} - -QByteArray getHeaderFromJsonReply(const QJsonObject &reply, const QByteArray &headerName) -{ - return reply.value(headerName).toString().toLatin1(); -} - -constexpr auto batchSize = 100; - -constexpr auto parallelJobsMaximumCount = 1; -} - -namespace OCC { - -BulkPropagatorJob::BulkPropagatorJob(OwncloudPropagator *propagator, - const std::deque &items) - : PropagatorJob(propagator) - , _items(items) -{ - _filesToUpload.reserve(batchSize); - _pendingChecksumFiles.reserve(batchSize); -} - -bool BulkPropagatorJob::scheduleSelfOrChild() -{ - if (_items.empty()) { - return false; - } - if (!_pendingChecksumFiles.empty()) { - return false; - } - - _state = Running; - for(int i = 0; i < batchSize && !_items.empty(); ++i) { - auto currentItem = _items.front(); - _items.pop_front(); - _pendingChecksumFiles.insert(currentItem->_file); - QMetaObject::invokeMethod(this, [this, currentItem] () { - UploadFileInfo fileToUpload; - fileToUpload._file = currentItem->_file; - fileToUpload._size = currentItem->_size; - fileToUpload._path = propagator()->fullLocalPath(fileToUpload._file); - startUploadFile(currentItem, fileToUpload); - }); // We could be in a different thread (neon jobs) - } - - return _items.empty() && _filesToUpload.empty(); -} - -PropagatorJob::JobParallelism BulkPropagatorJob::parallelism() -{ - return PropagatorJob::JobParallelism::FullParallelism; -} - -void BulkPropagatorJob::startUploadFile(SyncFileItemPtr item, UploadFileInfo fileToUpload) -{ - if (propagator()->_abortRequested) { - return; - } - - // Check if the specific file can be accessed - if (propagator()->hasCaseClashAccessibilityProblem(fileToUpload._file)) { - done(item, SyncFileItem::NormalError, tr("File %1 cannot be uploaded because another file with the same name, differing only in case, exists").arg(QDir::toNativeSeparators(item->_file))); - return; - } - - return slotComputeTransmissionChecksum(item, fileToUpload); -} - -void BulkPropagatorJob::doStartUpload(SyncFileItemPtr item, - UploadFileInfo fileToUpload, - QByteArray transmissionChecksumHeader) -{ - if (propagator()->_abortRequested) { - return; - } - - // write the checksum in the database, so if the POST is sent - // to the server, but the connection drops before we get the etag, we can check the checksum - // in reconcile (issue #5106) - SyncJournalDb::UploadInfo pi; - pi._valid = true; - pi._chunk = 0; - pi._transferid = 0; // We set a null transfer id because it is not chunked. - pi._modtime = item->_modtime; - pi._errorCount = 0; - pi._contentChecksum = item->_checksumHeader; - pi._size = item->_size; - propagator()->_journal->setUploadInfo(item->_file, pi); - propagator()->_journal->commit("Upload info"); - - auto currentHeaders = headers(item); - currentHeaders[QByteArrayLiteral("Content-Length")] = QByteArray::number(fileToUpload._size); - - if (!item->_renameTarget.isEmpty() && item->_file != item->_renameTarget) { - // Try to rename the file - const auto originalFilePathAbsolute = propagator()->fullLocalPath(item->_file); - const auto newFilePathAbsolute = propagator()->fullLocalPath(item->_renameTarget); - const auto renameSuccess = QFile::rename(originalFilePathAbsolute, newFilePathAbsolute); - if (!renameSuccess) { - done(item, SyncFileItem::NormalError, "File contains trailing spaces and couldn't be renamed"); - return; - } - qCWarning(lcBulkPropagatorJob()) << item->_file << item->_renameTarget; - fileToUpload._file = item->_file = item->_renameTarget; - fileToUpload._path = propagator()->fullLocalPath(fileToUpload._file); - item->_modtime = FileSystem::getModTime(newFilePathAbsolute); - if (item->_modtime <= 0) { - _pendingChecksumFiles.remove(item->_file); - slotOnErrorStartFolderUnlock(item, SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(item->_file))); - checkPropagationIsDone(); - return; - } - } - - const auto remotePath = propagator()->fullRemotePath(fileToUpload._file); - - currentHeaders["X-File-MD5"] = transmissionChecksumHeader; - - BulkUploadItem newUploadFile{propagator()->account(), item, fileToUpload, - remotePath, fileToUpload._path, - fileToUpload._size, currentHeaders}; - - qCInfo(lcBulkPropagatorJob) << remotePath << "transmission checksum" << transmissionChecksumHeader << fileToUpload._path; - _filesToUpload.push_back(std::move(newUploadFile)); - _pendingChecksumFiles.remove(item->_file); - - if (_pendingChecksumFiles.empty()) { - triggerUpload(); - } -} - -void BulkPropagatorJob::triggerUpload() -{ - auto uploadParametersData = std::vector{}; - uploadParametersData.reserve(_filesToUpload.size()); - - int timeout = 0; - for(auto &singleFile : _filesToUpload) { - // job takes ownership of device via a QScopedPointer. Job deletes itself when finishing - auto device = std::make_unique( - singleFile._localPath, 0, singleFile._fileSize, &propagator()->_bandwidthManager); - if (!device->open(QIODevice::ReadOnly)) { - qCWarning(lcBulkPropagatorJob) << "Could not prepare upload device: " << device->errorString(); - - // If the file is currently locked, we want to retry the sync - // when it becomes available again. - if (FileSystem::isFileLocked(singleFile._localPath)) { - emit propagator()->seenLockedFile(singleFile._localPath); - } - - abortWithError(singleFile._item, SyncFileItem::NormalError, device->errorString()); - emit finished(SyncFileItem::NormalError); - - return; - } - singleFile._headers["X-File-Path"] = singleFile._remotePath.toUtf8(); - uploadParametersData.push_back({std::move(device), singleFile._headers}); - timeout += singleFile._fileSize; - } - - const auto bulkUploadUrl = Utility::concatUrlPath(propagator()->account()->url(), QStringLiteral("/remote.php/dav/bulk")); - auto job = std::make_unique(propagator()->account(), bulkUploadUrl, std::move(uploadParametersData), this); - connect(job.get(), &PutMultiFileJob::finishedSignal, this, &BulkPropagatorJob::slotPutFinished); - - for(auto &singleFile : _filesToUpload) { - connect(job.get(), &PutMultiFileJob::uploadProgress, - this, [this, singleFile] (qint64 sent, qint64 total) { - slotUploadProgress(singleFile._item, sent, total); - }); - } - - adjustLastJobTimeout(job.get(), timeout); - _jobs.append(job.get()); - job.release()->start(); - if (parallelism() == PropagatorJob::JobParallelism::FullParallelism && _jobs.size() < parallelJobsMaximumCount) { - scheduleSelfOrChild(); - } -} - -void BulkPropagatorJob::checkPropagationIsDone() -{ - if (_items.empty()) { - if (!_jobs.empty() || !_pendingChecksumFiles.empty()) { - // just wait for the other job to finish. - return; - } - - qCInfo(lcBulkPropagatorJob) << "final status" << _finalStatus; - emit finished(_finalStatus); - propagator()->scheduleNextJob(); - } else { - scheduleSelfOrChild(); - } -} - -void BulkPropagatorJob::slotComputeTransmissionChecksum(SyncFileItemPtr item, - UploadFileInfo fileToUpload) -{ - // Reuse the content checksum as the transmission checksum if possible - const auto supportedTransmissionChecksums = - propagator()->account()->capabilities().supportedChecksumTypes(); - - // Compute the transmission checksum. - auto computeChecksum = std::make_unique(this); - if (uploadChecksumEnabled()) { - computeChecksum->setChecksumType("MD5" /*propagator()->account()->capabilities().uploadChecksumType()*/); - } else { - computeChecksum->setChecksumType(QByteArray()); - } - - connect(computeChecksum.get(), &ComputeChecksum::done, - this, [this, item, fileToUpload] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) { - slotStartUpload(item, fileToUpload, contentChecksumType, contentChecksum); - }); - connect(computeChecksum.get(), &ComputeChecksum::done, - computeChecksum.get(), &QObject::deleteLater); - computeChecksum.release()->start(fileToUpload._path); -} - -void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item, - UploadFileInfo fileToUpload, - const QByteArray &transmissionChecksumType, - const QByteArray &transmissionChecksum) -{ - const auto transmissionChecksumHeader = makeChecksumHeader(transmissionChecksumType, transmissionChecksum); - - item->_checksumHeader = transmissionChecksumHeader; - - const QString fullFilePath = fileToUpload._path; - const QString originalFilePath = propagator()->fullLocalPath(item->_file); - - if (!FileSystem::fileExists(fullFilePath)) { - return slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("File Removed (start upload) %1").arg(fullFilePath)); - } - const time_t prevModtime = item->_modtime; // the _item value was set in PropagateUploadFile::start() - // but a potential checksum calculation could have taken some time during which the file could - // have been changed again, so better check again here. - - item->_modtime = FileSystem::getModTime(originalFilePath); - if (item->_modtime <= 0) { - _pendingChecksumFiles.remove(item->_file); - slotOnErrorStartFolderUnlock(item, SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(item->_file))); - checkPropagationIsDone(); - return; - } - if (prevModtime != item->_modtime) { - propagator()->_anotherSyncNeeded = true; - _pendingChecksumFiles.remove(item->_file); - qDebug() << "trigger another sync after checking modified time of item" << item->_file << "prevModtime" << prevModtime << "Curr" << item->_modtime; - slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("Local file changed during syncing. It will be resumed.")); - checkPropagationIsDone(); - return; - } - - fileToUpload._size = FileSystem::getSize(fullFilePath); - item->_size = FileSystem::getSize(originalFilePath); - - // But skip the file if the mtime is too close to 'now'! - // That usually indicates a file that is still being changed - // or not yet fully copied to the destination. - if (fileIsStillChanging(*item)) { - propagator()->_anotherSyncNeeded = true; - _pendingChecksumFiles.remove(item->_file); - slotOnErrorStartFolderUnlock(item, SyncFileItem::SoftError, tr("Local file changed during sync.")); - checkPropagationIsDone(); - return; - } - - doStartUpload(item, fileToUpload, transmissionChecksum); -} - -void BulkPropagatorJob::slotOnErrorStartFolderUnlock(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &errorString) -{ - qCInfo(lcBulkPropagatorJob()) << status << errorString; - done(item, status, errorString); -} - -void BulkPropagatorJob::slotPutFinishedOneFile(const BulkUploadItem &singleFile, - PutMultiFileJob *job, - const QJsonObject &fileReply) -{ - bool finished = false; - - qCInfo(lcBulkPropagatorJob()) << singleFile._item->_file << "file headers" << fileReply; - - if (fileReply.contains("error") && !fileReply[QStringLiteral("error")].toBool()) { - singleFile._item->_httpErrorCode = static_cast(200); - } else { - singleFile._item->_httpErrorCode = static_cast(412); - } - - singleFile._item->_responseTimeStamp = job->responseTimestamp(); - singleFile._item->_requestId = job->requestId(); - if (singleFile._item->_httpErrorCode != 200) { - commonErrorHandling(singleFile._item, fileReply[QStringLiteral("message")].toString()); - return; - } - - singleFile._item->_status = SyncFileItem::Success; - - // Check the file again post upload. - // Two cases must be considered separately: If the upload is finished, - // the file is on the server and has a changed ETag. In that case, - // the etag has to be properly updated in the client journal, and because - // of that we can bail out here with an error. But we can reschedule a - // sync ASAP. - // But if the upload is ongoing, because not all chunks were uploaded - // yet, the upload can be stopped and an error can be displayed, because - // the server hasn't registered the new file yet. - const auto etag = getEtagFromJsonReply(fileReply); - finished = etag.length() > 0; - - const auto fullFilePath(propagator()->fullLocalPath(singleFile._item->_file)); - - // Check if the file still exists - if (!checkFileStillExists(singleFile._item, finished, fullFilePath)) { - return; - } - - // Check whether the file changed since discovery. the file check here is the original and not the temporary. - if (!checkFileChanged(singleFile._item, finished, fullFilePath)) { - return; - } - - // the file id should only be empty for new files up- or downloaded - computeFileId(singleFile._item, fileReply); - - singleFile._item->_etag = etag; - - if (getHeaderFromJsonReply(fileReply, "X-OC-MTime") != "accepted") { - // X-OC-MTime is supported since owncloud 5.0. But not when chunking. - // Normally Owncloud 6 always puts X-OC-MTime - qCWarning(lcBulkPropagatorJob) << "Server does not support X-OC-MTime" << getHeaderFromJsonReply(fileReply, "X-OC-MTime"); - // Well, the mtime was not set - } -} - -void BulkPropagatorJob::slotPutFinished() -{ - auto *job = qobject_cast(sender()); - Q_ASSERT(job); - - slotJobDestroyed(job); // remove it from the _jobs list - - const auto replyData = job->reply()->readAll(); - const auto replyJson = QJsonDocument::fromJson(replyData); - const auto fullReplyObject = replyJson.object(); - - for (const auto &singleFile : _filesToUpload) { - if (!fullReplyObject.contains(singleFile._remotePath)) { - continue; - } - const auto singleReplyObject = fullReplyObject[singleFile._remotePath].toObject(); - slotPutFinishedOneFile(singleFile, job, singleReplyObject); - } - - finalize(fullReplyObject); -} - -void BulkPropagatorJob::slotUploadProgress(SyncFileItemPtr item, qint64 sent, qint64 total) -{ - // Completion is signaled with sent=0, total=0; avoid accidentally - // resetting progress due to the sent being zero by ignoring it. - // finishedSignal() is bound to be emitted soon anyway. - // See https://bugreports.qt.io/browse/QTBUG-44782. - if (sent == 0 && total == 0) { - return; - } - propagator()->reportProgress(*item, sent - total); -} - -void BulkPropagatorJob::slotJobDestroyed(QObject *job) -{ - _jobs.erase(std::remove(_jobs.begin(), _jobs.end(), job), _jobs.end()); -} - -void BulkPropagatorJob::adjustLastJobTimeout(AbstractNetworkJob *job, qint64 fileSize) const -{ - constexpr double threeMinutes = 3.0 * 60 * 1000; - - job->setTimeout(qBound( - job->timeoutMsec(), - // Calculate 3 minutes for each gigabyte of data - qRound64(threeMinutes * static_cast(fileSize) / 1e9), - // Maximum of 30 minutes - static_cast(30 * 60 * 1000))); -} - -void BulkPropagatorJob::finalizeOneFile(const BulkUploadItem &oneFile) -{ - // Update the database entry - const auto result = propagator()->updateMetadata(*oneFile._item); - if (!result) { - done(oneFile._item, SyncFileItem::FatalError, tr("Error updating metadata: %1").arg(result.error())); - return; - } else if (*result == Vfs::ConvertToPlaceholderResult::Locked) { - done(oneFile._item, SyncFileItem::SoftError, tr("The file %1 is currently in use").arg(oneFile._item->_file)); - return; - } - - // Files that were new on the remote shouldn't have online-only pin state - // even if their parent folder is online-only. - if (oneFile._item->_instruction == CSYNC_INSTRUCTION_NEW - || oneFile._item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE) { - auto &vfs = propagator()->syncOptions()._vfs; - const auto pin = vfs->pinState(oneFile._item->_file); - if (pin && *pin == PinState::OnlineOnly && !vfs->setPinState(oneFile._item->_file, PinState::Unspecified)) { - qCWarning(lcBulkPropagatorJob) << "Could not set pin state of" << oneFile._item->_file << "to unspecified"; - } - } - - // Remove from the progress database: - propagator()->_journal->setUploadInfo(oneFile._item->_file, SyncJournalDb::UploadInfo()); - propagator()->_journal->commit("upload file start"); -} - -void BulkPropagatorJob::finalize(const QJsonObject &fullReply) -{ - for(auto singleFileIt = std::begin(_filesToUpload); singleFileIt != std::end(_filesToUpload); ) { - const auto &singleFile = *singleFileIt; - - if (!fullReply.contains(singleFile._remotePath)) { - ++singleFileIt; - continue; - } - if (!singleFile._item->hasErrorStatus()) { - finalizeOneFile(singleFile); - } - - done(singleFile._item, singleFile._item->_status, {}); - - singleFileIt = _filesToUpload.erase(singleFileIt); - } - - checkPropagationIsDone(); -} - -void BulkPropagatorJob::done(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &errorString) -{ - item->_status = status; - item->_errorString = errorString; - - qCInfo(lcBulkPropagatorJob) << "Item completed" << item->destination() << item->_status << item->_instruction << item->_errorString; - - handleFileRestoration(item, errorString); - - if (propagator()->_abortRequested && (item->_status == SyncFileItem::NormalError - || item->_status == SyncFileItem::FatalError)) { - // an abort request is ongoing. Change the status to Soft-Error - item->_status = SyncFileItem::SoftError; - } - - if (item->_status != SyncFileItem::Success) { - // Blacklist handling - handleBulkUploadBlackList(item); - propagator()->_anotherSyncNeeded = true; - } - - handleJobDoneErrors(item, status); - - emit propagator()->itemCompleted(item); -} - -QMap BulkPropagatorJob::headers(SyncFileItemPtr item) const -{ - QMap headers; - headers[QByteArrayLiteral("Content-Type")] = QByteArrayLiteral("application/octet-stream"); - headers[QByteArrayLiteral("X-File-Mtime")] = QByteArray::number(qint64(item->_modtime)); - if (qEnvironmentVariableIntValue("OWNCLOUD_LAZYOPS")) { - headers[QByteArrayLiteral("OC-LazyOps")] = QByteArrayLiteral("true"); - } - - if (item->_file.contains(QLatin1String(".sys.admin#recall#"))) { - // This is a file recall triggered by the admin. Note: the - // recall list file created by the admin and downloaded by the - // client (.sys.admin#recall#) also falls into this category - // (albeit users are not supposed to mess up with it) - - // We use a special tag header so that the server may decide to store this file away in some admin stage area - // And not directly in the user's area (which would trigger redownloads etc). - headers["OC-Tag"] = ".sys.admin#recall#"; - } - - if (!item->_etag.isEmpty() && item->_etag != "empty_etag" - && item->_instruction != CSYNC_INSTRUCTION_NEW // On new files never send a If-Match - && item->_instruction != CSYNC_INSTRUCTION_TYPE_CHANGE) { - // We add quotes because the owncloud server always adds quotes around the etag, and - // csync_owncloud.c's owncloud_file_id always strips the quotes. - headers[QByteArrayLiteral("If-Match")] = '"' + item->_etag + '"'; - } - - // Set up a conflict file header pointing to the original file - auto conflictRecord = propagator()->_journal->conflictRecord(item->_file.toUtf8()); - if (conflictRecord.isValid()) { - headers[QByteArrayLiteral("OC-Conflict")] = "1"; - if (!conflictRecord.initialBasePath.isEmpty()) { - headers[QByteArrayLiteral("OC-ConflictInitialBasePath")] = conflictRecord.initialBasePath; - } - if (!conflictRecord.baseFileId.isEmpty()) { - headers[QByteArrayLiteral("OC-ConflictBaseFileId")] = conflictRecord.baseFileId; - } - if (conflictRecord.baseModtime != -1) { - headers[QByteArrayLiteral("OC-ConflictBaseMtime")] = QByteArray::number(conflictRecord.baseModtime); - } - if (!conflictRecord.baseEtag.isEmpty()) { - headers[QByteArrayLiteral("OC-ConflictBaseEtag")] = conflictRecord.baseEtag; - } - } - - return headers; -} - -void BulkPropagatorJob::abortWithError(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &error) -{ - abort(AbortType::Synchronous); - done(item, status, error); -} - -void BulkPropagatorJob::checkResettingErrors(SyncFileItemPtr item) const -{ - if (item->_httpErrorCode == 412 - || propagator()->account()->capabilities().httpErrorCodesThatResetFailingChunkedUploads().contains(item->_httpErrorCode)) { - auto uploadInfo = propagator()->_journal->getUploadInfo(item->_file); - uploadInfo._errorCount += 1; - if (uploadInfo._errorCount > 3) { - qCInfo(lcBulkPropagatorJob) << "Reset transfer of" << item->_file - << "due to repeated error" << item->_httpErrorCode; - uploadInfo = SyncJournalDb::UploadInfo(); - } else { - qCInfo(lcBulkPropagatorJob) << "Error count for maybe-reset error" << item->_httpErrorCode - << "on file" << item->_file - << "is" << uploadInfo._errorCount; - } - propagator()->_journal->setUploadInfo(item->_file, uploadInfo); - propagator()->_journal->commit("Upload info"); - } -} - -void BulkPropagatorJob::commonErrorHandling(SyncFileItemPtr item, - const QString &errorMessage) -{ - // Ensure errors that should eventually reset the chunked upload are tracked. - checkResettingErrors(item); - - abortWithError(item, SyncFileItem::NormalError, errorMessage); -} - -bool BulkPropagatorJob::checkFileStillExists(SyncFileItemPtr item, - const bool finished, - const QString &fullFilePath) -{ - if (!FileSystem::fileExists(fullFilePath)) { - if (!finished) { - abortWithError(item, SyncFileItem::SoftError, tr("The local file was removed during sync.")); - return false; - } else { - propagator()->_anotherSyncNeeded = true; - } - } - - return true; -} - -bool BulkPropagatorJob::checkFileChanged(SyncFileItemPtr item, - const bool finished, - const QString &fullFilePath) -{ - if (!FileSystem::verifyFileUnchanged(fullFilePath, item->_size, item->_modtime)) { - propagator()->_anotherSyncNeeded = true; - if (!finished) { - abortWithError(item, SyncFileItem::SoftError, tr("Local file changed during sync.")); - // FIXME: the legacy code was retrying for a few seconds. - // and also checking that after the last chunk, and removed the file in case of INSTRUCTION_NEW - return false; - } - } - - return true; -} - -void BulkPropagatorJob::computeFileId(SyncFileItemPtr item, - const QJsonObject &fileReply) const -{ - const auto fid = getHeaderFromJsonReply(fileReply, "OC-FileID"); - if (!fid.isEmpty()) { - if (!item->_fileId.isEmpty() && item->_fileId != fid) { - qCWarning(lcBulkPropagatorJob) << "File ID changed!" << item->_fileId << fid; - } - item->_fileId = fid; - } -} - -void BulkPropagatorJob::handleFileRestoration(SyncFileItemPtr item, - const QString &errorString) const -{ - if (item->_isRestoration) { - if (item->_status == SyncFileItem::Success - || item->_status == SyncFileItem::Conflict) { - item->_status = SyncFileItem::Restoration; - } else { - item->_errorString += tr("; Restoration Failed: %1").arg(errorString); - } - } else { - if (item->_errorString.isEmpty()) { - item->_errorString = errorString; - } - } -} - -void BulkPropagatorJob::handleBulkUploadBlackList(SyncFileItemPtr item) const -{ - propagator()->addToBulkUploadBlackList(item->_file); -} - -void BulkPropagatorJob::handleJobDoneErrors(SyncFileItemPtr item, - SyncFileItem::Status status) -{ - if (item->hasErrorStatus()) { - qCWarning(lcPropagator) << "Could not complete propagation of" << item->destination() << "by" << this << "with status" << item->_status << "and error:" << item->_errorString; - } else { - qCInfo(lcPropagator) << "Completed propagation of" << item->destination() << "by" << this << "with status" << item->_status; - } - - if (item->_status == SyncFileItem::FatalError) { - // Abort all remaining jobs. - propagator()->abort(); - } - - switch (item->_status) - { - case SyncFileItem::BlacklistedError: - case SyncFileItem::Conflict: - case SyncFileItem::FatalError: - case SyncFileItem::FileIgnored: - case SyncFileItem::FileLocked: - case SyncFileItem::FileNameInvalid: - case SyncFileItem::NoStatus: - case SyncFileItem::NormalError: - case SyncFileItem::Restoration: - case SyncFileItem::SoftError: - _finalStatus = SyncFileItem::NormalError; - qCInfo(lcBulkPropagatorJob) << "modify final status NormalError" << _finalStatus << status; - break; - case SyncFileItem::DetailError: - _finalStatus = SyncFileItem::DetailError; - qCInfo(lcBulkPropagatorJob) << "modify final status DetailError" << _finalStatus << status; - break; - case SyncFileItem::Success: - break; - } -} - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bulkpropagatorjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bulkpropagatorjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/bulkpropagatorjob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/bulkpropagatorjob.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,167 +0,0 @@ -/* - * Copyright 2021 (c) Matthieu Gallien - * - * 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. - */ - -#pragma once - -#include "owncloudpropagator.h" -#include "abstractnetworkjob.h" - -#include -#include -#include -#include -#include - -namespace OCC { - -Q_DECLARE_LOGGING_CATEGORY(lcBulkPropagatorJob) - -class ComputeChecksum; -class PutMultiFileJob; - -class BulkPropagatorJob : public PropagatorJob -{ - Q_OBJECT - - /* This is a minified version of the SyncFileItem, - * that holds only the specifics about the file that's - * being uploaded. - * - * This is needed if we wanna apply changes on the file - * that's being uploaded while keeping the original on disk. - */ - struct UploadFileInfo { - QString _file; /// I'm still unsure if I should use a SyncFilePtr here. - QString _path; /// the full path on disk. - qint64 _size; - }; - - struct BulkUploadItem - { - AccountPtr _account; - SyncFileItemPtr _item; - UploadFileInfo _fileToUpload; - QString _remotePath; - QString _localPath; - qint64 _fileSize; - QMap _headers; - }; - -public: - explicit BulkPropagatorJob(OwncloudPropagator *propagator, - const std::deque &items); - - bool scheduleSelfOrChild() override; - - JobParallelism parallelism() override; - -private slots: - void startUploadFile(SyncFileItemPtr item, UploadFileInfo fileToUpload); - - // Content checksum computed, compute the transmission checksum - void slotComputeTransmissionChecksum(SyncFileItemPtr item, - UploadFileInfo fileToUpload); - - // transmission checksum computed, prepare the upload - void slotStartUpload(SyncFileItemPtr item, - UploadFileInfo fileToUpload, - const QByteArray &transmissionChecksumType, - const QByteArray &transmissionChecksum); - - // invoked on internal error to unlock a folder and faile - void slotOnErrorStartFolderUnlock(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &errorString); - - void slotPutFinished(); - - void slotUploadProgress(SyncFileItemPtr item, qint64 sent, qint64 total); - - void slotJobDestroyed(QObject *job); - -private: - void doStartUpload(SyncFileItemPtr item, - UploadFileInfo fileToUpload, - QByteArray transmissionChecksumHeader); - - void adjustLastJobTimeout(AbstractNetworkJob *job, - qint64 fileSize) const; - - void finalize(const QJsonObject &fullReply); - - void finalizeOneFile(const BulkUploadItem &oneFile); - - void slotPutFinishedOneFile(const BulkUploadItem &singleFile, - OCC::PutMultiFileJob *job, - const QJsonObject &fullReplyObject); - - void done(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &errorString); - - /** Bases headers that need to be sent on the PUT, or in the MOVE for chunking-ng */ - QMap headers(SyncFileItemPtr item) const; - - void abortWithError(SyncFileItemPtr item, - SyncFileItem::Status status, - const QString &error); - - /** - * Checks whether the current error is one that should reset the whole - * transfer if it happens too often. If so: Bump UploadInfo::errorCount - * and maybe perform the reset. - */ - void checkResettingErrors(SyncFileItemPtr item) const; - - /** - * Error handling functionality that is shared between jobs. - */ - void commonErrorHandling(SyncFileItemPtr item, - const QString &errorMessage); - - bool checkFileStillExists(SyncFileItemPtr item, - const bool finished, - const QString &fullFilePath); - - bool checkFileChanged(SyncFileItemPtr item, - const bool finished, - const QString &fullFilePath); - - void computeFileId(SyncFileItemPtr item, - const QJsonObject &fileReply) const; - - void handleFileRestoration(SyncFileItemPtr item, - const QString &errorString) const; - - void handleBulkUploadBlackList(SyncFileItemPtr item) const; - - void handleJobDoneErrors(SyncFileItemPtr item, - SyncFileItem::Status status); - - void triggerUpload(); - - void checkPropagationIsDone(); - - std::deque _items; - - QVector _jobs; /// network jobs that are currently in transit - - QSet _pendingChecksumFiles; - - std::vector _filesToUpload; - - SyncFileItem::Status _finalStatus = SyncFileItem::Status::NoStatus; -}; - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/capabilities.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/capabilities.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/capabilities.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/capabilities.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -90,26 +90,6 @@ return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date"].toMap()["days"].toInt(); } -bool Capabilities::shareInternalEnforceExpireDate() const -{ - return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date_internal"].toMap()["enforced"].toBool(); -} - -int Capabilities::shareInternalExpireDateDays() const -{ - return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date_internal"].toMap()["days"].toInt(); -} - -bool Capabilities::shareRemoteEnforceExpireDate() const -{ - return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date_remote"].toMap()["enforced"].toBool(); -} - -int Capabilities::shareRemoteExpireDateDays() const -{ - return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date_remote"].toMap()["days"].toInt(); -} - bool Capabilities::sharePublicLinkMultiple() const { return _capabilities["files_sharing"].toMap()["public"].toMap()["multiple"].toBool(); @@ -120,15 +100,6 @@ return _capabilities["files_sharing"].toMap()["resharing"].toBool(); } -int Capabilities::shareDefaultPermissions() const -{ - if(_capabilities["files_sharing"].toMap().contains("default_permissions")) { - return _capabilities["files_sharing"].toMap()["default_permissions"].toInt(); - } - - return {}; -} - bool Capabilities::clientSideEncryptionAvailable() const { auto it = _capabilities.constFind(QStringLiteral("end-to-end-encryption")); @@ -216,27 +187,11 @@ return _capabilities["dav"].toMap()["chunking"].toByteArray() >= "1.0"; } -bool Capabilities::bulkUpload() const -{ - return _capabilities["dav"].toMap()["bulkupload"].toByteArray() >= "1.0"; -} - bool Capabilities::userStatus() const { - if (!_capabilities.contains("user_status")) { - return false; - } - const auto userStatusMap = _capabilities["user_status"].toMap(); - return userStatusMap.value("enabled", false).toBool(); -} - -bool Capabilities::userStatusSupportsEmoji() const -{ - if (!userStatus()) { - return false; - } - const auto userStatusMap = _capabilities["user_status"].toMap(); - return userStatusMap.value("supports_emoji", false).toBool(); + return _capabilities.contains("notifications") && + _capabilities["notifications"].toMap().contains("ocs-endpoints") && + _capabilities["notifications"].toMap()["ocs-endpoints"].toStringList().contains("user-status"); } PushNotificationTypes Capabilities::availablePushNotifications() const diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/capabilities.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/capabilities.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/capabilities.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/capabilities.h 2022-01-03 12:25:12.000000000 +0000 @@ -55,17 +55,10 @@ bool sharePublicLinkEnforcePassword() const; bool sharePublicLinkEnforceExpireDate() const; int sharePublicLinkExpireDateDays() const; - bool shareInternalEnforceExpireDate() const; - int shareInternalExpireDateDays() const; - bool shareRemoteEnforceExpireDate() const; - int shareRemoteExpireDateDays() const; bool sharePublicLinkMultiple() const; bool shareResharing() const; - int shareDefaultPermissions() const; bool chunkingNg() const; - bool bulkUpload() const; bool userStatus() const; - bool userStatusSupportsEmoji() const; /// Returns which kind of push notfications are available PushNotificationTypes availablePushNotifications() const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryption.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryption.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryption.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryption.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -36,8 +36,7 @@ #include #include -#include -#include +#include "common/utility.h" #include "wordlist.h" @@ -56,8 +55,7 @@ Q_LOGGING_CATEGORY(lcCseDecryption, "nextcloud.e2e", QtInfoMsg) Q_LOGGING_CATEGORY(lcCseMetadata, "nextcloud.metadata", QtInfoMsg) -QString e2eeBaseUrl() -{ +QString baseUrl(){ return QStringLiteral("ocs/v2.php/apps/end_to_end_encryption/api/v1/"); } @@ -68,8 +66,6 @@ const char e2e_private[] = "_e2e-private"; const char e2e_mnemonic[] = "_e2e-mnemonic"; - constexpr qint64 blockSize = 1024; - QList oldCipherFormatSplit(const QByteArray &cipher) { const auto separator = QByteArrayLiteral("fA=="); // BASE64 encoded '|' @@ -299,7 +295,7 @@ }; QByteArray BIO2ByteArray(Bio &b) { - auto pending = static_cast(BIO_ctrl_pending(b)); + int pending = BIO_ctrl_pending(b); QByteArray res(pending, '\0'); BIO_read(b, unsignedData(res), pending); return res; @@ -427,17 +423,17 @@ } clen += len; - /* Get the e2EeTag */ - QByteArray e2EeTag(OCC::Constants::e2EeTagSize, '\0'); - if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, OCC::Constants::e2EeTagSize, unsignedData(e2EeTag))) { - qCInfo(lcCse()) << "Error getting the e2EeTag"; + /* Get the tag */ + QByteArray tag(16, '\0'); + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, unsignedData(tag))) { + qCInfo(lcCse()) << "Error getting the tag"; handleErrors(); } QByteArray cipherTXT; - cipherTXT.reserve(clen + OCC::Constants::e2EeTagSize); + cipherTXT.reserve(clen + 16); cipherTXT.append(ctext, clen); - cipherTXT.append(e2EeTag); + cipherTXT.append(tag); QByteArray result = cipherTXT.toBase64(); result += '|'; @@ -467,8 +463,8 @@ QByteArray cipherTXT = QByteArray::fromBase64(cipherTXT64); QByteArray iv = QByteArray::fromBase64(ivB64); - const QByteArray e2EeTag = cipherTXT.right(OCC::Constants::e2EeTagSize); - cipherTXT.chop(OCC::Constants::e2EeTagSize); + QByteArray tag = cipherTXT.right(16); + cipherTXT.chop(16); // Init CipherCtx ctx; @@ -497,7 +493,7 @@ return QByteArray(); } - QByteArray ptext(cipherTXT.size() + OCC::Constants::e2EeTagSize, '\0'); + QByteArray ptext(cipherTXT.size() + 16, '\0'); int plen = 0; /* Provide the message to be decrypted, and obtain the plaintext output. @@ -508,9 +504,9 @@ return QByteArray(); } - /* Set expected e2EeTag value. Works in OpenSSL 1.0.1d and later */ - if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, e2EeTag.size(), (unsigned char *)e2EeTag.constData())) { - qCInfo(lcCse()) << "Could not set e2EeTag"; + /* Set expected tag value. Works in OpenSSL 1.0.1d and later */ + if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag.size(), (unsigned char *)tag.constData())) { + qCInfo(lcCse()) << "Could not set tag"; return QByteArray(); } @@ -557,8 +553,8 @@ QByteArray cipherTXT = QByteArray::fromBase64(cipherTXT64); QByteArray iv = QByteArray::fromBase64(ivB64); - const QByteArray e2EeTag = cipherTXT.right(OCC::Constants::e2EeTagSize); - cipherTXT.chop(OCC::Constants::e2EeTagSize); + QByteArray tag = cipherTXT.right(16); + cipherTXT.chop(16); // Init CipherCtx ctx; @@ -587,7 +583,7 @@ return QByteArray(); } - QByteArray ptext(cipherTXT.size() + OCC::Constants::e2EeTagSize, '\0'); + QByteArray ptext(cipherTXT.size() + 16, '\0'); int plen = 0; /* Provide the message to be decrypted, and obtain the plaintext output. @@ -598,9 +594,9 @@ return QByteArray(); } - /* Set expected e2EeTag value. Works in OpenSSL 1.0.1d and later */ - if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, e2EeTag.size(), (unsigned char *)e2EeTag.constData())) { - qCInfo(lcCse()) << "Could not set e2EeTag"; + /* Set expected tag value. Works in OpenSSL 1.0.1d and later */ + if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag.size(), (unsigned char *)tag.constData())) { + qCInfo(lcCse()) << "Could not set tag"; return QByteArray(); } @@ -690,18 +686,18 @@ } clen += len; - /* Get the e2EeTag */ - QByteArray e2EeTag(OCC::Constants::e2EeTagSize, '\0'); - if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, OCC::Constants::e2EeTagSize, unsignedData(e2EeTag))) { - qCInfo(lcCse()) << "Error getting the e2EeTag"; + /* Get the tag */ + QByteArray tag(16, '\0'); + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, unsignedData(tag))) { + qCInfo(lcCse()) << "Error getting the tag"; handleErrors(); return {}; } QByteArray cipherTXT; - cipherTXT.reserve(clen + OCC::Constants::e2EeTagSize); + cipherTXT.reserve(clen + 16); cipherTXT.append(ctext, clen); - cipherTXT.append(e2EeTag); + cipherTXT.append(tag); QByteArray result = cipherTXT.toBase64(); result += '|'; @@ -757,7 +753,7 @@ qCInfo(lcCseDecryption()) << "Size of data is: " << data.size(); } - QByteArray out(static_cast(outlen), '\0'); + QByteArray out(outlen, '\0'); if (EVP_PKEY_decrypt(ctx, unsignedData(out), &outlen, (unsigned char *)data.constData(), data.size()) <= 0) { const auto error = handleErrors(); @@ -808,7 +804,7 @@ qCInfo(lcCse()) << "Encryption Length:" << outLen; } - QByteArray out(static_cast(outLen), '\0'); + QByteArray out(outLen, '\0'); if (EVP_PKEY_encrypt(ctx, unsignedData(out), &outLen, (unsigned char *)data.constData(), data.size()) != 1) { qCInfo(lcCse()) << "Could not encrypt key." << err; exit(1); @@ -1013,7 +1009,7 @@ job->setInsecureFallback(false); job->setKey(kck); job->setBinaryData(_privateKey); - connect(job, &WritePasswordJob::finished, [](Job *incoming) { + connect(job, &WritePasswordJob::finished, [this](Job *incoming) { Q_UNUSED(incoming); qCInfo(lcCse()) << "Private key stored in keychain"; }); @@ -1032,7 +1028,7 @@ job->setInsecureFallback(false); job->setKey(kck); job->setBinaryData(_certificate.toPem()); - connect(job, &WritePasswordJob::finished, [](Job *incoming) { + connect(job, &WritePasswordJob::finished, [this](Job *incoming) { Q_UNUSED(incoming); qCInfo(lcCse()) << "Certificate stored in keychain"; }); @@ -1181,7 +1177,7 @@ qCInfo(lcCse()) << "Returning the certificate"; qCInfo(lcCse()) << output; - auto job = new SignPublicKeyApiJob(account, e2eeBaseUrl() + "public-key", this); + auto job = new SignPublicKeyApiJob(account, baseUrl() + "public-key", this); job->setCsr(output); connect(job, &SignPublicKeyApiJob::jsonReceived, [this, account](const QJsonDocument& json, int retCode) { @@ -1213,7 +1209,7 @@ auto cryptedText = EncryptionHelper::encryptPrivateKey(secretKey, EncryptionHelper::privateKeyToPem(_privateKey), salt); // Send private key to the server - auto job = new StorePrivateKeyApiJob(account, e2eeBaseUrl() + "private-key", this); + auto job = new StorePrivateKeyApiJob(account, baseUrl() + "private-key", this); job->setPrivateKey(cryptedText); connect(job, &StorePrivateKeyApiJob::jsonReceived, [this, account](const QJsonDocument& doc, int retCode) { Q_UNUSED(doc); @@ -1297,7 +1293,7 @@ void ClientSideEncryption::getPrivateKeyFromServer(const AccountPtr &account) { qCInfo(lcCse()) << "Retrieving private key from server"; - auto job = new JsonApiJob(account, e2eeBaseUrl() + "private-key", this); + auto job = new JsonApiJob(account, baseUrl() + "private-key", this); connect(job, &JsonApiJob::jsonReceived, [this, account](const QJsonDocument& doc, int retCode) { if (retCode == 200) { QString key = doc.object()["ocs"].toObject()["data"].toObject()["private-key"].toString(); @@ -1316,7 +1312,7 @@ void ClientSideEncryption::getPublicKeyFromServer(const AccountPtr &account) { qCInfo(lcCse()) << "Retrieving public key from server"; - auto job = new JsonApiJob(account, e2eeBaseUrl() + "public-key", this); + auto job = new JsonApiJob(account, baseUrl() + "public-key", this); connect(job, &JsonApiJob::jsonReceived, [this, account](const QJsonDocument& doc, int retCode) { if (retCode == 200) { QString publicKey = doc.object()["ocs"].toObject()["data"].toObject()["public-keys"].toObject()[account->davUser()].toString(); @@ -1337,7 +1333,7 @@ void ClientSideEncryption::fetchAndValidatePublicKeyFromServer(const AccountPtr &account) { qCInfo(lcCse()) << "Retrieving public key from server"; - auto job = new JsonApiJob(account, e2eeBaseUrl() + "server-key", this); + auto job = new JsonApiJob(account, baseUrl() + "server-key", this); connect(job, &JsonApiJob::jsonReceived, [this, account](const QJsonDocument& doc, int retCode) { if (retCode == 200) { const auto serverPublicKey = doc.object()["ocs"].toObject()["data"].toObject()["public-key"].toString().toLatin1(); @@ -1654,13 +1650,13 @@ return false; } - QByteArray out(blockSize + OCC::Constants::e2EeTagSize - 1, '\0'); + QByteArray out(1024 + 16 - 1, '\0'); int len = 0; int total_len = 0; qCDebug(lcCse) << "Starting to encrypt the file" << input->fileName() << input->atEnd(); while(!input->atEnd()) { - const auto data = input->read(blockSize); + QByteArray data = input->read(1024); if (data.size() == 0) { qCInfo(lcCse()) << "Could not read data from file"; @@ -1683,15 +1679,15 @@ output->write(out, len); total_len += len; - /* Get the e2EeTag */ - QByteArray e2EeTag(OCC::Constants::e2EeTagSize, '\0'); - if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, OCC::Constants::e2EeTagSize, unsignedData(e2EeTag))) { - qCInfo(lcCse()) << "Could not get e2EeTag"; + /* Get the tag */ + QByteArray tag(16, '\0'); + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, unsignedData(tag))) { + qCInfo(lcCse()) << "Could not get tag"; return false; } - returnTag = e2EeTag; - output->write(e2EeTag, OCC::Constants::e2EeTagSize); + returnTag = tag; + output->write(tag, 16); input->close(); output->close(); @@ -1734,16 +1730,16 @@ return false; } - qint64 size = input->size() - OCC::Constants::e2EeTagSize; + qint64 size = input->size() - 16; - QByteArray out(blockSize + OCC::Constants::e2EeTagSize - 1, '\0'); + QByteArray out(1024 + 16 - 1, '\0'); int len = 0; while(input->pos() < size) { auto toRead = size - input->pos(); - if (toRead > blockSize) { - toRead = blockSize; + if (toRead > 1024) { + toRead = 1024; } QByteArray data = input->read(toRead); @@ -1761,11 +1757,11 @@ output->write(out, len); } - const QByteArray e2EeTag = input->read(OCC::Constants::e2EeTagSize); + QByteArray tag = input->read(16); - /* Set expected e2EeTag value. Works in OpenSSL 1.0.1d and later */ - if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, e2EeTag.size(), (unsigned char *)e2EeTag.constData())) { - qCInfo(lcCse()) << "Could not set expected e2EeTag"; + /* Set expected tag value. Works in OpenSSL 1.0.1d and later */ + if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag.size(), (unsigned char *)tag.constData())) { + qCInfo(lcCse()) << "Could not set expected tag"; return false; } @@ -1780,181 +1776,4 @@ return true; } -EncryptionHelper::StreamingDecryptor::StreamingDecryptor(const QByteArray &key, const QByteArray &iv, quint64 totalSize) : _totalSize(totalSize) -{ - if (_ctx && !key.isEmpty() && !iv.isEmpty() && totalSize > 0) { - _isInitialized = true; - - /* Initialize the decryption operation. */ - if(!EVP_DecryptInit_ex(_ctx, EVP_aes_128_gcm(), nullptr, nullptr, nullptr)) { - qCritical(lcCse()) << "Could not init cipher"; - _isInitialized = false; - } - - EVP_CIPHER_CTX_set_padding(_ctx, 0); - - /* Set IV length. */ - if(!EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size(), nullptr)) { - qCritical(lcCse()) << "Could not set iv length"; - _isInitialized = false; - } - - /* Initialize key and IV */ - if(!EVP_DecryptInit_ex(_ctx, nullptr, nullptr, reinterpret_cast(key.constData()), reinterpret_cast(iv.constData()))) { - qCritical(lcCse()) << "Could not set key and iv"; - _isInitialized = false; - } - } -} - -QByteArray EncryptionHelper::StreamingDecryptor::chunkDecryption(const char *input, quint64 chunkSize) -{ - QByteArray byteArray; - QBuffer buffer(&byteArray); - buffer.open(QIODevice::WriteOnly); - - Q_ASSERT(isInitialized()); - if (!isInitialized()) { - qCritical(lcCse()) << "Decryption failed. Decryptor is not initialized!"; - return QByteArray(); - } - - Q_ASSERT(buffer.isOpen() && buffer.isWritable()); - if (!buffer.isOpen() || !buffer.isWritable()) { - qCritical(lcCse()) << "Decryption failed. Incorrect output device!"; - return QByteArray(); - } - - Q_ASSERT(input); - if (!input) { - qCritical(lcCse()) << "Decryption failed. Incorrect input!"; - return QByteArray(); - } - - Q_ASSERT(chunkSize > 0); - if (chunkSize <= 0) { - qCritical(lcCse()) << "Decryption failed. Incorrect chunkSize!"; - return QByteArray(); - } - - if (_decryptedSoFar == 0) { - qCDebug(lcCse()) << "Decryption started"; - } - - Q_ASSERT(_decryptedSoFar + chunkSize <= _totalSize); - if (_decryptedSoFar + chunkSize > _totalSize) { - qCritical(lcCse()) << "Decryption failed. Chunk is out of range!"; - return QByteArray(); - } - - Q_ASSERT(_decryptedSoFar + chunkSize < OCC::Constants::e2EeTagSize || _totalSize - OCC::Constants::e2EeTagSize >= _decryptedSoFar + chunkSize - OCC::Constants::e2EeTagSize); - if (_decryptedSoFar + chunkSize > OCC::Constants::e2EeTagSize && _totalSize - OCC::Constants::e2EeTagSize < _decryptedSoFar + chunkSize - OCC::Constants::e2EeTagSize) { - qCritical(lcCse()) << "Decryption failed. Incorrect chunk!"; - return QByteArray(); - } - - const bool isLastChunk = _decryptedSoFar + chunkSize == _totalSize; - - // last OCC::Constants::e2EeTagSize bytes is ALWAYS a e2EeTag!!! - const qint64 size = isLastChunk ? chunkSize - OCC::Constants::e2EeTagSize : chunkSize; - - // either the size is more than 0 and an e2EeTag is at the end of chunk, or, chunk is the e2EeTag itself - Q_ASSERT(size > 0 || chunkSize == OCC::Constants::e2EeTagSize); - if (size <= 0 && chunkSize != OCC::Constants::e2EeTagSize) { - qCritical(lcCse()) << "Decryption failed. Invalid input size: " << size << " !"; - return QByteArray(); - } - - qint64 bytesWritten = 0; - qint64 inputPos = 0; - - QByteArray decryptedBlock(blockSize + OCC::Constants::e2EeTagSize - 1, '\0'); - - while(inputPos < size) { - // read blockSize or less bytes - const QByteArray encryptedBlock(input + inputPos, qMin(size - inputPos, blockSize)); - - if (encryptedBlock.size() == 0) { - qCritical(lcCse()) << "Could not read data from the input buffer."; - return QByteArray(); - } - - int outLen = 0; - - if(!EVP_DecryptUpdate(_ctx, unsignedData(decryptedBlock), &outLen, reinterpret_cast(encryptedBlock.data()), encryptedBlock.size())) { - qCritical(lcCse()) << "Could not decrypt"; - return QByteArray(); - } - - const auto writtenToOutput = buffer.write(decryptedBlock, outLen); - - Q_ASSERT(writtenToOutput == outLen); - if (writtenToOutput != outLen) { - qCritical(lcCse()) << "Failed to write decrypted data to device."; - return QByteArray(); - } - - bytesWritten += writtenToOutput; - - // advance input position for further read - inputPos += encryptedBlock.size(); - - _decryptedSoFar += encryptedBlock.size(); - } - - if (isLastChunk) { - // if it's a last chunk, we'd need to read a e2EeTag at the end and finalize the decryption - - Q_ASSERT(chunkSize - inputPos == OCC::Constants::e2EeTagSize); - if (chunkSize - inputPos != OCC::Constants::e2EeTagSize) { - qCritical(lcCse()) << "Decryption failed. e2EeTag is missing!"; - return QByteArray(); - } - - int outLen = 0; - - QByteArray e2EeTag = QByteArray(input + inputPos, OCC::Constants::e2EeTagSize); - - /* Set expected e2EeTag value. Works in OpenSSL 1.0.1d and later */ - if(!EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_TAG, e2EeTag.size(), reinterpret_cast(e2EeTag.data()))) { - qCritical(lcCse()) << "Could not set expected e2EeTag"; - return QByteArray(); - } - - if(1 != EVP_DecryptFinal_ex(_ctx, unsignedData(decryptedBlock), &outLen)) { - qCritical(lcCse()) << "Could finalize decryption"; - return QByteArray(); - } - - const auto writtenToOutput = buffer.write(decryptedBlock, outLen); - - Q_ASSERT(writtenToOutput == outLen); - if (writtenToOutput != outLen) { - qCritical(lcCse()) << "Failed to write decrypted data to device."; - return QByteArray(); - } - - bytesWritten += writtenToOutput; - - _decryptedSoFar += OCC::Constants::e2EeTagSize; - - _isFinished = true; - } - - if (isFinished()) { - qCDebug(lcCse()) << "Decryption complete"; - } - - return byteArray; -} - -bool EncryptionHelper::StreamingDecryptor::isInitialized() const -{ - return _isInitialized; -} - -bool EncryptionHelper::StreamingDecryptor::isFinished() const -{ - return _isFinished; -} } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryption.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryption.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryption.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryption.h 2022-01-03 12:25:12.000000000 +0000 @@ -23,11 +23,11 @@ namespace OCC { -QString e2eeBaseUrl(); +QString baseUrl(); namespace EncryptionHelper { QByteArray generateRandomFilename(); - OWNCLOUDSYNC_EXPORT QByteArray generateRandom(int size); + QByteArray generateRandom(int size); QByteArray generatePassword(const QString &wordlist, const QByteArray& salt); OWNCLOUDSYNC_EXPORT QByteArray encryptPrivateKey( const QByteArray& key, @@ -60,57 +60,11 @@ const QByteArray& data ); - OWNCLOUDSYNC_EXPORT bool fileEncryption(const QByteArray &key, const QByteArray &iv, + bool fileEncryption(const QByteArray &key, const QByteArray &iv, QFile *input, QFile *output, QByteArray& returnTag); - OWNCLOUDSYNC_EXPORT bool fileDecryption(const QByteArray &key, const QByteArray &iv, + bool fileDecryption(const QByteArray &key, const QByteArray& iv, QFile *input, QFile *output); - -// -// Simple classes for safe (RAII) handling of OpenSSL -// data structures -// -class CipherCtx { -public: - CipherCtx() : _ctx(EVP_CIPHER_CTX_new()) - { - } - - ~CipherCtx() - { - EVP_CIPHER_CTX_free(_ctx); - } - - operator EVP_CIPHER_CTX*() - { - return _ctx; - } - -private: - Q_DISABLE_COPY(CipherCtx) - EVP_CIPHER_CTX *_ctx; -}; - -class OWNCLOUDSYNC_EXPORT StreamingDecryptor -{ -public: - StreamingDecryptor(const QByteArray &key, const QByteArray &iv, quint64 totalSize); - ~StreamingDecryptor() = default; - - QByteArray chunkDecryption(const char *input, quint64 chunkSize); - - bool isInitialized() const; - bool isFinished() const; - -private: - Q_DISABLE_COPY(StreamingDecryptor) - - CipherCtx _ctx; - bool _isInitialized = false; - bool _isFinished = false; - quint64 _decryptedSoFar = 0; - quint64 _totalSize = 0; -}; } class OWNCLOUDSYNC_EXPORT ClientSideEncryption : public QObject { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryptionjobs.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryptionjobs.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/clientsideencryptionjobs.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/clientsideencryptionjobs.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -27,7 +27,7 @@ GetMetadataApiJob::GetMetadataApiJob(const AccountPtr& account, const QByteArray& fileId, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId) { } @@ -63,7 +63,7 @@ const QByteArray& fileId, const QByteArray& b64Metadata, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId), _b64Metadata(b64Metadata) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId), _b64Metadata(b64Metadata) { } @@ -104,8 +104,8 @@ const QByteArray& b64Metadata, const QByteArray& token, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("meta-data/") + fileId, parent) -, _fileId(fileId), +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("meta-data/") + fileId, parent), +_fileId(fileId), _b64Metadata(b64Metadata), _token(token) { @@ -154,7 +154,7 @@ const QByteArray& fileId, const QByteArray& token, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("lock/") + fileId, parent), _fileId(fileId), _token(token) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("lock/") + fileId, parent), _fileId(fileId), _token(token) { } @@ -185,10 +185,11 @@ } + DeleteMetadataApiJob::DeleteMetadataApiJob(const AccountPtr& account, const QByteArray& fileId, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("meta-data/") + fileId, parent), _fileId(fileId) { } @@ -218,7 +219,7 @@ } LockEncryptFolderApiJob::LockEncryptFolderApiJob(const AccountPtr& account, const QByteArray& fileId, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("lock/") + fileId, parent), _fileId(fileId) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("lock/") + fileId, parent), _fileId(fileId) { } @@ -257,7 +258,7 @@ } SetEncryptionFlagApiJob::SetEncryptionFlagApiJob(const AccountPtr& account, const QByteArray& fileId, FlagAction flagAction, QObject* parent) -: AbstractNetworkJob(account, e2eeBaseUrl() + QStringLiteral("encrypted/") + fileId, parent), _fileId(fileId), _flagAction(flagAction) +: AbstractNetworkJob(account, baseUrl() + QStringLiteral("encrypted/") + fileId, parent), _fileId(fileId), _flagAction(flagAction) { } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -29,7 +29,6 @@ configfile.cpp abstractnetworkjob.cpp networkjobs.cpp - iconjob.cpp owncloudpropagator.cpp nextcloudtheme.cpp abstractpropagateremotedeleteencrypted.cpp @@ -40,8 +39,6 @@ propagateupload.cpp propagateuploadv1.cpp propagateuploadng.cpp - bulkpropagatorjob.cpp - putmultifilejob.cpp propagateremotedelete.cpp propagateremotedeleteencrypted.cpp propagateremotedeleteencryptedrootfolder.cpp @@ -54,25 +51,15 @@ syncfilestatustracker.cpp localdiscoverytracker.cpp syncresult.cpp - syncoptions.cpp theme.cpp clientsideencryption.cpp clientsideencryptionjobs.cpp - datetimeprovider.cpp - ocsuserstatusconnector.cpp - userstatusconnector.cpp - ocsprofileconnector.cpp creds/dummycredentials.cpp creds/abstractcredentials.cpp creds/credentialscommon.cpp creds/keychainchunk.cpp ) -if (WIN32) - # to fix warnings from ntstatus.h - add_definitions(-DUMDF_USING_NTSTATUS) -endif() - if(TOKEN_AUTH_ONLY) set (libsync_SRCS ${libsync_SRCS} creds/tokencredentials.cpp) else() @@ -98,22 +85,19 @@ IF (NOT APPLE) INSTALL( FILES ${owncloudsync_HEADERS} - DESTINATION ${INCLUDE_INSTALL_DIR}/nextcloudsync/mirall + DESTINATION ${INCLUDE_INSTALL_DIR}/${synclib_NAME}/mirall ) INSTALL( FILES ${creds_HEADERS} - DESTINATION ${INCLUDE_INSTALL_DIR}/nextcloudsync/creds + DESTINATION ${INCLUDE_INSTALL_DIR}/${synclib_NAME}/creds ) ENDIF(NOT APPLE) find_package(Qt5 REQUIRED COMPONENTS WebSockets) - -add_library(nextcloudsync SHARED ${libsync_SRCS}) -add_library(Nextcloud::sync ALIAS nextcloudsync) - -target_link_libraries(nextcloudsync +add_library(${synclib_NAME} SHARED ${libsync_SRCS}) +target_link_libraries(${synclib_NAME} PUBLIC - Nextcloud::csync + "${csync_NAME}" OpenSSL::Crypto OpenSSL::SSL ${OS_SPECIFIC_LINK_LIBRARIES} @@ -124,46 +108,38 @@ if (NOT TOKEN_AUTH_ONLY) find_package(Qt5 REQUIRED COMPONENTS Widgets Svg) - target_link_libraries(nextcloudsync PUBLIC Qt5::Widgets Qt5::Svg qt5keychain) + target_link_libraries(${synclib_NAME} PUBLIC Qt5::Widgets Qt5::Svg qt5keychain) endif() if(Inotify_FOUND) - target_include_directories(nextcloudsync PRIVATE ${Inotify_INCLUDE_DIRS}) - target_link_libraries(nextcloudsync PUBLIC ${Inotify_LIBRARIES}) + target_include_directories(${synclib_NAME} PRIVATE ${Inotify_INCLUDE_DIRS}) + target_link_libraries(${synclib_NAME} PUBLIC ${Inotify_LIBRARIES}) endif() -GENERATE_EXPORT_HEADER( nextcloudsync - BASE_NAME nextcloudsync +GENERATE_EXPORT_HEADER( ${synclib_NAME} + BASE_NAME ${synclib_NAME} EXPORT_MACRO_NAME OWNCLOUDSYNC_EXPORT EXPORT_FILE_NAME owncloudlib.h STATIC_DEFINE OWNCLOUD_BUILT_AS_STATIC ) -target_include_directories(nextcloudsync PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +target_include_directories(${synclib_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + -set_target_properties( - nextcloudsync - PROPERTIES - VERSION - ${MIRALL_VERSION} - SOVERSION - ${MIRALL_SOVERSION} - RUNTIME_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - LIBRARY_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync - RUNTIME_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync +set_target_properties( ${synclib_NAME} PROPERTIES + VERSION ${MIRALL_VERSION} + SOVERSION ${MIRALL_SOVERSION} + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} ) if(NOT BUILD_OWNCLOUD_OSX_BUNDLE) - install(TARGETS nextcloudsync + install(TARGETS ${synclib_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) else() - install(TARGETS nextcloudsync DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS) + install(TARGETS ${synclib_NAME} DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS) endif() diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/configfile.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/configfile.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/configfile.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/configfile.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -228,7 +228,7 @@ qint64 ConfigFile::maxChunkSize() const { QSettings settings(configFile(), QSettings::IniFormat); - return settings.value(QLatin1String(maxChunkSizeC), 1000 * 1000 * 1000).toLongLong(); // default to 1000 MB + return settings.value(QLatin1String(maxChunkSizeC), 100 * 1000 * 1000).toLongLong(); // default to 100 MB } qint64 ConfigFile::minChunkSize() const @@ -645,7 +645,7 @@ // Invalid? (Unset at the very first launch) if(segment < 0 || segment > 99) { // Save valid segment value, normally has to be done only once. - segment = Utility::rand() % 99; + segment = qrand() % 99; settings.setValue(QLatin1String(updateSegmentC), segment); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/cookiejar.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/cookiejar.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/cookiejar.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/cookiejar.h 2022-01-03 12:25:12.000000000 +0000 @@ -30,7 +30,7 @@ Q_OBJECT public: explicit CookieJar(QObject *parent = nullptr); - ~CookieJar() override; + ~CookieJar(); bool setCookiesFromUrl(const QList &cookieList, const QUrl &url) override; QList cookiesForUrl(const QUrl &url) const override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/abstractcredentials.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/abstractcredentials.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/abstractcredentials.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/abstractcredentials.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -50,7 +50,6 @@ QString key = user + QLatin1Char(':') + u; if (!accountId.isEmpty()) { key += QLatin1Char(':') + accountId; - } #ifdef Q_OS_WIN // On Windows the credential keys aren't namespaced properly // by qtkeychain. To work around that we manually add namespacing @@ -60,6 +59,7 @@ // migrated to new namespaced keys on windows for 2.4. key.prepend(QCoreApplication::applicationName() + "_"); #endif + } return key; } } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/credentialscommon.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/credentialscommon.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/credentialscommon.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/credentialscommon.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -14,6 +14,7 @@ */ #include +#include #include #include #include diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/httpcredentials.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/httpcredentials.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/httpcredentials.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/httpcredentials.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -33,6 +33,8 @@ #include "creds/httpcredentials.h" #include +using namespace QKeychain; + namespace OCC { Q_LOGGING_CATEGORY(lcHttpCredentials, "nextcloud.sync.credentials.http", QtInfoMsg) @@ -199,11 +201,11 @@ if (!_clientCertBundle.isEmpty()) { // New case (>=2.6): We have a bundle in the settings and read the password from // the keychain - auto job = new QKeychain::ReadPasswordJob(Theme::instance()->appName()); + auto job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(keychainKey(_account->url().toString(), _user + clientCertPasswordC, _account->id())); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotReadClientCertPasswordJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotReadClientCertPasswordJobDone); job->start(); return; } @@ -214,18 +216,18 @@ _user + clientCertificatePEMC, _keychainMigration ? QString() : _account->id()); - auto *job = new QKeychain::ReadPasswordJob(Theme::instance()->appName()); + auto *job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotReadClientCertPEMJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotReadClientCertPEMJobDone); job->start(); } void HttpCredentials::deleteOldKeychainEntries() { auto startDeleteJob = [this](QString user) { - auto *job = new QKeychain::DeletePasswordJob(Theme::instance()->appName()); + auto *job = new DeletePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(true); job->setKey(keychainKey(_account->url().toString(), user, QString())); @@ -237,7 +239,7 @@ startDeleteJob(_user + clientCertificatePEMC); } -bool HttpCredentials::keychainUnavailableRetryLater(QKeychain::ReadPasswordJob *incoming) +bool HttpCredentials::keychainUnavailableRetryLater(QKeychain::Job *incoming) { #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) Q_ASSERT(!incoming->insecureFallback()); // If insecureFallback is set, the next test would be pointless @@ -251,8 +253,6 @@ _retryOnKeyChainError = false; return true; } -#else - Q_UNUSED(incoming); #endif _retryOnKeyChainError = false; return false; @@ -260,14 +260,14 @@ void HttpCredentials::slotReadClientCertPasswordJobDone(QKeychain::Job *job) { - auto readJob = qobject_cast(job); - if (keychainUnavailableRetryLater(readJob)) + if (keychainUnavailableRetryLater(job)) return; - if (readJob->error() == QKeychain::NoError) { + auto readJob = static_cast(job); + if (readJob->error() == NoError) { _clientCertPassword = readJob->binaryData(); } else { - qCWarning(lcHttpCredentials) << "Could not retrieve client cert password from keychain" << readJob->errorString(); + qCWarning(lcHttpCredentials) << "Could not retrieve client cert password from keychain" << job->errorString(); } if (!unpackClientCertBundle()) { @@ -281,12 +281,12 @@ void HttpCredentials::slotReadClientCertPEMJobDone(QKeychain::Job *incoming) { - auto readJob = qobject_cast(incoming); - if (keychainUnavailableRetryLater(readJob)) + if (keychainUnavailableRetryLater(incoming)) return; // Store PEM in memory - if (readJob->error() == QKeychain::NoError && readJob->binaryData().length() > 0) { + auto *readJob = static_cast(incoming); + if (readJob->error() == NoError && readJob->binaryData().length() > 0) { QList sslCertificateList = QSslCertificate::fromData(readJob->binaryData(), QSsl::Pem); if (sslCertificateList.length() >= 1) { _clientSslCertificate = sslCertificateList.at(0); @@ -299,20 +299,20 @@ _user + clientKeyPEMC, _keychainMigration ? QString() : _account->id()); - auto *job = new QKeychain::ReadPasswordJob(Theme::instance()->appName()); + auto *job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, &QKeychain::ReadPasswordJob::finished, this, &HttpCredentials::slotReadClientKeyPEMJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotReadClientKeyPEMJobDone); job->start(); } void HttpCredentials::slotReadClientKeyPEMJobDone(QKeychain::Job *incoming) { - auto readJob = qobject_cast(incoming); // Store key in memory + auto *readJob = static_cast(incoming); - if (readJob->error() == QKeychain::NoError && readJob->binaryData().length() > 0) { + if (readJob->error() == NoError && readJob->binaryData().length() > 0) { QByteArray clientKeyPEM = readJob->binaryData(); // FIXME Unfortunately Qt has a bug and we can't just use QSsl::Opaque to let it // load whatever we have. So we try until it works. @@ -338,11 +338,11 @@ _user, _keychainMigration ? QString() : _account->id()); - auto *job = new QKeychain::ReadPasswordJob(Theme::instance()->appName()); + auto *job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, &QKeychain::ReadPasswordJob::finished, this, &HttpCredentials::slotReadJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotReadJobDone); job->start(); } @@ -355,9 +355,9 @@ || !reply->property(authenticationFailedC).toBool())); } -void HttpCredentials::slotReadJobDone(QKeychain::Job *incoming) +void HttpCredentials::slotReadJobDone(QKeychain::Job *incomingJob) { - auto *job = static_cast(incoming); + auto *job = static_cast(incomingJob); QKeychain::Error error = job->error(); // If we can't find the credentials at the keys that include the account id, @@ -381,9 +381,9 @@ qCWarning(lcHttpCredentials) << "Strange: User is empty!"; } - if (!_refreshToken.isEmpty() && error == QKeychain::NoError) { + if (!_refreshToken.isEmpty() && error == NoError) { refreshAccessToken(); - } else if (!_password.isEmpty() && error == QKeychain::NoError) { + } else if (!_password.isEmpty() && error == NoError) { // All cool, the keychain did not come back with error. // Still, the password can be empty which indicates a problem and // the password dialog has to be opened. @@ -393,7 +393,7 @@ // we come here if the password is empty or any other keychain // error happend. - _fetchErrorString = job->error() != QKeychain::EntryNotFound ? job->errorString() : QString(); + _fetchErrorString = job->error() != EntryNotFound ? job->errorString() : QString(); _password = QString(); _ready = false; @@ -486,7 +486,7 @@ return; } - auto *job = new QKeychain::DeletePasswordJob(Theme::instance()->appName()); + auto *job = new DeletePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(true); job->setKey(kck); @@ -531,10 +531,10 @@ // and we'll just store the bundle password in the keychain. That's prefered // since the keychain on older Windows platforms can only store a limited number // of bytes per entry and key/cert may exceed that. - auto *job = new QKeychain::WritePasswordJob(Theme::instance()->appName()); + auto *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotWriteClientCertPasswordJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteClientCertPasswordJobDone); job->setKey(keychainKey(_account->url().toString(), _user + clientCertPasswordC, _account->id())); job->setBinaryData(_clientCertPassword); job->start(); @@ -544,10 +544,10 @@ // Option 2, pre 2.6 configs: We used to store the raw cert/key in the keychain and // still do so if no bundle is available. We can't currently migrate to Option 1 // because we have no functions for creating an encrypted pkcs12 bundle. - auto *job = new QKeychain::WritePasswordJob(Theme::instance()->appName()); + auto *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotWriteClientCertPEMJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteClientCertPEMJobDone); job->setKey(keychainKey(_account->url().toString(), _user + clientCertificatePEMC, _account->id())); job->setBinaryData(_clientSslCertificate.toPem()); job->start(); @@ -557,7 +557,7 @@ } } -void HttpCredentials::slotWriteClientCertPasswordJobDone(QKeychain::Job *finishedJob) +void HttpCredentials::slotWriteClientCertPasswordJobDone(Job *finishedJob) { if (finishedJob && finishedJob->error() != QKeychain::NoError) { qCWarning(lcHttpCredentials) << "Could not write client cert password to credentials" @@ -567,7 +567,7 @@ slotWritePasswordToKeychain(); } -void HttpCredentials::slotWriteClientCertPEMJobDone(QKeychain::Job *finishedJob) +void HttpCredentials::slotWriteClientCertPEMJobDone(Job *finishedJob) { if (finishedJob && finishedJob->error() != QKeychain::NoError) { qCWarning(lcHttpCredentials) << "Could not write client cert to credentials" @@ -576,10 +576,10 @@ // write ssl key if there is one if (!_clientSslKey.isNull()) { - auto *job = new QKeychain::WritePasswordJob(Theme::instance()->appName()); + auto *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotWriteClientKeyPEMJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteClientKeyPEMJobDone); job->setKey(keychainKey(_account->url().toString(), _user + clientKeyPEMC, _account->id())); job->setBinaryData(_clientSslKey.toPem()); job->start(); @@ -588,7 +588,7 @@ } } -void HttpCredentials::slotWriteClientKeyPEMJobDone(QKeychain::Job *finishedJob) +void HttpCredentials::slotWriteClientKeyPEMJobDone(Job *finishedJob) { if (finishedJob && finishedJob->error() != QKeychain::NoError) { qCWarning(lcHttpCredentials) << "Could not write client key to credentials" @@ -600,10 +600,10 @@ void HttpCredentials::slotWritePasswordToKeychain() { - auto *job = new QKeychain::WritePasswordJob(Theme::instance()->appName()); + auto *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, &QKeychain::Job::finished, this, &HttpCredentials::slotWriteJobDone); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteJobDone); job->setKey(keychainKey(_account->url().toString(), _user, _account->id())); job->setTextData(isUsingOAuth() ? _refreshToken : _password); job->start(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/httpcredentials.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/httpcredentials.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/httpcredentials.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/httpcredentials.h 2022-01-03 12:25:12.000000000 +0000 @@ -148,7 +148,7 @@ * If that happens, this function will schedule another try and * return true. */ - bool keychainUnavailableRetryLater(QKeychain::ReadPasswordJob *); + bool keychainUnavailableRetryLater(QKeychain::Job *); /** Takes client cert pkcs12 and unwraps the key/cert. * diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/keychainchunk.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/keychainchunk.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/creds/keychainchunk.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/creds/keychainchunk.h 2022-01-03 12:25:12.000000000 +0000 @@ -45,7 +45,7 @@ public: Job(QObject *parent = nullptr); - ~Job() override; + virtual ~Job(); QKeychain::Error error() const; QString errorString() const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/datetimeprovider.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/datetimeprovider.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/datetimeprovider.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/datetimeprovider.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -#include "datetimeprovider.h" - -namespace OCC { - -DateTimeProvider::~DateTimeProvider() = default; - -QDateTime DateTimeProvider::currentDateTime() const -{ - return QDateTime::currentDateTime(); -} - -QDate DateTimeProvider::currentDate() const -{ - return QDate::currentDate(); -} - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/datetimeprovider.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/datetimeprovider.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/datetimeprovider.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/datetimeprovider.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -#pragma once - -#include "owncloudlib.h" - -#include - -namespace OCC { - -class OWNCLOUDSYNC_EXPORT DateTimeProvider -{ -public: - virtual ~DateTimeProvider(); - - virtual QDateTime currentDateTime() const; - - virtual QDate currentDate() const; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discovery.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discovery.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discovery.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discovery.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -15,20 +15,16 @@ #include "discovery.h" #include "common/filesystembase.h" #include "common/syncjournaldb.h" -#include "filesystem.h" #include "syncfileitem.h" #include #include -#include -#include #include #include #include "vio/csync_vio_local.h" #include #include #include -#include -#include +#include "common/checksums.h" #include "csync_exclude.h" #include "csync.h" @@ -37,50 +33,6 @@ Q_LOGGING_CATEGORY(lcDisco, "sync.discovery", QtInfoMsg) - -bool ProcessDirectoryJob::checkForInvalidFileName(const PathTuple &path, - const std::map &entries, Entries &entry) -{ - const auto originalFileName = entry.localEntry.name; - const auto newFileName = originalFileName.trimmed(); - - if (originalFileName == newFileName) { - return true; - } - - const auto entriesIter = entries.find(newFileName); - if (entriesIter != entries.end()) { - QString errorMessage; - const auto newFileNameEntry = entriesIter->second; - if (newFileNameEntry.serverEntry.isValid()) { - errorMessage = tr("File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server."); - } - if (newFileNameEntry.localEntry.isValid()) { - errorMessage = tr("File contains trailing spaces and could not be renamed, because a file with the same name already exists locally."); - } - - if (!errorMessage.isEmpty()) { - auto item = SyncFileItemPtr::create(); - if (entry.localEntry.isDirectory) { - item->_type = CSyncEnums::ItemTypeDirectory; - } else { - item->_type = CSyncEnums::ItemTypeFile; - } - item->_file = path._target; - item->_originalFile = path._target; - item->_instruction = CSYNC_INSTRUCTION_ERROR; - item->_status = SyncFileItem::NormalError; - item->_errorString = errorMessage; - emit _discoveryData->itemDiscovered(item); - return false; - } - } - - entry.localEntry.renameName = newFileName; - - return true; -} - void ProcessDirectoryJob::start() { qCInfo(lcDisco) << "STARTING" << _currentFolder._server << _queryServer << _currentFolder._local << _queryLocal; @@ -114,12 +66,20 @@ { ASSERT(_localQueryDone && _serverQueryDone); + QString localDir; + // Build lookup tables for local, remote and db entries. // For suffix-virtual files, the key will normally be the base file name // without the suffix. // However, if foo and foo.owncloud exists locally, there'll be "foo" // with local, db, server entries and "foo.owncloud" with only a local // entry. + struct Entries { + QString nameOverride; + SyncJournalFileRecord dbEntry; + RemoteInfo serverEntry; + LocalInfo localEntry; + }; std::map entries; for (auto &e : _serverNormalQueryEntries) { entries[e.name].serverEntry = std::move(e); @@ -177,8 +137,8 @@ // // Iterate over entries and process them // - for (auto &f : entries) { - auto &e = f.second; + for (const auto &f : entries) { + const auto &e = f.second; PathTuple path; path = _currentFolder.addName(e.nameOverride.isEmpty() ? f.first : e.nameOverride); @@ -233,9 +193,6 @@ processBlacklisted(path, e.localEntry, e.dbEntry); continue; } - if (!checkForInvalidFileName(path, entries, e)) { - continue; - } processFile(std::move(path), e.localEntry, e.serverEntry, e.dbEntry); } QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); @@ -247,7 +204,7 @@ // FIXME: move to ExcludedFiles 's regexp ? bool isInvalidPattern = false; - if (excluded == CSYNC_NOT_EXCLUDED && !_discoveryData->_invalidFilenameRx.pattern().isEmpty()) { + if (excluded == CSYNC_NOT_EXCLUDED && !_discoveryData->_invalidFilenameRx.isEmpty()) { if (path.contains(_discoveryData->_invalidFilenameRx)) { excluded = CSYNC_FILE_EXCLUDE_INVALID_CHAR; isInvalidPattern = true; @@ -312,8 +269,10 @@ } } if (invalid) { - item->_errorString = tr("File names containing the character \"%1\" are not supported on this file system.").arg(QLatin1Char(invalid)); - } else if (isInvalidPattern) { + item->_errorString = tr("File names containing the character '%1' are not supported on this file system.") + .arg(QLatin1Char(invalid)); + } + if (isInvalidPattern) { item->_errorString = tr("File name contains at least one invalid character"); } else { item->_errorString = tr("The file name is a reserved name on this file system."); @@ -389,13 +348,6 @@ item->_originalFile = path._original; item->_previousSize = dbEntry._fileSize; item->_previousModtime = dbEntry._modtime; - if (!localEntry.renameName.isEmpty()) { - if (_dirItem) { - item->_renameTarget = _dirItem->_file + "/" + localEntry.renameName; - } else { - item->_renameTarget = localEntry.renameName; - } - } if (dbEntry._modtime == localEntry.modtime && dbEntry._type == ItemTypeVirtualFile && localEntry.type == ItemTypeFile) { item->_type = ItemTypeFile; @@ -493,7 +445,7 @@ if (serverEntry.size == -1) missingData.append(tr("size")); if (serverEntry.remotePerm.isNull()) - missingData.append(tr("permission")); + missingData.append(tr("permissions")); if (serverEntry.etag.isEmpty()) missingData.append("ETag"); if (serverEntry.fileId.isEmpty()) @@ -501,7 +453,7 @@ if (!missingData.isEmpty()) { item->_instruction = CSYNC_INSTRUCTION_ERROR; _childIgnored = true; - item->_errorString = tr("Server reported no %1").arg(missingData.join(QLatin1String(", "))); + item->_errorString = tr("server reported no %1").arg(missingData.join(QLatin1String(", "))); emit _discoveryData->itemDiscovered(item); return; } @@ -509,19 +461,13 @@ // The file is known in the db already if (dbEntry.isValid()) { - const bool isDbEntryAnE2EePlaceholder = dbEntry.isVirtualFile() && !dbEntry.e2eMangledName().isEmpty(); - Q_ASSERT(!isDbEntryAnE2EePlaceholder || serverEntry.size >= Constants::e2EeTagSize); - const bool isVirtualE2EePlaceholder = isDbEntryAnE2EePlaceholder && serverEntry.size >= Constants::e2EeTagSize; - const qint64 sizeOnServer = isVirtualE2EePlaceholder ? serverEntry.size - Constants::e2EeTagSize : serverEntry.size; - const bool metaDataSizeNeedsUpdateForE2EeFilePlaceholder = isVirtualE2EePlaceholder && dbEntry._fileSize == serverEntry.size; - if (serverEntry.isDirectory != dbEntry.isDirectory()) { // If the type of the entity changed, it's like NEW, but // needs to delete the other entity first. item->_instruction = CSYNC_INSTRUCTION_TYPE_CHANGE; item->_direction = SyncFileItem::Down; item->_modtime = serverEntry.modtime; - item->_size = sizeOnServer; + item->_size = serverEntry.size; } else if ((dbEntry._type == ItemTypeVirtualFileDownload || localEntry.type == ItemTypeVirtualFileDownload) && (localEntry.isValid() || _queryLocal == ParentNotChanged)) { // The above check for the localEntry existing is important. Otherwise it breaks @@ -532,20 +478,7 @@ } else if (dbEntry._etag != serverEntry.etag) { item->_direction = SyncFileItem::Down; item->_modtime = serverEntry.modtime; - item->_size = sizeOnServer; - if (serverEntry.isDirectory) { - ENFORCE(dbEntry.isDirectory()); - item->_instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; - } else if (!localEntry.isValid() && _queryLocal != ParentNotChanged) { - // Deleted locally, changed on server - item->_instruction = CSYNC_INSTRUCTION_NEW; - } else { - item->_instruction = CSYNC_INSTRUCTION_SYNC; - } - } else if (dbEntry._modtime <= 0 && serverEntry.modtime > 0) { - item->_direction = SyncFileItem::Down; - item->_modtime = serverEntry.modtime; - item->_size = sizeOnServer; + item->_size = serverEntry.size; if (serverEntry.isDirectory) { ENFORCE(dbEntry.isDirectory()); item->_instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; @@ -555,43 +488,11 @@ } else { item->_instruction = CSYNC_INSTRUCTION_SYNC; } - } else if (dbEntry._remotePerm != serverEntry.remotePerm || dbEntry._fileId != serverEntry.fileId || metaDataSizeNeedsUpdateForE2EeFilePlaceholder) { - if (metaDataSizeNeedsUpdateForE2EeFilePlaceholder) { - // we are updating placeholder sizes after migrating from older versions with VFS + E2EE implicit hydration not supported - qCDebug(lcDisco) << "Migrating the E2EE VFS placeholder " << dbEntry.path() << " from older version. The old size is " << item->_size << ". The new size is " << sizeOnServer; - item->_size = sizeOnServer; - } + } else if (dbEntry._remotePerm != serverEntry.remotePerm || dbEntry._fileId != serverEntry.fileId) { item->_instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; item->_direction = SyncFileItem::Down; } else { - // if (is virtual mode enabled and folder is encrypted - check if the size is the same as on the server and then - trigger server query - // to update a placeholder with corrected size (-16 Bytes) - // or, maybe, add a flag to the database - vfsE2eeSizeCorrected? if it is not set - subtract it from the placeholder's size and re-create/update a placeholder? - const QueryMode serverQueryMode = [this, &dbEntry, &serverEntry]() { - const bool isVfsModeOn = _discoveryData && _discoveryData->_syncOptions._vfs && _discoveryData->_syncOptions._vfs->mode() != Vfs::Off; - if (isVfsModeOn && dbEntry.isDirectory() && dbEntry._isE2eEncrypted) { - qint64 localFolderSize = 0; - const auto listFilesCallback = [&localFolderSize](const OCC::SyncJournalFileRecord &record) { - if (record.isFile()) { - // add Constants::e2EeTagSize so we will know the size of E2EE file on the server - localFolderSize += record._fileSize + Constants::e2EeTagSize; - } else if (record.isVirtualFile()) { - // just a virtual file, so, the size must contain Constants::e2EeTagSize if it was not corrected already - localFolderSize += record._fileSize; - } - }; - - const bool listFilesSucceeded = _discoveryData->_statedb->listFilesInPath(dbEntry.path().toUtf8(), listFilesCallback); - - if (listFilesSucceeded && localFolderSize != 0 && localFolderSize == serverEntry.sizeOfFolder) { - qCInfo(lcDisco) << "Migration of E2EE folder " << dbEntry.path() << " from older version to the one, supporting the implicit VFS hydration."; - return NormalQuery; - } - } - return ParentNotChanged; - }(); - - processFileAnalyzeLocalInfo(item, path, localEntry, serverEntry, dbEntry, serverQueryMode); + processFileAnalyzeLocalInfo(item, path, localEntry, serverEntry, dbEntry, ParentNotChanged); return; } @@ -607,14 +508,15 @@ item->_modtime = serverEntry.modtime; item->_size = serverEntry.size; - auto postProcessServerNew = [=]() mutable { + auto postProcessServerNew = [=] () { + auto tmp_path = path; if (item->isDirectory()) { _pendingAsyncJobs++; - _discoveryData->checkSelectiveSyncNewFolder(path._server, serverEntry.remotePerm, + _discoveryData->checkSelectiveSyncNewFolder(tmp_path._server, serverEntry.remotePerm, [=](bool result) { --_pendingAsyncJobs; if (!result) { - processFileAnalyzeLocalInfo(item, path, localEntry, serverEntry, dbEntry, _queryServer); + processFileAnalyzeLocalInfo(item, tmp_path, localEntry, serverEntry, dbEntry, _queryServer); } QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); }); @@ -629,18 +531,9 @@ && !FileSystem::isExcludeFile(item->_file)) { item->_type = ItemTypeVirtualFile; if (isVfsWithSuffix()) - addVirtualFileSuffix(path._original); - } - - if (opts._vfs->mode() != Vfs::Off && !item->_encryptedFileName.isEmpty()) { - // We are syncing a file for the first time (local entry is invalid) and it is encrypted file that will be virtual once synced - // to avoid having error of "file has changed during sync" when trying to hydrate it excplicitly - we must remove Constants::e2EeTagSize bytes from the end - // as explicit hydration does not care if these bytes are present in the placeholder or not, but, the size must not change in the middle of the sync - // this way it works for both implicit and explicit hydration by making a placeholder size that does not includes encryption tag Constants::e2EeTagSize bytes - // another scenario - we are syncing a file which is on disk but not in the database (database was removed or file was not written there yet) - item->_size = serverEntry.size - Constants::e2EeTagSize; + addVirtualFileSuffix(tmp_path._original); } - processFileAnalyzeLocalInfo(item, path, localEntry, serverEntry, dbEntry, _queryServer); + processFileAnalyzeLocalInfo(item, tmp_path, localEntry, serverEntry, dbEntry, _queryServer); }; // Potential NEW/NEW conflict is handled in AnalyzeLocal @@ -758,8 +651,9 @@ } else { // we need to make a request to the server to know that the original file is deleted on the server _pendingAsyncJobs++; - auto job = new RequestEtagJob(_discoveryData->_account, _discoveryData->_remoteFolder + originalPath, this); - connect(job, &RequestEtagJob::finishedWithResult, this, [=](const HttpResult &etag) mutable { + auto job = new RequestEtagJob(_discoveryData->_account, originalPath, this); + connect(job, &RequestEtagJob::finishedWithResult, this, [=](const HttpResult &etag) { + auto tmp_path = path; _pendingAsyncJobs--; QTimer::singleShot(0, _discoveryData, &DiscoveryPhase::scheduleMoreJobs); if (etag || etag.error().code != 404 || @@ -775,8 +669,8 @@ // In case the deleted item was discovered in parallel _discoveryData->findAndCancelDeletedJob(originalPath); - postProcessRename(path); - processFileFinalize(item, path, item->isDirectory(), item->_instruction == CSYNC_INSTRUCTION_RENAME ? NormalQuery : ParentDontExist, _queryServer); + postProcessRename(tmp_path); + processFileFinalize(item, tmp_path, item->isDirectory(), item->_instruction == CSYNC_INSTRUCTION_RENAME ? NormalQuery : ParentDontExist, _queryServer); }); job->start(); done = true; // Ideally, if the origin still exist on the server, we should continue searching... but that'd be difficult @@ -953,14 +847,6 @@ item->_modtime = localEntry.modtime; item->_type = localEntry.isDirectory ? ItemTypeDirectory : ItemTypeFile; _childModified = true; - } else if (dbEntry._modtime > 0 && localEntry.modtime <= 0) { - item->_instruction = CSYNC_INSTRUCTION_SYNC; - item->_direction = SyncFileItem::Down; - item->_size = localEntry.size > 0 ? localEntry.size : dbEntry._fileSize; - item->_modtime = dbEntry._modtime; - item->_previousModtime = dbEntry._modtime; - item->_type = localEntry.isDirectory ? ItemTypeDirectory : ItemTypeFile; - _childModified = true; } else { // Local file was changed item->_instruction = CSYNC_INSTRUCTION_SYNC; @@ -1027,11 +913,6 @@ return; } - if (localEntry.isDirectory && _discoveryData->_syncOptions._vfs->mode() != Vfs::WindowsCfApi) { - // for VFS folders on Windows only - return; - } - Q_ASSERT(item->_instruction == CSYNC_INSTRUCTION_NEW); if (item->_instruction != CSYNC_INSTRUCTION_NEW) { qCWarning(lcDisco) << "Trying to wipe a virtual item" << path._local << " with item->_instruction" << item->_instruction; @@ -1056,7 +937,7 @@ const auto isfolderPlaceHolderAvailabilityOnlineOnly = (folderPlaceHolderAvailability.isValid() && *folderPlaceHolderAvailability == VfsItemAvailability::OnlineOnly); // a folder is considered online-only if: no files are hydrated, or, if it's an empty folder - const auto isOnlineOnlyFolder = isfolderPlaceHolderAvailabilityOnlineOnly || (!folderPlaceHolderAvailability && isFolderPinStateOnlineOnly); + const auto isOnlineOnlyFolder = isfolderPlaceHolderAvailabilityOnlineOnly || !folderPlaceHolderAvailability && isFolderPinStateOnlineOnly; if (!isFilePlaceHolder && !isOnlineOnlyFolder) { if (localEntry.isDirectory && folderPlaceHolderAvailability.isValid() && !isOnlineOnlyFolder) { @@ -1075,12 +956,6 @@ if (isOnlineOnlyFolder) { // if we're wiping a folder, we will only get this function called once and will wipe a folder along with it's files and also display one error in GUI qCInfo(lcDisco) << "Wiping virtual folder without db entry for" << path._local; - if (isfolderPlaceHolderAvailabilityOnlineOnly && folderPlaceHolderAvailability.isValid()) { - qCInfo(lcDisco) << "*folderPlaceHolderAvailability:" << *folderPlaceHolderAvailability; - } - if (isFolderPinStateOnlineOnly && folderPinState.isValid()) { - qCInfo(lcDisco) << "*folderPinState:" << *folderPinState; - } emit _discoveryData->addErrorToGui(SyncFileItem::SoftError, tr("Conflict when uploading a folder. It's going to get cleared!"), path._local); } else { qCInfo(lcDisco) << "Wiping virtual file without db entry for" << path._local; @@ -1241,8 +1116,8 @@ if (base.isVirtualFile() && isVfsWithSuffix()) chopVirtualFileSuffix(serverOriginalPath); auto job = new RequestEtagJob(_discoveryData->_account, serverOriginalPath, this); - connect(job, &RequestEtagJob::finishedWithResult, this, [=](const HttpResult &etag) mutable { - if (!etag || (etag.get() != base._etag && !item->isDirectory()) || _discoveryData->isRenamed(originalPath)) { + connect(job, &RequestEtagJob::finishedWithResult, this, [=](const HttpResult &etag) mutable { + if (!etag || (*etag != base._etag && !item->isDirectory()) || _discoveryData->isRenamed(originalPath)) { qCInfo(lcDisco) << "Can't rename because the etag has changed or the directory is gone" << originalPath; // Can't be a rename, leave it as a new. postProcessLocalNew(); @@ -1250,7 +1125,7 @@ // In case the deleted item was discovered in parallel _discoveryData->findAndCancelDeletedJob(originalPath); processRename(path); - recurseQueryServer = etag.get() == base._etag ? ParentNotChanged : NormalQuery; + recurseQueryServer = *etag == base._etag ? ParentNotChanged : NormalQuery; } processFileFinalize(item, path, item->isDirectory(), NormalQuery, recurseQueryServer); _pendingAsyncJobs--; @@ -1670,7 +1545,7 @@ emit this->finished(); } else { // Fatal for the root job since it has no SyncFileItem, or for the network errors - emit _discoveryData->fatalError(tr("Server replied with an error while reading directory \"%1\" : %2") + emit _discoveryData->fatalError(tr("Server replied with an error while reading directory '%1' : %2") .arg(_currentFolder._server, results.error().message)); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discovery.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discovery.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discovery.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discovery.h 2022-01-03 12:25:12.000000000 +0000 @@ -78,11 +78,11 @@ ProcessDirectoryJob *parent) : QObject(parent) , _dirItem(dirItem) - , _lastSyncTimestamp(lastSyncTimestamp) , _queryServer(queryServer) , _queryLocal(queryLocal) , _discoveryData(parent->_discoveryData) , _currentFolder(path) + , _lastSyncTimestamp(lastSyncTimestamp) { computePinState(parent->_pinState); } @@ -104,13 +104,6 @@ SyncFileItemPtr _dirItem; private: - struct Entries - { - QString nameOverride; - SyncJournalFileRecord dbEntry; - RemoteInfo serverEntry; - LocalInfo localEntry; - }; /** Structure representing a path during discovery. A same path may have different value locally * or on the server in case of renames. @@ -150,8 +143,6 @@ } }; - bool checkForInvalidFileName(const PathTuple &path, const std::map &entries, Entries &entry); - /** Iterate over entries inside the directory (non-recursively). * * Called once _serverEntries and _localEntries are filled @@ -302,6 +293,6 @@ signals: void finished(); // The root etag of this directory was fetched - void etag(const QByteArray &, const QDateTime &time); + void etag(const QString &, const QDateTime &time); }; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discoveryphase.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discoveryphase.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discoveryphase.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discoveryphase.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -185,9 +185,7 @@ qCWarning(lcDiscovery) << "instruction" << instruction; qCWarning(lcDiscovery) << "(*it)->_type" << (*it)->_type; qCWarning(lcDiscovery) << "(*it)->_isRestoration " << (*it)->_isRestoration; - Q_ASSERT(false); - addErrorToGui(SyncFileItem::Status::FatalError, tr("Error while canceling delete of a file"), originalPath); - emit fatalError(tr("Error while canceling delete of %1").arg(originalPath)); + ENFORCE(false); } (*it)->_instruction = CSYNC_INSTRUCTION_NONE; result = true; @@ -351,9 +349,7 @@ << "getlastmodified" << "getcontentlength" << "getetag" - << "http://owncloud.org/ns:size" << "http://owncloud.org/ns:id" - << "http://owncloud.org/ns:fileid" << "http://owncloud.org/ns:downloadURL" << "http://owncloud.org/ns:dDC" << "http://owncloud.org/ns:permissions" @@ -433,10 +429,6 @@ result.isE2eEncrypted = true; } } - - if (result.isDirectory && map.contains("size")) { - result.sizeOfFolder = map.value("size").toInt(); - } } void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &file, const QMap &map) @@ -456,9 +448,6 @@ _dataFingerprint = "[empty]"; } } - if (map.contains(QStringLiteral("fileid"))) { - _localFileId = map.value(QStringLiteral("fileid")).toUtf8(); - } if (map.contains("id")) { _fileId = map.value("id").toUtf8(); } @@ -466,9 +455,6 @@ _isE2eEncrypted = true; Q_ASSERT(!_fileId.isEmpty()); } - if (map.contains("size")) { - _size = map.value("size").toInt(); - } } else { RemoteInfo result; @@ -486,13 +472,19 @@ result.remotePerm.unsetPermission(RemotePermissions::IsMounted); result.remotePerm.setPermission(RemotePermissions::IsMountedSub); } + + QStringRef fileRef(&file); + int slashPos = file.lastIndexOf(QLatin1Char('/')); + if (slashPos > -1) { + fileRef = file.midRef(slashPos + 1); + } _results.push_back(std::move(result)); } //This works in concerto with the RequestEtagJob and the Folder object to check if the remote folder changed. if (map.contains("getetag")) { if (_firstEtag.isEmpty()) { - _firstEtag = parseEtag(map.value(QStringLiteral("getetag")).toUtf8()); // for directory itself + _firstEtag = parseEtag(map.value("getetag").toUtf8()); // for directory itself } } } @@ -535,7 +527,7 @@ void DiscoverySingleDirectoryJob::fetchE2eMetadata() { - const auto job = new GetMetadataApiJob(_account, _localFileId); + auto job = new GetMetadataApiJob(_account, _fileId); connect(job, &GetMetadataApiJob::jsonReceived, this, &DiscoverySingleDirectoryJob::metadataReceived); connect(job, &GetMetadataApiJob::error, diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discoveryphase.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discoveryphase.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/discoveryphase.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/discoveryphase.h 2022-01-03 12:25:12.000000000 +0000 @@ -55,7 +55,6 @@ OCC::RemotePermissions remotePerm; time_t modtime = 0; int64_t size = 0; - int64_t sizeOfFolder = 0; bool isDirectory = false; bool isE2eEncrypted = false; QString e2eMangledName; @@ -70,7 +69,6 @@ { /** FileName of the entry (this does not contains any directory or path, just the plain name */ QString name; - QString renameName; time_t modtime = 0; int64_t size = 0; uint64_t inode = 0; @@ -93,7 +91,7 @@ public: explicit DiscoverySingleLocalDirectoryJob(const AccountPtr &account, const QString &localPath, OCC::Vfs *vfs, QObject *parent = nullptr); - void run() override; + void run() Q_DECL_OVERRIDE; signals: void finished(QVector result); void finishedFatalError(QString errorString); @@ -128,7 +126,7 @@ // This is not actually a network job, it is just a job signals: void firstDirectoryPermissions(RemotePermissions); - void etag(const QByteArray &, const QDateTime &time); + void etag(const QString &, const QDateTime &time); void finished(const HttpResult> &result); private slots: @@ -142,9 +140,8 @@ private: QVector _results; QString _subPath; - QByteArray _firstEtag; + QString _firstEtag; QByteArray _fileId; - QByteArray _localFileId; AccountPtr _account; // The first result is for the directory itself and need to be ignored. // This flag is true if it was already ignored. @@ -156,7 +153,6 @@ // If this directory is e2ee bool _isE2eEncrypted; // If set, the discovery will finish with an error - int64_t _size = 0; QString _error; QPointer _lsColJob; @@ -256,7 +252,7 @@ AccountPtr _account; SyncOptions _syncOptions; ExcludedFiles *_excludes; - QRegularExpression _invalidFilenameRx; // FIXME: maybe move in ExcludedFiles + QRegExp _invalidFilenameRx; // FIXME: maybe move in ExcludedFiles QStringList _serverBlacklistedFiles; // The blacklist from the capabilities bool _ignoreHiddenFiles = false; std::function _shouldDiscoverLocaly; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/filesystem.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/filesystem.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/filesystem.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/filesystem.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -63,9 +63,9 @@ && (stat.modtime != 0)) { result = stat.modtime; } else { - result = Utility::qDateTimeToTime_t(QFileInfo(filename).lastModified()); qCWarning(lcFileSystem) << "Could not get modification time for" << filename - << "with csync, using QFileInfo:" << result; + << "with csync, using QFileInfo"; + result = Utility::qDateTimeToTime_t(QFileInfo(filename).lastModified()); } return result; } @@ -98,7 +98,7 @@ { const qint64 actualSize = getSize(fileName); const time_t actualMtime = getModTime(fileName); - if ((actualSize != previousSize && actualMtime > 0) || (actualMtime != previousMtime && previousMtime > 0 && actualMtime > 0)) { + if (actualSize != previousSize || actualMtime != previousMtime) { qCInfo(lcFileSystem) << "File" << fileName << "has changed:" << "size: " << previousSize << "<->" << actualSize << ", mtime: " << previousMtime << "<->" << actualMtime; @@ -115,7 +115,7 @@ if (csync_vio_local_stat(filename, &stat) != -1) { result = stat.size; } else { - qCWarning(lcFileSystem) << "Could not get size for" << filename << "with csync" << Utility::formatWinError(errno); + qCWarning(lcFileSystem) << "Could not get size for" << filename << "with csync"; } return result; } @@ -155,7 +155,7 @@ onDeleted(di.filePath(), false); } else { if (errors) { - errors->append(QCoreApplication::translate("FileSystem", "Error removing \"%1\": %2") + errors->append(QCoreApplication::translate("FileSystem", "Error removing '%1': %2") .arg(QDir::toNativeSeparators(di.filePath()), removeError)); } qCWarning(lcFileSystem) << "Error removing " << di.filePath() << ':' << removeError; @@ -171,7 +171,7 @@ onDeleted(path, true); } else { if (errors) { - errors->append(QCoreApplication::translate("FileSystem", "Could not remove folder \"%1\"") + errors->append(QCoreApplication::translate("FileSystem", "Could not remove folder '%1'") .arg(QDir::toNativeSeparators(path))); } qCWarning(lcFileSystem) << "Error removing folder" << path; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/iconjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/iconjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/iconjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/iconjob.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/* - * Copyright (C) by Camila Ayres - * - * 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 "iconjob.h" - -namespace OCC { - -IconJob::IconJob(AccountPtr account, const QUrl &url, QObject *parent) - : QObject(parent) -{ - QNetworkRequest request(url); -#if (QT_VERSION >= 0x050600) - request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); -#endif - const auto reply = account->sendRawRequest(QByteArrayLiteral("GET"), url, request); - connect(reply, &QNetworkReply::finished, this, &IconJob::finished); -} - -void IconJob::finished() -{ - const auto reply = qobject_cast(sender()); - if (!reply) { - return; - } - deleteLater(); - - const auto networkError = reply->error(); - if (networkError != QNetworkReply::NoError) { - emit error(networkError); - return; - } - - emit jobFinished(reply->readAll()); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/iconjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/iconjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/iconjob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/iconjob.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* - * Copyright (C) by Camila Ayres - * - * 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 ICONJOB_H -#define ICONJOB_H - -#include "account.h" -#include "accountfwd.h" -#include "owncloudlib.h" - -#include -#include -#include -#include -#include - -namespace OCC { - -/** - * @brief Job to fetch a icon - * @ingroup gui - */ -class OWNCLOUDSYNC_EXPORT IconJob : public QObject -{ - Q_OBJECT -public: - explicit IconJob(AccountPtr account, const QUrl &url, QObject *parent = nullptr); - -signals: - void jobFinished(QByteArray iconData); - void error(QNetworkReply::NetworkError errorType); - -private slots: - void finished(); -}; -} - -#endif // ICONJOB_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/logger.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/logger.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/logger.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/logger.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,7 +17,6 @@ #include "config.h" #include -#include #include #include #include @@ -33,11 +32,36 @@ #include // for stdout #endif -namespace { -constexpr int CrashLogSize = 20; -} namespace OCC { +QtMessageHandler s_originalMessageHandler = nullptr; + +static void mirallLogCatcher(QtMsgType type, const QMessageLogContext &ctx, const QString &message) +{ + auto logger = Logger::instance(); + if (type == QtDebugMsg && !logger->logDebug()) { + if (s_originalMessageHandler) { + s_originalMessageHandler(type, ctx, message); + } + } else if (!logger->isNoop()) { + logger->doLog(qFormatLogMessage(type, ctx, message)); + } + if(type == QtCriticalMsg || type == QtFatalMsg) { + std::cerr << qPrintable(qFormatLogMessage(type, ctx, message)) << std::endl; + } + + if(type == QtFatalMsg) { + if (!logger->isNoop()) { + logger->close(); + } +#if defined(Q_OS_WIN) + // Make application terminate in a way that can be caught by the crash reporter + Utility::crash(); +#endif + } +} + + Logger *Logger::instance() { static Logger log; @@ -47,13 +71,11 @@ Logger::Logger(QObject *parent) : QObject(parent) { - qSetMessagePattern(QStringLiteral("%{time yyyy-MM-dd hh:mm:ss:zzz} [ %{type} %{category} %{file}:%{line} " - "]%{if-debug}\t[ %{function} ]%{endif}:\t%{message}")); - _crashLog.resize(CrashLogSize); + qSetMessagePattern("%{time yyyy-MM-dd hh:mm:ss:zzz} [ %{type} %{category} ]%{if-debug}\t[ %{function} ]%{endif}:\t%{message}"); #ifndef NO_MSG_HANDLER - qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &ctx, const QString &message) { - Logger::instance()->doLog(type, ctx, message); - }); + s_originalMessageHandler = qInstallMessageHandler(mirallLogCatcher); +#else + Q_UNUSED(mirallLogCatcher) #endif } @@ -80,38 +102,51 @@ emit guiMessage(title, message); } +void Logger::log(Log log) +{ + QString msg; + if (_showTime) { + msg = log.timeStamp.toString(QLatin1String("MM-dd hh:mm:ss:zzz")) + QLatin1Char(' '); + } + + msg += log.message; + // _logs.append(log); + // std::cout << qPrintable(log.message) << std::endl; + + doLog(msg); +} + +/** + * Returns true if doLog does nothing and need not to be called + */ +bool Logger::isNoop() const +{ + QMutexLocker lock(&_mutex); + return !_logstream; +} + bool Logger::isLoggingToFile() const { QMutexLocker lock(&_mutex); return _logstream; } -void Logger::doLog(QtMsgType type, const QMessageLogContext &ctx, const QString &message) +void Logger::doLog(const QString &msg) { - const QString msg = qFormatLogMessage(type, ctx, message); { QMutexLocker lock(&_mutex); - _crashLogIndex = (_crashLogIndex + 1) % CrashLogSize; - _crashLog[_crashLogIndex] = msg; if (_logstream) { - (*_logstream) << msg << Qt::endl; + (*_logstream) << msg << endl; if (_doFileFlush) _logstream->flush(); } - if (type == QtFatalMsg) { - close(); -#if defined(Q_OS_WIN) - // Make application terminate in a way that can be caught by the crash reporter - Utility::crash(); -#endif - } } emit logWindowLog(msg); } void Logger::close() { - dumpCrashLog(); + QMutexLocker lock(&_mutex); if (_logstream) { _logstream->flush(); @@ -120,6 +155,15 @@ } } +void Logger::mirallLog(const QString &message) +{ + Log log_; + log_.timeStamp = QDateTime::currentDateTimeUtc(); + log_.message = message; + + Logger::instance()->log(log_); +} + QString Logger::logFile() const { return _logFile.fileName(); @@ -148,8 +192,8 @@ if (!openSucceeded) { locker.unlock(); // Just in case postGuiMessage has a qDebug() postGuiMessage(tr("Error"), - QString(tr("File \"%1\"
cannot be opened for writing.

" - "The log output cannot be saved!
")) + QString(tr("File '%1'
cannot be opened for writing.

" + "The log output can not be saved!
")) .arg(name)); return; } @@ -180,18 +224,14 @@ void Logger::setLogDebug(bool debug) { - const QSet rules = {debug ? QStringLiteral("nextcloud.*.debug=true") : QString()}; - if (debug) { - addLogRule(rules); - } else { - removeLogRule(rules); - } + QLoggingCategory::setFilterRules(debug ? QStringLiteral("nextcloud.*.debug=true") : QString()); _logDebug = debug; } QString Logger::temporaryFolderLogDirPath() const { - return QDir::temp().filePath(QStringLiteral(APPLICATION_SHORTNAME "-logdir")); + QString dirName = APPLICATION_SHORTNAME + QString("-logdir"); + return QDir::temp().filePath(dirName); } void Logger::setupTemporaryFolderLogDir() @@ -217,29 +257,6 @@ _temporaryFolderLogDir = false; } -void Logger::setLogRules(const QSet &rules) -{ - _logRules = rules; - QString tmp; - QTextStream out(&tmp); - for (const auto &p : rules) { - out << p << QLatin1Char('\n'); - } - qDebug() << tmp; - QLoggingCategory::setFilterRules(tmp); -} - -void Logger::dumpCrashLog() -{ - QFile logFile(QDir::tempPath() + QStringLiteral("/" APPLICATION_NAME "-crash.log")); - if (logFile.open(QFile::WriteOnly)) { - QTextStream out(&logFile); - for (int i = 1; i <= CrashLogSize; ++i) { - out << _crashLog[(_crashLogIndex + i) % CrashLogSize] << QLatin1Char('\n'); - } - } -} - static bool compressLog(const QString &originalName, const QString &targetName) { #ifdef ZLIB_FOUND @@ -282,7 +299,7 @@ // Expire old log files and deal with conflicts QStringList files = dir.entryList(QStringList("*owncloud.log.*"), QDir::Files, QDir::Name); - const QRegularExpression rx(QRegularExpression::anchoredPattern(R"(.*owncloud\.log\.(\d+).*)")); + QRegExp rx(R"(.*owncloud\.log\.(\d+).*)"); int maxNumber = -1; foreach (const QString &s, files) { if (_logExpire > 0) { @@ -291,9 +308,8 @@ dir.remove(s); } } - const auto rxMatch = rx.match(s); - if (s.startsWith(newLogName) && rxMatch.hasMatch()) { - maxNumber = qMax(maxNumber, rxMatch.captured(1).toInt()); + if (s.startsWith(newLogName) && rx.exactMatch(s)) { + maxNumber = qMax(maxNumber, rx.cap(1).toInt()); } } newLogName.append("." + QString::number(maxNumber + 1)); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/logger.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/logger.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/logger.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/logger.h 2022-01-03 12:25:12.000000000 +0000 @@ -27,6 +27,12 @@ namespace OCC { +struct Log +{ + QDateTime timeStamp; + QString message; +}; + /** * @brief The Logger class * @ingroup libsync @@ -35,9 +41,16 @@ { Q_OBJECT public: + bool isNoop() const; bool isLoggingToFile() const; - void doLog(QtMsgType type, const QMessageLogContext &ctx, const QString &message); + void log(Log log); + void doLog(const QString &log); + void close(); + + static void mirallLog(const QString &message); + + const QList &logs() const { return _logs; } static Logger *instance(); @@ -74,14 +87,6 @@ /** For switching off via logwindow */ void disableTemporaryFolderLogDir(); - void addLogRule(const QSet &rules) { - setLogRules(_logRules + rules); - } - void removeLogRule(const QSet &rules) { - setLogRules(_logRules - rules); - } - void setLogRules(const QSet &rules); - signals: void logWindowLog(const QString &); @@ -94,11 +99,9 @@ private: Logger(QObject *parent = nullptr); - ~Logger() override; - - void close(); - void dumpCrashLog(); - + ~Logger(); + QList _logs; + bool _showTime = true; QFile _logFile; bool _doFileFlush = false; int _logExpire = 0; @@ -107,9 +110,6 @@ mutable QMutex _mutex; QString _logDirectory; bool _temporaryFolderLogDir = false; - QSet _logRules; - QVector _crashLog; - int _crashLogIndex = 0; }; } // namespace OCC diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/networkjobs.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/networkjobs.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/networkjobs.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/networkjobs.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -113,8 +113,8 @@ if (httpCode == 207) { // Parse DAV response QXmlStreamReader reader(reply()); - reader.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration(QStringLiteral("d"), QStringLiteral("DAV:"))); - QByteArray etag; + reader.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("d", "DAV:")); + QString etag; while (!reader.atEnd()) { QXmlStreamReader::TokenType type = reader.readNext(); if (type == QXmlStreamReader::StartElement && reader.namespaceUri() == QLatin1String("DAV:")) { @@ -123,9 +123,9 @@ auto etagText = reader.readElementText(); auto parsedTag = parseEtag(etagText.toUtf8()); if (!parsedTag.isEmpty()) { - etag += parsedTag; + etag += QString::fromUtf8(parsedTag); } else { - etag += etagText.toUtf8(); + etag += etagText; } } } @@ -182,11 +182,7 @@ qCInfo(lcMkColJob) << "MKCOL of" << reply()->request().url() << "FINISHED WITH STATUS" << replyStatusString(); - if (reply()->error() != QNetworkReply::NoError) { - Q_EMIT finishedWithError(reply()); - } else { - Q_EMIT finishedWithoutError(); - } + emit finished(reply()->error()); return true; } @@ -830,49 +826,13 @@ _request.setRawHeader(headerName, value); } -void JsonApiJob::setBody(const QJsonDocument &body) -{ - _body = body.toJson(); - qCDebug(lcJsonApiJob) << "Set body for request:" << _body; - if (!_body.isEmpty()) { - _request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - } -} - - -void JsonApiJob::setVerb(Verb value) -{ - _verb = value; -} - - -QByteArray JsonApiJob::verbToString() const -{ - switch (_verb) { - case Verb::Get: - return "GET"; - case Verb::Post: - return "POST"; - case Verb::Put: - return "PUT"; - case Verb::Delete: - return "DELETE"; - } - return "GET"; -} - void JsonApiJob::start() { addRawHeader("OCS-APIREQUEST", "true"); auto query = _additionalParams; query.addQueryItem(QLatin1String("format"), QLatin1String("json")); QUrl url = Utility::concatUrlPath(account()->url(), path(), query); - const auto httpVerb = verbToString(); - if (!_body.isEmpty()) { - sendRequest(httpVerb, url, _request, _body); - } else { - sendRequest(httpVerb, url, _request); - } + sendRequest(_usePOST ? "POST" : "GET", url, _request); AbstractNetworkJob::start(); } @@ -892,21 +852,19 @@ QString jsonStr = QString::fromUtf8(reply()->readAll()); if (jsonStr.contains("")) { - const QRegularExpression rex("(\\d+)"); - const auto rexMatch = rex.match(jsonStr); - if (rexMatch.hasMatch()) { + QRegExp rex("(\\d+)"); + if (jsonStr.contains(rex)) { // this is a error message coming back from ocs. - statusCode = rexMatch.captured(1).toInt(); + statusCode = rex.cap(1).toInt(); } } else if(jsonStr.isEmpty() && httpStatusCode == notModifiedStatusCode){ qCWarning(lcJsonApiJob) << "Nothing changed so nothing to retrieve - status code: " << httpStatusCode; statusCode = httpStatusCode; } else { - const QRegularExpression rex(R"("statuscode":(\d+))"); + QRegExp rex(R"("statuscode":(\d+),)"); // example: "{"ocs":{"meta":{"status":"ok","statuscode":100,"message":null},"data":{"version":{"major":8,"minor":"... (504) - const auto rxMatch = rex.match(jsonStr); - if (rxMatch.hasMatch()) { - statusCode = rxMatch.captured(1).toInt(); + if (jsonStr.contains(rex)) { + statusCode = rex.cap(1).toInt(); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/networkjobs.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/networkjobs.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/networkjobs.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/networkjobs.h 2022-01-03 12:25:12.000000000 +0000 @@ -22,7 +22,6 @@ #include #include -#include #include class QUrl; @@ -274,10 +273,9 @@ void start() override; signals: - void finishedWithError(QNetworkReply *reply); - void finishedWithoutError(); + void finished(QNetworkReply::NetworkError); -private: +private slots: bool finished() override; }; @@ -350,8 +348,8 @@ void start() override; signals: - void etagRetrieved(const QByteArray &etag, const QDateTime &time); - void finishedWithResult(const HttpResult &etag); + void etagRetrieved(const QString &etag, const QDateTime &time); + void finishedWithResult(const HttpResult &etag); private slots: bool finished() override; @@ -376,13 +374,6 @@ { Q_OBJECT public: - enum class Verb { - Get, - Post, - Put, - Delete, - }; - explicit JsonApiJob(const AccountPtr &account, const QString &path, QObject *parent = nullptr); /** @@ -398,9 +389,15 @@ void addQueryParams(const QUrlQuery ¶ms); void addRawHeader(const QByteArray &headerName, const QByteArray &value); - void setBody(const QJsonDocument &body); - - void setVerb(Verb value); + /** + * @brief usePOST - allow job to do an anonymous POST request instead of GET + * @param params: (optional) true for POST, false for GET (default). + * + * This function needs to be called before start() obviously. + */ + void usePOST(bool usePOST = true) { + _usePOST = usePOST; + } public slots: void start() override; @@ -423,21 +420,18 @@ * @param statusCode - the OCS status code: 100 (!) for success */ void etagResponseHeaderReceived(const QByteArray &value, int statusCode); - + /** * @brief desktopNotificationStatusReceived - signal to report if notifications are allowed - * @param status - set desktop notifications allowed status + * @param status - set desktop notifications allowed status */ void allowDesktopNotificationsChanged(bool isAllowed); private: - QByteArray _body; QUrlQuery _additionalParams; QNetworkRequest _request; - Verb _verb = Verb::Get; - - QByteArray verbToString() const; + bool _usePOST = false; }; /** diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsprofileconnector.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsprofileconnector.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsprofileconnector.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsprofileconnector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -#include "ocsprofileconnector.h" -#include "accountfwd.h" -#include "common/result.h" -#include "networkjobs.h" -#include "iconjob.h" -#include "theme.h" -#include "account.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace { -Q_LOGGING_CATEGORY(lcOcsProfileConnector, "nextcloud.gui.ocsprofileconnector", QtInfoMsg) - -OCC::HovercardAction jsonToAction(const QJsonObject &jsonActionObject) -{ - const auto iconUrl = jsonActionObject.value(QStringLiteral("icon")).toString(QStringLiteral("no-icon")); - QPixmap iconPixmap; - OCC::HovercardAction hovercardAction{ - jsonActionObject.value(QStringLiteral("title")).toString(QStringLiteral("No title")), iconUrl, - jsonActionObject.value(QStringLiteral("hyperlink")).toString(QStringLiteral("no-link"))}; - if (QPixmapCache::find(iconUrl, &iconPixmap)) { - hovercardAction._icon = iconPixmap; - } - return hovercardAction; -} - -OCC::Hovercard jsonToHovercard(const QJsonArray &jsonDataArray) -{ - OCC::Hovercard hovercard; - hovercard._actions.reserve(jsonDataArray.size()); - for (const auto &jsonEntry : jsonDataArray) { - Q_ASSERT(jsonEntry.isObject()); - if (!jsonEntry.isObject()) { - continue; - } - hovercard._actions.push_back(jsonToAction(jsonEntry.toObject())); - } - return hovercard; -} - -OCC::Optional createPixmapFromSvgData(const QByteArray &iconData) -{ - QSvgRenderer svgRenderer; - if (!svgRenderer.load(iconData)) { - return {}; - } - QSize imageSize{16, 16}; - if (OCC::Theme::isHidpi()) { - imageSize = QSize{32, 32}; - } - QImage scaledSvg(imageSize, QImage::Format_ARGB32); - scaledSvg.fill("transparent"); - QPainter svgPainter{&scaledSvg}; - svgRenderer.render(&svgPainter); - return QPixmap::fromImage(scaledSvg); -} - -OCC::Optional iconDataToPixmap(const QByteArray iconData) -{ - if (!iconData.startsWith("serverVersionInt() < Account::makeServerVersion(23, 0, 0)) { - qInfo(lcOcsProfileConnector) << "Server version" << _account->serverVersion() - << "does not support profile page"; - emit error(); - return; - } - const QString url = QStringLiteral("/ocs/v2.php/hovercard/v1/%1").arg(userId); - const auto job = new JsonApiJob(_account, url, this); - connect(job, &JsonApiJob::jsonReceived, this, &OcsProfileConnector::onHovercardFetched); - job->start(); -} - -void OcsProfileConnector::onHovercardFetched(const QJsonDocument &json, int statusCode) -{ - qCDebug(lcOcsProfileConnector) << "Hovercard fetched:" << json; - - if (statusCode != 200) { - qCInfo(lcOcsProfileConnector) << "Fetching of hovercard finished with status code" << statusCode; - return; - } - const auto jsonData = json.object().value("ocs").toObject().value("data").toObject().value("actions"); - Q_ASSERT(jsonData.isArray()); - _currentHovercard = jsonToHovercard(jsonData.toArray()); - fetchIcons(); - emit hovercardFetched(); -} - -void OcsProfileConnector::setHovercardActionIcon(const std::size_t index, const QPixmap &pixmap) -{ - auto &hovercardAction = _currentHovercard._actions[index]; - QPixmapCache::insert(hovercardAction._iconUrl.toString(), pixmap); - hovercardAction._icon = pixmap; - emit iconLoaded(index); -} - -void OcsProfileConnector::loadHovercardActionIcon(const std::size_t hovercardActionIndex, const QByteArray &iconData) -{ - if (hovercardActionIndex >= _currentHovercard._actions.size()) { - // Note: Probably could do more checking, like checking if the url is still the same. - return; - } - const auto icon = iconDataToPixmap(iconData); - if (icon.isValid()) { - setHovercardActionIcon(hovercardActionIndex, icon.get()); - return; - } - qCWarning(lcOcsProfileConnector) << "Could not load Svg icon from data" << iconData; -} - -void OcsProfileConnector::startFetchIconJob(const std::size_t hovercardActionIndex) -{ - const auto hovercardAction = _currentHovercard._actions[hovercardActionIndex]; - const auto iconJob = new IconJob{_account, hovercardAction._iconUrl, this}; - connect(iconJob, &IconJob::jobFinished, - [this, hovercardActionIndex](QByteArray iconData) { loadHovercardActionIcon(hovercardActionIndex, iconData); }); - connect(iconJob, &IconJob::error, this, [](QNetworkReply::NetworkError errorType) { - qCWarning(lcOcsProfileConnector) << "Could not fetch icon:" << errorType; - }); -} - -void OcsProfileConnector::fetchIcons() -{ - for (auto hovercardActionIndex = 0u; hovercardActionIndex < _currentHovercard._actions.size(); - ++hovercardActionIndex) { - startFetchIconJob(hovercardActionIndex); - } -} - -const Hovercard &OcsProfileConnector::hovercard() const -{ - return _currentHovercard; -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsprofileconnector.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsprofileconnector.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsprofileconnector.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsprofileconnector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -#pragma once - -#include "accountfwd.h" -#include "owncloudlib.h" - -#include -#include -#include -#include - -namespace OCC { - -struct OWNCLOUDSYNC_EXPORT HovercardAction -{ -public: - HovercardAction(); - HovercardAction(QString title, QUrl iconUrl, QUrl link); - - QString _title; - QUrl _iconUrl; - QPixmap _icon; - QUrl _link; -}; - -struct OWNCLOUDSYNC_EXPORT Hovercard -{ - std::vector _actions; -}; - -class OWNCLOUDSYNC_EXPORT OcsProfileConnector : public QObject -{ - Q_OBJECT -public: - explicit OcsProfileConnector(AccountPtr account, QObject *parent = nullptr); - - void fetchHovercard(const QString &userId); - const Hovercard &hovercard() const; - -signals: - void error(); - void hovercardFetched(); - void iconLoaded(const std::size_t hovercardActionIndex); - -private: - void onHovercardFetched(const QJsonDocument &json, int statusCode); - - void fetchIcons(); - void startFetchIconJob(const std::size_t hovercardActionIndex); - void setHovercardActionIcon(const std::size_t index, const QPixmap &pixmap); - void loadHovercardActionIcon(const std::size_t hovercardActionIndex, const QByteArray &iconData); - - AccountPtr _account; - Hovercard _currentHovercard; -}; -} - -Q_DECLARE_METATYPE(OCC::HovercardAction) -Q_DECLARE_METATYPE(OCC::Hovercard) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsuserstatusconnector.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsuserstatusconnector.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsuserstatusconnector.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsuserstatusconnector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,455 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "ocsuserstatusconnector.h" -#include "account.h" -#include "userstatusconnector.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace { - -Q_LOGGING_CATEGORY(lcOcsUserStatusConnector, "nextcloud.gui.ocsuserstatusconnector", QtInfoMsg) - -OCC::UserStatus::OnlineStatus stringToUserOnlineStatus(const QString &status) -{ - // it needs to match the Status enum - const QHash preDefinedStatus { - { "online", OCC::UserStatus::OnlineStatus::Online }, - { "dnd", OCC::UserStatus::OnlineStatus::DoNotDisturb }, - { "away", OCC::UserStatus::OnlineStatus::Away }, - { "offline", OCC::UserStatus::OnlineStatus::Offline }, - { "invisible", OCC::UserStatus::OnlineStatus::Invisible } - }; - - // api should return invisible, dnd,... toLower() it is to make sure - // it matches _preDefinedStatus, otherwise the default is online (0) - return preDefinedStatus.value(status.toLower(), OCC::UserStatus::OnlineStatus::Online); -} - -QString onlineStatusToString(OCC::UserStatus::OnlineStatus status) -{ - switch (status) { - case OCC::UserStatus::OnlineStatus::Online: - return QStringLiteral("online"); - case OCC::UserStatus::OnlineStatus::DoNotDisturb: - return QStringLiteral("dnd"); - case OCC::UserStatus::OnlineStatus::Away: - return QStringLiteral("offline"); - case OCC::UserStatus::OnlineStatus::Offline: - return QStringLiteral("offline"); - case OCC::UserStatus::OnlineStatus::Invisible: - return QStringLiteral("invisible"); - } - return QStringLiteral("online"); -} - -OCC::Optional jsonExtractClearAt(QJsonObject jsonObject) -{ - OCC::Optional clearAt {}; - if (jsonObject.contains("clearAt") && !jsonObject.value("clearAt").isNull()) { - OCC::ClearAt clearAtValue; - clearAtValue._type = OCC::ClearAtType::Timestamp; - clearAtValue._timestamp = jsonObject.value("clearAt").toInt(); - clearAt = clearAtValue; - } - return clearAt; -} - -OCC::UserStatus jsonExtractUserStatus(QJsonObject json) -{ - const auto clearAt = jsonExtractClearAt(json); - - const OCC::UserStatus userStatus(json.value("messageId").toString(), - json.value("message").toString().trimmed(), - json.value("icon").toString().trimmed(), stringToUserOnlineStatus(json.value("status").toString()), - json.value("messageIsPredefined").toBool(false), clearAt); - - return userStatus; -} - -OCC::UserStatus jsonToUserStatus(const QJsonDocument &json) -{ - const QJsonObject defaultValues { - { "icon", "" }, - { "message", "" }, - { "status", "online" }, - { "messageIsPredefined", "false" }, - { "statusIsUserDefined", "false" } - }; - const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues); - return jsonExtractUserStatus(retrievedData); -} - -quint64 clearAtEndOfToTimestamp(const OCC::ClearAt &clearAt) -{ - Q_ASSERT(clearAt._type == OCC::ClearAtType::EndOf); - - if (clearAt._endof == "day") { - return QDate::currentDate().addDays(1).startOfDay().toTime_t(); - } else if (clearAt._endof == "week") { - const auto days = Qt::Sunday - QDate::currentDate().dayOfWeek(); - return QDate::currentDate().addDays(days + 1).startOfDay().toTime_t(); - } - qCWarning(lcOcsUserStatusConnector) << "Can not handle clear at endof day type" << clearAt._endof; - return QDateTime::currentDateTime().toTime_t(); -} - -quint64 clearAtPeriodToTimestamp(const OCC::ClearAt &clearAt) -{ - return QDateTime::currentDateTime().addSecs(clearAt._period).toTime_t(); -} - -quint64 clearAtToTimestamp(const OCC::ClearAt &clearAt) -{ - switch (clearAt._type) { - case OCC::ClearAtType::Period: { - return clearAtPeriodToTimestamp(clearAt); - } - - case OCC::ClearAtType::EndOf: { - return clearAtEndOfToTimestamp(clearAt); - } - - case OCC::ClearAtType::Timestamp: { - return clearAt._timestamp; - } - } - - return 0; -} - -quint64 clearAtToTimestamp(const OCC::Optional &clearAt) -{ - if (clearAt) { - return clearAtToTimestamp(*clearAt); - } - return 0; -} - -OCC::Optional jsonToClearAt(QJsonObject jsonObject) -{ - OCC::Optional clearAt; - - if (jsonObject.value("clearAt").isObject() && !jsonObject.value("clearAt").isNull()) { - OCC::ClearAt clearAtValue; - const auto clearAtObject = jsonObject.value("clearAt").toObject(); - const auto typeValue = clearAtObject.value("type").toString("period"); - if (typeValue == "period") { - const auto timeValue = clearAtObject.value("time").toInt(0); - clearAtValue._type = OCC::ClearAtType::Period; - clearAtValue._period = timeValue; - } else if (typeValue == "end-of") { - const auto timeValue = clearAtObject.value("time").toString("day"); - clearAtValue._type = OCC::ClearAtType::EndOf; - clearAtValue._endof = timeValue; - } else { - qCWarning(lcOcsUserStatusConnector) << "Can not handle clear type value" << typeValue; - } - clearAt = clearAtValue; - } - - return clearAt; -} - -OCC::UserStatus jsonToUserStatus(QJsonObject jsonObject) -{ - const auto clearAt = jsonToClearAt(jsonObject); - - OCC::UserStatus userStatus( - jsonObject.value("id").toString("no-id"), - jsonObject.value("message").toString("No message"), - jsonObject.value("icon").toString("no-icon"), - OCC::UserStatus::OnlineStatus::Online, - true, - clearAt); - - return userStatus; -} - -std::vector jsonToPredefinedStatuses(QJsonArray jsonDataArray) -{ - std::vector statuses; - for (const auto &jsonEntry : jsonDataArray) { - Q_ASSERT(jsonEntry.isObject()); - if (!jsonEntry.isObject()) { - continue; - } - statuses.push_back(jsonToUserStatus(jsonEntry.toObject())); - } - - return statuses; -} - - -const QString baseUrl("/ocs/v2.php/apps/user_status/api/v1"); -const QString userStatusBaseUrl = baseUrl + QStringLiteral("/user_status"); -} - -namespace OCC { - -OcsUserStatusConnector::OcsUserStatusConnector(AccountPtr account, QObject *parent) - : UserStatusConnector(parent) - , _account(account) -{ - Q_ASSERT(_account); - _userStatusSupported = _account->capabilities().userStatus(); - _userStatusEmojisSupported = _account->capabilities().userStatusSupportsEmoji(); -} - -void OcsUserStatusConnector::fetchUserStatus() -{ - qCDebug(lcOcsUserStatusConnector) << "Try to fetch user status"; - - if (!_userStatusSupported) { - qCDebug(lcOcsUserStatusConnector) << "User status not supported"; - emit error(Error::UserStatusNotSupported); - return; - } - - startFetchUserStatusJob(); -} - -void OcsUserStatusConnector::startFetchUserStatusJob() -{ - if (_getUserStatusJob) { - qCDebug(lcOcsUserStatusConnector) << "Get user status job is already running."; - return; - } - - _getUserStatusJob = new JsonApiJob(_account, userStatusBaseUrl, this); - connect(_getUserStatusJob, &JsonApiJob::jsonReceived, this, &OcsUserStatusConnector::onUserStatusFetched); - _getUserStatusJob->start(); -} - -void OcsUserStatusConnector::onUserStatusFetched(const QJsonDocument &json, int statusCode) -{ - logResponse("user status fetched", json, statusCode); - - if (statusCode != 200) { - qCInfo(lcOcsUserStatusConnector) << "Slot fetch UserStatus finished with status code" << statusCode; - emit error(Error::CouldNotFetchUserStatus); - return; - } - - _userStatus = jsonToUserStatus(json); - emit userStatusFetched(_userStatus); -} - -void OcsUserStatusConnector::startFetchPredefinedStatuses() -{ - if (_getPredefinedStausesJob) { - qCDebug(lcOcsUserStatusConnector) << "Get predefined statuses job is already running"; - return; - } - - _getPredefinedStausesJob = new JsonApiJob(_account, - baseUrl + QStringLiteral("/predefined_statuses"), this); - connect(_getPredefinedStausesJob, &JsonApiJob::jsonReceived, this, - &OcsUserStatusConnector::onPredefinedStatusesFetched); - _getPredefinedStausesJob->start(); -} - -void OcsUserStatusConnector::fetchPredefinedStatuses() -{ - if (!_userStatusSupported) { - emit error(Error::UserStatusNotSupported); - return; - } - startFetchPredefinedStatuses(); -} - -void OcsUserStatusConnector::onPredefinedStatusesFetched(const QJsonDocument &json, int statusCode) -{ - logResponse("predefined statuses", json, statusCode); - - if (statusCode != 200) { - qCInfo(lcOcsUserStatusConnector) << "Slot predefined user statuses finished with status code" << statusCode; - emit error(Error::CouldNotFetchPredefinedUserStatuses); - return; - } - const auto jsonData = json.object().value("ocs").toObject().value("data"); - Q_ASSERT(jsonData.isArray()); - if (!jsonData.isArray()) { - return; - } - const auto statuses = jsonToPredefinedStatuses(jsonData.toArray()); - emit predefinedStatusesFetched(statuses); -} - -void OcsUserStatusConnector::logResponse(const QString &message, const QJsonDocument &json, int statusCode) -{ - qCDebug(lcOcsUserStatusConnector) << "Response from:" << message << "Status:" << statusCode << "Json:" << json; -} - -void OcsUserStatusConnector::setUserStatusOnlineStatus(UserStatus::OnlineStatus onlineStatus) -{ - _setOnlineStatusJob = new JsonApiJob(_account, - userStatusBaseUrl + QStringLiteral("/status"), this); - _setOnlineStatusJob->setVerb(JsonApiJob::Verb::Put); - // Set body - QJsonObject dataObject; - dataObject.insert("statusType", onlineStatusToString(onlineStatus)); - QJsonDocument body; - body.setObject(dataObject); - _setOnlineStatusJob->setBody(body); - connect(_setOnlineStatusJob, &JsonApiJob::jsonReceived, this, &OcsUserStatusConnector::onUserStatusOnlineStatusSet); - _setOnlineStatusJob->start(); -} - -void OcsUserStatusConnector::setUserStatusMessagePredefined(const UserStatus &userStatus) -{ - Q_ASSERT(userStatus.messagePredefined()); - if (!userStatus.messagePredefined()) { - return; - } - - _setMessageJob = new JsonApiJob(_account, userStatusBaseUrl + QStringLiteral("/message/predefined"), this); - _setMessageJob->setVerb(JsonApiJob::Verb::Put); - // Set body - QJsonObject dataObject; - dataObject.insert("messageId", userStatus.id()); - if (userStatus.clearAt()) { - dataObject.insert("clearAt", static_cast(clearAtToTimestamp(userStatus.clearAt()))); - } else { - dataObject.insert("clearAt", QJsonValue()); - } - QJsonDocument body; - body.setObject(dataObject); - _setMessageJob->setBody(body); - connect(_setMessageJob, &JsonApiJob::jsonReceived, this, &OcsUserStatusConnector::onUserStatusMessageSet); - _setMessageJob->start(); -} - -void OcsUserStatusConnector::setUserStatusMessageCustom(const UserStatus &userStatus) -{ - Q_ASSERT(!userStatus.messagePredefined()); - if (userStatus.messagePredefined()) { - return; - } - - if (!_userStatusEmojisSupported) { - emit error(Error::EmojisNotSupported); - return; - } - _setMessageJob = new JsonApiJob(_account, userStatusBaseUrl + QStringLiteral("/message/custom"), this); - _setMessageJob->setVerb(JsonApiJob::Verb::Put); - // Set body - QJsonObject dataObject; - dataObject.insert("statusIcon", userStatus.icon()); - dataObject.insert("message", userStatus.message()); - const auto clearAt = userStatus.clearAt(); - if (clearAt) { - dataObject.insert("clearAt", static_cast(clearAtToTimestamp(*clearAt))); - } else { - dataObject.insert("clearAt", QJsonValue()); - } - QJsonDocument body; - body.setObject(dataObject); - _setMessageJob->setBody(body); - connect(_setMessageJob, &JsonApiJob::jsonReceived, this, &OcsUserStatusConnector::onUserStatusMessageSet); - _setMessageJob->start(); -} - -void OcsUserStatusConnector::setUserStatusMessage(const UserStatus &userStatus) -{ - if (userStatus.messagePredefined()) { - setUserStatusMessagePredefined(userStatus); - return; - } - setUserStatusMessageCustom(userStatus); -} - -void OcsUserStatusConnector::setUserStatus(const UserStatus &userStatus) -{ - if (!_userStatusSupported) { - emit error(Error::UserStatusNotSupported); - return; - } - - if (_setOnlineStatusJob || _setMessageJob) { - qCDebug(lcOcsUserStatusConnector) << "Set online status job or set message job are already running."; - return; - } - - setUserStatusOnlineStatus(userStatus.state()); - setUserStatusMessage(userStatus); -} - -void OcsUserStatusConnector::onUserStatusOnlineStatusSet(const QJsonDocument &json, int statusCode) -{ - logResponse("Online status set", json, statusCode); - - if (statusCode != 200) { - emit error(Error::CouldNotSetUserStatus); - return; - } -} - -void OcsUserStatusConnector::onUserStatusMessageSet(const QJsonDocument &json, int statusCode) -{ - logResponse("Message set", json, statusCode); - - if (statusCode != 200) { - emit error(Error::CouldNotSetUserStatus); - return; - } - - // We fetch the user status again because json does not contain - // the new message when user status was set from a predefined - // message - fetchUserStatus(); - - emit userStatusSet(); -} - -void OcsUserStatusConnector::clearMessage() -{ - _clearMessageJob = new JsonApiJob(_account, userStatusBaseUrl + QStringLiteral("/message")); - _clearMessageJob->setVerb(JsonApiJob::Verb::Delete); - connect(_clearMessageJob, &JsonApiJob::jsonReceived, this, &OcsUserStatusConnector::onMessageCleared); - _clearMessageJob->start(); -} - -UserStatus OcsUserStatusConnector::userStatus() const -{ - return _userStatus; -} - -void OcsUserStatusConnector::onMessageCleared(const QJsonDocument &json, int statusCode) -{ - logResponse("Message cleared", json, statusCode); - - if (statusCode != 200) { - emit error(Error::CouldNotClearMessage); - return; - } - - _userStatus = {}; - emit messageCleared(); -} -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsuserstatusconnector.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsuserstatusconnector.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/ocsuserstatusconnector.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/ocsuserstatusconnector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include "accountfwd.h" -#include "userstatusconnector.h" - -#include - -namespace OCC { - -class JsonApiJob; -class SimpleNetworkJob; - -class OWNCLOUDSYNC_EXPORT OcsUserStatusConnector : public UserStatusConnector -{ -public: - explicit OcsUserStatusConnector(AccountPtr account, QObject *parent = nullptr); - - void fetchUserStatus() override; - - void fetchPredefinedStatuses() override; - - void setUserStatus(const UserStatus &userStatus) override; - - void clearMessage() override; - - UserStatus userStatus() const override; - -private: - void onUserStatusFetched(const QJsonDocument &json, int statusCode); - void onPredefinedStatusesFetched(const QJsonDocument &json, int statusCode); - void onUserStatusOnlineStatusSet(const QJsonDocument &json, int statusCode); - void onUserStatusMessageSet(const QJsonDocument &json, int statusCode); - void onMessageCleared(const QJsonDocument &json, int statusCode); - - void logResponse(const QString &message, const QJsonDocument &json, int statusCode); - void startFetchUserStatusJob(); - void startFetchPredefinedStatuses(); - void setUserStatusOnlineStatus(UserStatus::OnlineStatus onlineStatus); - void setUserStatusMessage(const UserStatus &userStatus); - void setUserStatusMessagePredefined(const UserStatus &userStatus); - void setUserStatusMessageCustom(const UserStatus &userStatus); - - AccountPtr _account; - - bool _userStatusSupported = false; - bool _userStatusEmojisSupported = false; - - QPointer _clearMessageJob {}; - QPointer _setMessageJob {}; - QPointer _setOnlineStatusJob {}; - QPointer _getPredefinedStausesJob {}; - QPointer _getUserStatusJob {}; - - UserStatus _userStatus; -}; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -21,14 +21,12 @@ #include "propagateremotedelete.h" #include "propagateremotemove.h" #include "propagateremotemkdir.h" -#include "bulkpropagatorjob.h" #include "propagatorjobs.h" #include "filesystem.h" #include "common/utility.h" #include "account.h" #include "common/asserts.h" #include "discoveryphase.h" -#include "syncfileitem.h" #ifdef Q_OS_WIN #include @@ -42,14 +40,12 @@ #include #include #include -#include #include namespace OCC { Q_LOGGING_CATEGORY(lcPropagator, "nextcloud.sync.propagator", QtInfoMsg) Q_LOGGING_CATEGORY(lcDirectory, "nextcloud.sync.propagator.directory", QtInfoMsg) -Q_LOGGING_CATEGORY(lcRootDirectory, "nextcloud.sync.propagator.root.directory", QtInfoMsg) Q_LOGGING_CATEGORY(lcCleanupPolls, "nextcloud.sync.propagator.cleanuppolls", QtInfoMsg) qint64 criticalFreeSpaceLimit() @@ -174,7 +170,7 @@ * * May adjust the status or item._errorString. */ -void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item) +static void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item) { SyncJournalErrorBlacklistRecord oldEntry = journal->errorBlacklistEntry(item._file); @@ -272,7 +268,6 @@ case SyncFileItem::NoStatus: case SyncFileItem::BlacklistedError: case SyncFileItem::FileLocked: - case SyncFileItem::FileNameInvalid: // nothing break; } @@ -361,13 +356,15 @@ job->setDeleteExistingFolder(deleteExisting); return job; } else { - if (deleteExisting || !isDelayedUploadItem(item)) { - auto job = createUploadJob(item, deleteExisting); - return job.release(); + PropagateUploadFileCommon *job = nullptr; + if (item->_size > syncOptions()._initialChunkSize && account()->capabilities().chunkingNg()) { + // Item is above _initialChunkSize, thus will be classified as to be chunked + job = new PropagateUploadFileNG(this, item); } else { - pushDelayedUploadTask(item); - return nullptr; + job = new PropagateUploadFileV1(this, item); } + job->setDeleteExisting(deleteExisting); + return job; } case CSYNC_INSTRUCTION_RENAME: if (item->_direction == SyncFileItem::Up) { @@ -384,42 +381,13 @@ return nullptr; } -std::unique_ptr OwncloudPropagator::createUploadJob(SyncFileItemPtr item, bool deleteExisting) -{ - auto job = std::unique_ptr{}; - - if (item->_size > syncOptions()._initialChunkSize && account()->capabilities().chunkingNg()) { - // Item is above _initialChunkSize, thus will be classified as to be chunked - job = std::make_unique(this, item); - } else { - job = std::make_unique(this, item); - } - - job->setDeleteExisting(deleteExisting); - - removeFromBulkUploadBlackList(item->_file); - - return job; -} - -void OwncloudPropagator::pushDelayedUploadTask(SyncFileItemPtr item) -{ - _delayedTasks.push_back(item); -} - -void OwncloudPropagator::resetDelayedUploadTasks() -{ - _scheduleDelayedTasks = false; - _delayedTasks.clear(); -} - qint64 OwncloudPropagator::smallFileSize() { const qint64 smallFileSize = 100 * 1024; //default to 1 MB. Not dynamic right now. return smallFileSize; } -void OwncloudPropagator::start(SyncFileItemVector &&items) +void OwncloudPropagator::start(const SyncFileItemVector &items) { Q_ASSERT(std::is_sorted(items.begin(), items.end())); @@ -428,27 +396,6 @@ * In order to do that we loop over the items. (which are sorted by destination) * When we enter a directory, we can create the directory job and push it on the stack. */ - const auto regex = syncOptions().fileRegex(); - if (regex.isValid()) { - QSet names; - for (auto &i : items) { - if (regex.match(i->_file).hasMatch()) { - int index = -1; - QStringRef ref; - do { - ref = i->_file.midRef(0, index); - names.insert(ref); - index = ref.lastIndexOf(QLatin1Char('/')); - } while (index > 0); - } - } - items.erase(std::remove_if(items.begin(), items.end(), [&names](auto i) { - return !names.contains(QStringRef { &i->_file }); - }), - items.end()); - } - - resetDelayedUploadTasks(); _rootJob.reset(new PropagateRootDirectory(this)); QStack> directories; directories.push(qMakePair(QString(), _rootJob.data())); @@ -504,17 +451,56 @@ } if (item->isDirectory()) { - startDirectoryPropagation(item, - directories, - directoriesToRemove, - removedDirectory, - items); + auto *dir = new PropagateDirectory(this, item); + + if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE + && item->_direction == SyncFileItem::Up) { + // Skip all potential uploads to the new folder. + // Processing them now leads to problems with permissions: + // checkForPermissions() has already run and used the permissions + // of the file we're about to delete to decide whether uploading + // to the new dir is ok... + foreach (const SyncFileItemPtr &item2, items) { + if (item2->destination().startsWith(item->destination() + "/")) { + item2->_instruction = CSYNC_INSTRUCTION_NONE; + _anotherSyncNeeded = true; + } + } + } + + if (item->_instruction == CSYNC_INSTRUCTION_REMOVE) { + // We do the removal of directories at the end, because there might be moves from + // these directories that will happen later. + directoriesToRemove.prepend(dir); + removedDirectory = item->_file + "/"; + + // We should not update the etag of parent directories of the removed directory + // since it would be done before the actual remove (issue #1845) + // NOTE: Currently this means that we don't update those etag at all in this sync, + // but it should not be a problem, they will be updated in the next sync. + for (int i = 0; i < directories.size(); ++i) { + if (directories[i].second->_item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA) + directories[i].second->_item->_instruction = CSYNC_INSTRUCTION_NONE; + } + } else { + PropagateDirectory *currentDirJob = directories.top().second; + currentDirJob->appendJob(dir); + } + directories.push(qMakePair(item->destination() + "/", dir)); } else { - startFilePropagation(item, - directories, - directoriesToRemove, - removedDirectory, - maybeConflictDirectory); + if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE) { + // will delete directories, so defer execution + directoriesToRemove.prepend(createJob(item)); + removedDirectory = item->_file + "/"; + } else { + directories.top().second->appendTask(item); + } + + if (item->_instruction == CSYNC_INSTRUCTION_CONFLICT) { + // This might be a file or a directory on the local side. If it's a + // directory we want to skip processing items inside it. + maybeConflictDirectory = item->_file + "/"; + } } } @@ -528,75 +514,6 @@ scheduleNextJob(); } -void OwncloudPropagator::startDirectoryPropagation(const SyncFileItemPtr &item, - QStack> &directories, - QVector &directoriesToRemove, - QString &removedDirectory, - const SyncFileItemVector &items) -{ - auto directoryPropagationJob = std::make_unique(this, item); - - if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE - && item->_direction == SyncFileItem::Up) { - // Skip all potential uploads to the new folder. - // Processing them now leads to problems with permissions: - // checkForPermissions() has already run and used the permissions - // of the file we're about to delete to decide whether uploading - // to the new dir is ok... - foreach (const SyncFileItemPtr &dirItem, items) { - if (dirItem->destination().startsWith(item->destination() + "/")) { - dirItem->_instruction = CSYNC_INSTRUCTION_NONE; - _anotherSyncNeeded = true; - } - } - } - - if (item->_instruction == CSYNC_INSTRUCTION_REMOVE) { - // We do the removal of directories at the end, because there might be moves from - // these directories that will happen later. - directoriesToRemove.prepend(directoryPropagationJob.get()); - removedDirectory = item->_file + "/"; - - // We should not update the etag of parent directories of the removed directory - // since it would be done before the actual remove (issue #1845) - // NOTE: Currently this means that we don't update those etag at all in this sync, - // but it should not be a problem, they will be updated in the next sync. - for (int i = 0; i < directories.size(); ++i) { - if (directories[i].second->_item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA) { - directories[i].second->_item->_instruction = CSYNC_INSTRUCTION_NONE; - } - } - } else { - const auto currentDirJob = directories.top().second; - currentDirJob->appendJob(directoryPropagationJob.get()); - } - directories.push(qMakePair(item->destination() + "/", directoryPropagationJob.release())); -} - -void OwncloudPropagator::startFilePropagation(const SyncFileItemPtr &item, - QStack > &directories, - QVector &directoriesToRemove, - QString &removedDirectory, - QString &maybeConflictDirectory) -{ - if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE) { - // will delete directories, so defer execution - auto job = createJob(item); - if (job) { - directoriesToRemove.prepend(job); - } - removedDirectory = item->_file + "/"; - } else { - directories.top().second->appendTask(item); - } - - if (item->_instruction == CSYNC_INSTRUCTION_CONFLICT) { - // This might be a file or a directory on the local side. If it's a - // directory we want to skip processing items inside it. - maybeConflictDirectory = item->_file + "/"; - } -} - const SyncOptions &OwncloudPropagator::syncOptions() const { return _syncOptions; @@ -610,24 +527,24 @@ bool OwncloudPropagator::localFileNameClash(const QString &relFile) { + bool re = false; const QString file(_localDir + relFile); - Q_ASSERT(!file.isEmpty()); if (!file.isEmpty() && Utility::fsCasePreserving()) { - qCDebug(lcPropagator) << "CaseClashCheck for " << file; #ifdef Q_OS_MAC - const QFileInfo fileInfo(file); + QFileInfo fileInfo(file); if (!fileInfo.exists()) { - return false; + re = false; + qCWarning(lcPropagator) << "No valid fileinfo"; } else { // Need to normalize to composited form because of QTBUG-39622/QTBUG-55896 const QString cName = fileInfo.canonicalFilePath().normalized(QString::NormalizationForm_C); - if (file != cName && !cName.endsWith(relFile, Qt::CaseSensitive)) { - qCWarning(lcPropagator) << "Detected case clash between" << file << "and" << cName; - return true; - } + bool equal = (file == cName); + re = (!equal && !cName.endsWith(relFile, Qt::CaseSensitive)); } #elif defined(Q_OS_WIN) + const QString file(_localDir + relFile); + qCDebug(lcPropagator) << "CaseClashCheck for " << file; WIN32_FIND_DATA FindFileData; HANDLE hFind; @@ -635,12 +552,12 @@ if (hFind == INVALID_HANDLE_VALUE) { // returns false. } else { - const QString realFileName = QString::fromWCharArray(FindFileData.cFileName); + QString realFileName = QString::fromWCharArray(FindFileData.cFileName); FindClose(hFind); if (!file.endsWith(realFileName, Qt::CaseSensitive)) { qCWarning(lcPropagator) << "Detected case clash between" << file << "and" << realFileName; - return true; + re = true; } } #else @@ -648,13 +565,13 @@ // Just check that there is no other file with the same name and different casing. QFileInfo fileInfo(file); const QString fn = fileInfo.fileName(); - const QStringList list = fileInfo.dir().entryList({ fn }); + QStringList list = fileInfo.dir().entryList(QStringList() << fn); if (list.count() > 1 || (list.count() == 1 && list[0] != fn)) { - return true; + re = true; } #endif } - return false; + return re; } bool OwncloudPropagator::hasCaseClashAccessibilityProblem(const QString &relfile) @@ -772,10 +689,6 @@ QString renameError; auto conflictModTime = FileSystem::getModTime(fn); - if (conflictModTime <= 0) { - *error = tr("Impossible to get modification time for file in conflict %1)").arg(fn); - return false; - } QString conflictUserName; if (account()->capabilities().uploadConflictFiles()) conflictUserName = account()->davDisplayName(); @@ -866,38 +779,6 @@ return Vfs::ConvertToPlaceholderResult::Ok; } -bool OwncloudPropagator::isDelayedUploadItem(const SyncFileItemPtr &item) const -{ - return account()->capabilities().bulkUpload() && !_scheduleDelayedTasks && !item->_isEncrypted && _syncOptions._minChunkSize > item->_size && !isInBulkUploadBlackList(item->_file); -} - -void OwncloudPropagator::setScheduleDelayedTasks(bool active) -{ - _scheduleDelayedTasks = active; -} - -void OwncloudPropagator::clearDelayedTasks() -{ - _delayedTasks.clear(); -} - -void OwncloudPropagator::addToBulkUploadBlackList(const QString &file) -{ - qCDebug(lcPropagator) << "black list for bulk upload" << file; - _bulkUploadBlackList.insert(file); -} - -void OwncloudPropagator::removeFromBulkUploadBlackList(const QString &file) -{ - qCDebug(lcPropagator) << "black list for bulk upload" << file; - _bulkUploadBlackList.remove(file); -} - -bool OwncloudPropagator::isInBulkUploadBlackList(const QString &file) const -{ - return _bulkUploadBlackList.contains(file); -} - // ================================================================================ PropagatorJob::PropagatorJob(OwncloudPropagator *propagator) @@ -1108,7 +989,6 @@ // Synchronously abort abort(AbortType::Synchronous); _state = Finished; - qCInfo(lcPropagator) << "PropagateDirectory::slotFirstJobFinished" << "emit finished" << status; emit finished(status); } return; @@ -1130,13 +1010,6 @@ if (_item->_instruction == CSYNC_INSTRUCTION_NEW && _item->_direction == SyncFileItem::Down) { // special case for local MKDIR, set local directory mtime // (it's not synced later at all, but can be nice to have it set initially) - - if (_item->_modtime <= 0) { - status = _item->_status = SyncFileItem::NormalError; - _item->_errorString = tr("Error updating metadata due to invalid modified time"); - qCWarning(lcDirectory) << "Error writing to the database for file" << _item->_file; - } - FileSystem::setModTime(propagator()->fullLocalPath(_item->destination()), _item->_modtime); } @@ -1158,7 +1031,6 @@ } } _state = Finished; - qCInfo(lcPropagator) << "PropagateDirectory::slotSubJobsFinished" << "emit finished" << status; emit finished(status); } @@ -1211,37 +1083,21 @@ bool PropagateRootDirectory::scheduleSelfOrChild() { - qCInfo(lcRootDirectory()) << "scheduleSelfOrChild" << _state << "pending uploads" << propagator()->delayedTasks().size() << "subjobs state" << _subJobs._state; - - if (_state == Finished) { + if (_state == Finished) return false; - } - if (PropagateDirectory::scheduleSelfOrChild() && propagator()->delayedTasks().empty()) { + if (PropagateDirectory::scheduleSelfOrChild()) return true; - } // Important: Finish _subJobs before scheduling any deletes. - if (_subJobs._state != Finished) { + if (_subJobs._state != Finished) return false; - } - - if (!propagator()->delayedTasks().empty()) { - return scheduleDelayedJobs(); - } return _dirDeletionJobs.scheduleSelfOrChild(); } void PropagateRootDirectory::slotSubJobsFinished(SyncFileItem::Status status) { - qCInfo(lcRootDirectory()) << status << "slotSubJobsFinished" << _state << "pending uploads" << propagator()->delayedTasks().size() << "subjobs state" << _subJobs._state; - - if (!propagator()->delayedTasks().empty()) { - scheduleDelayedJobs(); - return; - } - if (status != SyncFileItem::Success && status != SyncFileItem::Restoration && status != SyncFileItem::Conflict) { @@ -1249,7 +1105,6 @@ // Synchronously abort abort(AbortType::Synchronous); _state = Finished; - qCInfo(lcPropagator) << "PropagateRootDirectory::slotSubJobsFinished" << "emit finished" << status; emit finished(status); } return; @@ -1261,21 +1116,9 @@ void PropagateRootDirectory::slotDirDeletionJobsFinished(SyncFileItem::Status status) { _state = Finished; - qCInfo(lcPropagator) << "PropagateRootDirectory::slotDirDeletionJobsFinished" << "emit finished" << status; emit finished(status); } -bool PropagateRootDirectory::scheduleDelayedJobs() -{ - qCInfo(lcPropagator) << "PropagateRootDirectory::scheduleDelayedJobs"; - propagator()->setScheduleDelayedTasks(true); - auto bulkPropagatorJob = std::make_unique(propagator(), propagator()->delayedTasks()); - propagator()->clearDelayedTasks(); - _subJobs.appendJob(bulkPropagatorJob.release()); - _subJobs._state = Running; - return _subJobs.scheduleSelfOrChild(); -} - // ================================================================================ CleanupPollsJob::~CleanupPollsJob() = default; @@ -1334,5 +1177,4 @@ { return _remoteFolder; } - } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator.h 2022-01-03 12:25:12.000000000 +0000 @@ -31,8 +31,6 @@ #include "accountfwd.h" #include "syncoptions.h" -#include - namespace OCC { Q_DECLARE_LOGGING_CATEGORY(lcPropagator) @@ -48,8 +46,6 @@ */ qint64 freeSpaceLimit(); -void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item); - class SyncJournalDb; class OwncloudPropagator; class PropagatorCompositeJob; @@ -74,8 +70,6 @@ Asynchronous }; - Q_ENUM(AbortType) - enum JobState { NotYetStarted, Running, @@ -83,8 +77,6 @@ }; JobState _state; - Q_ENUM(JobState) - enum JobParallelism { /** Jobs can be run in parallel to this job */ @@ -96,8 +88,6 @@ WaitForFinished, }; - Q_ENUM(JobParallelism) - virtual JobParallelism parallelism() { return FullParallelism; } /** @@ -193,8 +183,8 @@ public: PropagateItemJob(OwncloudPropagator *propagator, const SyncFileItemPtr &item) : PropagatorJob(propagator) - , _parallelism(FullParallelism) , _item(item) + , _parallelism(FullParallelism) { // we should always execute jobs that process the E2EE API calls as sequential jobs // TODO: In fact, we must make sure Lock/Unlock are not colliding and always wait for each other to complete. So, we could refactor this "_parallelism" later @@ -202,7 +192,7 @@ // As an alternative, we could optimize Lock/Unlock calls, so we do a batch-write on one folder and only lock and unlock a folder once per batch. _parallelism = (_item->_isEncrypted || hasEncryptedAncestor()) ? WaitForFinished : FullParallelism; } - ~PropagateItemJob() override; + ~PropagateItemJob(); bool scheduleSelfOrChild() override { @@ -216,7 +206,7 @@ return true; } - JobParallelism parallelism() override { return _parallelism; } + virtual JobParallelism parallelism() override { return _parallelism; } SyncFileItemPtr _item; @@ -247,7 +237,7 @@ // Don't delete jobs in _jobsToDo and _runningJobs: they have parents // that will be responsible for cleanup. Deleting them here would risk // deleting something that has already been deleted by a shared parent. - ~PropagatorCompositeJob() override = default; + virtual ~PropagatorCompositeJob() = default; void appendJob(PropagatorJob *job); void appendTask(const SyncFileItemPtr &item) @@ -378,10 +368,6 @@ private slots: void slotSubJobsFinished(SyncFileItem::Status status) override; void slotDirDeletionJobsFinished(SyncFileItem::Status status); - -private: - - bool scheduleDelayedJobs(); }; /** @@ -411,8 +397,6 @@ } }; -class PropagateUploadFileCommon; - class OWNCLOUDSYNC_EXPORT OwncloudPropagator : public QObject { Q_OBJECT @@ -422,36 +406,22 @@ public: OwncloudPropagator(AccountPtr account, const QString &localDir, - const QString &remoteFolder, SyncJournalDb *progressDb, - QSet &bulkUploadBlackList) - : _journal(progressDb) + const QString &remoteFolder, SyncJournalDb *progressDb) + : _localDir((localDir.endsWith(QChar('/'))) ? localDir : localDir + '/') + , _remoteFolder((remoteFolder.endsWith(QChar('/'))) ? remoteFolder : remoteFolder + '/') + , _journal(progressDb) , _finishedEmited(false) , _bandwidthManager(this) , _anotherSyncNeeded(false) , _chunkSize(10 * 1000 * 1000) // 10 MB, overridden in setSyncOptions , _account(account) - , _localDir((localDir.endsWith(QChar('/'))) ? localDir : localDir + '/') - , _remoteFolder((remoteFolder.endsWith(QChar('/'))) ? remoteFolder : remoteFolder + '/') - , _bulkUploadBlackList(bulkUploadBlackList) { qRegisterMetaType("PropagatorJob::AbortType"); } - ~OwncloudPropagator() override; - - void start(SyncFileItemVector &&_syncedItems); + ~OwncloudPropagator(); - void startDirectoryPropagation(const SyncFileItemPtr &item, - QStack> &directories, - QVector &directoriesToRemove, - QString &removedDirectory, - const SyncFileItemVector &items); - - void startFilePropagation(const SyncFileItemPtr &item, - QStack> &directories, - QVector &directoriesToRemove, - QString &removedDirectory, - QString &maybeConflictDirectory); + void start(const SyncFileItemVector &_syncedItems); const SyncOptions &syncOptions() const; void setSyncOptions(const SyncOptions &syncOptions); @@ -602,23 +572,6 @@ static Result staticUpdateMetadata(const SyncFileItem &item, const QString localDir, Vfs *vfs, SyncJournalDb * const journal); - Q_REQUIRED_RESULT bool isDelayedUploadItem(const SyncFileItemPtr &item) const; - - Q_REQUIRED_RESULT const std::deque& delayedTasks() const - { - return _delayedTasks; - } - - void setScheduleDelayedTasks(bool active); - - void clearDelayedTasks(); - - void addToBulkUploadBlackList(const QString &file); - - void removeFromBulkUploadBlackList(const QString &file); - - bool isInBulkUploadBlackList(const QString &file) const; - private slots: void abortTimeout() @@ -658,13 +611,6 @@ void insufficientRemoteStorage(); private: - std::unique_ptr createUploadJob(SyncFileItemPtr item, - bool deleteExisting); - - void pushDelayedUploadTask(SyncFileItemPtr item); - - void resetDelayedUploadTasks(); - AccountPtr _account; QScopedPointer _rootJob; SyncOptions _syncOptions; @@ -672,13 +618,6 @@ const QString _localDir; // absolute path to the local directory. ends with '/' const QString _remoteFolder; // remote folder, ends with '/' - - std::deque _delayedTasks; - bool _scheduleDelayedTasks = false; - - QSet &_bulkUploadBlackList; - - static bool _allowDelayedUpload; }; @@ -707,7 +646,7 @@ { } - ~CleanupPollsJob() override; + ~CleanupPollsJob(); /** * Start the job. After the job is completed, it will emit either finished or aborted, and it diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator_p.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator_p.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/owncloudpropagator_p.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/owncloudpropagator_p.h 2022-01-03 12:25:12.000000000 +0000 @@ -18,33 +18,9 @@ #include "owncloudpropagator.h" #include "syncfileitem.h" #include "networkjobs.h" -#include "syncengine.h" #include #include -namespace { - -/** - * We do not want to upload files that are currently being modified. - * To avoid that, we don't upload files that have a modification time - * that is too close to the current time. - * - * This interacts with the msBetweenRequestAndSync delay in the folder - * manager. If that delay between file-change notification and sync - * has passed, we should accept the file for upload here. - */ -inline bool fileIsStillChanging(const OCC::SyncFileItem &item) -{ - const auto modtime = OCC::Utility::qDateTimeFromTime_t(item._modtime); - const qint64 msSinceMod = modtime.msecsTo(QDateTime::currentDateTimeUtc()); - - return std::chrono::milliseconds(msSinceMod) < OCC::SyncEngine::minimumFileAgeForUpload - // if the mtime is too much in the future we *do* upload the file - && msSinceMod > -10000; -} - -} - namespace OCC { inline QByteArray getEtagFromReply(QNetworkReply *reply) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/progressdispatcher.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/progressdispatcher.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/progressdispatcher.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/progressdispatcher.h 2022-01-03 12:25:12.000000000 +0000 @@ -269,7 +269,7 @@ friend class Folder; // only allow Folder class to access the setting slots. public: static ProgressDispatcher *instance(); - ~ProgressDispatcher() override; + ~ProgressDispatcher(); signals: /** diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatedownload.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatedownload.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatedownload.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatedownload.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -22,9 +22,8 @@ #include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" -#include -#include -#include +#include "common/checksums.h" +#include "common/asserts.h" #include "clientsideencryptionjobs.h" #include "propagatedownloadencrypted.h" #include "common/vfs.h" @@ -63,9 +62,9 @@ int overhead = 1 + 1 + 2 + 8; // slash dot dot-tilde ffffffff" int spaceForFileName = qMin(254, tmpFileName.length() + overhead) - overhead; if (tmpPath.length() > 0) { - return tmpPath + '/' + '.' + tmpFileName.left(spaceForFileName) + ".~" + (QString::number(uint(Utility::rand() % 0xFFFFFFFF), 16)); + return tmpPath + '/' + '.' + tmpFileName.left(spaceForFileName) + ".~" + (QString::number(uint(qrand() % 0xFFFFFFFF), 16)); } else { - return '.' + tmpFileName.left(spaceForFileName) + ".~" + (QString::number(uint(Utility::rand() % 0xFFFFFFFF), 16)); + return '.' + tmpFileName.left(spaceForFileName) + ".~" + (QString::number(uint(qrand() % 0xFFFFFFFF), 16)); } } @@ -78,6 +77,7 @@ , _headers(headers) , _expectedEtagForResume(expectedEtagForResume) , _expectedContentLength(-1) + , _contentLength(-1) , _resumeStart(resumeStart) , _errorStatus(SyncFileItem::NoStatus) , _bandwidthLimited(false) @@ -86,7 +86,6 @@ , _bandwidthManager(nullptr) , _hasEmittedFinishedSignal(false) , _lastModified() - , _contentLength(-1) { } @@ -98,6 +97,7 @@ , _headers(headers) , _expectedEtagForResume(expectedEtagForResume) , _expectedContentLength(-1) + , _contentLength(-1) , _resumeStart(resumeStart) , _errorStatus(SyncFileItem::NoStatus) , _directDownloadUrl(url) @@ -107,7 +107,6 @@ , _bandwidthManager(nullptr) , _hasEmittedFinishedSignal(false) , _lastModified() - , _contentLength(-1) { } @@ -220,10 +219,9 @@ qint64 start = 0; QByteArray ranges = reply()->rawHeader("Content-Range"); if (!ranges.isEmpty()) { - const QRegularExpression rx("bytes (\\d+)-"); - const auto rxMatch = rx.match(ranges); - if (rxMatch.hasMatch()) { - start = rxMatch.captured(1).toLongLong(); + QRegExp rx("bytes (\\d+)-"); + if (rx.indexIn(ranges) >= 0) { + start = rx.cap(1).toLongLong(); } } if (start != _resumeStart) { @@ -286,11 +284,6 @@ return _resumeStart; } -qint64 GETFileJob::writeToDevice(const QByteArray &data) -{ - return _device->write(data); -} - void GETFileJob::slotReadyRead() { if (!reply()) @@ -313,8 +306,8 @@ _bandwidthQuota -= toRead; } - const qint64 readBytes = reply()->read(buffer.data(), toRead); - if (readBytes < 0) { + qint64 r = reply()->read(buffer.data(), toRead); + if (r < 0) { _errorString = networkReplyErrorString(*reply()); _errorStatus = SyncFileItem::NormalError; qCWarning(lcGetJob) << "Error while reading from device: " << _errorString; @@ -322,11 +315,11 @@ return; } - const qint64 writtenBytes = writeToDevice(QByteArray::fromRawData(buffer.constData(), readBytes)); - if (writtenBytes != readBytes) { + qint64 w = _device->write(buffer.constData(), r); + if (w != r) { _errorString = _device->errorString(); _errorStatus = SyncFileItem::NormalError; - qCWarning(lcGetJob) << "Error while writing to file" << writtenBytes << readBytes << _errorString; + qCWarning(lcGetJob) << "Error while writing to file" << w << r << _errorString; reply()->abort(); return; } @@ -378,75 +371,6 @@ return AbstractNetworkJob::errorString(); } -GETEncryptedFileJob::GETEncryptedFileJob(AccountPtr account, const QString &path, QIODevice *device, - const QMap &headers, const QByteArray &expectedEtagForResume, - qint64 resumeStart, EncryptedFile encryptedInfo, QObject *parent) - : GETFileJob(account, path, device, headers, expectedEtagForResume, resumeStart, parent) - , _encryptedFileInfo(encryptedInfo) -{ -} - -GETEncryptedFileJob::GETEncryptedFileJob(AccountPtr account, const QUrl &url, QIODevice *device, - const QMap &headers, const QByteArray &expectedEtagForResume, - qint64 resumeStart, EncryptedFile encryptedInfo, QObject *parent) - : GETFileJob(account, url, device, headers, expectedEtagForResume, resumeStart, parent) - , _encryptedFileInfo(encryptedInfo) -{ -} - -qint64 GETEncryptedFileJob::writeToDevice(const QByteArray &data) -{ - if (!_decryptor) { - // only initialize the decryptor once, because, according to Qt documentation, metadata might get changed during the processing of the data sometimes - // https://doc.qt.io/qt-5/qnetworkreply.html#metaDataChanged - _decryptor.reset(new EncryptionHelper::StreamingDecryptor(_encryptedFileInfo.encryptionKey, _encryptedFileInfo.initializationVector, _contentLength)); - } - - if (!_decryptor->isInitialized()) { - return -1; - } - - const auto bytesRemaining = _contentLength - _processedSoFar - data.length(); - - if (bytesRemaining != 0 && bytesRemaining < OCC::Constants::e2EeTagSize) { - // decryption is going to fail if last chunk does not include or does not equal to OCC::Constants::e2EeTagSize bytes tag - // we may end up receiving packets beyond OCC::Constants::e2EeTagSize bytes tag at the end - // in that case, we don't want to try and decrypt less than OCC::Constants::e2EeTagSize ending bytes of tag, we will accumulate all the incoming data till the end - // and then, we are going to decrypt the entire chunk containing OCC::Constants::e2EeTagSize bytes at the end - _pendingBytes += QByteArray(data.constData(), data.length()); - _processedSoFar += data.length(); - if (_processedSoFar != _contentLength) { - return data.length(); - } - } - - if (!_pendingBytes.isEmpty()) { - const auto decryptedChunk = _decryptor->chunkDecryption(_pendingBytes.constData(), _pendingBytes.size()); - - if (decryptedChunk.isEmpty()) { - qCCritical(lcPropagateDownload) << "Decryption failed!"; - return -1; - } - - GETFileJob::writeToDevice(decryptedChunk); - - return data.length(); - } - - const auto decryptedChunk = _decryptor->chunkDecryption(data.constData(), data.length()); - - if (decryptedChunk.isEmpty()) { - qCCritical(lcPropagateDownload) << "Decryption failed!"; - return -1; - } - - GETFileJob::writeToDevice(decryptedChunk); - - _processedSoFar += data.length(); - - return data.length(); -} - void PropagateDownloadFile::start() { if (propagator()->_abortRequested) @@ -524,11 +448,6 @@ } qCDebug(lcPropagateDownload) << "creating virtual file" << _item->_file; - // do a klaas' case clash check. - if (propagator()->localFileNameClash(_item->_file)) { - done(SyncFileItem::NormalError, tr("File %1 can not be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file))); - return; - } auto r = vfs->createPlaceholder(*_item); if (!r) { done(SyncFileItem::NormalError, r.error()); @@ -564,10 +483,6 @@ return checksum_header.startsWith("SHA") || checksum_header.startsWith("MD5:"); }; - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (_item->_instruction == CSYNC_INSTRUCTION_CONFLICT && _item->_size == _item->_previousSize && !_item->_checksumHeader.isEmpty() @@ -596,22 +511,11 @@ // Apply the server mtime locally if necessary, ensuring the journal // and local mtimes end up identical auto fn = propagator()->fullLocalPath(_item->_file); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - return; - } if (_item->_modtime != _item->_previousModtime) { - Q_ASSERT(_item->_modtime > 0); FileSystem::setModTime(fn, _item->_modtime); emit propagator()->touchedFile(fn); } _item->_modtime = FileSystem::getModTime(fn); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - return; - } updateMetadata(/*isConflict=*/false); return; } @@ -835,10 +739,6 @@ // It is possible that the file was modified on the server since we did the discovery phase // so make sure we have the up-to-date time _item->_modtime = job->lastModified(); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - } } _tmpFile.close(); @@ -1077,28 +977,10 @@ return; } - if (_item->_modtime <= 0) { - FileSystem::remove(_tmpFile.fileName()); - done(SyncFileItem::NormalError, tr("File %1 has invalid modified time reported by server. Do not save it.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - } FileSystem::setModTime(_tmpFile.fileName(), _item->_modtime); // We need to fetch the time again because some file systems such as FAT have worse than a second // Accuracy, and we really need the time from the file system. (#3103) _item->_modtime = FileSystem::getModTime(_tmpFile.fileName()); - if (_item->_modtime <= 0) { - FileSystem::remove(_tmpFile.fileName()); - done(SyncFileItem::NormalError, tr("File %1 has invalid modified time reported by server. Do not save it.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime; - } bool previousFileExists = FileSystem::fileExists(fn); if (previousFileExists) { @@ -1192,21 +1074,15 @@ // Move the pin state to the new location auto pin = propagator()->_journal->internalPinStates().rawForPath(virtualFile.toUtf8()); if (pin && *pin != PinState::Inherited) { - if (!vfs->setPinState(_item->_file, *pin)) { - qCWarning(lcPropagateDownload) << "Could not set pin state of" << _item->_file; - } - if (!vfs->setPinState(virtualFile, PinState::Inherited)) { - qCWarning(lcPropagateDownload) << "Could not set pin state of" << virtualFile << " to inherited"; - } + vfs->setPinState(_item->_file, *pin); + vfs->setPinState(virtualFile, PinState::Inherited); } } // Ensure the pin state isn't contradictory auto pin = vfs->pinState(_item->_file); if (pin && *pin == PinState::OnlineOnly) - if (!vfs->setPinState(_item->_file, PinState::Unspecified)) { - qCWarning(lcPropagateDownload) << "Could not set pin state of" << _item->_file << "to unspecified"; - } + vfs->setPinState(_item->_file, PinState::Unspecified); } updateMetadata(isConflict); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatedownload.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatedownload.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatedownload.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatedownload.h 2022-01-03 12:25:12.000000000 +0000 @@ -36,6 +36,7 @@ QString _errorString; QByteArray _expectedEtagForResume; qint64 _expectedContentLength; + qint64 _contentLength; qint64 _resumeStart; SyncFileItem::Status _errorStatus; QUrl _directDownloadUrl; @@ -50,9 +51,6 @@ /// Will be set to true once we've seen a 2xx response header bool _saveBodyToFile = false; -protected: - qint64 _contentLength; - public: // DOES NOT take ownership of the device. explicit GETFileJob(AccountPtr account, const QString &path, QIODevice *device, @@ -62,7 +60,7 @@ explicit GETFileJob(AccountPtr account, const QUrl &url, QIODevice *device, const QMap &headers, const QByteArray &expectedEtagForResume, qint64 resumeStart, QObject *parent = nullptr); - ~GETFileJob() override + virtual ~GETFileJob() { if (_bandwidthManager) { _bandwidthManager->unregisterDownloadJob(this); @@ -96,7 +94,7 @@ void giveBandwidthQuota(qint64 q); qint64 currentDownloadPosition(); - QString errorString() const override; + QString errorString() const; void setErrorString(const QString &s) { _errorString = s; } SyncFileItem::Status errorStatus() { return _errorStatus; } @@ -112,9 +110,6 @@ qint64 expectedContentLength() const { return _expectedContentLength; } void setExpectedContentLength(qint64 size) { _expectedContentLength = size; } -protected: - virtual qint64 writeToDevice(const QByteArray &data); - signals: void finishedSignal(); void downloadProgress(qint64, qint64); @@ -124,34 +119,6 @@ }; /** - * @brief The GETEncryptedFileJob class that provides file decryption on the fly while the download is running - * @ingroup libsync - */ -class OWNCLOUDSYNC_EXPORT GETEncryptedFileJob : public GETFileJob -{ - Q_OBJECT - -public: - // DOES NOT take ownership of the device. - explicit GETEncryptedFileJob(AccountPtr account, const QString &path, QIODevice *device, - const QMap &headers, const QByteArray &expectedEtagForResume, - qint64 resumeStart, EncryptedFile encryptedInfo, QObject *parent = nullptr); - explicit GETEncryptedFileJob(AccountPtr account, const QUrl &url, QIODevice *device, - const QMap &headers, const QByteArray &expectedEtagForResume, - qint64 resumeStart, EncryptedFile encryptedInfo, QObject *parent = nullptr); - ~GETEncryptedFileJob() override = default; - -protected: - qint64 writeToDevice(const QByteArray &data) override; - -private: - QSharedPointer _decryptor; - EncryptedFile _encryptedFileInfo = {}; - QByteArray _pendingBytes; - qint64 _processedSoFar = 0; -}; - -/** * @brief The PropagateDownloadFile class * @ingroup libsync * @@ -252,6 +219,6 @@ QElapsedTimer _stopwatch; - PropagateDownloadEncrypted *_downloadEncryptedHelper = nullptr; + PropagateDownloadEncrypted *_downloadEncryptedHelper; }; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotedeleteencrypted.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotedeleteencrypted.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotedeleteencrypted.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotedeleteencrypted.h 2022-01-03 12:25:12.000000000 +0000 @@ -24,7 +24,7 @@ public: PropagateRemoteDeleteEncrypted(OwncloudPropagator *propagator, SyncFileItemPtr item, QObject *parent); - void start() override; + virtual void start() Q_DECL_OVERRIDE; private: void slotFolderUnLockedSuccessfully(const QByteArray &folderId) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotedeleteencryptedrootfolder.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotedeleteencryptedrootfolder.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotedeleteencryptedrootfolder.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotedeleteencryptedrootfolder.h 2022-01-03 12:25:12.000000000 +0000 @@ -27,7 +27,7 @@ public: PropagateRemoteDeleteEncryptedRootFolder(OwncloudPropagator *propagator, SyncFileItemPtr item, QObject *parent); - void start() override; + virtual void start() Q_DECL_OVERRIDE; private: void slotFolderUnLockedSuccessfully(const QByteArray &folderId) override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemkdir.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemkdir.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemkdir.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemkdir.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -61,7 +61,8 @@ _job = new DeleteJob(propagator()->account(), propagator()->fullRemotePath(_item->_file), this); - connect(qobject_cast(_job), &DeleteJob::finishedSignal, this, &PropagateRemoteMkdir::slotMkdir); + connect(static_cast(_job.data()), &DeleteJob::finishedSignal, + this, &PropagateRemoteMkdir::slotMkdir); _job->start(); } @@ -75,8 +76,7 @@ _job = new MkColJob(propagator()->account(), propagator()->fullRemotePath(_item->_file), this); - connect(qobject_cast(_job), &MkColJob::finishedWithError, this, &PropagateRemoteMkdir::slotMkcolJobFinished); - connect(qobject_cast(_job), &MkColJob::finishedWithoutError, this, &PropagateRemoteMkdir::slotMkcolJobFinished); + connect(_job, SIGNAL(finished(QNetworkReply::NetworkError)), this, SLOT(slotMkcolJobFinished())); _job->start(); } @@ -95,8 +95,8 @@ propagator()->fullRemotePath(filename), {{"e2e-token", _uploadEncryptedHelper->folderToken() }}, this); - connect(job, &MkColJob::finishedWithError, this, &PropagateRemoteMkdir::slotMkcolJobFinished); - connect(job, &MkColJob::finishedWithoutError, this, &PropagateRemoteMkdir::slotMkcolJobFinished); + connect(job, qOverload(&MkColJob::finished), + this, &PropagateRemoteMkdir::slotMkcolJobFinished); _job = job; _job->start(); } @@ -137,34 +137,36 @@ return; } - propagator()->_activeJobList.append(this); - auto propfindJob = new PropfindJob(propagator()->account(), jobPath, this); - propfindJob->setProperties({"http://owncloud.org/ns:permissions"}); - connect(propfindJob, &PropfindJob::result, this, [this, jobPath](const QVariantMap &result){ - propagator()->_activeJobList.removeOne(this); - _item->_remotePerm = RemotePermissions::fromServerString(result.value(QStringLiteral("permissions")).toString()); - - if (!_uploadEncryptedHelper && !_item->_isEncrypted) { - success(); - } else { - // We still need to mark that folder encrypted in case we were uploading it as encrypted one - // Another scenario, is we are creating a new folder because of move operation on an encrypted folder that works via remove + re-upload - propagator()->_activeJobList.append(this); - - // We're expecting directory path in /Foo/Bar convention... - Q_ASSERT(jobPath.startsWith('/') && !jobPath.endsWith('/')); - // But encryption job expect it in Foo/Bar/ convention - auto job = new OCC::EncryptFolderJob(propagator()->account(), propagator()->_journal, jobPath.mid(1), _item->_fileId, this); - connect(job, &OCC::EncryptFolderJob::finished, this, &PropagateRemoteMkdir::slotEncryptFolderFinished); - job->start(); - } - }); - connect(propfindJob, &PropfindJob::finishedWithError, this, [this]{ - // ignore the PROPFIND error - propagator()->_activeJobList.removeOne(this); - done(SyncFileItem::NormalError); - }); - propfindJob->start(); + if (_item->_fileId.isEmpty()) { + // Owncloud 7.0.0 and before did not have a header with the file id. + // (https://github.com/owncloud/core/issues/9000) + // So we must get the file id using a PROPFIND + // This is required so that we can detect moves even if the folder is renamed on the server + // while files are still uploading + propagator()->_activeJobList.append(this); + auto propfindJob = new PropfindJob(propagator()->account(), jobPath, this); + propfindJob->setProperties(QList() << "http://owncloud.org/ns:id"); + QObject::connect(propfindJob, &PropfindJob::result, this, &PropagateRemoteMkdir::propfindResult); + QObject::connect(propfindJob, &PropfindJob::finishedWithError, this, &PropagateRemoteMkdir::propfindError); + propfindJob->start(); + _job = propfindJob; + return; + } + + if (!_uploadEncryptedHelper && !_item->_isEncrypted) { + success(); + } else { + // We still need to mark that folder encrypted in case we were uploading it as encrypted one + // Another scenario, is we are creating a new folder because of move operation on an encrypted folder that works via remove + re-upload + propagator()->_activeJobList.append(this); + + // We're expecting directory path in /Foo/Bar convention... + Q_ASSERT(jobPath.startsWith('/') && !jobPath.endsWith('/')); + // But encryption job expect it in Foo/Bar/ convention + auto job = new OCC::EncryptFolderJob(propagator()->account(), propagator()->_journal, jobPath.mid(1), _item->_fileId, this); + connect(job, &OCC::EncryptFolderJob::finished, this, &PropagateRemoteMkdir::slotEncryptFolderFinished); + job->start(); + } } void PropagateRemoteMkdir::slotMkdir() @@ -233,6 +235,22 @@ success(); } +void PropagateRemoteMkdir::propfindResult(const QVariantMap &result) +{ + propagator()->_activeJobList.removeOne(this); + if (result.contains("id")) { + _item->_fileId = result["id"].toByteArray(); + } + success(); +} + +void PropagateRemoteMkdir::propfindError() +{ + // ignore the PROPFIND error + propagator()->_activeJobList.removeOne(this); + done(SyncFileItem::Success); +} + void PropagateRemoteMkdir::success() { // Never save the etag on first mkdir. diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemkdir.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemkdir.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemkdir.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemkdir.h 2022-01-03 12:25:12.000000000 +0000 @@ -54,6 +54,8 @@ void slotStartEncryptedMkcolJob(const QString &path, const QString &filename, quint64 size); void slotMkcolJobFinished(); void slotEncryptFolderFinished(); + void propfindResult(const QVariantMap &); + void propfindError(); void success(); private: diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemove.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemove.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemove.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemove.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -239,9 +239,7 @@ // Delete old db data. propagator()->_journal->deleteFileRecord(_item->_originalFile); - if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) { - qCWarning(lcPropagateRemoteMove) << "Could not set pin state of" << _item->_originalFile << "to inherited"; - } + vfs->setPinState(_item->_originalFile, PinState::Inherited); SyncFileItem newItem(*_item); newItem._type = _item->_type; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemove.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemove.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateremotemove.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateremotemove.h 2022-01-03 12:25:12.000000000 +0000 @@ -22,7 +22,7 @@ * @brief The MoveJob class * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT MoveJob : public AbstractNetworkJob +class MoveJob : public AbstractNetworkJob { Q_OBJECT const QString _destination; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateupload.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateupload.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateupload.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateupload.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -49,6 +49,25 @@ Q_LOGGING_CATEGORY(lcPropagateUploadV1, "nextcloud.sync.propagator.upload.v1", QtInfoMsg) Q_LOGGING_CATEGORY(lcPropagateUploadNG, "nextcloud.sync.propagator.upload.ng", QtInfoMsg) +/** + * We do not want to upload files that are currently being modified. + * To avoid that, we don't upload files that have a modification time + * that is too close to the current time. + * + * This interacts with the msBetweenRequestAndSync delay in the folder + * manager. If that delay between file-change notification and sync + * has passed, we should accept the file for upload here. + */ +static bool fileIsStillChanging(const SyncFileItem &item) +{ + const QDateTime modtime = Utility::qDateTimeFromTime_t(item._modtime); + const qint64 msSinceMod = modtime.msecsTo(QDateTime::currentDateTimeUtc()); + + return std::chrono::milliseconds(msSinceMod) < SyncEngine::minimumFileAgeForUpload + // if the mtime is too much in the future we *do* upload the file + && msSinceMod > -10000; +} + PUTFileJob::~PUTFileJob() { // Make sure that we destroy the QNetworkReply before our _device of which it keeps an internal pointer. @@ -198,26 +217,6 @@ const auto slashPosition = path.lastIndexOf('/'); const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString(); - - if (!_item->_renameTarget.isEmpty() && _item->_file != _item->_renameTarget) { - // Try to rename the file - const auto originalFilePathAbsolute = propagator()->fullLocalPath(_item->_file); - const auto newFilePathAbsolute = propagator()->fullLocalPath(_item->_renameTarget); - const auto renameSuccess = QFile::rename(originalFilePathAbsolute, newFilePathAbsolute); - if (!renameSuccess) { - done(SyncFileItem::NormalError, "File contains trailing spaces and couldn't be renamed"); - return; - } - _item->_file = _item->_renameTarget; - _item->_modtime = FileSystem::getModTime(newFilePathAbsolute); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } - } - SyncJournalFileRecord parentRec; bool ok = propagator()->_journal->getFileRecord(parentPath, &parentRec); if (!ok) { @@ -318,10 +317,6 @@ // and not the _fileToUpload because we are checking the original file, not there // probably temporary one. _item->_modtime = FileSystem::getModTime(filePath); - if (_item->_modtime <= 0) { - slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } const QByteArray checksumType = propagator()->account()->capabilities().preferredUploadChecksumType(); @@ -393,27 +388,11 @@ if (!FileSystem::fileExists(fullFilePath)) { return slotOnErrorStartFolderUnlock(SyncFileItem::SoftError, tr("File Removed (start upload) %1").arg(fullFilePath)); } - if (_item->_modtime <= 0) { - slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } time_t prevModtime = _item->_modtime; // the _item value was set in PropagateUploadFile::start() // but a potential checksum calculation could have taken some time during which the file could // have been changed again, so better check again here. _item->_modtime = FileSystem::getModTime(originalFilePath); - if (_item->_modtime <= 0) { - slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file))); - return; - } - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (prevModtime != _item->_modtime) { propagator()->_anotherSyncNeeded = true; qDebug() << "prevModtime" << prevModtime << "Curr" << _item->_modtime; @@ -611,10 +590,6 @@ info._file = _item->_file; info._url = path; info._modtime = _item->_modtime; - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } info._fileSize = _item->_size; propagator()->_journal->setPollInfo(info); propagator()->_journal->commit("add poll info"); @@ -737,10 +712,6 @@ { QMap headers; headers[QByteArrayLiteral("Content-Type")] = QByteArrayLiteral("application/octet-stream"); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } headers[QByteArrayLiteral("X-OC-Mtime")] = QByteArray::number(qint64(_item->_modtime)); if (qEnvironmentVariableIntValue("OWNCLOUD_LAZYOPS")) headers[QByteArrayLiteral("OC-LazyOps")] = QByteArrayLiteral("true"); @@ -810,9 +781,7 @@ auto &vfs = propagator()->syncOptions()._vfs; const auto pin = vfs->pinState(_item->_file); if (pin && *pin == PinState::OnlineOnly) { - if (!vfs->setPinState(_item->_file, PinState::Unspecified)) { - qCWarning(lcPropagateUpload) << "Could not set pin state of" << _item->_file << "to unspecified"; - } + vfs->setPinState(_item->_file, PinState::Unspecified); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadencrypted.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadencrypted.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadencrypted.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadencrypted.h 2022-01-03 12:25:12.000000000 +0000 @@ -33,7 +33,7 @@ Q_OBJECT public: PropagateUploadEncrypted(OwncloudPropagator *propagator, const QString &remoteParentPath, SyncFileItemPtr item, QObject *parent = nullptr); - ~PropagateUploadEncrypted() override = default; + ~PropagateUploadEncrypted() = default; void start(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateupload.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateupload.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateupload.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateupload.h 2022-01-03 12:25:12.000000000 +0000 @@ -39,7 +39,7 @@ Q_OBJECT public: UploadDevice(const QString &fileName, qint64 start, qint64 size, BandwidthManager *bwm); - ~UploadDevice() override; + ~UploadDevice(); bool open(QIODevice::OpenMode mode) override; void close() override; @@ -118,7 +118,7 @@ { _device->setParent(this); } - ~PUTFileJob() override; + ~PUTFileJob(); int _chunk; @@ -131,7 +131,7 @@ return _device; } - QString errorString() const override + QString errorString() { return _errorString.isEmpty() ? AbstractNetworkJob::errorString() : _errorString; } @@ -418,7 +418,7 @@ void slotPropfindFinishedWithError(); void slotPropfindIterate(const QString &name, const QMap &properties); void slotDeleteJobFinished(); - void slotMkColFinished(); + void slotMkColFinished(QNetworkReply::NetworkError); void slotPutFinished(); void slotMoveJobFinished(); void slotUploadProgress(qint64, qint64); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadng.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadng.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadng.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadng.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -83,10 +83,6 @@ propagator()->_activeJobList.append(this); const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (progressInfo._valid && progressInfo.isChunked() && progressInfo._modtime == _item->_modtime && progressInfo._size == _item->_size) { _transferId = progressInfo._transferid; @@ -233,11 +229,7 @@ void PropagateUploadFileNG::startNewUpload() { ASSERT(propagator()->_activeJobList.count(this) == 1); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } - _transferId = uint(Utility::rand() ^ uint(_item->_modtime) ^ (uint(_fileToUpload._size) << 16) ^ qHash(_fileToUpload._file)); + _transferId = uint(qrand() ^ uint(_item->_modtime) ^ (uint(_fileToUpload._size) << 16) ^ qHash(_fileToUpload._file)); _sent = 0; _currentChunk = 0; @@ -246,10 +238,6 @@ SyncJournalDb::UploadInfo pi; pi._valid = true; pi._transferid = _transferId; - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } pi._modtime = _item->_modtime; pi._contentChecksum = _item->_checksumHeader; pi._size = _item->_size; @@ -261,15 +249,13 @@ headers["OC-Total-Length"] = QByteArray::number(_fileToUpload._size); auto job = new MkColJob(propagator()->account(), chunkUrl(), headers, this); - connect(job, &MkColJob::finishedWithError, - this, &PropagateUploadFileNG::slotMkColFinished); - connect(job, &MkColJob::finishedWithoutError, - this, &PropagateUploadFileNG::slotMkColFinished); + connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), + this, SLOT(slotMkColFinished(QNetworkReply::NetworkError))); connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); } -void PropagateUploadFileNG::slotMkColFinished() +void PropagateUploadFileNG::slotMkColFinished(QNetworkReply::NetworkError) { propagator()->_activeJobList.removeOne(this); auto job = qobject_cast(sender()); @@ -435,10 +421,6 @@ } // Check whether the file changed since discovery - this acts on the original file. - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (!FileSystem::verifyFileUnchanged(fullFilePath, _item->_size, _item->_modtime)) { propagator()->_anotherSyncNeeded = true; if (!_finished) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadv1.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadv1.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagateuploadv1.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagateuploadv1.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -39,18 +39,10 @@ { _chunkCount = int(std::ceil(_fileToUpload._size / double(chunkSize()))); _startChunk = 0; - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } - _transferId = uint(Utility::rand()) ^ uint(_item->_modtime) ^ (uint(_fileToUpload._size) << 16); + _transferId = uint(qrand()) ^ uint(_item->_modtime) ^ (uint(_fileToUpload._size) << 16); const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file); - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (progressInfo._valid && progressInfo.isChunked() && progressInfo._modtime == _item->_modtime && progressInfo._size == _item->_size && (progressInfo._contentChecksum == _item->_checksumHeader || progressInfo._contentChecksum.isEmpty() || _item->_checksumHeader.isEmpty())) { _startChunk = progressInfo._chunk; @@ -64,10 +56,6 @@ pi._valid = true; pi._chunk = 0; pi._transferid = 0; // We set a null transfer id because it is not chunked. - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } pi._modtime = _item->_modtime; pi._errorCount = 0; pi._contentChecksum = _item->_checksumHeader; @@ -257,10 +245,6 @@ } // Check whether the file changed since discovery. the file check here is the original and not the temprary. - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } if (!FileSystem::verifyFileUnchanged(fullFilePath, _item->_size, _item->_modtime)) { propagator()->_anotherSyncNeeded = true; if (!_finished) { @@ -299,10 +283,6 @@ } pi._chunk = (currentChunk + _startChunk + 1) % _chunkCount; // next chunk to start with pi._transferid = _transferId; - Q_ASSERT(_item->_modtime > 0); - if (_item->_modtime <= 0) { - qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime; - } pi._modtime = _item->_modtime; pi._errorCount = 0; // successful chunk upload resets pi._contentChecksum = _item->_checksumHeader; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatorjobs.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatorjobs.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/propagatorjobs.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/propagatorjobs.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -248,9 +248,7 @@ auto &vfs = propagator()->syncOptions()._vfs; auto pinState = vfs->pinState(_item->_originalFile); - if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) { - qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_originalFile << "to inherited"; - } + vfs->setPinState(_item->_originalFile, PinState::Inherited); const auto oldFile = _item->_file; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/pushnotifications.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/pushnotifications.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/pushnotifications.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/pushnotifications.h 2022-01-03 12:25:12.000000000 +0000 @@ -31,7 +31,7 @@ public: explicit PushNotifications(Account *account, QObject *parent = nullptr); - ~PushNotifications() override; + ~PushNotifications(); /** * Setup push notifications diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/putmultifilejob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/putmultifilejob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/putmultifilejob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/putmultifilejob.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright 2021 (c) Matthieu Gallien - * - * 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 "putmultifilejob.h" - -#include - -namespace OCC { - -Q_LOGGING_CATEGORY(lcPutMultiFileJob, "nextcloud.sync.networkjob.put.multi", QtInfoMsg) - -PutMultiFileJob::~PutMultiFileJob() = default; - -void PutMultiFileJob::start() -{ - QNetworkRequest req; - - for(auto &oneDevice : _devices) { - auto onePart = QHttpPart{}; - - onePart.setBodyDevice(oneDevice._device.get()); - - for (QMap::const_iterator it = oneDevice._headers.begin(); it != oneDevice._headers.end(); ++it) { - onePart.setRawHeader(it.key(), it.value()); - } - - req.setPriority(QNetworkRequest::LowPriority); // Long uploads must not block non-propagation jobs. - - _body.append(onePart); - } - - sendRequest("POST", _url, req, &_body); - - if (reply()->error() != QNetworkReply::NoError) { - qCWarning(lcPutMultiFileJob) << " Network error: " << reply()->errorString(); - } - - connect(reply(), &QNetworkReply::uploadProgress, this, &PutMultiFileJob::uploadProgress); - connect(this, &AbstractNetworkJob::networkActivity, account().data(), &Account::propagatorNetworkActivity); - _requestTimer.start(); - AbstractNetworkJob::start(); -} - -bool PutMultiFileJob::finished() -{ - for(const auto &oneDevice : _devices) { - oneDevice._device->close(); - } - - qCInfo(lcPutMultiFileJob) << "POST of" << reply()->request().url().toString() << path() << "FINISHED WITH STATUS" - << replyStatusString() - << reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute) - << reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute); - - emit finishedSignal(); - return true; -} - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/putmultifilejob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/putmultifilejob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/putmultifilejob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/putmultifilejob.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -/* - * Copyright 2021 (c) Matthieu Gallien - * - * 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. - */ - -#pragma once - -#include "abstractnetworkjob.h" - -#include "propagateupload.h" -#include "account.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -class QIODevice; - -namespace OCC { - -Q_DECLARE_LOGGING_CATEGORY(lcPutMultiFileJob) - -struct SingleUploadFileData -{ - std::unique_ptr _device; - QMap _headers; -}; - -/** - * @brief The PutMultiFileJob class - * @ingroup libsync - */ -class OWNCLOUDSYNC_EXPORT PutMultiFileJob : public AbstractNetworkJob -{ - Q_OBJECT - -public: - explicit PutMultiFileJob(AccountPtr account, const QUrl &url, - std::vector devices, QObject *parent = nullptr) - : AbstractNetworkJob(account, {}, parent) - , _devices(std::move(devices)) - , _url(url) - { - _body.setContentType(QHttpMultiPart::RelatedType); - for(auto &singleDevice : _devices) { - singleDevice._device->setParent(this); - connect(this, &PutMultiFileJob::uploadProgress, - singleDevice._device.get(), &UploadDevice::slotJobUploadProgress); - } - } - - ~PutMultiFileJob() override; - - void start() override; - - bool finished() override; - - QString errorString() const override - { - return _errorString.isEmpty() ? AbstractNetworkJob::errorString() : _errorString; - } - - std::chrono::milliseconds msSinceStart() const - { - return std::chrono::milliseconds(_requestTimer.elapsed()); - } - -signals: - void finishedSignal(); - void uploadProgress(qint64, qint64); - -private: - QHttpMultiPart _body; - std::vector _devices; - QString _errorString; - QUrl _url; - QElapsedTimer _requestTimer; -}; - -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncengine.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncengine.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncengine.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncengine.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -15,7 +15,6 @@ #include "syncengine.h" #include "account.h" -#include "common/filesystembase.h" #include "owncloudpropagator.h" #include "common/syncjournaldb.h" #include "common/syncjournalfilerecord.h" @@ -54,7 +53,6 @@ #include #include #include -#include #include namespace OCC { @@ -436,7 +434,7 @@ } if (s_anySyncRunning || _syncRunning) { - ASSERT(false) + ASSERT(false); return; } @@ -454,7 +452,7 @@ if (!QDir(_localPath).exists()) { _anotherSyncNeeded = DelayedFollowUp; // No _tr, it should only occur in non-mirall - Q_EMIT syncError(QStringLiteral("Unable to find local sync folder.")); + syncError("Unable to find local sync folder."); finalize(false); return; } @@ -467,11 +465,11 @@ qCWarning(lcEngine()) << "Too little space available at" << _localPath << ". Have" << freeBytes << "bytes and require at least" << minFree << "bytes"; _anotherSyncNeeded = DelayedFollowUp; - Q_EMIT syncError(tr("Only %1 are available, need at least %2 to start", + syncError(tr("Only %1 are available, need at least %2 to start", "Placeholders are postfixed with file sizes using Utility::octetsToString()") - .arg( - Utility::octetsToString(freeBytes), - Utility::octetsToString(minFree))); + .arg( + Utility::octetsToString(freeBytes), + Utility::octetsToString(minFree))); finalize(false); return; } else { @@ -500,7 +498,7 @@ // This creates the DB if it does not exist yet. if (!_journal->open()) { qCWarning(lcEngine) << "No way to create a sync journal!"; - Q_EMIT syncError(tr("Unable to open or create the local sync database. Make sure you have write access in the sync folder.")); + syncError(tr("Unable to open or create the local sync database. Make sure you have write access in the sync folder.")); finalize(false); return; // database creation error! @@ -516,7 +514,7 @@ _lastLocalDiscoveryStyle = _localDiscoveryStyle; if (_syncOptions._vfs->mode() == Vfs::WithSuffix && _syncOptions._vfs->fileSuffix().isEmpty()) { - Q_EMIT syncError(tr("Using virtual files with suffix, but suffix is not set")); + syncError(tr("Using virtual files with suffix, but suffix is not set")); finalize(false); return; } @@ -528,7 +526,7 @@ qCInfo(lcEngine) << (usingSelectiveSync ? "Using Selective Sync" : "NOT Using Selective Sync"); } else { qCWarning(lcEngine) << "Could not retrieve selective sync list from DB"; - Q_EMIT syncError(tr("Unable to read the blacklist from the local database")); + syncError(tr("Unable to read the blacklist from the local database")); finalize(false); return; } @@ -546,11 +544,6 @@ _discoveryPhase.reset(new DiscoveryPhase); _discoveryPhase->_account = _account; _discoveryPhase->_excludes = _excludedFiles.data(); - const QString excludeFilePath = _localPath + QStringLiteral(".sync-exclude.lst"); - if (QFile::exists(excludeFilePath)) { - _discoveryPhase->_excludes->addExcludeFilePath(excludeFilePath); - _discoveryPhase->_excludes->reloadExcludeFiles(); - } _discoveryPhase->_statedb = _journal; _discoveryPhase->_localDir = _localPath; if (!_discoveryPhase->_localDir.endsWith('/')) @@ -564,7 +557,7 @@ _discoveryPhase->setSelectiveSyncWhiteList(_journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok)); if (!ok) { qCWarning(lcEngine) << "Unable to read selective sync list, aborting."; - Q_EMIT syncError(tr("Unable to read from the sync journal.")); + syncError(tr("Unable to read from the sync journal.")); finalize(false); return; } @@ -581,14 +574,14 @@ invalidFilenamePattern = R"([\\:?*"<>|])"; } if (!invalidFilenamePattern.isEmpty()) - _discoveryPhase->_invalidFilenameRx = QRegularExpression(invalidFilenamePattern); + _discoveryPhase->_invalidFilenameRx = QRegExp(invalidFilenamePattern); _discoveryPhase->_serverBlacklistedFiles = _account->capabilities().blacklistedFiles(); _discoveryPhase->_ignoreHiddenFiles = ignoreHiddenFiles(); connect(_discoveryPhase.data(), &DiscoveryPhase::itemDiscovered, this, &SyncEngine::slotItemDiscovered); connect(_discoveryPhase.data(), &DiscoveryPhase::newBigFolder, this, &SyncEngine::newBigFolder); connect(_discoveryPhase.data(), &DiscoveryPhase::fatalError, this, [this](const QString &errorString) { - Q_EMIT syncError(errorString); + syncError(errorString); finalize(false); }); connect(_discoveryPhase.data(), &DiscoveryPhase::finished, this, &SyncEngine::slotDiscoveryFinished); @@ -621,7 +614,7 @@ emit transmissionProgress(*_progressInfo); } -void SyncEngine::slotRootEtagReceived(const QByteArray &e, const QDateTime &time) +void SyncEngine::slotRootEtagReceived(const QString &e, const QDateTime &time) { if (_remoteRootEtag.isEmpty()) { qCDebug(lcEngine) << "Root etag:" << e; @@ -647,7 +640,7 @@ // Sanity check if (!_journal->open()) { qCWarning(lcEngine) << "Bailing out, DB failure"; - Q_EMIT syncError(tr("Cannot open the sync journal")); + syncError(tr("Cannot open the sync journal")); finalize(false); return; } else { @@ -697,12 +690,8 @@ const QString script = qEnvironmentVariable("OWNCLOUD_POST_UPDATE_SCRIPT"); qCDebug(lcEngine) << "Post Update Script: " << script; - auto scriptArgs = script.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts); - if (scriptArgs.size() > 0) { - const auto scriptExecutable = scriptArgs.takeFirst(); - QProcess::execute(scriptExecutable, scriptArgs); - } -#else + QProcess::execute(script); + #else qCWarning(lcEngine) << "**** Attention: POST_UPDATE_SCRIPT installed, but not executed because compiled with NDEBUG"; #endif } @@ -711,7 +700,7 @@ _journal->commit(QStringLiteral("post treewalk")); _propagator = QSharedPointer( - new OwncloudPropagator(_account, _localPath, _remotePath, _journal, _bulkUploadBlackList)); + new OwncloudPropagator(_account, _localPath, _remotePath, _journal)); _propagator->setSyncOptions(_syncOptions); connect(_propagator.data(), &OwncloudPropagator::itemCompleted, this, &SyncEngine::slotItemCompleted); @@ -734,9 +723,10 @@ // Emit the started signal only after the propagator has been set up. if (_needsUpdate) - Q_EMIT started(); + emit(started()); - _propagator->start(std::move(_syncItems)); + _propagator->start(_syncItems); + _syncItems.clear(); qCInfo(lcEngine) << "#### Post-Reconcile end #################################################### " << _stopWatch.addLapTime(QStringLiteral("Post-Reconcile Finished")) << "ms"; }; @@ -1021,24 +1011,6 @@ // But hydrated placeholders may still be around. } -void SyncEngine::switchToVirtualFiles(const QString &localPath, SyncJournalDb &journal, Vfs &vfs) -{ - qCInfo(lcEngine) << "Convert to virtual files inside" << localPath; - journal.getFilesBelowPath({}, [&](const SyncJournalFileRecord &rec) { - const auto path = rec.path(); - const auto fileName = QFileInfo(path).fileName(); - if (FileSystem::isExcludeFile(fileName)) { - return; - } - SyncFileItem item; - QString localFile = localPath + path; - const auto result = vfs.convertToPlaceholder(localFile, item, localFile); - if (!result.isValid()) { - qCWarning(lcEngine) << "Could not convert file to placeholder" << result.error(); - } - }); -} - void SyncEngine::abort() { if (_propagator) @@ -1053,7 +1025,7 @@ disconnect(_discoveryPhase.data(), nullptr, this, nullptr); _discoveryPhase.take()->deleteLater(); - Q_EMIT syncError(tr("Synchronization will resume shortly.")); + syncError(tr("Aborted")); finalize(false); } } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncengine.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncengine.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncengine.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncengine.h 2022-01-03 12:25:12.000000000 +0000 @@ -59,7 +59,7 @@ public: SyncEngine(AccountPtr account, const QString &localPath, const QString &remotePath, SyncJournalDb *journal); - ~SyncEngine() override; + ~SyncEngine(); Q_INVOKABLE void startSync(); void setNetworkLimits(int upload, int download); @@ -134,13 +134,11 @@ */ static void wipeVirtualFiles(const QString &localPath, SyncJournalDb &journal, Vfs &vfs); - static void switchToVirtualFiles(const QString &localPath, SyncJournalDb &journal, Vfs &vfs); - auto getPropagator() { return _propagator; } // for the test signals: // During update, before reconcile - void rootEtag(const QByteArray &, const QDateTime &); + void rootEtag(const QString &, const QDateTime &); // after the above signals. with the items that actually need propagating void aboutToPropagate(SyncFileItemVector &); @@ -176,7 +174,7 @@ private slots: void slotFolderDiscovered(bool local, const QString &folder); - void slotRootEtagReceived(const QByteArray &, const QDateTime &time); + void slotRootEtagReceived(const QString &, const QDateTime &time); /** When the discovery phase discovers an item */ void slotItemDiscovered(const SyncFileItemPtr &item); @@ -236,13 +234,11 @@ bool _syncRunning; QString _localPath; QString _remotePath; - QByteArray _remoteRootEtag; + QString _remoteRootEtag; SyncJournalDb *_journal; QScopedPointer _discoveryPhase; QSharedPointer _propagator; - QSet _bulkUploadBlackList; - // List of all files with conflicts QSet _seenConflictFiles; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncfilestatustracker.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncfilestatustracker.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncfilestatustracker.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncfilestatustracker.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -339,7 +339,7 @@ void SyncFileStatusTracker::invalidateParentPaths(const QString &path) { - QStringList splitPath = path.split('/', Qt::SkipEmptyParts); + QStringList splitPath = path.split('/', QString::SkipEmptyParts); for (int i = 0; i < splitPath.size(); ++i) { QString parentPath = QStringList(splitPath.mid(0, i)).join(QLatin1String("/")); emit fileStatusChanged(getSystemDestination(parentPath), fileStatus(parentPath)); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncoptions.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncoptions.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncoptions.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncoptions.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (C) by Olivier Goffart - * - * 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 "syncoptions.h" -#include "common/utility.h" - -#include - -using namespace OCC; - -SyncOptions::SyncOptions() - : _vfs(new VfsOff) -{ -} - -SyncOptions::~SyncOptions() = default; - -void SyncOptions::fillFromEnvironmentVariables() -{ - QByteArray chunkSizeEnv = qgetenv("OWNCLOUD_CHUNK_SIZE"); - if (!chunkSizeEnv.isEmpty()) - _initialChunkSize = chunkSizeEnv.toUInt(); - - QByteArray minChunkSizeEnv = qgetenv("OWNCLOUD_MIN_CHUNK_SIZE"); - if (!minChunkSizeEnv.isEmpty()) - _minChunkSize = minChunkSizeEnv.toUInt(); - - QByteArray maxChunkSizeEnv = qgetenv("OWNCLOUD_MAX_CHUNK_SIZE"); - if (!maxChunkSizeEnv.isEmpty()) - _maxChunkSize = maxChunkSizeEnv.toUInt(); - - QByteArray targetChunkUploadDurationEnv = qgetenv("OWNCLOUD_TARGET_CHUNK_UPLOAD_DURATION"); - if (!targetChunkUploadDurationEnv.isEmpty()) - _targetChunkUploadDuration = std::chrono::milliseconds(targetChunkUploadDurationEnv.toUInt()); - - int maxParallel = qgetenv("OWNCLOUD_MAX_PARALLEL").toInt(); - if (maxParallel > 0) - _parallelNetworkJobs = maxParallel; -} - -void SyncOptions::verifyChunkSizes() -{ - _minChunkSize = qMin(_minChunkSize, _initialChunkSize); - _maxChunkSize = qMax(_maxChunkSize, _initialChunkSize); -} - -QRegularExpression SyncOptions::fileRegex() const -{ - return _fileRegex; -} - -void SyncOptions::setFilePattern(const QString &pattern) -{ - // full match or a path ending with this pattern - setPathPattern(QStringLiteral("(^|/|\\\\)") + pattern + QLatin1Char('$')); -} - -void SyncOptions::setPathPattern(const QString &pattern) -{ - _fileRegex.setPatternOptions(Utility::fsCasePreserving() ? QRegularExpression::CaseInsensitiveOption : QRegularExpression::NoPatternOption); - _fileRegex.setPattern(pattern); -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncoptions.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncoptions.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/syncoptions.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/syncoptions.h 2022-01-03 12:25:12.000000000 +0000 @@ -15,25 +15,21 @@ #pragma once #include "owncloudlib.h" -#include "common/vfs.h" - -#include -#include #include - +#include #include - +#include "common/vfs.h" namespace OCC { /** * Value class containing the options given to the sync engine */ -class OWNCLOUDSYNC_EXPORT SyncOptions +struct OWNCLOUDSYNC_EXPORT SyncOptions { -public: - SyncOptions(); - ~SyncOptions(); + SyncOptions() + : _vfs(new VfsOff) + {} /** Maximum size (in Bytes) a folder can have without asking for confirmation. * -1 means infinite */ @@ -61,7 +57,7 @@ qint64 _minChunkSize = 1 * 1000 * 1000; // 1MB /** The maximum chunk size in bytes for chunked uploads */ - qint64 _maxChunkSize = 1000 * 1000 * 1000; // 1000MB + qint64 _maxChunkSize = 100 * 1000 * 1000; // 100MB /** The target duration of chunk uploads for dynamic chunk sizing. * @@ -71,45 +67,7 @@ /** The maximum number of active jobs in parallel */ int _parallelNetworkJobs = 6; - - /** Reads settings from env vars where available. - * - * Currently reads _initialChunkSize, _minChunkSize, _maxChunkSize, - * _targetChunkUploadDuration, _parallelNetworkJobs. - */ - void fillFromEnvironmentVariables(); - - /** Ensure min <= initial <= max - * - * Previously min/max chunk size values didn't exist, so users might - * have setups where the chunk size exceeds the new min/max default - * values. To cope with this, adjust min/max to always include the - * initial chunk size value. - */ - void verifyChunkSizes(); - - - /** A regular expression to match file names - * If no pattern is provided the default is an invalid regular expression. - */ - QRegularExpression fileRegex() const; - - /** - * A pattern like *.txt, matching only file names - */ - void setFilePattern(const QString &pattern); - - /** - * A pattern like /own.*\/.*txt matching the full path - */ - void setPathPattern(const QString &pattern); - -private: - /** - * Only sync files that mathc the expression - * Invalid pattern by default. - */ - QRegularExpression _fileRegex = QRegularExpression(QStringLiteral("(")); }; + } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/theme.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/theme.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/theme.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/theme.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -156,37 +156,7 @@ QUrl Theme::statusInvisibleImageSource() const { - return imagePathToUrl(themeImagePath("user-status-invisible", 64)); -} - -QUrl Theme::syncStatusOk() const -{ - return imagePathToUrl(themeImagePath("state-ok", 16)); -} - -QUrl Theme::syncStatusError() const -{ - return imagePathToUrl(themeImagePath("state-error", 16)); -} - -QUrl Theme::syncStatusRunning() const -{ - return imagePathToUrl(themeImagePath("state-sync", 16)); -} - -QUrl Theme::syncStatusPause() const -{ - return imagePathToUrl(themeImagePath("state-pause", 16)); -} - -QUrl Theme::syncStatusWarning() const -{ - return imagePathToUrl(themeImagePath("state-warning", 16)); -} - -QUrl Theme::folderOffline() const -{ - return imagePathToUrl(themeImagePath("state-offline")); + return imagePathToUrl(themeImagePath("user-status-invisible", 16)); } QString Theme::version() const @@ -227,7 +197,7 @@ return cached = QIcon::fromTheme(name); } - const QString svgName = QString(Theme::themePrefix) + QString::fromLatin1("%1/%2.svg").arg(flavor).arg(name); + const auto svgName = QString::fromLatin1(":/client/theme/%1/%2.svg").arg(flavor).arg(name); QSvgRenderer renderer(svgName); const auto createPixmapFromSvg = [&renderer] (int size) { QImage img(size, size, QImage::Format_ARGB32); @@ -238,7 +208,7 @@ }; const auto loadPixmap = [flavor, name] (int size) { - const QString pixmapName = QString(Theme::themePrefix) + QString::fromLatin1("%1/%2-%3.png").arg(flavor).arg(name).arg(size); + const auto pixmapName = QString::fromLatin1(":/client/theme/%1/%2-%3.png").arg(flavor).arg(name).arg(size); return QPixmap(pixmapName); }; @@ -279,8 +249,8 @@ // branded client may have several sizes of the same icon const QString filePath = (useSvg || size <= 0) - ? QString(Theme::themePrefix) + QString::fromLatin1("%1/%2").arg(flavor).arg(name) - : QString(Theme::themePrefix) + QString::fromLatin1("%1/%2-%3").arg(flavor).arg(name).arg(size); + ? QString::fromLatin1(":/client/theme/%1/%2").arg(flavor).arg(name) + : QString::fromLatin1(":/client/theme/%1/%2-%3").arg(flavor).arg(name).arg(size); const QString svgPath = filePath + ".svg"; if (useSvg) { @@ -304,7 +274,8 @@ QIcon Theme::uiThemeIcon(const QString &iconName, bool uiHasDarkBg) const { - QString iconPath = QString(Theme::themePrefix) + (uiHasDarkBg ? "white/" : "black/") + iconName; + QString themeResBasePath = ":/client/theme/"; + QString iconPath = themeResBasePath + (uiHasDarkBg?"white/":"black/") + iconName; std::string icnPath = iconPath.toUtf8().constData(); return QIcon(QPixmap(iconPath)); } @@ -332,7 +303,8 @@ { const auto isDarkBackground = Theme::isDarkColor(backgroundColor); - const QString iconPath = QString(Theme::themePrefix) + (isDarkBackground ? "white/" : "black/") + iconName; + const QString themeResBasePath = ":/client/theme/"; + const QString iconPath = themeResBasePath + (isDarkBackground ? "white/" : "black/") + iconName; return Theme::hidpiFileName(iconPath, dev); } @@ -399,24 +371,6 @@ #endif } -bool Theme::enableStaplingOCSP() const -{ -#ifdef APPLICATION_OCSP_STAPLING_ENABLED - return true; -#else - return false; -#endif -} - -bool Theme::forbidBadSSL() const -{ -#ifdef APPLICATION_FORBID_BAD_SSL - return true; -#else - return false; -#endif -} - QString Theme::forceConfigAuthType() const { return QString(); @@ -452,7 +406,7 @@ bool Theme::monoIconsAvailable() const { - QString themeDir = QString(Theme::themePrefix) + QString::fromLatin1("%1/").arg(Theme::instance()->systrayIconFlavor(true)); + QString themeDir = QString::fromLatin1(":/client/theme/%1/").arg(Theme::instance()->systrayIconFlavor(true)); return QDir(themeDir).exists(); } @@ -514,8 +468,6 @@ devString += tr("

Using virtual files plugin: %1

") .arg(Vfs::modeToString(bestAvailableVfsMode())); - devString += QStringLiteral("
%1") - .arg(QSysInfo::productType() % QLatin1Char('-') % QSysInfo::kernelVersion()); return devString; } @@ -556,7 +508,7 @@ break; } - QString imgPath = QString(Theme::themePrefix) + QString::fromLatin1("colored/%1.png").arg(key); + QString imgPath = QString::fromLatin1(":/client/theme/colored/%1.png").arg(key); if (QFile::exists(imgPath)) { QPixmap pix(imgPath); if (pix.isNull()) { @@ -627,11 +579,11 @@ QPixmap Theme::wizardApplicationLogo() const { if (!Theme::isBranded()) { - return QPixmap(Theme::hidpiFileName(QString(Theme::themePrefix) + "colored/wizard-nextcloud.png")); + return QPixmap(Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png")); } #ifdef APPLICATION_WIZARD_USE_CUSTOM_LOGO const auto useSvg = shouldPreferSvg(); - const QString logoBasePath = QString(Theme::themePrefix) + QStringLiteral("colored/wizard_logo"); + const auto logoBasePath = QStringLiteral(":/client/theme/colored/wizard_logo"); if (useSvg) { const auto maxHeight = Theme::isHidpi() ? 200 : 100; const auto maxWidth = 2 * maxHeight; @@ -651,7 +603,7 @@ { #ifdef APPLICATION_WIZARD_USE_CUSTOM_LOGO const auto useSvg = shouldPreferSvg(); - const QString logoBasePath = QString(Theme::themePrefix) + QStringLiteral("colored/wizard_logo"); + const auto logoBasePath = QStringLiteral(":/client/theme/colored/wizard_logo"); if (useSvg) { const auto maxHeight = 64; const auto maxWidth = 2 * maxHeight; @@ -753,17 +705,17 @@ QTextStream stream(&helpText); stream << appName() << QLatin1String(" version ") - << version() << Qt::endl; + << version() << endl; #ifdef GIT_SHA1 - stream << "Git revision " << GIT_SHA1 << Qt::endl; + stream << "Git revision " << GIT_SHA1 << endl; #endif - stream << "Using Qt " << qVersion() << ", built against Qt " << QT_VERSION_STR << Qt::endl; + stream << "Using Qt " << qVersion() << ", built against Qt " << QT_VERSION_STR << endl; if(!QGuiApplication::platformName().isEmpty()) - stream << "Using Qt platform plugin '" << QGuiApplication::platformName() << "'" << Qt::endl; + stream << "Using Qt platform plugin '" << QGuiApplication::platformName() << "'" << endl; - stream << "Using '" << QSslSocket::sslLibraryVersionString() << "'" << Qt::endl; - stream << "Running on " << Utility::platformName() << ", " << QSysInfo::currentCpuArchitecture() << Qt::endl; + stream << "Using '" << QSslSocket::sslLibraryVersionString() << "'" << endl; + stream << "Running on " << Utility::platformName() << ", " << QSysInfo::currentCpuArchitecture() << endl; return helpText; } @@ -859,25 +811,4 @@ return ConfigFile().showExperimentalOptions() || vfsMode == Vfs::WindowsCfApi; } -bool Theme::enforceVirtualFilesSyncFolder() const -{ - const auto vfsMode = bestAvailableVfsMode(); - return ENFORCE_VIRTUAL_FILES_SYNC_FOLDER && vfsMode != OCC::Vfs::Off; -} - -QColor Theme::errorBoxTextColor() const -{ - return QColor{"white"}; -} - -QColor Theme::errorBoxBackgroundColor() const -{ - return QColor{"red"}; -} - -QColor Theme::errorBoxBorderColor() const -{ - return QColor{"black"}; -} - } // end namespace client diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/theme.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/theme.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/theme.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/theme.h 2022-01-03 12:25:12.000000000 +0000 @@ -61,10 +61,6 @@ Q_PROPERTY(QColor wizardHeaderBackgroundColor READ wizardHeaderBackgroundColor CONSTANT) #endif Q_PROPERTY(QString updateCheckUrl READ updateCheckUrl CONSTANT) - - Q_PROPERTY(QColor errorBoxTextColor READ errorBoxTextColor CONSTANT) - Q_PROPERTY(QColor errorBoxBackgroundColor READ errorBoxBackgroundColor CONSTANT) - Q_PROPERTY(QColor errorBoxBorderColor READ errorBoxBorderColor CONSTANT) public: enum CustomMediaType { oCSetupTop, // ownCloud connect page @@ -76,7 +72,7 @@ /* returns a singleton instance. */ static Theme *instance(); - ~Theme() override; + ~Theme(); /** * @brief isBranded indicates if the current application is branded @@ -155,18 +151,6 @@ */ QUrl statusInvisibleImageSource() const; - QUrl syncStatusOk() const; - - QUrl syncStatusError() const; - - QUrl syncStatusRunning() const; - - QUrl syncStatusPause() const; - - QUrl syncStatusWarning() const; - - QUrl folderOffline() const; - /** * @brief configFileName * @return the name of the config file. @@ -239,20 +223,6 @@ * When true, the respective UI controls will be disabled */ virtual bool forceOverrideServerUrl() const; - - /** - * Enable OCSP stapling for SSL handshakes - * - * When true, peer will be requested for Online Certificate Status Protocol response - */ - virtual bool enableStaplingOCSP() const; - - /** - * Enforce SSL validity - * - * When true, trusting the untrusted certificate is not allowed - */ - virtual bool forbidBadSSL() const; /** * This is only usefull when previous version had a different overrideServerUrl @@ -565,19 +535,6 @@ */ virtual bool showVirtualFilesOption() const; - virtual bool enforceVirtualFilesSyncFolder() const; - - /** @return color for the ErrorBox text. */ - virtual QColor errorBoxTextColor() const; - - /** @return color for the ErrorBox background. */ - virtual QColor errorBoxBackgroundColor() const; - - /** @return color for the ErrorBox border. */ - virtual QColor errorBoxBorderColor() const; - - static constexpr const char *themePrefix = ":/client/theme/"; - protected: #ifndef TOKEN_AUTH_ONLY QIcon themeIcon(const QString &name, bool sysTray = false) const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/userstatusconnector.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/userstatusconnector.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/userstatusconnector.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/userstatusconnector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "userstatusconnector.h" -#include "theme.h" - -namespace OCC { - -UserStatus::UserStatus() = default; - -UserStatus::UserStatus( - const QString &id, const QString &message, const QString &icon, - OnlineStatus state, bool messagePredefined, const Optional &clearAt) - : _id(id) - , _message(message) - , _icon(icon) - , _state(state) - , _messagePredefined(messagePredefined) - , _clearAt(clearAt) -{ -} - -QString UserStatus::id() const -{ - return _id; -} - -QString UserStatus::message() const -{ - return _message; -} - -QString UserStatus::icon() const -{ - return _icon; -} - -auto UserStatus::state() const -> OnlineStatus -{ - return _state; -} - -bool UserStatus::messagePredefined() const -{ - return _messagePredefined; -} - -QUrl UserStatus::stateIcon() const -{ - switch (_state) { - case UserStatus::OnlineStatus::Away: - return Theme::instance()->statusAwayImageSource(); - - case UserStatus::OnlineStatus::DoNotDisturb: - return Theme::instance()->statusDoNotDisturbImageSource(); - - case UserStatus::OnlineStatus::Invisible: - case UserStatus::OnlineStatus::Offline: - return Theme::instance()->statusInvisibleImageSource(); - - case UserStatus::OnlineStatus::Online: - return Theme::instance()->statusOnlineImageSource(); - } - - Q_UNREACHABLE(); -} - -Optional UserStatus::clearAt() const -{ - return _clearAt; -} - -void UserStatus::setId(const QString &id) -{ - _id = id; -} - -void UserStatus::setMessage(const QString &message) -{ - _message = message; -} - -void UserStatus::setState(OnlineStatus state) -{ - _state = state; -} - -void UserStatus::setIcon(const QString &icon) -{ - _icon = icon; -} - -void UserStatus::setMessagePredefined(bool value) -{ - _messagePredefined = value; -} - -void UserStatus::setClearAt(const Optional &dateTime) -{ - _clearAt = dateTime; -} - - -UserStatusConnector::UserStatusConnector(QObject *parent) - : QObject(parent) -{ -} - -UserStatusConnector::~UserStatusConnector() = default; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/userstatusconnector.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/userstatusconnector.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/userstatusconnector.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/userstatusconnector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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. - */ - -#pragma once - -#include "common/result.h" -#include "owncloudlib.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace OCC { - -enum class OWNCLOUDSYNC_EXPORT ClearAtType { - Period, - EndOf, - Timestamp -}; - -// TODO: If we can use C++17 make it a std::variant -struct OWNCLOUDSYNC_EXPORT ClearAt -{ - ClearAtType _type = ClearAtType::Period; - - quint64 _timestamp; - int _period; - QString _endof; -}; - -class OWNCLOUDSYNC_EXPORT UserStatus -{ - Q_GADGET - - Q_PROPERTY(QString id MEMBER _id) - Q_PROPERTY(QString message MEMBER _message) - Q_PROPERTY(QString icon MEMBER _icon) - Q_PROPERTY(OnlineStatus state MEMBER _state) - -public: - enum class OnlineStatus : quint8 { - Online, - DoNotDisturb, - Away, - Offline, - Invisible - }; - Q_ENUM(OnlineStatus); - - UserStatus(); - - UserStatus(const QString &id, const QString &message, const QString &icon, - OnlineStatus state, bool messagePredefined, const Optional &clearAt = {}); - - Q_REQUIRED_RESULT QString id() const; - Q_REQUIRED_RESULT QString message() const; - Q_REQUIRED_RESULT QString icon() const; - Q_REQUIRED_RESULT OnlineStatus state() const; - Q_REQUIRED_RESULT Optional clearAt() const; - - void setId(const QString &id); - void setMessage(const QString &message); - void setState(OnlineStatus state); - void setIcon(const QString &icon); - void setMessagePredefined(bool value); - void setClearAt(const Optional &dateTime); - - Q_REQUIRED_RESULT bool messagePredefined() const; - - Q_REQUIRED_RESULT QUrl stateIcon() const; - -private: - QString _id; - QString _message; - QString _icon; - OnlineStatus _state = OnlineStatus::Online; - bool _messagePredefined; - Optional _clearAt; -}; - -class OWNCLOUDSYNC_EXPORT UserStatusConnector : public QObject -{ - Q_OBJECT - -public: - enum class Error { - CouldNotFetchUserStatus, - CouldNotFetchPredefinedUserStatuses, - UserStatusNotSupported, - EmojisNotSupported, - CouldNotSetUserStatus, - CouldNotClearMessage - }; - Q_ENUM(Error) - - explicit UserStatusConnector(QObject *parent = nullptr); - - ~UserStatusConnector() override; - - virtual void fetchUserStatus() = 0; - - virtual void fetchPredefinedStatuses() = 0; - - virtual void setUserStatus(const UserStatus &userStatus) = 0; - - virtual void clearMessage() = 0; - - virtual UserStatus userStatus() const = 0; - -signals: - void userStatusFetched(const UserStatus &userStatus); - void predefinedStatusesFetched(const std::vector &statuses); - void userStatusSet(); - void messageCleared(); - void error(Error error); -}; -} - -Q_DECLARE_METATYPE(OCC::UserStatusConnector *) -Q_DECLARE_METATYPE(OCC::UserStatus) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/cfapiwrapper.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/cfapiwrapper.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/cfapiwrapper.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/cfapiwrapper.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,7 +17,6 @@ #include "common/utility.h" #include "common/filesystembase.h" #include "hydrationjob.h" -#include "theme.h" #include "vfs_cfapi.h" #include @@ -41,9 +40,6 @@ FIELD_SIZE( CF_OPERATION_PARAMETERS, field ) ) namespace { -constexpr auto syncRootFlagsFull = 34; -constexpr auto syncRootFlagsNoCfApiContextMenu = 2; - void cfApiSendTransferInfo(const CF_CONNECTION_KEY &connectionKey, const CF_TRANSFER_KEY &transferKey, NTSTATUS status, void *buffer, qint64 offset, qint64 currentBlockLength, qint64 totalLength) { @@ -432,10 +428,8 @@ QVariant value; }; - const auto flags = OCC::Theme::instance()->enforceVirtualFilesSyncFolder() ? syncRootFlagsNoCfApiContextMenu : syncRootFlagsFull; - const QVector registryKeysToSet = { - { providerSyncRootIdRegistryKey, QStringLiteral("Flags"), REG_DWORD, flags }, + { providerSyncRootIdRegistryKey, QStringLiteral("Flags"), REG_DWORD, 34 }, { providerSyncRootIdRegistryKey, QStringLiteral("DisplayNameResource"), REG_EXPAND_SZ, displayName }, { providerSyncRootIdRegistryKey, QStringLiteral("IconResource"), REG_EXPAND_SZ, QString(QDir::toNativeSeparators(qApp->applicationFilePath()) + QStringLiteral(",0")) }, { providerSyncRootIdUserSyncRootsRegistryKey, windowsSid, REG_SZ, syncRootPath } @@ -505,7 +499,7 @@ const auto version = std::wstring(providerVersion.toStdWString().data()); CF_SYNC_REGISTRATION info; - info.StructSize = static_cast(sizeof(info) + (name.length() + version.length()) * sizeof(wchar_t)); + info.StructSize = sizeof(info) + (name.length() + version.length()) * sizeof(wchar_t); info.ProviderName = name.data(); info.ProviderVersion = version.data(); info.SyncRootIdentity = nullptr; @@ -592,18 +586,13 @@ return {}; } - QFileInfo pathFileInfo(path); - if (!pathFileInfo.exists()) { - return {}; - } - - if (pathFileInfo.isDir()) { + if (QFileInfo(path).isDir()) { HANDLE handle = nullptr; const qint64 openResult = CfOpenFileWithOplock(path.toStdWString().data(), CF_OPEN_FILE_FLAG_NONE, &handle); if (openResult == S_OK) { return {handle, [](HANDLE h) { CfCloseHandle(h); }}; } - } else if (pathFileInfo.isFile()) { + } else { const auto longpath = OCC::FileSystem::longWinPath(path); const auto handle = CreateFile(longpath.toStdWString().data(), 0, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); @@ -649,10 +638,6 @@ OCC::Result OCC::CfApiWrapper::createPlaceholderInfo(const QString &path, time_t modtime, qint64 size, const QByteArray &fileId) { - if (modtime <= 0) { - return {QString{"Could not update metadata due to invalid modified time for %1: %2"}.arg(path).arg(modtime)}; - } - const auto fileInfo = QFileInfo(path); const auto localBasePath = QDir::toNativeSeparators(fileInfo.path()).toStdWString(); const auto relativePath = fileInfo.fileName().toStdWString(); @@ -701,10 +686,6 @@ { Q_ASSERT(handle); - if (modtime <= 0) { - return {QString{"Could not update metadata due to invalid modified time for %1: %2"}.arg(pathForHandle(handle)).arg(modtime)}; - } - const auto info = replacesPath.isEmpty() ? findPlaceholderInfo(handle) : findPlaceholderInfo(handleForPath(replacesPath)); if (!info) { @@ -721,14 +702,13 @@ OCC::Utility::UnixTimeToLargeIntegerFiletime(modtime, &metadata.BasicInfo.LastWriteTime); OCC::Utility::UnixTimeToLargeIntegerFiletime(modtime, &metadata.BasicInfo.LastAccessTime); OCC::Utility::UnixTimeToLargeIntegerFiletime(modtime, &metadata.BasicInfo.ChangeTime); - metadata.BasicInfo.FileAttributes = 0; const qint64 result = CfUpdatePlaceholder(handle.get(), &metadata, fileIdentity.data(), sizeToDWORD(fileIdentitySize), nullptr, 0, CF_UPDATE_FLAG_MARK_IN_SYNC, nullptr, nullptr); if (result != S_OK) { - qCWarning(lcCfApiWrapper) << "Couldn't update placeholder info for" << pathForHandle(handle) << ":" << QString::fromWCharArray(_com_error(result).ErrorMessage()) << replacesPath; + qCWarning(lcCfApiWrapper) << "Couldn't update placeholder info for" << pathForHandle(handle) << ":" << QString::fromWCharArray(_com_error(result).ErrorMessage()); return { "Couldn't update placeholder info" }; } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,44 +1,35 @@ if (WIN32) add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_WIN10) - add_library(nextcloudsync_vfs_cfapi SHARED + add_library("${synclib_NAME}_vfs_cfapi" SHARED cfapiwrapper.cpp hydrationjob.cpp vfs_cfapi.cpp ) - target_link_libraries(nextcloudsync_vfs_cfapi PRIVATE - Nextcloud::sync + target_link_libraries("${synclib_NAME}_vfs_cfapi" + "${synclib_NAME}" cldapi ) - set_target_properties(nextcloudsync_vfs_cfapi - PROPERTIES - LIBRARY_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - PREFIX - "" - AUTOMOC - TRUE - LIBRARY_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_cfapi - RUNTIME_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_cfapi + set_target_properties("${synclib_NAME}_vfs_cfapi" PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + PREFIX "" + AUTOMOC TRUE ) - target_include_directories("nextcloudsync_vfs_cfapi" BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_BINARY_DIR}) + target_include_directories("${synclib_NAME}_vfs_cfapi" BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_BINARY_DIR}) set(vfs_installdir "${PLUGINDIR}") - generate_export_header(nextcloudsync_vfs_cfapi - BASE_NAME nextcloudsync_vfs_cfapi + GENERATE_EXPORT_HEADER( "${synclib_NAME}_vfs_cfapi" + BASE_NAME "${synclib_NAME}_vfs_cfapi" EXPORT_MACRO_NAME NEXTCLOUD_CFAPI_EXPORT EXPORT_FILE_NAME cfapiexport.h ) - install(TARGETS nextcloudsync_vfs_cfapi + INSTALL(TARGETS "${synclib_NAME}_vfs_cfapi" LIBRARY DESTINATION "${vfs_installdir}" RUNTIME DESTINATION "${vfs_installdir}" ) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/hydrationjob.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/hydrationjob.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/hydrationjob.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/hydrationjob.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,9 +17,6 @@ #include "common/syncjournaldb.h" #include "propagatedownload.h" #include "vfs/cfapi/vfs_cfapi.h" -#include - -#include "filesystem.h" #include #include @@ -91,26 +88,6 @@ _folderPath = folderPath; } -bool OCC::HydrationJob::isEncryptedFile() const -{ - return _isEncryptedFile; -} - -void OCC::HydrationJob::setIsEncryptedFile(bool isEncrypted) -{ - _isEncryptedFile = isEncrypted; -} - -QString OCC::HydrationJob::e2eMangledName() const -{ - return _e2eMangledName; -} - -void OCC::HydrationJob::setE2eMangledName(const QString &e2eMangledName) -{ - _e2eMangledName = e2eMangledName; -} - OCC::HydrationJob::Status OCC::HydrationJob::status() const { return _status; @@ -160,70 +137,6 @@ connect(_transferDataServer, &QLocalServer::newConnection, this, &HydrationJob::onNewConnection); } -void OCC::HydrationJob::slotFolderIdError() -{ - // TODO: the following code is borrowed from PropagateDownloadEncrypted (see HydrationJob::onNewConnection() for explanation of next steps) - qCCritical(lcHydration) << "Failed to get encrypted metadata of folder" << _requestId << _localPath << _folderPath; - emitFinished(Error); -} - -void OCC::HydrationJob::slotCheckFolderId(const QStringList &list) -{ - // TODO: the following code is borrowed from PropagateDownloadEncrypted (see HydrationJob::onNewConnection() for explanation of next steps) - auto job = qobject_cast(sender()); - const QString folderId = list.first(); - qCDebug(lcHydration) << "Received id of folder" << folderId; - - const ExtraFolderInfo &folderInfo = job->_folderInfos.value(folderId); - - // Now that we have the folder-id we need it's JSON metadata - auto metadataJob = new GetMetadataApiJob(_account, folderInfo.fileId); - connect(metadataJob, &GetMetadataApiJob::jsonReceived, - this, &HydrationJob::slotCheckFolderEncryptedMetadata); - connect(metadataJob, &GetMetadataApiJob::error, - this, &HydrationJob::slotFolderEncryptedMetadataError); - - metadataJob->start(); -} - -void OCC::HydrationJob::slotFolderEncryptedMetadataError(const QByteArray & /*fileId*/, int /*httpReturnCode*/) -{ - // TODO: the following code is borrowed from PropagateDownloadEncrypted (see HydrationJob::onNewConnection() for explanation of next steps) - qCCritical(lcHydration) << "Failed to find encrypted metadata information of remote file" << e2eMangledName(); - emitFinished(Error); - return; -} - -void OCC::HydrationJob::slotCheckFolderEncryptedMetadata(const QJsonDocument &json) -{ - // TODO: the following code is borrowed from PropagateDownloadEncrypted (see HydrationJob::onNewConnection() for explanation of next steps) - qCDebug(lcHydration) << "Metadata Received reading" << e2eMangledName(); - const QString filename = e2eMangledName(); - auto meta = new FolderMetadata(_account, json.toJson(QJsonDocument::Compact)); - const QVector files = meta->files(); - - EncryptedFile encryptedInfo = {}; - - const QString encryptedFileExactName = e2eMangledName().section(QLatin1Char('/'), -1); - for (const EncryptedFile &file : files) { - if (encryptedFileExactName == file.encryptedFilename) { - EncryptedFile encryptedInfo = file; - encryptedInfo = file; - - qCDebug(lcHydration) << "Found matching encrypted metadata for file, starting download" << _requestId << _folderPath; - _transferDataSocket = _transferDataServer->nextPendingConnection(); - _job = new GETEncryptedFileJob(_account, _remotePath + e2eMangledName(), _transferDataSocket, {}, {}, 0, encryptedInfo, this); - - connect(qobject_cast(_job), &GETEncryptedFileJob::finishedSignal, this, &HydrationJob::onGetFinished); - _job->start(); - return; - } - } - - qCCritical(lcHydration) << "Failed to find encrypted metadata information of a remote file" << filename; - emitFinished(Error); -} - void OCC::HydrationJob::cancel() { Q_ASSERT(_signalSocket); @@ -271,11 +184,11 @@ Q_ASSERT(!_transferDataSocket); Q_ASSERT(!_job); - if (isEncryptedFile()) { - handleNewConnectionForEncryptedFile(); - } else { - handleNewConnection(); - } + qCInfo(lcHydration) << "Got new connection starting GETFileJob" << _requestId << _folderPath; + _transferDataSocket = _transferDataServer->nextPendingConnection(); + _job = new GETFileJob(_account, _remotePath + _folderPath, _transferDataSocket, {}, {}, 0, this); + connect(_job, &GETFileJob::finishedSignal, this, &HydrationJob::onGetFinished); + _job->start(); } void OCC::HydrationJob::finalize(OCC::VfsCfApi *vfs) @@ -301,9 +214,6 @@ } record._type = ItemTypeFile; - // store the actual size of a file that has been decrypted as we will need its actual size when dehydrating it if requested - record._fileSize = FileSystem::getSize(localPath() + folderPath()); - _journal->setFileRecord(record); } @@ -324,38 +234,3 @@ } emitFinished(Success); } - -void OCC::HydrationJob::handleNewConnection() -{ - qCInfo(lcHydration) << "Got new connection starting GETFileJob" << _requestId << _folderPath; - _transferDataSocket = _transferDataServer->nextPendingConnection(); - _job = new GETFileJob(_account, _remotePath + _folderPath, _transferDataSocket, {}, {}, 0, this); - connect(_job, &GETFileJob::finishedSignal, this, &HydrationJob::onGetFinished); - _job->start(); -} - -void OCC::HydrationJob::handleNewConnectionForEncryptedFile() -{ - // TODO: the following code is borrowed from PropagateDownloadEncrypted (should we factor it out and reuse? YES! Should we do it now? Probably not, as, this would imply modifying PropagateDownloadEncrypted, so we need a separate PR) - qCInfo(lcHydration) << "Got new connection for encrypted file. Getting required info for decryption..."; - const auto rootPath = [=]() { - const auto result = _remotePath; - if (result.startsWith('/')) { - return result.mid(1); - } else { - return result; - } - }(); - - const auto remoteFilename = e2eMangledName(); - const auto remotePath = QString(rootPath + remoteFilename); - const auto remoteParentPath = remotePath.left(remotePath.lastIndexOf('/')); - - auto job = new LsColJob(_account, remoteParentPath, this); - job->setProperties({ "resourcetype", "http://owncloud.org/ns:fileid" }); - connect(job, &LsColJob::directoryListingSubfolders, - this, &HydrationJob::slotCheckFolderId); - connect(job, &LsColJob::finishedWithError, - this, &HydrationJob::slotFolderIdError); - job->start(); -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/hydrationjob.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/hydrationjob.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/hydrationjob.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/hydrationjob.h 2022-01-03 12:25:12.000000000 +0000 @@ -25,10 +25,6 @@ class SyncJournalDb; class VfsCfApi; -namespace EncryptionHelper { - class StreamingDecryptor; -}; - class HydrationJob : public QObject { Q_OBJECT @@ -60,27 +56,12 @@ QString folderPath() const; void setFolderPath(const QString &folderPath); - bool isEncryptedFile() const; - void setIsEncryptedFile(bool isEncrypted); - - QString e2eMangledName() const; - void setE2eMangledName(const QString &e2eMangledName); - - qint64 fileTotalSize() const; - void setFileTotalSize(qint64 totalSize); - Status status() const; void start(); void cancel(); void finalize(OCC::VfsCfApi *vfs); -public slots: - void slotCheckFolderId(const QStringList &list); - void slotFolderIdError(); - void slotCheckFolderEncryptedMetadata(const QJsonDocument &json); - void slotFolderEncryptedMetadataError(const QByteArray &fileId, int httpReturnCode); - signals: void finished(HydrationJob *job); @@ -91,11 +72,6 @@ void onCancellationServerNewConnection(); void onGetFinished(); - void handleNewConnection(); - void handleNewConnectionForEncryptedFile(); - - void startServerAndWaitForConnections(); - AccountPtr _account; QString _remotePath; QString _localPath; @@ -105,9 +81,6 @@ QString _requestId; QString _folderPath; - bool _isEncryptedFile = false; - QString _e2eMangledName; - QLocalServer *_transferDataServer = nullptr; QLocalServer *_signalServer = nullptr; QLocalSocket *_transferDataSocket = nullptr; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/vfs_cfapi.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/vfs_cfapi.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/vfs_cfapi.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/vfs_cfapi.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -16,6 +16,7 @@ #include #include +#include #include "cfapiwrapper.h" #include "hydrationjob.h" @@ -160,9 +161,6 @@ const auto replacesPath = QDir::toNativeSeparators(replacesFile); const auto handle = cfapi::handleForPath(localPath); - if (!handle) { - return { "Invalid handle for path " + localPath }; - } if (cfapi::findPlaceholderInfo(handle)) { return cfapi::updatePlaceholderInfo(handle, item._modtime, item._size, item._fileId, replacesPath); } else { @@ -325,8 +323,28 @@ return; } + // This is impossible to handle with CfAPI since the file size is generally different + // between the encrypted and the decrypted file which would make CfAPI reject the hydration + // of the placeholder with decrypted data + if (record._isE2eEncrypted || !record._e2eMangledName.isEmpty()) { + qCInfo(lcCfApi) << "Couldn't hydrate, the file is E2EE this is not supported"; + + QMessageBox e2eeFileDownloadRequestWarningMsgBox; + e2eeFileDownloadRequestWarningMsgBox.setText(tr("Download of end-to-end encrypted file failed")); + e2eeFileDownloadRequestWarningMsgBox.setInformativeText(tr("It seems that you are trying to download a virtual file that" + " is end-to-end encrypted. Implicitly downloading such files is not" + " supported at the moment. To workaround this issue, go to the" + " settings and mark the encrypted folder with \"Make always available" + " locally\".")); + e2eeFileDownloadRequestWarningMsgBox.setIcon(QMessageBox::Warning); + e2eeFileDownloadRequestWarningMsgBox.exec(); + + emit hydrationRequestFailed(requestId); + return; + } + // All good, let's hydrate now - scheduleHydrationJob(requestId, relativePath, record); + scheduleHydrationJob(requestId, relativePath); } void VfsCfApi::fileStatusChanged(const QString &systemFileName, SyncFileStatus fileStatus) @@ -335,7 +353,7 @@ Q_UNUSED(fileStatus); } -void VfsCfApi::scheduleHydrationJob(const QString &requestId, const QString &folderPath, const SyncJournalFileRecord &record) +void VfsCfApi::scheduleHydrationJob(const QString &requestId, const QString &folderPath) { const auto jobAlreadyScheduled = std::any_of(std::cbegin(d->hydrationJobs), std::cend(d->hydrationJobs), [=](HydrationJob *job) { return job->requestId() == requestId || job->folderPath() == folderPath; @@ -358,8 +376,6 @@ job->setJournal(params().journal); job->setRequestId(requestId); job->setFolderPath(folderPath); - job->setIsEncryptedFile(record._isE2eEncrypted); - job->setE2eMangledName(record._e2eMangledName); connect(job, &HydrationJob::finished, this, &VfsCfApi::onHydrationJobFinished); d->hydrationJobs << job; job->start(); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/vfs_cfapi.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/vfs_cfapi.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/cfapi/vfs_cfapi.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/cfapi/vfs_cfapi.h 2022-01-03 12:25:12.000000000 +0000 @@ -22,7 +22,6 @@ namespace OCC { class HydrationJob; class VfsCfApiPrivate; -class SyncJournalFileRecord; class VfsCfApi : public Vfs { @@ -72,7 +71,7 @@ void startImpl(const VfsSetupParams ¶ms) override; private: - void scheduleHydrationJob(const QString &requestId, const QString &folderPath, const SyncJournalFileRecord &record); + void scheduleHydrationJob(const QString &requestId, const QString &folderPath); void onHydrationJobFinished(HydrationJob *job); HydrationJob *findHydrationJob(const QString &requestId) const; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -1,29 +1,22 @@ -add_library(nextcloudsync_vfs_suffix SHARED +add_library("${synclib_NAME}_vfs_suffix" SHARED vfs_suffix.cpp ) -target_link_libraries(nextcloudsync_vfs_suffix PRIVATE Nextcloud::sync) +target_link_libraries("${synclib_NAME}_vfs_suffix" + "${synclib_NAME}" +) -set_target_properties(nextcloudsync_vfs_suffix - PROPERTIES - LIBRARY_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - PREFIX - "" - AUTOMOC - TRUE - LIBRARY_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_suffix - RUNTIME_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_suffix +set_target_properties("${synclib_NAME}_vfs_suffix" PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + PREFIX "" + AUTOMOC TRUE ) if(APPLE) # for being loadable when client run from build dir set(vfs_buildoutputdir "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/") - set_target_properties(nextcloudsync_vfs_suffix + set_target_properties("${synclib_NAME}_vfs_suffix" PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${vfs_buildoutputdir} RUNTIME_OUTPUT_DIRECTORY ${vfs_buildoutputdir} @@ -34,7 +27,7 @@ set(vfs_installdir "${PLUGINDIR}") endif() -install(TARGETS nextcloudsync_vfs_suffix +INSTALL(TARGETS "${synclib_NAME}_vfs_suffix" LIBRARY DESTINATION "${vfs_installdir}" RUNTIME DESTINATION "${vfs_installdir}" ) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/vfs_suffix.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/vfs_suffix.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/vfs_suffix.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/vfs_suffix.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -68,20 +68,12 @@ Result VfsSuffix::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &) { - if (modtime <= 0) { - return {tr("Error updating metadata due to invalid modified time")}; - } - FileSystem::setModTime(filePath, modtime); return {}; } Result VfsSuffix::createPlaceholder(const SyncFileItem &item) { - if (item._modtime <= 0) { - return {tr("Error updating metadata due to invalid modified time")}; - } - // The concrete shape of the placeholder is also used in isDehydratedPlaceholder() below QString fn = _setupParams.filesystemPath + item._file; if (!fn.endsWith(fileSuffix())) { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/vfs_suffix.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/vfs_suffix.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/suffix/vfs_suffix.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/suffix/vfs_suffix.h 2022-01-03 12:25:12.000000000 +0000 @@ -27,7 +27,7 @@ public: explicit VfsSuffix(QObject *parent = nullptr); - ~VfsSuffix() override; + ~VfsSuffix(); Mode mode() const override; QString fileSuffix() const override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -4,34 +4,27 @@ xattrwrapper_linux.cpp ) - add_library(nextcloudsync_vfs_xattr SHARED + add_library("${synclib_NAME}_vfs_xattr" SHARED ${vfs_xattr_SRCS} ) - target_link_libraries(nextcloudsync_vfs_xattr PRIVATE Nextcloud::sync) + target_link_libraries("${synclib_NAME}_vfs_xattr" + "${synclib_NAME}" + ) - set_target_properties(nextcloudsync_vfs_xattr - PROPERTIES - LIBRARY_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY - ${BIN_OUTPUT_DIRECTORY} - PREFIX - "" - AUTOMOC - TRUE - LIBRARY_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_xattr - RUNTIME_OUTPUT_NAME - ${APPLICATION_EXECUTABLE}sync_vfs_xattr + set_target_properties("${synclib_NAME}_vfs_xattr" PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} + PREFIX "" + AUTOMOC TRUE ) - target_include_directories(nextcloudsync_vfs_xattr BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) + target_include_directories("${synclib_NAME}_vfs_xattr" BEFORE PUBLIC ${CMAKE_CURRENT_BINARY_DIR} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) if(APPLE) # for being loadable when client run from build dir set(vfs_buildoutputdir "${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/PlugIns/") - set_target_properties(nextcloudsync_vfs_xattr + set_target_properties("${synclib_NAME}_vfs_xattr" PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${vfs_buildoutputdir} RUNTIME_OUTPUT_DIRECTORY ${vfs_buildoutputdir} @@ -42,13 +35,13 @@ set(vfs_installdir "${PLUGINDIR}") endif() - generate_export_header(nextcloudsync_vfs_xattr - BASE_NAME nextcloudsync_vfs_xattr + GENERATE_EXPORT_HEADER( "${synclib_NAME}_vfs_xattr" + BASE_NAME "${synclib_NAME}_vfs_xattr" EXPORT_MACRO_NAME NEXTCLOUD_XATTR_EXPORT EXPORT_FILE_NAME xattrexport.h ) - install(TARGETS nextcloudsync_vfs_xattr + INSTALL(TARGETS "${synclib_NAME}_vfs_xattr" LIBRARY DESTINATION "${vfs_installdir}" RUNTIME DESTINATION "${vfs_installdir}" ) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/vfs_xattr.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/vfs_xattr.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/vfs_xattr.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/vfs_xattr.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -69,20 +69,12 @@ Result VfsXAttr::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &) { - if (modtime <= 0) { - return {tr("Error updating metadata due to invalid modified time")}; - } - FileSystem::setModTime(filePath, modtime); return {}; } Result VfsXAttr::createPlaceholder(const SyncFileItem &item) { - if (item._modtime <= 0) { - return {tr("Error updating metadata due to invalid modified time")}; - } - const auto path = QString(_setupParams.filesystemPath + item._file); QFile file(path); if (file.exists() && file.size() > 1 diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/vfs_xattr.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/vfs_xattr.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/src/libsync/vfs/xattr/vfs_xattr.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/src/libsync/vfs/xattr/vfs_xattr.h 2022-01-03 12:25:12.000000000 +0000 @@ -27,7 +27,7 @@ public: explicit VfsXAttr(QObject *parent = nullptr); - ~VfsXAttr() override; + ~VfsXAttr(); Mode mode() const override; QString fileSuffix() const override; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/sync-exclude.lst nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/sync-exclude.lst --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/sync-exclude.lst 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/sync-exclude.lst 2022-01-03 12:25:12.000000000 +0000 @@ -22,7 +22,6 @@ ].Trash-* .fseventd .apdisk -.Spotlight-V100 .directory diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -9,10 +9,9 @@ syncenginetestutils.cpp pushnotificationstestutils.cpp themeutils.cpp - testhelper.cpp ) -target_link_libraries(testutils PUBLIC Nextcloud::sync Qt5::Test) +target_link_libraries(testutils PUBLIC ${APPLICATION_EXECUTABLE}sync Qt5::Test) target_include_directories(testutils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) set_target_properties(testutils PROPERTIES FOLDER Tests) @@ -57,10 +56,7 @@ nextcloud_add_test(Capabilities) nextcloud_add_test(PushNotifications) nextcloud_add_test(Theme) -nextcloud_add_test(IconUtils) nextcloud_add_test(NotificationCache) -nextcloud_add_test(SetUserStatusDialog) -nextcloud_add_test(UnifiedSearchListmodel) if( UNIX AND NOT APPLE ) nextcloud_add_test(InotifyWatcher) @@ -71,12 +67,12 @@ ${CMAKE_BINARY_DIR}/src/libsync/vfs/cfapi ) + nextcloud_add_test(LongWinPath) nextcloud_add_test(SyncCfApi) elseif(LINUX) # elseif(LINUX OR APPLE) nextcloud_add_test(SyncXAttr) endif() -nextcloud_add_test(LongPath) nextcloud_add_benchmark(LargeSync) nextcloud_add_test(Account) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/csync/CMakeLists.txt nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/csync/CMakeLists.txt --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/csync/CMakeLists.txt 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/csync/CMakeLists.txt 2022-01-03 12:25:12.000000000 +0000 @@ -14,7 +14,7 @@ add_library(${TORTURE_LIBRARY} STATIC torture.c cmdline.c) target_link_libraries(${TORTURE_LIBRARY} ${CMOCKA_LIBRARIES}) -set(TEST_TARGET_LIBRARIES ${TORTURE_LIBRARY} Qt5::Core Nextcloud::csync) +set(TEST_TARGET_LIBRARIES ${TORTURE_LIBRARY} Qt5::Core "${csync_NAME}") # create tests diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/mockserver/httpserver.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/mockserver/httpserver.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/mockserver/httpserver.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/mockserver/httpserver.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -24,7 +24,7 @@ { QTcpSocket* socket = (QTcpSocket*)sender(); if (socket->canReadLine()) { - QStringList tokens = QString(socket->readLine()).split(QRegularExpression("[ \r\n][ \r\n]*")); + QStringList tokens = QString(socket->readLine()).split(QRegExp("[ \r\n][ \r\n]*")); if (tokens[0] == "GET") { QTextStream os(socket); os.setAutoDetectUnicode(true); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/nextcloud_add_test.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/nextcloud_add_test.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/nextcloud_add_test.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/nextcloud_add_test.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -8,8 +8,8 @@ add_executable(${OWNCLOUD_TEST_CLASS}Test test${OWNCLOUD_TEST_CLASS_LOWERCASE}.cpp) set_target_properties(${OWNCLOUD_TEST_CLASS}Test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY}) - target_link_libraries(${OWNCLOUD_TEST_CLASS}Test PRIVATE - Nextcloud::sync + target_link_libraries(${OWNCLOUD_TEST_CLASS}Test + ${APPLICATION_EXECUTABLE}sync testutils nextcloudCore cmdCore @@ -18,19 +18,19 @@ ) if (WIN32) - target_link_libraries(${OWNCLOUD_TEST_CLASS}Test PRIVATE - nextcloudsync_vfs_cfapi + target_link_libraries(${OWNCLOUD_TEST_CLASS}Test + "${synclib_NAME}_vfs_cfapi" ) endif() - if (LINUX) - target_link_libraries(${OWNCLOUD_TEST_CLASS}Test PRIVATE - nextcloudsync_vfs_xattr + if (UNIX) + target_link_libraries(${OWNCLOUD_TEST_CLASS}Test + "${synclib_NAME}_vfs_xattr" ) endif() IF(BUILD_UPDATER) - target_link_libraries(${OWNCLOUD_TEST_CLASS}Test PRIVATE + target_link_libraries(${OWNCLOUD_TEST_CLASS}Test updater ) endif() @@ -58,7 +58,7 @@ set_target_properties(${OWNCLOUD_TEST_CLASS}Bench PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY}) target_link_libraries(${OWNCLOUD_TEST_CLASS}Bench - Nextcloud::sync + ${APPLICATION_EXECUTABLE}sync testutils nextcloudCore cmdCore diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/pushnotificationstestutils.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/pushnotificationstestutils.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/pushnotificationstestutils.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/pushnotificationstestutils.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -1,7 +1,6 @@ #include #include #include -#include #include #include "pushnotificationstestutils.h" @@ -117,15 +116,15 @@ return _processTextMessageSpy->count(); } -QString FakeWebSocketServer::textMessage(int messageNumber) const +QString FakeWebSocketServer::textMessage(uint32_t messageNumber) const { - Q_ASSERT(0 <= messageNumber && messageNumber < _processTextMessageSpy->count()); + Q_ASSERT(messageNumber < _processTextMessageSpy->count()); return _processTextMessageSpy->at(messageNumber).at(1).toString(); } -QWebSocket *FakeWebSocketServer::socketForTextMessage(int messageNumber) const +QWebSocket *FakeWebSocketServer::socketForTextMessage(uint32_t messageNumber) const { - Q_ASSERT(0 <= messageNumber && messageNumber < _processTextMessageSpy->count()); + Q_ASSERT(messageNumber < _processTextMessageSpy->count()); return _processTextMessageSpy->at(messageNumber).at(0).value(); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/pushnotificationstestutils.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/pushnotificationstestutils.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/pushnotificationstestutils.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/pushnotificationstestutils.h 2022-01-03 12:25:12.000000000 +0000 @@ -29,7 +29,7 @@ public: explicit FakeWebSocketServer(quint16 port = 12345, QObject *parent = nullptr); - ~FakeWebSocketServer() override; + ~FakeWebSocketServer(); QWebSocket *authenticateAccount( const OCC::AccountPtr account, std::function beforeAuthentication = [](OCC::PushNotifications *) {}, std::function afterAuthentication = [] {}); @@ -40,9 +40,9 @@ uint32_t textMessagesCount() const; - QString textMessage(int messageNumber) const; + QString textMessage(uint32_t messageNumber) const; - QWebSocket *socketForTextMessage(int messageNumber) const; + QWebSocket *socketForTextMessage(uint32_t messageNumber) const; void clearTextMessages(); @@ -70,18 +70,18 @@ public: CredentialsStub(const QString &user, const QString &password); - QString authType() const override; - QString user() const override; - QString password() const override; - QNetworkAccessManager *createQNAM() const override; - bool ready() const override; - void fetchFromKeychain() override; - void askFromUser() override; - - bool stillValid(QNetworkReply *reply) override; - void persist() override; - void invalidateToken() override; - void forgetSensitiveData() override; + virtual QString authType() const; + virtual QString user() const; + virtual QString password() const; + virtual QNetworkAccessManager *createQNAM() const; + virtual bool ready() const; + virtual void fetchFromKeychain(); + virtual void askFromUser(); + + virtual bool stillValid(QNetworkReply *reply); + virtual void persist(); + virtual void invalidateToken(); + virtual void forgetSensitiveData(); private: QString _user; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/syncenginetestutils.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/syncenginetestutils.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/syncenginetestutils.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/syncenginetestutils.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -9,10 +9,6 @@ #include "httplogger.h" #include "accessmanager.h" -#include -#include -#include -#include #include @@ -24,7 +20,7 @@ } PathComponents::PathComponents(const QString &path) - : QStringList { path.split(QLatin1Char('/'), Qt::SkipEmptyParts) } + : QStringList { path.split(QLatin1Char('/'), QString::SkipEmptyParts) } { } @@ -247,15 +243,6 @@ return (parentPath.isEmpty() ? QString() : (parentPath + QLatin1Char('/'))) + name; } -QString FileInfo::absolutePath() const -{ - if (parentPath.endsWith(QLatin1Char('/'))) { - return parentPath + name; - } else { - return parentPath + QLatin1Char('/') + name; - } -} - void FileInfo::fixupParentPathRecursively() { auto p = path(); @@ -286,7 +273,7 @@ QMetaObject::invokeMethod(this, "respond404", Qt::QueuedConnection); return; } - const QString prefix = request.url().path().left(request.url().path().size() - fileName.size()); + QString prefix = request.url().path().left(request.url().path().size() - fileName.size()); // Don't care about the request and just return a full propfind const QString davUri { QStringLiteral("DAV:") }; @@ -301,12 +288,11 @@ auto writeFileResponse = [&](const FileInfo &fileInfo) { xml.writeStartElement(davUri, QStringLiteral("response")); - auto url = QString::fromUtf8(QUrl::toPercentEncoding(fileInfo.absolutePath(), "/")); + QString url = prefix + QString::fromUtf8(QUrl::toPercentEncoding(fileInfo.path(), "/")); if (!url.endsWith(QChar('/'))) { url.append(QChar('/')); } - const auto href = OCC::Utility::concatUrlPath(prefix, url).path(); - xml.writeTextElement(davUri, QStringLiteral("href"), href); + xml.writeTextElement(davUri, QStringLiteral("href"), url); xml.writeStartElement(davUri, QStringLiteral("propstat")); xml.writeStartElement(davUri, QStringLiteral("prop")); @@ -420,109 +406,6 @@ emit finished(); } -FakePutMultiFileReply::FakePutMultiFileReply(FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QString &contentType, const QByteArray &putPayload, QObject *parent) - : FakeReply { parent } -{ - setRequest(request); - setUrl(request.url()); - setOperation(op); - open(QIODevice::ReadOnly); - _allFileInfo = performMultiPart(remoteRootFileInfo, request, putPayload, contentType); - QMetaObject::invokeMethod(this, "respond", Qt::QueuedConnection); -} - -QVector FakePutMultiFileReply::performMultiPart(FileInfo &remoteRootFileInfo, const QNetworkRequest &request, const QByteArray &putPayload, const QString &contentType) -{ - QVector result; - - auto stringPutPayload = QString::fromUtf8(putPayload); - constexpr int boundaryPosition = sizeof("multipart/related; boundary="); - const QString boundaryValue = QStringLiteral("--") + contentType.mid(boundaryPosition, contentType.length() - boundaryPosition - 1) + QStringLiteral("\r\n"); - auto stringPutPayloadRef = QString{stringPutPayload}.left(stringPutPayload.size() - 2 - boundaryValue.size()); - auto allParts = stringPutPayloadRef.split(boundaryValue, Qt::SkipEmptyParts); - for (const auto &onePart : allParts) { - auto headerEndPosition = onePart.indexOf(QStringLiteral("\r\n\r\n")); - auto onePartHeaderPart = onePart.left(headerEndPosition); - auto onePartBody = onePart.mid(headerEndPosition + 4, onePart.size() - headerEndPosition - 6); - auto onePartHeaders = onePartHeaderPart.split(QStringLiteral("\r\n")); - QMap allHeaders; - for(auto oneHeader : onePartHeaders) { - auto headerParts = oneHeader.split(QStringLiteral(": ")); - allHeaders[headerParts.at(0)] = headerParts.at(1); - } - auto fileName = allHeaders[QStringLiteral("X-File-Path")]; - Q_ASSERT(!fileName.isEmpty()); - FileInfo *fileInfo = remoteRootFileInfo.find(fileName); - if (fileInfo) { - fileInfo->size = onePartBody.size(); - fileInfo->contentChar = onePartBody.at(0).toLatin1(); - } else { - // Assume that the file is filled with the same character - fileInfo = remoteRootFileInfo.create(fileName, onePartBody.size(), onePartBody.at(0).toLatin1()); - } - fileInfo->lastModified = OCC::Utility::qDateTimeFromTime_t(request.rawHeader("X-OC-Mtime").toLongLong()); - remoteRootFileInfo.find(fileName, /*invalidateEtags=*/true); - result.push_back(fileInfo); - } - return result; -} - -void FakePutMultiFileReply::respond() -{ - QJsonDocument reply; - QJsonObject allFileInfoReply; - - qint64 totalSize = 0; - std::for_each(_allFileInfo.begin(), _allFileInfo.end(), [&totalSize](const auto &fileInfo) { - totalSize += fileInfo->size; - }); - - for(auto fileInfo : qAsConst(_allFileInfo)) { - QJsonObject fileInfoReply; - fileInfoReply.insert("error", QStringLiteral("false")); - fileInfoReply.insert("OC-OperationStatus", fileInfo->operationStatus); - fileInfoReply.insert("X-File-Path", fileInfo->path()); - fileInfoReply.insert("OC-ETag", QLatin1String{fileInfo->etag}); - fileInfoReply.insert("ETag", QLatin1String{fileInfo->etag}); - fileInfoReply.insert("etag", QLatin1String{fileInfo->etag}); - fileInfoReply.insert("OC-FileID", QLatin1String{fileInfo->fileId}); - fileInfoReply.insert("X-OC-MTime", "accepted"); // Prevents Q_ASSERT(!_runningNow) since we'll call PropagateItemJob::done twice in that case. - emit uploadProgress(fileInfo->size, totalSize); - allFileInfoReply.insert(QChar('/') + fileInfo->path(), fileInfoReply); - } - reply.setObject(allFileInfoReply); - _payload = reply.toJson(); - - setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200); - - setFinished(true); - if (bytesAvailable()) { - emit readyRead(); - } - - emit metaDataChanged(); - emit finished(); -} - -void FakePutMultiFileReply::abort() -{ - setError(OperationCanceledError, QStringLiteral("abort")); - emit finished(); -} - -qint64 FakePutMultiFileReply::bytesAvailable() const -{ - return _payload.size() + QIODevice::bytesAvailable(); -} - -qint64 FakePutMultiFileReply::readData(char *data, qint64 maxlen) -{ - qint64 len = std::min(qint64 { _payload.size() }, maxlen); - std::copy(_payload.cbegin(), _payload.cbegin() + len, data); - _payload.remove(0, static_cast(len)); - return len; -} - FakeMkcolReply::FakeMkcolReply(FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent) : FakeReply { parent } { @@ -605,11 +488,9 @@ QString fileName = getFilePathFromUrl(request.url()); Q_ASSERT(!fileName.isEmpty()); fileInfo = remoteRootFileInfo.find(fileName); - if (!fileInfo) { - qDebug() << "meh;"; - } - Q_ASSERT_X(fileInfo, Q_FUNC_INFO, "Could not find file on the remote"); - QMetaObject::invokeMethod(this, &FakeGetReply::respond, Qt::QueuedConnection); + if (!fileInfo) + qWarning() << "Could not find file" << fileName << "on the remote"; + QMetaObject::invokeMethod(this, "respond", Qt::QueuedConnection); } void FakeGetReply::respond() @@ -816,20 +697,14 @@ } FakePayloadReply::FakePayloadReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QByteArray &body, QObject *parent) - : FakePayloadReply(op, request, body, FakePayloadReply::defaultDelay, parent) -{ -} - -FakePayloadReply::FakePayloadReply( - QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QByteArray &body, int delay, QObject *parent) - : FakeReply{parent} + : FakeReply { parent } , _body(body) { setRequest(request); setUrl(request.url()); setOperation(op); open(QIODevice::ReadOnly); - QTimer::singleShot(delay, this, &FakePayloadReply::respond); + QTimer::singleShot(10, this, &FakePayloadReply::respond); } void FakePayloadReply::respond() @@ -865,7 +740,7 @@ open(QIODevice::ReadOnly); setAttribute(QNetworkRequest::HttpStatusCodeAttribute, httpErrorCode); setError(InternalServerError, QStringLiteral("Internal Server Fake Error")); - QMetaObject::invokeMethod(this, &FakeErrorReply::respond, Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "respond", Qt::QueuedConnection); } void FakeErrorReply::respond() @@ -909,7 +784,7 @@ // Follow more or less the implementation of QNetworkReplyImpl::abort close(); setError(OperationCanceledError, tr("Operation canceled")); - emit errorOccurred(OperationCanceledError); + emit error(OperationCanceledError); setFinished(true); emit finished(); } @@ -920,94 +795,44 @@ setCookieJar(new OCC::CookieJar); } -QJsonObject FakeQNAM::forEachReplyPart(QIODevice *outgoingData, - const QString &contentType, - std::function &)> replyFunction) -{ - auto fullReply = QJsonObject{}; - auto putPayload = outgoingData->peek(outgoingData->bytesAvailable()); - outgoingData->reset(); - auto stringPutPayload = QString::fromUtf8(putPayload); - constexpr int boundaryPosition = sizeof("multipart/related; boundary="); - const QString boundaryValue = QStringLiteral("--") + contentType.mid(boundaryPosition, contentType.length() - boundaryPosition - 1) + QStringLiteral("\r\n"); - auto stringPutPayloadRef = QString{stringPutPayload}.left(stringPutPayload.size() - 2 - boundaryValue.size()); - auto allParts = stringPutPayloadRef.split(boundaryValue, Qt::SkipEmptyParts); - for (const auto &onePart : qAsConst(allParts)) { - auto headerEndPosition = onePart.indexOf(QStringLiteral("\r\n\r\n")); - auto onePartHeaderPart = onePart.left(headerEndPosition); - auto onePartHeaders = onePartHeaderPart.split(QStringLiteral("\r\n")); - QMap allHeaders; - for(const auto &oneHeader : qAsConst(onePartHeaders)) { - auto headerParts = oneHeader.split(QStringLiteral(": ")); - allHeaders[headerParts.at(0)] = headerParts.at(1).toLatin1(); - } - - auto reply = replyFunction(allHeaders); - if (reply.contains(QStringLiteral("error")) && - reply.contains(QStringLiteral("etag"))) { - fullReply.insert(allHeaders[QStringLiteral("X-File-Path")], reply); - } - } - - return fullReply; -} - QNetworkReply *FakeQNAM::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) { - QNetworkReply *reply = nullptr; - auto newRequest = request; - newRequest.setRawHeader("X-Request-ID", OCC::AccessManager::generateRequestId()); - auto contentType = request.header(QNetworkRequest::ContentTypeHeader).toString(); if (_override) { - if (auto _reply = _override(op, newRequest, outgoingData)) { - reply = _reply; - } - } - if (!reply) { - reply = overrideReplyWithError(getFilePathFromUrl(newRequest.url()), op, newRequest); + if (auto reply = _override(op, request, outgoingData)) + return reply; } - if (!reply) { - const bool isUpload = newRequest.url().path().startsWith(sUploadUrl.path()); - FileInfo &info = isUpload ? _uploadFileInfo : _remoteRootFileInfo; - - auto verb = newRequest.attribute(QNetworkRequest::CustomVerbAttribute); - if (verb == QLatin1String("PROPFIND")) { - // Ignore outgoingData always returning somethign good enough, works for now. - reply = new FakePropfindReply { info, op, newRequest, this }; - } else if (verb == QLatin1String("GET") || op == QNetworkAccessManager::GetOperation) { - reply = new FakeGetReply { info, op, newRequest, this }; - } else if (verb == QLatin1String("PUT") || op == QNetworkAccessManager::PutOperation) { - reply = new FakePutReply { info, op, newRequest, outgoingData->readAll(), this }; - } else if (verb == QLatin1String("MKCOL")) { - reply = new FakeMkcolReply { info, op, newRequest, this }; - } else if (verb == QLatin1String("DELETE") || op == QNetworkAccessManager::DeleteOperation) { - reply = new FakeDeleteReply { info, op, newRequest, this }; - } else if (verb == QLatin1String("MOVE") && !isUpload) { - reply = new FakeMoveReply { info, op, newRequest, this }; - } else if (verb == QLatin1String("MOVE") && isUpload) { - reply = new FakeChunkMoveReply { info, _remoteRootFileInfo, op, newRequest, this }; - } else if (verb == QLatin1String("POST") || op == QNetworkAccessManager::PostOperation) { - if (contentType.startsWith(QStringLiteral("multipart/related; boundary="))) { - reply = new FakePutMultiFileReply { info, op, newRequest, contentType, outgoingData->readAll(), this }; - } - } else { - qDebug() << verb << outgoingData; - Q_UNREACHABLE(); - } - } - OCC::HttpLogger::logRequest(reply, op, outgoingData); - return reply; -} + const QString fileName = getFilePathFromUrl(request.url()); + Q_ASSERT(!fileName.isNull()); + if (_errorPaths.contains(fileName)) + return new FakeErrorReply { op, request, this, _errorPaths[fileName] }; -QNetworkReply * FakeQNAM::overrideReplyWithError(QString fileName, QNetworkAccessManager::Operation op, QNetworkRequest newRequest) -{ - QNetworkReply *reply = nullptr; + bool isUpload = request.url().path().startsWith(sUploadUrl.path()); + FileInfo &info = isUpload ? _uploadFileInfo : _remoteRootFileInfo; - Q_ASSERT(!fileName.isNull()); - if (_errorPaths.contains(fileName)) { - reply = new FakeErrorReply { op, newRequest, this, _errorPaths[fileName] }; + auto newRequest = request; + newRequest.setRawHeader("X-Request-ID", OCC::AccessManager::generateRequestId()); + auto verb = request.attribute(QNetworkRequest::CustomVerbAttribute); + FakeReply *reply = nullptr; + if (verb == QLatin1String("PROPFIND")) + // Ignore outgoingData always returning somethign good enough, works for now. + reply = new FakePropfindReply { info, op, newRequest, this }; + else if (verb == QLatin1String("GET") || op == QNetworkAccessManager::GetOperation) + reply = new FakeGetReply { info, op, newRequest, this }; + else if (verb == QLatin1String("PUT") || op == QNetworkAccessManager::PutOperation) + reply = new FakePutReply { info, op, newRequest, outgoingData->readAll(), this }; + else if (verb == QLatin1String("MKCOL")) + reply = new FakeMkcolReply { info, op, newRequest, this }; + else if (verb == QLatin1String("DELETE") || op == QNetworkAccessManager::DeleteOperation) + reply = new FakeDeleteReply { info, op, newRequest, this }; + else if (verb == QLatin1String("MOVE") && !isUpload) + reply = new FakeMoveReply { info, op, newRequest, this }; + else if (verb == QLatin1String("MOVE") && isUpload) + reply = new FakeChunkMoveReply { info, _remoteRootFileInfo, op, newRequest, this }; + else { + qDebug() << verb << outgoingData; + Q_UNREACHABLE(); } - + OCC::HttpLogger::logRequest(reply, op, outgoingData); return reply; } @@ -1017,7 +842,6 @@ // Needs to be done once OCC::SyncEngine::minimumFileAgeForUpload = std::chrono::milliseconds(0); OCC::Logger::instance()->setLogFile(QStringLiteral("-")); - OCC::Logger::instance()->addLogRule({ QStringLiteral("sync.httplogger=true") }); QDir rootDir { _tempDir.path() }; qDebug() << "FakeFolder operating on" << rootDir; @@ -1212,19 +1036,6 @@ return OCC::SyncFileItemPtr::create(); } -OCC::SyncFileItemPtr ItemCompletedSpy::findItemWithExpectedRank(const QString &path, int rank) const -{ - Q_ASSERT(size() > rank); - Q_ASSERT(!(*this)[rank].isEmpty()); - - auto item = (*this)[rank][0].value(); - if (item->destination() == path) { - return item; - } else { - return OCC::SyncFileItemPtr::create(); - } -} - FakeReply::FakeReply(QObject *parent) : QNetworkReply(parent) { @@ -1232,12 +1043,3 @@ } FakeReply::~FakeReply() = default; - -FakeJsonErrorReply::FakeJsonErrorReply(QNetworkAccessManager::Operation op, - const QNetworkRequest &request, - QObject *parent, - int httpErrorCode, - const QJsonDocument &reply) - : FakeErrorReply{ op, request, parent, httpErrorCode, reply.toJson() } -{ -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/syncenginetestutils.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/syncenginetestutils.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/syncenginetestutils.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/syncenginetestutils.h 2022-01-03 12:25:12.000000000 +0000 @@ -28,8 +28,6 @@ #include #include -class QJsonDocument; - /* * TODO: In theory we should use QVERIFY instead of Q_ASSERT for testing, but this * only works when directly called from a QTest :-( @@ -54,10 +52,10 @@ inline QByteArray generateEtag() { - return QByteArray::number(QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(), 16) + QByteArray::number(OCC::Utility::rand(), 16); + return QByteArray::number(QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(), 16) + QByteArray::number(qrand(), 16); } inline QByteArray generateFileId() { - return QByteArray::number(OCC::Utility::rand(), 16); + return QByteArray::number(qrand(), 16); } class PathComponents : public QStringList { @@ -145,12 +143,10 @@ } QString path() const; - QString absolutePath() const; void fixupParentPathRecursively(); QString name; - int operationStatus = 200; bool isDir = true; bool isShared = false; OCC::RemotePermissions permissions; // When uset, defaults to everything @@ -178,7 +174,7 @@ Q_OBJECT public: FakeReply(QObject *parent); - ~FakeReply() override; + virtual ~FakeReply(); // useful to be public for testing using QNetworkReply::setRawHeader; @@ -217,27 +213,6 @@ qint64 readData(char *, qint64) override { return 0; } }; -class FakePutMultiFileReply : public FakeReply -{ - Q_OBJECT -public: - FakePutMultiFileReply(FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QString &contentType, const QByteArray &putPayload, QObject *parent); - - static QVector performMultiPart(FileInfo &remoteRootFileInfo, const QNetworkRequest &request, const QByteArray &putPayload, const QString &contentType); - - Q_INVOKABLE virtual void respond(); - - void abort() override; - - qint64 bytesAvailable() const override; - qint64 readData(char *data, qint64 maxlen) override; - -private: - QVector _allFileInfo; - - QByteArray _payload; -}; - class FakeMkcolReply : public FakeReply { Q_OBJECT @@ -340,17 +315,12 @@ FakePayloadReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QByteArray &body, QObject *parent); - FakePayloadReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, - const QByteArray &body, int delay, QObject *parent); - void respond(); void abort() override {} qint64 readData(char *buf, qint64 max) override; qint64 bytesAvailable() const override; QByteArray _body; - - static const int defaultDelay = 10; }; @@ -378,17 +348,6 @@ QByteArray _body; }; -class FakeJsonErrorReply : public FakeErrorReply -{ - Q_OBJECT -public: - FakeJsonErrorReply(QNetworkAccessManager::Operation op, - const QNetworkRequest &request, - QObject *parent, - int httpErrorCode, - const QJsonDocument &reply = QJsonDocument()); -}; - // A reply that never responds class FakeHangingReply : public FakeReply { @@ -444,12 +403,6 @@ void setOverride(const Override &override) { _override = override; } - QJsonObject forEachReplyPart(QIODevice *outgoingData, - const QString &contentType, - std::function &)> replyFunction); - - QNetworkReply *overrideReplyWithError(QString fileName, Operation op, QNetworkRequest newRequest); - protected: QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = nullptr) override; @@ -460,17 +413,17 @@ QNetworkAccessManager *_qnam; public: FakeCredentials(QNetworkAccessManager *qnam) : _qnam{qnam} { } - QString authType() const override { return "test"; } - QString user() const override { return "admin"; } - QString password() const override { return "password"; } - QNetworkAccessManager *createQNAM() const override { return _qnam; } - bool ready() const override { return true; } - void fetchFromKeychain() override { } - void askFromUser() override { } - bool stillValid(QNetworkReply *) override { return true; } - void persist() override { } - void invalidateToken() override { } - void forgetSensitiveData() override { } + virtual QString authType() const { return "test"; } + virtual QString user() const { return "admin"; } + virtual QString password() const { return "password"; } + virtual QNetworkAccessManager *createQNAM() const { return _qnam; } + virtual bool ready() const { return true; } + virtual void fetchFromKeychain() { } + virtual void askFromUser() { } + virtual bool stillValid(QNetworkReply *) { return true; } + virtual void persist() { } + virtual void invalidateToken() { } + virtual void forgetSensitiveData() { } }; class FakeFolder @@ -508,11 +461,6 @@ }; ErrorList serverErrorPaths() { return {_fakeQnam}; } void setServerOverride(const FakeQNAM::Override &override) { _fakeQnam->setOverride(override); } - QJsonObject forEachReplyPart(QIODevice *outgoingData, - const QString &contentType, - std::function&)> replyFunction) { - return _fakeQnam->forEachReplyPart(outgoingData, contentType, replyFunction); - } QString localPath() const; @@ -562,8 +510,6 @@ {} OCC::SyncFileItemPtr findItem(const QString &path) const; - - OCC::SyncFileItemPtr findItemWithExpectedRank(const QString &path, int rank) const; }; // QTest::toString overloads diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testblacklist.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testblacklist.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testblacklist.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testblacklist.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -41,12 +41,9 @@ auto &modifier = remote ? fakeFolder.remoteModifier() : fakeFolder.localModifier(); int counter = 0; - const QByteArray testFileName = QByteArrayLiteral("A/new"); QByteArray reqId; fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) -> QNetworkReply * { - if (req.url().path().endsWith(testFileName)) { - reqId = req.rawHeader("X-Request-ID"); - } + reqId = req.rawHeader("X-Request-ID"); if (!remote && op == QNetworkAccessManager::PutOperation) ++counter; if (remote && op == QNetworkAccessManager::GetOperation) @@ -62,16 +59,16 @@ QVERIFY(!initialEtag.isEmpty()); // The first sync and the download will fail - the item will be blacklisted - modifier.insert(testFileName); - fakeFolder.serverErrorPaths().append(testFileName, 500); // will be blacklisted + modifier.insert("A/new"); + fakeFolder.serverErrorPaths().append("A/new", 500); // will be blacklisted QVERIFY(!fakeFolder.syncOnce()); { - auto it = completeSpy.findItem(testFileName); + auto it = completeSpy.findItem("A/new"); QVERIFY(it); QCOMPARE(it->_status, SyncFileItem::NormalError); // initial error visible QCOMPARE(it->_instruction, CSYNC_INSTRUCTION_NEW); - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); QVERIFY(entry.isValid()); QCOMPARE(entry._errorCategory, SyncJournalErrorBlacklistRecord::Normal); QCOMPARE(entry._retryCount, 1); @@ -87,12 +84,12 @@ // Ignored during the second run - but soft errors are also errors QVERIFY(!fakeFolder.syncOnce()); { - auto it = completeSpy.findItem(testFileName); + auto it = completeSpy.findItem("A/new"); QVERIFY(it); QCOMPARE(it->_status, SyncFileItem::BlacklistedError); QCOMPARE(it->_instruction, CSYNC_INSTRUCTION_IGNORE); // no retry happened! - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); QVERIFY(entry.isValid()); QCOMPARE(entry._errorCategory, SyncJournalErrorBlacklistRecord::Normal); QCOMPARE(entry._retryCount, 1); @@ -107,19 +104,19 @@ // Let's expire the blacklist entry to verify it gets retried { - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); entry._ignoreDuration = 1; entry._lastTryTime -= 1; fakeFolder.syncJournal().setErrorBlacklistEntry(entry); } QVERIFY(!fakeFolder.syncOnce()); { - auto it = completeSpy.findItem(testFileName); + auto it = completeSpy.findItem("A/new"); QVERIFY(it); QCOMPARE(it->_status, SyncFileItem::BlacklistedError); // blacklisted as it's just a retry QCOMPARE(it->_instruction, CSYNC_INSTRUCTION_NEW); // retry! - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); QVERIFY(entry.isValid()); QCOMPARE(entry._errorCategory, SyncJournalErrorBlacklistRecord::Normal); QCOMPARE(entry._retryCount, 2); @@ -133,15 +130,15 @@ cleanup(); // When the file changes a retry happens immediately - modifier.appendByte(testFileName); + modifier.appendByte("A/new"); QVERIFY(!fakeFolder.syncOnce()); { - auto it = completeSpy.findItem(testFileName); + auto it = completeSpy.findItem("A/new"); QVERIFY(it); QCOMPARE(it->_status, SyncFileItem::BlacklistedError); QCOMPARE(it->_instruction, CSYNC_INSTRUCTION_NEW); // retry! - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); QVERIFY(entry.isValid()); QCOMPARE(entry._errorCategory, SyncJournalErrorBlacklistRecord::Normal); QCOMPARE(entry._retryCount, 3); @@ -157,19 +154,19 @@ // When the error goes away and the item is retried, the sync succeeds fakeFolder.serverErrorPaths().clear(); { - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); entry._ignoreDuration = 1; entry._lastTryTime -= 1; fakeFolder.syncJournal().setErrorBlacklistEntry(entry); } QVERIFY(fakeFolder.syncOnce()); { - auto it = completeSpy.findItem(testFileName); + auto it = completeSpy.findItem("A/new"); QVERIFY(it); QCOMPARE(it->_status, SyncFileItem::Success); QCOMPARE(it->_instruction, CSYNC_INSTRUCTION_NEW); - auto entry = fakeFolder.syncJournal().errorBlacklistEntry(testFileName); + auto entry = fakeFolder.syncJournal().errorBlacklistEntry("A/new"); QVERIFY(!entry.isValid()); QCOMPARE(counter, 4); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testcapabilities.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testcapabilities.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testcapabilities.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testcapabilities.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -138,125 +138,6 @@ QCOMPARE(capabilities.pushNotificationsWebSocketUrl(), websocketUrl); } - - void testUserStatus_userStatusAvailable_returnTrue() - { - QVariantMap userStatusMap; - userStatusMap["enabled"] = true; - - QVariantMap capabilitiesMap; - capabilitiesMap["user_status"] = userStatusMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(capabilities.userStatus()); - } - - void testUserStatus_userStatusNotAvailable_returnFalse() - { - QVariantMap userStatusMap; - userStatusMap["enabled"] = false; - - QVariantMap capabilitiesMap; - capabilitiesMap["user_status"] = userStatusMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(!capabilities.userStatus()); - } - - void testUserStatus_userStatusNotInCapabilites_returnFalse() - { - QVariantMap capabilitiesMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(!capabilities.userStatus()); - } - - void testUserStatusSupportsEmoji_supportsEmojiAvailable_returnTrue() - { - QVariantMap userStatusMap; - userStatusMap["enabled"] = true; - userStatusMap["supports_emoji"] = true; - - QVariantMap capabilitiesMap; - capabilitiesMap["user_status"] = userStatusMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(capabilities.userStatus()); - } - - void testUserStatusSupportsEmoji_supportsEmojiNotAvailable_returnFalse() - { - QVariantMap userStatusMap; - userStatusMap["enabled"] = true; - userStatusMap["supports_emoji"] = false; - - QVariantMap capabilitiesMap; - capabilitiesMap["user_status"] = userStatusMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(!capabilities.userStatusSupportsEmoji()); - } - - void testUserStatusSupportsEmoji_supportsEmojiNotInCapabilites_returnFalse() - { - QVariantMap userStatusMap; - userStatusMap["enabled"] = true; - - QVariantMap capabilitiesMap; - capabilitiesMap["user_status"] = userStatusMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - - QVERIFY(!capabilities.userStatusSupportsEmoji()); - } - - void testShareDefaultPermissions_defaultSharePermissionsNotInCapabilities_returnZero() - { - QVariantMap filesSharingMap; - filesSharingMap["api_enabled"] = false; - - QVariantMap capabilitiesMap; - capabilitiesMap["files_sharing"] = filesSharingMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - const auto defaultSharePermissionsNotInCapabilities = capabilities.shareDefaultPermissions(); - - QCOMPARE(defaultSharePermissionsNotInCapabilities, {}); - } - - void testShareDefaultPermissions_defaultSharePermissionsAvailable_returnPermissions() - { - QVariantMap filesSharingMap; - filesSharingMap["api_enabled"] = true; - filesSharingMap["default_permissions"] = 31; - - QVariantMap capabilitiesMap; - capabilitiesMap["files_sharing"] = filesSharingMap; - - const OCC::Capabilities capabilities(capabilitiesMap); - const auto defaultSharePermissionsAvailable = capabilities.shareDefaultPermissions(); - - QCOMPARE(defaultSharePermissionsAvailable, 31); - } - - void testBulkUploadAvailable_bulkUploadAvailable_returnTrue() - { - QVariantMap bulkuploadMap; - bulkuploadMap["bulkupload"] = "1.0"; - - QVariantMap capabilitiesMap; - capabilitiesMap["dav"] = bulkuploadMap; - - const auto &capabilities = OCC::Capabilities(capabilitiesMap); - const auto bulkuploadAvailable = capabilities.bulkUpload(); - - QCOMPARE(bulkuploadAvailable, true); - } }; QTEST_GUILESS_MAIN(TestCapabilities) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testchecksumvalidator.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testchecksumvalidator.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testchecksumvalidator.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testchecksumvalidator.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -197,13 +197,13 @@ QTRY_VERIFY(_successDown); - _expectedError = QStringLiteral("The downloaded file does not match the checksum, it will be resumed. \"543345\" != \"%1\"").arg(QString::fromUtf8(_expected)); + _expectedError = QStringLiteral("The downloaded file does not match the checksum, it will be resumed. '543345' != '%1'").arg(QString::fromUtf8(_expected)); _errorSeen = false; file->seek(0); vali->start(_testfile, "Adler32:543345"); QTRY_VERIFY(_errorSeen); - _expectedError = QLatin1String("The checksum header contained an unknown checksum type \"Klaas32\""); + _expectedError = QLatin1String("The checksum header contained an unknown checksum type 'Klaas32'"); _errorSeen = false; file->seek(0); vali->start(_testfile, "Klaas32:543345"); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testclientsideencryption.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testclientsideencryption.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testclientsideencryption.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testclientsideencryption.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -6,11 +6,6 @@ #include -#include -#include - -#include - #include "clientsideencryption.h" using namespace OCC; @@ -137,116 +132,6 @@ // THEN QCOMPARE(data, originalData); } - - void testStreamingDecryptor_data() - { - QTest::addColumn("totalBytes"); - QTest::addColumn("bytesToRead"); - - QTest::newRow("data1") << 64 << 2; - QTest::newRow("data2") << 32 << 8; - QTest::newRow("data3") << 76 << 64; - QTest::newRow("data4") << 272 << 256; - } - - void testStreamingDecryptor() - { - QFETCH(int, totalBytes); - - QTemporaryFile dummyInputFile; - - QVERIFY(dummyInputFile.open()); - - const auto dummyFileRandomContents = EncryptionHelper::generateRandom(totalBytes); - - QCOMPARE(dummyInputFile.write(dummyFileRandomContents), dummyFileRandomContents.size()); - - const auto generateHash = [](const QByteArray &data) { - QCryptographicHash hash(QCryptographicHash::Sha1); - hash.addData(data); - return hash.result(); - }; - - const QByteArray originalFileHash = generateHash(dummyFileRandomContents); - - QVERIFY(!originalFileHash.isEmpty()); - - dummyInputFile.close(); - QVERIFY(!dummyInputFile.isOpen()); - - const auto encryptionKey = EncryptionHelper::generateRandom(16); - const auto initializationVector = EncryptionHelper::generateRandom(16); - - // test normal file encryption/decryption - QTemporaryFile dummyEncryptionOutputFile; - - QByteArray tag; - - QVERIFY(EncryptionHelper::fileEncryption(encryptionKey, initializationVector, &dummyInputFile, &dummyEncryptionOutputFile, tag)); - dummyInputFile.close(); - QVERIFY(!dummyInputFile.isOpen()); - - dummyEncryptionOutputFile.close(); - QVERIFY(!dummyEncryptionOutputFile.isOpen()); - - QTemporaryFile dummyDecryptionOutputFile; - - QVERIFY(EncryptionHelper::fileDecryption(encryptionKey, initializationVector, &dummyEncryptionOutputFile, &dummyDecryptionOutputFile)); - QVERIFY(dummyDecryptionOutputFile.open()); - const auto dummyDecryptionOutputFileHash = generateHash(dummyDecryptionOutputFile.readAll()); - QCOMPARE(dummyDecryptionOutputFileHash, originalFileHash); - - // test streaming decryptor - EncryptionHelper::StreamingDecryptor streamingDecryptor(encryptionKey, initializationVector, dummyEncryptionOutputFile.size()); - QVERIFY(streamingDecryptor.isInitialized()); - - QBuffer chunkedOutputDecrypted; - QVERIFY(chunkedOutputDecrypted.open(QBuffer::WriteOnly)); - - QVERIFY(dummyEncryptionOutputFile.open()); - - QByteArray pendingBytes; - - QFETCH(int, bytesToRead); - - while (dummyEncryptionOutputFile.pos() < dummyEncryptionOutputFile.size()) { - const auto bytesRemaining = dummyEncryptionOutputFile.size() - dummyEncryptionOutputFile.pos(); - auto toRead = bytesRemaining > bytesToRead ? bytesToRead : bytesRemaining; - - if (dummyEncryptionOutputFile.pos() + toRead > dummyEncryptionOutputFile.size()) { - toRead = dummyEncryptionOutputFile.size() - dummyEncryptionOutputFile.pos(); - } - - if (bytesRemaining - toRead != 0 && bytesRemaining - toRead < OCC::Constants::e2EeTagSize) { - // decryption is going to fail if last chunk does not include or does not equal to OCC::Constants::e2EeTagSize bytes tag - // since we are emulating random size of network packets, we may end up reading beyond OCC::Constants::e2EeTagSize bytes tag at the end - // in that case, we don't want to try and decrypt less than OCC::Constants::e2EeTagSize ending bytes of tag, we will accumulate all the incoming data till the end - // and then, we are going to decrypt the entire chunk containing OCC::Constants::e2EeTagSize bytes at the end - pendingBytes += dummyEncryptionOutputFile.read(bytesRemaining); - continue; - } - - const auto decryptedChunk = streamingDecryptor.chunkDecryption(dummyEncryptionOutputFile.read(toRead).constData(), toRead); - - QVERIFY(decryptedChunk.size() == toRead || streamingDecryptor.isFinished() || !pendingBytes.isEmpty()); - - chunkedOutputDecrypted.write(decryptedChunk); - } - - if (!pendingBytes.isEmpty()) { - const auto decryptedChunk = streamingDecryptor.chunkDecryption(pendingBytes.constData(), pendingBytes.size()); - - QVERIFY(decryptedChunk.size() == pendingBytes.size() || streamingDecryptor.isFinished()); - - chunkedOutputDecrypted.write(decryptedChunk); - } - - chunkedOutputDecrypted.close(); - - QVERIFY(chunkedOutputDecrypted.open(QBuffer::ReadOnly)); - QCOMPARE(generateHash(chunkedOutputDecrypted.readAll()), originalFileHash); - chunkedOutputDecrypted.close(); - } }; QTEST_APPLESS_MAIN(TestClientSideEncryption) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testcookies.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testcookies.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testcookies.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testcookies.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -21,7 +21,7 @@ const QString nonexistingPath = tmp.filePath("someNonexistingDir/test.db"); QNetworkCookie cookieA = QNetworkCookie("foo", "bar"); // tomorrow rounded - cookieA.setExpirationDate(QDateTime::currentDateTimeUtc().addDays(1).date().startOfDay()); + cookieA.setExpirationDate(QDateTime(QDateTime::currentDateTimeUtc().addDays(1).date())); const QList cookies = {cookieA, QNetworkCookie("foo2", "bar")}; CookieJar jar; jar.setAllCookies(cookies); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testexcludedfiles.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testexcludedfiles.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testexcludedfiles.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testexcludedfiles.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -265,7 +265,7 @@ QCOMPARE(excludeList.write("bar"), 3); excludeList.close(); - excludedFiles->addExcludeFilePath(fooExcludeList); + excludedFiles->addInTreeExcludeFilePath(fooExcludeList); excludedFiles->reloadExcludeFiles(); QCOMPARE(check_file_full(QByteArray(fooDir.toUtf8() + "/bar")), CSYNC_FILE_EXCLUDE_LIST); QCOMPARE(check_file_full(QByteArray(fooDir.toUtf8() + "/baz")), CSYNC_NOT_EXCLUDED); @@ -322,7 +322,7 @@ QCOMPARE(check_file_traversal("subdir/.sync_5bdd60bdfcfa.db"), CSYNC_FILE_SILENTLY_EXCLUDED); /* Other builtin excludes */ - QCOMPARE(check_file_traversal("foo/Desktop.ini"), CSYNC_FILE_SILENTLY_EXCLUDED); + QCOMPARE(check_file_traversal("foo/Desktop.ini"), CSYNC_NOT_EXCLUDED); QCOMPARE(check_file_traversal("Desktop.ini"), CSYNC_FILE_SILENTLY_EXCLUDED); /* pattern ]*.directory - ignore and remove */ @@ -700,77 +700,7 @@ QVERIFY(excludes.versionDirectiveKeepNextLine(test.first) == test.second); } } - - void testAddExcludeFilePath_addSameFilePath_listSizeDoesNotIncrease() - { - excludedFiles.reset(new ExcludedFiles()); - const auto filePath = QString("exclude/.sync-exclude.lst"); - - excludedFiles->addExcludeFilePath(filePath); - excludedFiles->addExcludeFilePath(filePath); - - QCOMPARE(excludedFiles->_excludeFiles.size(), 1); - } - - void testAddExcludeFilePath_addDifferentFilePaths_listSizeIncrease() - { - excludedFiles.reset(new ExcludedFiles()); - - const auto filePath1 = QString("exclude1/.sync-exclude.lst"); - const auto filePath2 = QString("exclude2/.sync-exclude.lst"); - - excludedFiles->addExcludeFilePath(filePath1); - excludedFiles->addExcludeFilePath(filePath2); - - QCOMPARE(excludedFiles->_excludeFiles.size(), 2); - } - - void testAddExcludeFilePath_addDefaultExcludeFile_returnCorrectMap() - { - const QString basePath("syncFolder/"); - const QString folder1("syncFolder/folder1/"); - const QString folder2(folder1 + "folder2/"); - excludedFiles.reset(new ExcludedFiles(basePath)); - - const QString defaultExcludeList("desktop-client/config-folder/sync-exclude.lst"); - const QString folder1ExcludeList(folder1 + ".sync-exclude.lst"); - const QString folder2ExcludeList(folder2 + ".sync-exclude.lst"); - - excludedFiles->addExcludeFilePath(defaultExcludeList); - excludedFiles->addExcludeFilePath(folder1ExcludeList); - excludedFiles->addExcludeFilePath(folder2ExcludeList); - - QCOMPARE(excludedFiles->_excludeFiles.size(), 3); - QCOMPARE(excludedFiles->_excludeFiles[basePath].first(), defaultExcludeList); - QCOMPARE(excludedFiles->_excludeFiles[folder1].first(), folder1ExcludeList); - QCOMPARE(excludedFiles->_excludeFiles[folder2].first(), folder2ExcludeList); - } - - void testReloadExcludeFiles_fileDoesNotExist_returnFalse() { - excludedFiles.reset(new ExcludedFiles()); - const QString nonExistingFile("directory/.sync-exclude.lst"); - excludedFiles->addExcludeFilePath(nonExistingFile); - QCOMPARE(excludedFiles->reloadExcludeFiles(), false); - QCOMPARE(excludedFiles->_allExcludes.size(), 0); - } - - void testReloadExcludeFiles_fileExists_returnTrue() - { - const auto tempDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation); - excludedFiles.reset(new ExcludedFiles(tempDir + "/")); - - const auto subTempDir = QStringLiteral("exclude"); - QVERIFY(QDir(tempDir).mkpath(subTempDir)); - - const auto existingFilePath = QString(tempDir + '/' + subTempDir + "/.sync-exclude.lst"); - QFile excludeList(existingFilePath); - QVERIFY(excludeList.open(QFile::WriteOnly)); - excludeList.close(); - - excludedFiles->addExcludeFilePath(existingFilePath); - QCOMPARE(excludedFiles->reloadExcludeFiles(), true); - QCOMPARE(excludedFiles->_allExcludes.size(), 1); - } + }; QTEST_APPLESS_MAIN(TestExcludedFiles) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testfolderwatcher.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testfolderwatcher.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testfolderwatcher.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testfolderwatcher.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -103,8 +103,8 @@ #endif public: - TestFolderWatcher() - { + TestFolderWatcher() { + qsrand(QTime::currentTime().msec()); QDir rootDir(_root.path()); _rootPath = rootDir.canonicalPath(); qDebug() << "creating test directory tree in " << _rootPath; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testhelper.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testhelper.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testhelper.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testhelper.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -#include "testhelper.h" - -OCC::FolderDefinition folderDefinition(const QString &path) -{ - OCC::FolderDefinition d; - d.localPath = path; - d.targetPath = path; - d.alias = path; - return d; -} diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testhelper.h nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testhelper.h --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testhelper.h 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testhelper.h 2022-01-03 12:25:12.000000000 +0000 @@ -1,21 +1,28 @@ #ifndef TESTHELPER_H #define TESTHELPER_H -#include "gui/folder.h" +#include "folder.h" #include "creds/httpcredentials.h" -class HttpCredentialsTest : public OCC::HttpCredentials -{ +using namespace OCC; + +class HttpCredentialsTest : public HttpCredentials { public: HttpCredentialsTest(const QString& user, const QString& password) : HttpCredentials(user, password) {} - void askFromUser() override { + void askFromUser() Q_DECL_OVERRIDE { } }; -OCC::FolderDefinition folderDefinition(const QString &path); +static FolderDefinition folderDefinition(const QString &path) { + FolderDefinition d; + d.localPath = path; + d.targetPath = path; + d.alias = path; + return d; +} #endif // TESTHELPER_H diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testiconutils.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testiconutils.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testiconutils.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testiconutils.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 - -#include "theme.h" -#include "iconutils.h" - -class TestIconUtils : public QObject -{ - Q_OBJECT - -public: - TestIconUtils() - { - Q_INIT_RESOURCE(resources); - Q_INIT_RESOURCE(theme); - } - -private slots: - void testDrawSvgWithCustomFillColor() - { - const QString blackSvgDirPath{QString{OCC::Theme::themePrefix} + QStringLiteral("black")}; - const QDir blackSvgDir(blackSvgDirPath); - const QStringList blackImages = blackSvgDir.entryList(QStringList("*.svg")); - - Q_ASSERT(!blackImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::drawSvgWithCustomFillColor(blackSvgDirPath + QStringLiteral("/") + blackImages.at(0), QColorConstants::Svg::red).isNull()); - - QVERIFY(!OCC::Ui::IconUtils::drawSvgWithCustomFillColor(blackSvgDirPath + QStringLiteral("/") + blackImages.at(0), QColorConstants::Svg::green).isNull()); - - const QString whiteSvgDirPath{QString{OCC::Theme::themePrefix} + QStringLiteral("white")}; - const QDir whiteSvgDir(whiteSvgDirPath); - const QStringList whiteImages = whiteSvgDir.entryList(QStringList("*.svg")); - - Q_ASSERT(!whiteImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::drawSvgWithCustomFillColor(whiteSvgDirPath + QStringLiteral("/") + whiteImages.at(0), QColorConstants::Svg::blue).isNull()); - } - - void testCreateSvgPixmapWithCustomColor() - { - const QDir blackSvgDir(QString(QString{OCC::Theme::themePrefix}) + QStringLiteral("black")); - const QStringList blackImages = blackSvgDir.entryList(QStringList("*.svg")); - - QVERIFY(!blackImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::createSvgImageWithCustomColor(blackImages.at(0), QColorConstants::Svg::red).isNull()); - - QVERIFY(!OCC::Ui::IconUtils::createSvgImageWithCustomColor(blackImages.at(0), QColorConstants::Svg::green).isNull()); - - const QDir whiteSvgDir(QString(QString{OCC::Theme::themePrefix}) + QStringLiteral("white")); - const QStringList whiteImages = whiteSvgDir.entryList(QStringList("*.svg")); - - QVERIFY(!whiteImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::createSvgImageWithCustomColor(whiteImages.at(0), QColorConstants::Svg::blue).isNull()); - } - - void testPixmapForBackground() - { - const QDir blackSvgDir(QString(QString{OCC::Theme::themePrefix}) + QStringLiteral("black")); - const QStringList blackImages = blackSvgDir.entryList(QStringList("*.svg")); - - const QDir whiteSvgDir(QString(QString{OCC::Theme::themePrefix}) + QStringLiteral("white")); - const QStringList whiteImages = whiteSvgDir.entryList(QStringList("*.svg")); - - QVERIFY(!blackImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::pixmapForBackground(whiteImages.at(0), QColor("blue")).isNull()); - - QVERIFY(!whiteImages.isEmpty()); - - QVERIFY(!OCC::Ui::IconUtils::pixmapForBackground(blackImages.at(0), QColor("yellow")).isNull()); - } -}; - -QTEST_MAIN(TestIconUtils) -#include "testiconutils.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testinotifywatcher.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testinotifywatcher.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testinotifywatcher.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testinotifywatcher.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -19,9 +19,10 @@ QString _root; private slots: - void initTestCase() - { - _root = QDir::tempPath() + "/" + "test_" + QString::number(OCC::Utility::rand()); + void initTestCase() { + qsrand(QTime::currentTime().msec()); + + _root = QDir::tempPath() + "/" + "test_" + QString::number(qrand()); qDebug() << "creating test directory tree in " << _root; QDir rootDir(_root); @@ -30,6 +31,7 @@ rootDir.mkpath(_root + "/a1/b2/c1"); rootDir.mkpath(_root + "/a1/b3/c3"); rootDir.mkpath(_root + "/a2/b3/c3"); + } // Test the recursive path listing function findFoldersBelow diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlocaldiscovery.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlocaldiscovery.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlocaldiscovery.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlocaldiscovery.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -204,92 +204,6 @@ QVERIFY(!fakeFolder.currentRemoteState().find("C/.foo")); QVERIFY(!fakeFolder.currentRemoteState().find("C/bar")); } - - void testCreateFileWithTrailingSpaces_localAndRemoteTrimmedDoNotExist_renameAndUploadFile() - { - FakeFolder fakeFolder { FileInfo::A12_B12_C12_S12() }; - QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); - const QString fileWithSpaces1(" foo"); - const QString fileWithSpaces2(" bar "); - const QString fileWithSpaces3("bla "); - const QString fileWithSpaces4("A/ foo"); - const QString fileWithSpaces5("A/ bar "); - const QString fileWithSpaces6("A/bla "); - - fakeFolder.localModifier().insert(fileWithSpaces1); - fakeFolder.localModifier().insert(fileWithSpaces2); - fakeFolder.localModifier().insert(fileWithSpaces3); - fakeFolder.localModifier().insert(fileWithSpaces4); - fakeFolder.localModifier().insert(fileWithSpaces5); - fakeFolder.localModifier().insert(fileWithSpaces6); - - QVERIFY(fakeFolder.syncOnce()); - - QVERIFY(fakeFolder.currentRemoteState().find(fileWithSpaces1.trimmed())); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces1)); - QVERIFY(fakeFolder.currentLocalState().find(fileWithSpaces1.trimmed())); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces1)); - - QVERIFY(fakeFolder.currentRemoteState().find(fileWithSpaces2.trimmed())); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces2)); - QVERIFY(fakeFolder.currentLocalState().find(fileWithSpaces2.trimmed())); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces2)); - - QVERIFY(fakeFolder.currentRemoteState().find(fileWithSpaces3.trimmed())); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces3)); - QVERIFY(fakeFolder.currentLocalState().find(fileWithSpaces3.trimmed())); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces3)); - - QVERIFY(fakeFolder.currentRemoteState().find("A/foo")); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces4)); - QVERIFY(fakeFolder.currentLocalState().find("A/foo")); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces4)); - - QVERIFY(fakeFolder.currentRemoteState().find("A/bar")); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces5)); - QVERIFY(fakeFolder.currentLocalState().find("A/bar")); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces5)); - - QVERIFY(fakeFolder.currentRemoteState().find("A/bla")); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces6)); - QVERIFY(fakeFolder.currentLocalState().find("A/bla")); - QVERIFY(!fakeFolder.currentLocalState().find(fileWithSpaces6)); - } - - void testCreateFileWithTrailingSpaces_localTrimmedDoesExist_dontRenameAndUploadFile() - { - FakeFolder fakeFolder { FileInfo::A12_B12_C12_S12() }; - QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); - const QString fileWithSpaces(" foo"); - const QString fileTrimmed("foo"); - - fakeFolder.localModifier().insert(fileTrimmed); - QVERIFY(fakeFolder.syncOnce()); - fakeFolder.localModifier().insert(fileWithSpaces); - QVERIFY(!fakeFolder.syncOnce()); - - QVERIFY(fakeFolder.currentRemoteState().find(fileTrimmed)); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces)); - QVERIFY(fakeFolder.currentLocalState().find(fileWithSpaces)); - QVERIFY(fakeFolder.currentLocalState().find(fileTrimmed)); - } - - void testCreateFileWithTrailingSpaces_localTrimmedAlsoCreated_dontRenameAndUploadFile() - { - FakeFolder fakeFolder { FileInfo::A12_B12_C12_S12() }; - QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); - const QString fileWithSpaces(" foo"); - const QString fileTrimmed("foo"); - - fakeFolder.localModifier().insert(fileTrimmed); - fakeFolder.localModifier().insert(fileWithSpaces); - QVERIFY(!fakeFolder.syncOnce()); - - QVERIFY(fakeFolder.currentRemoteState().find(fileTrimmed)); - QVERIFY(!fakeFolder.currentRemoteState().find(fileWithSpaces)); - QVERIFY(fakeFolder.currentLocalState().find(fileWithSpaces)); - QVERIFY(fakeFolder.currentLocalState().find(fileTrimmed)); - } }; QTEST_GUILESS_MAIN(TestLocalDiscovery) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlockedfiles.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlockedfiles.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlockedfiles.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlockedfiles.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -17,8 +17,7 @@ // pass combination of FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE HANDLE makeHandle(const QString &file, int shareMode) { - const auto fName = FileSystem::longWinPath(file); - const wchar_t *wuri = reinterpret_cast(fName.utf16()); + const wchar_t *wuri = reinterpret_cast(file.utf16()); auto handle = CreateFileW( wuri, GENERIC_READ | GENERIC_WRITE, @@ -40,7 +39,6 @@ private slots: void testBasicLockFileWatcher() { - QTemporaryDir tmp; int count = 0; QString file; @@ -48,16 +46,12 @@ watcher.setCheckInterval(std::chrono::milliseconds(50)); connect(&watcher, &LockWatcher::fileUnlocked, &watcher, [&](const QString &f) { ++count; file = f; }); - const QString tmpFile = tmp.path() + QString::fromUtf8("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/file🐷.txt"); + QString tmpFile; { - // use a long file path to ensure we handle that correctly - QVERIFY(QFileInfo(tmpFile).dir().mkpath(".")); - QFile tmp(tmpFile); - QVERIFY(tmp.open(QFile::WriteOnly)); - QVERIFY(tmp.write("ownCLoud")); + QTemporaryFile tmp; + tmp.setAutoRemove(false); + tmp.open(); + tmpFile = tmp.fileName(); } QVERIFY(QFile::exists(tmpFile)); @@ -97,7 +91,7 @@ QCOMPARE(file, tmpFile); QVERIFY(!watcher.contains(tmpFile)); #endif - QVERIFY(tmp.remove()); + QFile::remove(tmpFile); } #ifdef Q_OS_WIN diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlongpath.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlongpath.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlongpath.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlongpath.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 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 "common/filesystembase.h" -#include "csync/csync.h" -#include "csync/vio/csync_vio_local.h" - -#include -#include - - -class TestLongWindowsPath : public QObject -{ - Q_OBJECT - -private Q_SLOTS: -#ifdef Q_OS_WIN - void check_long_win_path() - { - { - const auto path = QStringLiteral("C://DATA/FILES/MUSIC/MY_MUSIC.mp3"); // check a short path - const auto exp_path = QStringLiteral("\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3"); - QString new_short = OCC::FileSystem::pathtoUNC(path); - QCOMPARE(new_short, exp_path); - } - - { - const auto path = QStringLiteral("\\\\foo\\bar/MY_MUSIC.mp3"); - const auto exp_path = QStringLiteral("\\\\foo\\bar\\MY_MUSIC.mp3"); - QString new_short = OCC::FileSystem::pathtoUNC(path); - QCOMPARE(new_short, exp_path); - } - - { - const auto path = QStringLiteral("//foo\\bar/MY_MUSIC.mp3"); - const auto exp_path = QStringLiteral("\\\\foo\\bar\\MY_MUSIC.mp3"); - QString new_short = OCC::FileSystem::pathtoUNC(path); - QCOMPARE(new_short, exp_path); - } - - { - const auto path = QStringLiteral("\\foo\\bar"); - const auto exp_path = QStringLiteral("\\\\?\\foo\\bar"); - QString new_short = OCC::FileSystem::pathtoUNC(path); - QCOMPARE(new_short, exp_path); - } - - { - const auto path = QStringLiteral("/foo/bar"); - const auto exp_path = QStringLiteral("\\\\?\\foo\\bar"); - QString new_short = OCC::FileSystem::pathtoUNC(path); - QCOMPARE(new_short, exp_path); - } - - const auto longPath = QStringLiteral("D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/file.txt"); - const auto longPathConv = QStringLiteral("\\\\?\\D:\\\\alonglonglonglong\\blonglonglonglong\\clonglonglonglong\\dlonglonglonglong\\" - "elonglonglonglong\\flonglonglonglong\\glonglonglonglong\\hlonglonglonglong\\ilonglonglonglong\\" - "jlonglonglonglong\\klonglonglonglong\\llonglonglonglong\\mlonglonglonglong\\nlonglonglonglong\\" - "olonglonglonglong\\file.txt"); - - QString new_long = OCC::FileSystem::pathtoUNC(longPath); - // printf( "XXXXXXXXXXXX %s %d\n", new_long, mem_reserved); - - QCOMPARE(new_long, longPathConv); - - // printf( "YYYYYYYYYYYY %ld\n", strlen(new_long)); - QCOMPARE(new_long.length(), 286); - } -#endif - - - void testLongPathStat_data() - { - QTest::addColumn("name"); - - QTest::newRow("long") << QStringLiteral("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/file.txt"); - QTest::newRow("long emoji") << QString::fromUtf8("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/file🐷.txt"); - QTest::newRow("long russian") << QString::fromUtf8("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/собственное.txt"); - QTest::newRow("long arabic") << QString::fromUtf8("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/السحاب.txt"); - QTest::newRow("long chinese") << QString::fromUtf8("/alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" - "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" - "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" - "olonglonglonglong/自己的云.txt"); - } - - void testLongPathStat() - { - QTemporaryDir tmp; - QFETCH(QString, name); - const QFileInfo longPath(tmp.path() + name); - - const auto data = QByteArrayLiteral("hello"); - qDebug() << longPath; - QVERIFY(longPath.dir().mkpath(".")); - - QFile file(longPath.filePath()); - QVERIFY(file.open(QFile::WriteOnly)); - QVERIFY(file.write(data.constData()) == data.size()); - file.close(); - - csync_file_stat_t buf; - QVERIFY(csync_vio_local_stat(longPath.filePath(), &buf) != -1); - QVERIFY(buf.size == data.size()); - QVERIFY(buf.size == longPath.size()); - - QVERIFY(tmp.remove()); - } -}; - -QTEST_GUILESS_MAIN(TestLongWindowsPath) -#include "testlongpath.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlongwinpath.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlongwinpath.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testlongwinpath.cpp 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testlongwinpath.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,87 @@ +/* + * libcsync -- a library to sync a directory with another + * + * Copyright (c) 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 "common/filesystembase.h" + +#include + + +class TestLongWindowsPath : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void check_long_win_path() + { + { + const auto path = QStringLiteral("C://DATA/FILES/MUSIC/MY_MUSIC.mp3"); // check a short path + const auto exp_path = QStringLiteral("\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3"); + QString new_short = OCC::FileSystem::pathtoUNC(path); + QCOMPARE(new_short, exp_path); + } + + { + const auto path = QStringLiteral("\\\\foo\\bar/MY_MUSIC.mp3"); + const auto exp_path = QStringLiteral("\\\\foo\\bar\\MY_MUSIC.mp3"); + QString new_short = OCC::FileSystem::pathtoUNC(path); + QCOMPARE(new_short, exp_path); + } + + { + const auto path = QStringLiteral("//foo\\bar/MY_MUSIC.mp3"); + const auto exp_path = QStringLiteral("\\\\foo\\bar\\MY_MUSIC.mp3"); + QString new_short = OCC::FileSystem::pathtoUNC(path); + QCOMPARE(new_short, exp_path); + } + + { + const auto path = QStringLiteral("\\foo\\bar"); + const auto exp_path = QStringLiteral("\\\\?\\foo\\bar"); + QString new_short = OCC::FileSystem::pathtoUNC(path); + QCOMPARE(new_short, exp_path); + } + + { + const auto path = QStringLiteral("/foo/bar"); + const auto exp_path = QStringLiteral("\\\\?\\foo\\bar"); + QString new_short = OCC::FileSystem::pathtoUNC(path); + QCOMPARE(new_short, exp_path); + } + + const auto longPath = QStringLiteral("D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" + "elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/" + "jlonglonglonglong/klonglonglonglong/llonglonglonglong/mlonglonglonglong/nlonglonglonglong/" + "olonglonglonglong/file.txt"); + const auto longPathConv = QStringLiteral("\\\\?\\D:\\\\alonglonglonglong\\blonglonglonglong\\clonglonglonglong\\dlonglonglonglong\\" + "elonglonglonglong\\flonglonglonglong\\glonglonglonglong\\hlonglonglonglong\\ilonglonglonglong\\" + "jlonglonglonglong\\klonglonglonglong\\llonglonglonglong\\mlonglonglonglong\\nlonglonglonglong\\" + "olonglonglonglong\\file.txt"); + + QString new_long = OCC::FileSystem::pathtoUNC(longPath); + // printf( "XXXXXXXXXXXX %s %d\n", new_long, mem_reserved); + + QCOMPARE(new_long, longPathConv); + + // printf( "YYYYYYYYYYYY %ld\n", strlen(new_long)); + QCOMPARE(new_long.length(), 286); + } +}; + +QTEST_GUILESS_MAIN(TestLongWindowsPath) +#include "testlongwinpath.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testnotificationcache.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testnotificationcache.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testnotificationcache.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testnotificationcache.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -1,6 +1,6 @@ #include -#include "tray/notificationcache.h" +#include "tray/NotificationCache.h" class TestNotificationCache : public QObject { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testownsql.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testownsql.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testownsql.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testownsql.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -136,6 +136,8 @@ q2.prepare("SELECT * FROM addresses"); SqlQuery q3("SELECT * FROM addresses", _db); SqlQuery q4; + SqlQuery q5; + q5.initOrReset("SELECT * FROM addresses", _db); db.reset(); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testpushnotifications.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testpushnotifications.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testpushnotifications.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testpushnotifications.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -65,20 +65,6 @@ Q_OBJECT private slots: - void testTryReconnect_capabilitesReportPushNotificationsAvailable_reconnectForEver() - { - FakeWebSocketServer fakeServer; - auto account = FakeWebSocketServer::createAccount(); - account->setPushNotificationsReconnectInterval(0); - - // Let if fail a few times - QVERIFY(failThreeAuthenticationAttempts(fakeServer, account)); - QVERIFY(failThreeAuthenticationAttempts(fakeServer, account)); - - // Push notifications should try to reconnect - QVERIFY(fakeServer.authenticateAccount(account)); - } - void testSetup_correctCredentials_authenticateAndEmitReady() { FakeWebSocketServer fakeServer; @@ -286,6 +272,20 @@ QVERIFY(verifyCalledOnceWithAccount(*activitiesChangedSpy, account)); })); } + + void testTryReconnect_capabilitesReportPushNotificationsAvailable_reconnectForEver() + { + FakeWebSocketServer fakeServer; + auto account = FakeWebSocketServer::createAccount(); + account->setPushNotificationsReconnectInterval(0); + + // Let if fail a few times + QVERIFY(failThreeAuthenticationAttempts(fakeServer, account)); + QVERIFY(failThreeAuthenticationAttempts(fakeServer, account)); + + // Push notifications should try to reconnect + QVERIFY(fakeServer.authenticateAccount(account)); + } }; QTEST_GUILESS_MAIN(TestPushNotifications) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testremotediscovery.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testremotediscovery.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testremotediscovery.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testremotediscovery.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -92,7 +92,7 @@ auto oldRemoteState = fakeFolder.currentRemoteState(); QString errorFolder = "dav/files/admin/B"; - QString fatalErrorPrefix = "Server replied with an error while reading directory \"B\" : "; + QString fatalErrorPrefix = "Server replied with an error while reading directory 'B' : "; fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) -> QNetworkReply *{ if (req.attribute(QNetworkRequest::CustomVerbAttribute) == "PROPFIND" && req.url().path().endsWith(errorFolder)) { @@ -134,7 +134,7 @@ // Check the same discovery error on the sync root // errorFolder = "dav/files/admin/"; - fatalErrorPrefix = "Server replied with an error while reading directory \"\" : "; + fatalErrorPrefix = "Server replied with an error while reading directory '' : "; errorSpy.clear(); QVERIFY(!fakeFolder.syncOnce()); QCOMPARE(errorSpy.size(), 1); @@ -169,7 +169,7 @@ QCOMPARE(completeSpy.findItem("nopermissions/A")->_instruction, CSYNC_INSTRUCTION_ERROR); QVERIFY(completeSpy.findItem("noetag")->_errorString.contains("ETag")); QVERIFY(completeSpy.findItem("nofileid")->_errorString.contains("file id")); - QVERIFY(completeSpy.findItem("nopermissions/A")->_errorString.contains("permission")); + QVERIFY(completeSpy.findItem("nopermissions/A")->_errorString.contains("permissions")); } }; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsetuserstatusdialog.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsetuserstatusdialog.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsetuserstatusdialog.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsetuserstatusdialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,747 +0,0 @@ -/* - * Copyright (C) by Felix Weilbach - * - * 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 "userstatusconnector.h" -#include "userstatusselectormodel.h" - -#include -#include -#include - -#include - -class FakeUserStatusConnector : public OCC::UserStatusConnector -{ -public: - void fetchUserStatus() override - { - if (_couldNotFetchUserStatus) { - emit error(Error::CouldNotFetchUserStatus); - return; - } else if (_userStatusNotSupported) { - emit error(Error::UserStatusNotSupported); - return; - } else if (_emojisNotSupported) { - emit error(Error::EmojisNotSupported); - return; - } - - emit userStatusFetched(_userStatus); - } - - void fetchPredefinedStatuses() override - { - if (_couldNotFetchPredefinedUserStatuses) { - emit error(Error::CouldNotFetchPredefinedUserStatuses); - return; - } - emit predefinedStatusesFetched(_predefinedStatuses); - } - - void setUserStatus(const OCC::UserStatus &userStatus) override - { - if (_couldNotSetUserStatusMessage) { - emit error(Error::CouldNotSetUserStatus); - return; - } - - _userStatusSetByCallerOfSetUserStatus = userStatus; - emit UserStatusConnector::userStatusSet(); - } - - void clearMessage() override - { - if (_couldNotClearUserStatusMessage) { - emit error(Error::CouldNotClearMessage); - } else { - _isMessageCleared = true; - } - } - - OCC::UserStatus userStatus() const override - { - return {}; // Not implemented - } - - void setFakeUserStatus(const OCC::UserStatus &userStatus) - { - _userStatus = userStatus; - } - - void setFakePredefinedStatuses( - const std::vector &statuses) - { - _predefinedStatuses = statuses; - } - - OCC::UserStatus userStatusSetByCallerOfSetUserStatus() const { return _userStatusSetByCallerOfSetUserStatus; } - - bool messageCleared() const { return _isMessageCleared; } - - void setErrorCouldNotFetchPredefinedUserStatuses(bool value) - { - _couldNotFetchPredefinedUserStatuses = value; - } - - void setErrorCouldNotFetchUserStatus(bool value) - { - _couldNotFetchUserStatus = value; - } - - void setErrorCouldNotSetUserStatusMessage(bool value) - { - _couldNotSetUserStatusMessage = value; - } - - void setErrorUserStatusNotSupported(bool value) - { - _userStatusNotSupported = value; - } - - void setErrorEmojisNotSupported(bool value) - { - _emojisNotSupported = value; - } - - void setErrorCouldNotClearUserStatusMessage(bool value) - { - _couldNotClearUserStatusMessage = value; - } - -private: - OCC::UserStatus _userStatusSetByCallerOfSetUserStatus; - OCC::UserStatus _userStatus; - std::vector _predefinedStatuses; - bool _isMessageCleared = false; - bool _couldNotFetchPredefinedUserStatuses = false; - bool _couldNotFetchUserStatus = false; - bool _couldNotSetUserStatusMessage = false; - bool _userStatusNotSupported = false; - bool _emojisNotSupported = false; - bool _couldNotClearUserStatusMessage = false; -}; - -class FakeDateTimeProvider : public OCC::DateTimeProvider -{ -public: - void setCurrentDateTime(const QDateTime &dateTime) { _dateTime = dateTime; } - - QDateTime currentDateTime() const override { return _dateTime; } - - QDate currentDate() const override { return _dateTime.date(); } - -private: - QDateTime _dateTime; -}; - -static std::vector -createFakePredefinedStatuses(const QDateTime ¤tTime) -{ - std::vector statuses; - - const QString userStatusId("fake-id"); - const QString userStatusMessage("Predefined status"); - const QString userStatusIcon("🏖"); - const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online); - const bool userStatusMessagePredefined(true); - OCC::Optional userStatusClearAt; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(60 * 60).toTime_t(); - userStatusClearAt = clearAt; - - statuses.emplace_back(userStatusId, userStatusMessage, userStatusIcon, - userStatusState, userStatusMessagePredefined, userStatusClearAt); - - return statuses; -} - -static QDateTime createDateTime(int year = 2021, int month = 7, int day = 27, - int hour = 12, int minute = 0, int second = 0) -{ - QDate fakeDate(year, month, day); - QTime fakeTime(hour, minute, second); - QDateTime fakeDateTime; - - fakeDateTime.setDate(fakeDate); - fakeDateTime.setTime(fakeTime); - - return fakeDateTime; -} - -class TestSetUserStatusDialog : public QObject -{ - Q_OBJECT - -private slots: - void testCtor_fetchStatusAndPredefinedStatuses() - { - const QDateTime currentDateTime(QDateTime::currentDateTime()); - - const QString userStatusId("fake-id"); - const QString userStatusMessage("Some status"); - const QString userStatusIcon("❤"); - const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::DoNotDisturb); - const bool userStatusMessagePredefined(false); - OCC::Optional userStatusClearAt; - { - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentDateTime.addDays(1).toTime_t(); - userStatusClearAt = clearAt; - } - - const OCC::UserStatus userStatus(userStatusId, userStatusMessage, - userStatusIcon, userStatusState, userStatusMessagePredefined, userStatusClearAt); - - const auto fakePredefinedStatuses = createFakePredefinedStatuses(createDateTime()); - - auto fakeUserStatusJob = std::make_shared(); - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentDateTime); - fakeUserStatusJob->setFakeUserStatus(userStatus); - fakeUserStatusJob->setFakePredefinedStatuses(fakePredefinedStatuses); - OCC::UserStatusSelectorModel model(fakeUserStatusJob, std::move(fakeDateTimeProvider)); - - // Was user status set correctly? - QCOMPARE(model.userStatusMessage(), userStatusMessage); - QCOMPARE(model.userStatusEmoji(), userStatusIcon); - QCOMPARE(model.onlineStatus(), userStatusState); - QCOMPARE(model.clearAt(), tr("1 day")); - - // Were predefined statuses fetched correctly? - const auto predefinedStatusesCount = model.predefinedStatusesCount(); - QCOMPARE(predefinedStatusesCount, fakePredefinedStatuses.size()); - for (int i = 0; i < predefinedStatusesCount; ++i) { - const auto predefinedStatus = model.predefinedStatus(i); - QCOMPARE(predefinedStatus.id(), - fakePredefinedStatuses[i].id()); - QCOMPARE(predefinedStatus.message(), - fakePredefinedStatuses[i].message()); - QCOMPARE(predefinedStatus.icon(), - fakePredefinedStatuses[i].icon()); - QCOMPARE(predefinedStatus.messagePredefined(), - fakePredefinedStatuses[i].messagePredefined()); - } - } - - void testCtor_noStatusSet_showSensibleDefaults() - { - OCC::UserStatusSelectorModel model(nullptr, nullptr); - - QCOMPARE(model.userStatusMessage(), ""); - QCOMPARE(model.userStatusEmoji(), "😀"); - QCOMPARE(model.clearAt(), tr("Don't clear")); - } - - void testCtor_fetchStatusButNoStatusSet_showSensibleDefaults() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setFakeUserStatus({ "", "", "", - OCC::UserStatus::OnlineStatus::Offline, false, {} }); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.onlineStatus(), OCC::UserStatus::OnlineStatus::Online); - QCOMPARE(model.userStatusMessage(), ""); - QCOMPARE(model.userStatusEmoji(), "😀"); - QCOMPARE(model.clearAt(), tr("Don't clear")); - } - - void testSetOnlineStatus_emitOnlineStatusChanged() - { - const OCC::UserStatus::OnlineStatus onlineStatus(OCC::UserStatus::OnlineStatus::Invisible); - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy onlineStatusChangedSpy(&model, - &OCC::UserStatusSelectorModel::onlineStatusChanged); - - model.setOnlineStatus(onlineStatus); - - QCOMPARE(onlineStatusChangedSpy.count(), 1); - } - - void testSetUserStatus_setCustomMessage_userStatusSetCorrect() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished); - - const QString userStatusMessage("Some status"); - const QString userStatusIcon("❤"); - const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online); - - model.setOnlineStatus(userStatusState); - model.setUserStatusMessage(userStatusMessage); - model.setUserStatusEmoji(userStatusIcon); - model.setClearAt(1); - - model.setUserStatus(); - QCOMPARE(finishedSpy.count(), 1); - - const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus(); - QCOMPARE(userStatusSet.icon(), userStatusIcon); - QCOMPARE(userStatusSet.message(), userStatusMessage); - QCOMPARE(userStatusSet.state(), userStatusState); - QCOMPARE(userStatusSet.messagePredefined(), false); - const auto clearAt = userStatusSet.clearAt(); - QVERIFY(clearAt.isValid()); - QCOMPARE(clearAt->_type, OCC::ClearAtType::Period); - QCOMPARE(clearAt->_period, 60 * 30); - } - - void testSetUserStatusMessage_predefinedStatusWasSet_userStatusSetCorrect() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setFakePredefinedStatuses(createFakePredefinedStatuses(createDateTime())); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - model.setPredefinedStatus(0); - QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished); - - const QString userStatusMessage("Some status"); - const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online); - - model.setOnlineStatus(userStatusState); - model.setUserStatusMessage(userStatusMessage); - model.setClearAt(1); - - model.setUserStatus(); - QCOMPARE(finishedSpy.count(), 1); - - const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus(); - QCOMPARE(userStatusSet.message(), userStatusMessage); - QCOMPARE(userStatusSet.state(), userStatusState); - QCOMPARE(userStatusSet.messagePredefined(), false); - const auto clearAt = userStatusSet.clearAt(); - QVERIFY(clearAt.isValid()); - QCOMPARE(clearAt->_type, OCC::ClearAtType::Period); - QCOMPARE(clearAt->_period, 60 * 30); - } - - void testSetUserStatusEmoji_predefinedStatusWasSet_userStatusSetCorrect() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setFakePredefinedStatuses(createFakePredefinedStatuses(createDateTime())); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - model.setPredefinedStatus(0); - QSignalSpy finishedSpy(&model, &OCC::UserStatusSelectorModel::finished); - - const QString userStatusIcon("❤"); - const OCC::UserStatus::OnlineStatus userStatusState(OCC::UserStatus::OnlineStatus::Online); - - model.setOnlineStatus(userStatusState); - model.setUserStatusEmoji(userStatusIcon); - model.setClearAt(1); - - model.setUserStatus(); - QCOMPARE(finishedSpy.count(), 1); - - const auto userStatusSet = fakeUserStatusJob->userStatusSetByCallerOfSetUserStatus(); - QCOMPARE(userStatusSet.icon(), userStatusIcon); - QCOMPARE(userStatusSet.state(), userStatusState); - QCOMPARE(userStatusSet.messagePredefined(), false); - const auto clearAt = userStatusSet.clearAt(); - QVERIFY(clearAt.isValid()); - QCOMPARE(clearAt->_type, OCC::ClearAtType::Period); - QCOMPARE(clearAt->_period, 60 * 30); - } - - void testSetPredefinedStatus_emitUserStatusChangedAndSetUserStatus() - { - auto fakeUserStatusJob = std::make_shared(); - auto fakeDateTimeProvider = std::make_unique(); - const auto currentTime = createDateTime(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - const auto fakePredefinedStatuses = createFakePredefinedStatuses(currentTime); - fakeUserStatusJob->setFakePredefinedStatuses(fakePredefinedStatuses); - OCC::UserStatusSelectorModel model(std::move(fakeUserStatusJob), - std::move(fakeDateTimeProvider)); - - QSignalSpy userStatusChangedSpy(&model, - &OCC::UserStatusSelectorModel::userStatusChanged); - QSignalSpy clearAtChangedSpy(&model, - &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto fakePredefinedUserStatusIndex = 0; - model.setPredefinedStatus(fakePredefinedUserStatusIndex); - - QCOMPARE(userStatusChangedSpy.count(), 1); - QCOMPARE(clearAtChangedSpy.count(), 1); - - // Was user status set correctly? - const auto fakePredefinedUserStatus = fakePredefinedStatuses[fakePredefinedUserStatusIndex]; - QCOMPARE(model.userStatusMessage(), fakePredefinedUserStatus.message()); - QCOMPARE(model.userStatusEmoji(), fakePredefinedUserStatus.icon()); - QCOMPARE(model.onlineStatus(), fakePredefinedUserStatus.state()); - QCOMPARE(model.clearAt(), tr("1 hour")); - } - - void testSetClear_setClearAtStage0_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 0; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("Don't clear")); - } - - void testSetClear_setClearAtStage1_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 1; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("30 minutes")); - } - - void testSetClear_setClearAtStage2_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 2; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("1 hour")); - } - - void testSetClear_setClearAtStage3_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 3; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("4 hours")); - } - - void testSetClear_setClearAtStage4_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 4; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("Today")); - } - - void testSetClear_setClearAtStage5_emitClearAtChangedAndClearAtSet() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - QSignalSpy clearAtChangedSpy(&model, &OCC::UserStatusSelectorModel::clearAtChanged); - - const auto clearAtIndex = 5; - model.setClearAt(clearAtIndex); - - QCOMPARE(clearAtChangedSpy.count(), 1); - QCOMPARE(model.clearAt(), tr("This week")); - } - - void testClearAtStages() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.clearAt(), tr("Don't clear")); - const auto clearAtValues = model.clearAtValues(); - QCOMPARE(clearAtValues.count(), 6); - - QCOMPARE(clearAtValues[0], tr("Don't clear")); - QCOMPARE(clearAtValues[1], tr("30 minutes")); - QCOMPARE(clearAtValues[2], tr("1 hour")); - QCOMPARE(clearAtValues[3], tr("4 hours")); - QCOMPARE(clearAtValues[4], tr("Today")); - QCOMPARE(clearAtValues[5], tr("This week")); - } - - void testClearAt_clearAtTimestamp() - { - const auto currentTime = createDateTime(); - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(30).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("Less than a minute")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(60).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("1 minute")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(60 * 30).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("30 minutes")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(60 * 60).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("1 hour")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addSecs(60 * 60 * 4).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("4 hours")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addDays(1).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("1 day")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Timestamp; - clearAt._timestamp = currentTime.addDays(7).toTime_t(); - userStatus.setClearAt(clearAt); - - auto fakeDateTimeProvider = std::make_unique(); - fakeDateTimeProvider->setCurrentDateTime(currentTime); - - OCC::UserStatusSelectorModel model(userStatus, std::move(fakeDateTimeProvider)); - - QCOMPARE(model.clearAt(), tr("7 days")); - } - } - - void testClearAt_clearAtEndOf() - { - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::EndOf; - clearAt._endof = "day"; - userStatus.setClearAt(clearAt); - - OCC::UserStatusSelectorModel model(userStatus); - - QCOMPARE(model.clearAt(), tr("Today")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::EndOf; - clearAt._endof = "week"; - userStatus.setClearAt(clearAt); - - OCC::UserStatusSelectorModel model(userStatus); - - QCOMPARE(model.clearAt(), tr("This week")); - } - } - - void testClearAt_clearAtAfterPeriod() - { - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Period; - clearAt._period = 60 * 30; - userStatus.setClearAt(clearAt); - - OCC::UserStatusSelectorModel model(userStatus); - - QCOMPARE(model.clearAt(), tr("30 minutes")); - } - - { - OCC::UserStatus userStatus; - OCC::ClearAt clearAt; - clearAt._type = OCC::ClearAtType::Period; - clearAt._period = 60 * 60; - userStatus.setClearAt(clearAt); - - OCC::UserStatusSelectorModel model(userStatus); - - QCOMPARE(model.clearAt(), tr("1 hour")); - } - } - - void testClearUserStatus() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - model.clearUserStatus(); - - QVERIFY(fakeUserStatusJob->messageCleared()); - } - - void testError_couldNotFetchPredefinedStatuses_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorCouldNotFetchPredefinedUserStatuses(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.errorMessage(), - tr("Could not fetch predefined statuses. Make sure you are connected to the server.")); - } - - void testError_couldNotFetchUserStatus_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorCouldNotFetchUserStatus(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.errorMessage(), - tr("Could not fetch user status. Make sure you are connected to the server.")); - } - - void testError_userStatusNotSupported_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorUserStatusNotSupported(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.errorMessage(), - tr("User status feature is not supported. You will not be able to set your user status.")); - } - - void testError_couldSetUserStatus_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - model.setUserStatus(); - - QCOMPARE(model.errorMessage(), - tr("Could not set user status. Make sure you are connected to the server.")); - } - - void testError_emojisNotSupported_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorEmojisNotSupported(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - QCOMPARE(model.errorMessage(), - tr("Emojis feature is not supported. Some user status functionality may not work.")); - } - - void testError_couldNotClearMessage_emitError() - { - auto fakeUserStatusJob = std::make_shared(); - fakeUserStatusJob->setErrorCouldNotClearUserStatusMessage(true); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - model.clearUserStatus(); - - QCOMPARE(model.errorMessage(), - tr("Could not clear user status message. Make sure you are connected to the server.")); - } - - void testError_setUserStatus_clearErrorMessage() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true); - model.setUserStatus(); - QVERIFY(!model.errorMessage().isEmpty()); - fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(false); - model.setUserStatus(); - QVERIFY(model.errorMessage().isEmpty()); - } - - void testError_clearUserStatus_clearErrorMessage() - { - auto fakeUserStatusJob = std::make_shared(); - OCC::UserStatusSelectorModel model(fakeUserStatusJob); - - fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(true); - model.setUserStatus(); - QVERIFY(!model.errorMessage().isEmpty()); - fakeUserStatusJob->setErrorCouldNotSetUserStatusMessage(false); - model.clearUserStatus(); - QVERIFY(model.errorMessage().isEmpty()); - } -}; - -QTEST_GUILESS_MAIN(TestSetUserStatusDialog) -#include "testsetuserstatusdialog.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncengine.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncengine.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncengine.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncengine.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -33,26 +33,6 @@ return false; } -bool itemDidCompleteSuccessfullyWithExpectedRank(const ItemCompletedSpy &spy, const QString &path, int rank) -{ - if (auto item = spy.findItemWithExpectedRank(path, rank)) { - return item->_status == SyncFileItem::Success; - } - return false; -} - -int itemSuccessfullyCompletedGetRank(const ItemCompletedSpy &spy, const QString &path) -{ - auto itItem = std::find_if(spy.begin(), spy.end(), [&path] (auto currentItem) { - auto item = currentItem[0].template value(); - return item->destination() == path; - }); - if (itItem != spy.end()) { - return itItem - spy.begin(); - } - return -1; -} - class TestSyncEngine : public QObject { Q_OBJECT @@ -102,37 +82,6 @@ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } - void testDirUploadWithDelayedAlgorithm() { - FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; - fakeFolder.syncEngine().account()->setCapabilities({ { "dav", QVariantMap{ {"bulkupload", "1.0"} } } }); - - ItemCompletedSpy completeSpy(fakeFolder); - fakeFolder.localModifier().mkdir("Y"); - fakeFolder.localModifier().insert("Y/d0"); - fakeFolder.localModifier().mkdir("Z"); - fakeFolder.localModifier().insert("Z/d0"); - fakeFolder.localModifier().insert("A/a0"); - fakeFolder.localModifier().insert("B/b0"); - fakeFolder.localModifier().insert("r0"); - fakeFolder.localModifier().insert("r1"); - fakeFolder.syncOnce(); - QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Y", 0)); - QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Z", 1)); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "Y/d0")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "Y/d0") > 1); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "Z/d0")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "Z/d0") > 1); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "A/a0")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "A/a0") > 1); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "B/b0")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "B/b0") > 1); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "r0")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "r0") > 1); - QVERIFY(itemDidCompleteSuccessfully(completeSpy, "r1")); - QVERIFY(itemSuccessfullyCompletedGetRank(completeSpy, "r1") > 1); - QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); - } - void testLocalDelete() { FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; ItemCompletedSpy completeSpy(fakeFolder); @@ -387,7 +336,7 @@ }); // For directly editing the remote checksum - auto &remoteInfo = fakeFolder.remoteModifier(); + auto &remoteInfo = dynamic_cast(fakeFolder.remoteModifier()); // Base mtime with no ms content (filesystem is seconds only) auto mtime = QDateTime::currentDateTimeUtc().addDays(-4); @@ -510,9 +459,7 @@ int remoteQuota = 1000; int n507 = 0, nPUT = 0; QObject parent; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) -> QNetworkReply * { - Q_UNUSED(outgoingData) - + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (op == QNetworkAccessManager::PutOperation) { nPUT++; if (request.rawHeader("OC-Total-Length").toInt() > remoteQuota) { @@ -798,95 +745,6 @@ QCOMPARE(QFileInfo(fakeFolder.localPath() + "foo").lastModified(), datetime); } - - /** - * Checks whether subsequent large uploads are skipped after a 507 error - */ - void testErrorsWithBulkUpload() - { - FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; - fakeFolder.syncEngine().account()->setCapabilities({ { "dav", QVariantMap{ {"bulkupload", "1.0"} } } }); - - // Disable parallel uploads - SyncOptions syncOptions; - syncOptions._parallelNetworkJobs = 0; - fakeFolder.syncEngine().setSyncOptions(syncOptions); - - int nPUT = 0; - int nPOST = 0; - fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) -> QNetworkReply * { - auto contentType = request.header(QNetworkRequest::ContentTypeHeader).toString(); - if (op == QNetworkAccessManager::PostOperation) { - ++nPOST; - if (contentType.startsWith(QStringLiteral("multipart/related; boundary="))) { - auto jsonReplyObject = fakeFolder.forEachReplyPart(outgoingData, contentType, [] (const QMap &allHeaders) -> QJsonObject { - auto reply = QJsonObject{}; - const auto fileName = allHeaders[QStringLiteral("X-File-Path")]; - if (fileName.endsWith("A/big2") || - fileName.endsWith("A/big3") || - fileName.endsWith("A/big4") || - fileName.endsWith("A/big5") || - fileName.endsWith("A/big7") || - fileName.endsWith("B/big8")) { - reply.insert(QStringLiteral("error"), true); - reply.insert(QStringLiteral("etag"), {}); - return reply; - } else { - reply.insert(QStringLiteral("error"), false); - reply.insert(QStringLiteral("etag"), {}); - } - return reply; - }); - if (jsonReplyObject.size()) { - auto jsonReply = QJsonDocument{}; - jsonReply.setObject(jsonReplyObject); - return new FakeJsonErrorReply{op, request, this, 200, jsonReply}; - } - return nullptr; - } - } else if (op == QNetworkAccessManager::PutOperation) { - ++nPUT; - const auto fileName = getFilePathFromUrl(request.url()); - if (fileName.endsWith("A/big2") || - fileName.endsWith("A/big3") || - fileName.endsWith("A/big4") || - fileName.endsWith("A/big5") || - fileName.endsWith("A/big7") || - fileName.endsWith("B/big8")) { - return new FakeErrorReply(op, request, this, 412); - } - return nullptr; - } - return nullptr; - }); - - fakeFolder.localModifier().insert("A/big", 1); - QVERIFY(fakeFolder.syncOnce()); - QCOMPARE(nPUT, 0); - QCOMPARE(nPOST, 1); - nPUT = 0; - nPOST = 0; - - fakeFolder.localModifier().insert("A/big1", 1); // ok - fakeFolder.localModifier().insert("A/big2", 1); // ko - fakeFolder.localModifier().insert("A/big3", 1); // ko - fakeFolder.localModifier().insert("A/big4", 1); // ko - fakeFolder.localModifier().insert("A/big5", 1); // ko - fakeFolder.localModifier().insert("A/big6", 1); // ok - fakeFolder.localModifier().insert("A/big7", 1); // ko - fakeFolder.localModifier().insert("A/big8", 1); // ok - fakeFolder.localModifier().insert("B/big8", 1); // ko - - QVERIFY(!fakeFolder.syncOnce()); - QCOMPARE(nPUT, 0); - QCOMPARE(nPOST, 1); - nPUT = 0; - nPOST = 0; - - QVERIFY(!fakeFolder.syncOnce()); - QCOMPARE(nPUT, 6); - QCOMPARE(nPOST, 0); - } }; QTEST_GUILESS_MAIN(TestSyncEngine) diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncjournaldb.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncjournaldb.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncjournaldb.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncjournaldb.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -117,7 +117,7 @@ { SyncJournalFileRecord record; record._path = "foo-nochecksum"; - record._remotePerm = RemotePermissions::fromDbValue("RW"); + record._remotePerm = RemotePermissions(); record._modtime = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); QVERIFY(_db.setFileRecord(record)); @@ -214,7 +214,6 @@ record._path = path; record._type = type; record._etag = initialEtag; - record._remotePerm = RemotePermissions::fromDbValue("RW"); _db.setFileRecord(record); }; auto getEtag = [&](const QByteArray &path) { @@ -276,7 +275,6 @@ auto makeEntry = [&](const QByteArray &path) { SyncJournalFileRecord record; record._path = path; - record._remotePerm = RemotePermissions::fromDbValue("RW"); _db.setFileRecord(record); }; diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncvirtualfiles.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncvirtualfiles.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncvirtualfiles.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncvirtualfiles.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -1211,8 +1211,8 @@ QCOMPARE(*vfs->availability("local"), VfsItemAvailability::Mixed); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::Mixed); - QVERIFY(vfs->setPinState("local", PinState::AlwaysLocal)); - QVERIFY(vfs->setPinState("online", PinState::OnlineOnly)); + vfs->setPinState("local", PinState::AlwaysLocal); + vfs->setPinState("online", PinState::OnlineOnly); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::OnlineOnly); @@ -1293,13 +1293,13 @@ QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename" DVSUFFIX), PinState::OnlineOnly); // When a file is hydrated or dehydrated due to pin state it retains its pin state - QVERIFY(vfs->setPinState("onlinerenamed2/file1rename" DVSUFFIX, PinState::AlwaysLocal)); + vfs->setPinState("onlinerenamed2/file1rename" DVSUFFIX, PinState::AlwaysLocal); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename")); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::AlwaysLocal); - QVERIFY(vfs->setPinState("onlinerenamed2", PinState::Unspecified)); - QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly)); + vfs->setPinState("onlinerenamed2", PinState::Unspecified); + vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename" DVSUFFIX)); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename" DVSUFFIX), PinState::OnlineOnly); @@ -1376,7 +1376,7 @@ cleanup(); // Dehydrate - QVERIFY(vfs->setPinState(QString(), PinState::OnlineOnly)); + vfs->setPinState(QString(), PinState::OnlineOnly); QVERIFY(!fakeFolder.syncOnce()); QVERIFY(itemInstruction(completeSpy, "A/igno" DVSUFFIX, CSYNC_INSTRUCTION_IGNORE)); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncxattr.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncxattr.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testsyncxattr.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testsyncxattr.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -956,8 +956,8 @@ QCOMPARE(*vfs->availability("local"), VfsItemAvailability::Mixed); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::Mixed); - QVERIFY(vfs->setPinState("local", PinState::AlwaysLocal)); - QVERIFY(vfs->setPinState("online", PinState::OnlineOnly)); + vfs->setPinState("local", PinState::AlwaysLocal); + vfs->setPinState("online", PinState::OnlineOnly); QVERIFY(fakeFolder.syncOnce()); QCOMPARE(*vfs->availability("online"), VfsItemAvailability::OnlineOnly); @@ -1037,13 +1037,13 @@ QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::OnlineOnly); // When a file is hydrated or dehydrated due to pin state it retains its pin state - QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::AlwaysLocal)); + vfs->setPinState("onlinerenamed2/file1rename", PinState::AlwaysLocal); QVERIFY(fakeFolder.syncOnce()); QVERIFY(fakeFolder.currentLocalState().find("onlinerenamed2/file1rename")); QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::AlwaysLocal); - QVERIFY(vfs->setPinState("onlinerenamed2", PinState::Unspecified)); - QVERIFY(vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly)); + vfs->setPinState("onlinerenamed2", PinState::Unspecified); + vfs->setPinState("onlinerenamed2/file1rename", PinState::OnlineOnly); QVERIFY(fakeFolder.syncOnce()); XAVERIFY_VIRTUAL(fakeFolder, "onlinerenamed2/file1rename"); diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testtheme.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testtheme.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testtheme.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testtheme.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -16,7 +16,6 @@ #include "theme.h" #include "themeutils.h" -#include "iconutils.h" class TestTheme : public QObject { diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testunifiedsearchlistmodel.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testunifiedsearchlistmodel.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testunifiedsearchlistmodel.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testunifiedsearchlistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,640 +0,0 @@ -/* - * Copyright (C) by Oleksandr Zolotov - * - * 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 "gui/tray/unifiedsearchresultslistmodel.h" - -#include "account.h" -#include "accountstate.h" -#include "syncenginetestutils.h" - -#include -#include -#include -#include - -namespace { -/** - * @brief The FakeDesktopServicesUrlHandler - * overrides QDesktopServices::openUrl - **/ -class FakeDesktopServicesUrlHandler : public QObject -{ - Q_OBJECT - -public: - FakeDesktopServicesUrlHandler(QObject *parent = nullptr) - : QObject(parent) - {} - -public: -signals: - void resultClicked(const QUrl &url); -}; - -/** - * @brief The FakeProvider - * is a simple structure that represents initial list of providers and their properties - **/ -class FakeProvider -{ -public: - QString _id; - QString _name; - qint32 _order = std::numeric_limits::max(); - quint32 _numItemsToInsert = 5; // how many fake resuls to insert -}; - -// this will be used when initializing fake search results data for each provider -static const QVector fakeProvidersInitInfo = { - {QStringLiteral("settings_apps"), QStringLiteral("Apps"), -50, 10}, - {QStringLiteral("talk-message"), QStringLiteral("Messages"), -2, 17}, - {QStringLiteral("files"), QStringLiteral("Files"), 5, 3}, - {QStringLiteral("deck"), QStringLiteral("Deck"), 10, 5}, - {QStringLiteral("comments"), QStringLiteral("Comments"), 10, 2}, - {QStringLiteral("mail"), QStringLiteral("Mails"), 10, 15}, - {QStringLiteral("calendar"), QStringLiteral("Events"), 30, 11} -}; - -static QByteArray fake404Response = R"( -{"ocs":{"meta":{"status":"failure","statuscode":404,"message":"Invalid query, please check the syntax. API specifications are here: http:\/\/www.freedesktop.org\/wiki\/Specifications\/open-collaboration-services.\n"},"data":[]}} -)"; - -static QByteArray fake400Response = R"( -{"ocs":{"meta":{"status":"failure","statuscode":400,"message":"Parameter is incorrect.\n"},"data":[]}} -)"; - -static QByteArray fake500Response = R"( -{"ocs":{"meta":{"status":"failure","statuscode":500,"message":"Internal Server Error.\n"},"data":[]}} -)"; - -/** - * @brief The FakeSearchResultsStorage - * emulates the real server storage that contains all the results that UnifiedSearchListmodel will search for - **/ -class FakeSearchResultsStorage -{ - class Provider - { - public: - class SearchResult - { - public: - QString _thumbnailUrl; - QString _title; - QString _subline; - QString _resourceUrl; - QString _icon; - bool _rounded; - }; - - QString _id; - QString _name; - qint32 _order = std::numeric_limits::max(); - qint32 _cursor = 0; - bool _isPaginated = false; - QVector _results; - }; - - FakeSearchResultsStorage() = default; - -public: - static FakeSearchResultsStorage *instance() - { - if (!_instance) { - _instance = new FakeSearchResultsStorage(); - _instance->init(); - } - - return _instance; - }; - - static void destroy() - { - if (_instance) { - delete _instance; - } - - _instance = nullptr; - } - - void init() - { - if (!_searchResultsData.isEmpty()) { - return; - } - - _metaSuccess = {{QStringLiteral("status"), QStringLiteral("ok")}, {QStringLiteral("statuscode"), 200}, - {QStringLiteral("message"), QStringLiteral("OK")}}; - - initProvidersResponse(); - - initSearchResultsData(); - } - - // initialize the JSON response containing the fake list of providers and their properties - void initProvidersResponse() - { - QList providersList; - - for (const auto &fakeProviderInitInfo : fakeProvidersInitInfo) { - providersList.push_back(QVariantMap{ - {QStringLiteral("id"), fakeProviderInitInfo._id}, - {QStringLiteral("name"), fakeProviderInitInfo._name}, - {QStringLiteral("order"), fakeProviderInitInfo._order}, - }); - } - - const QVariantMap ocsMap = { - {QStringLiteral("meta"), _metaSuccess}, - {QStringLiteral("data"), providersList} - }; - - _providersResponse = - QJsonDocument::fromVariant(QVariantMap{{QStringLiteral("ocs"), ocsMap}}).toJson(QJsonDocument::Compact); - } - - // init the map of fake search results for each provider - void initSearchResultsData() - { - for (const auto &fakeProvider : fakeProvidersInitInfo) { - auto &providerData = _searchResultsData[fakeProvider._id]; - providerData._id = fakeProvider._id; - providerData._name = fakeProvider._name; - providerData._order = fakeProvider._order; - if (fakeProvider._numItemsToInsert > pageSize) { - providerData._isPaginated = true; - } - for (quint32 i = 0; i < fakeProvider._numItemsToInsert; ++i) { - providerData._results.push_back( - {"http://example.de/avatar/john/64", QString(QStringLiteral("John Doe in ") + fakeProvider._name), - QString(QStringLiteral("We a discussion about ") + fakeProvider._name - + QStringLiteral(" already. But, let's have a follow up tomorrow afternoon.")), - "http://example.de/call/abcde12345#message_12345", QStringLiteral("icon-talk"), true}); - } - } - } - - const QList resultsForProvider(const QString &providerId, int cursor) - { - QList list; - - const auto results = resultsForProviderAsVector(providerId, cursor); - - if (results.isEmpty()) { - return list; - } - - for (const auto &result : results) { - list.push_back(QVariantMap{ - {"thumbnailUrl", result._thumbnailUrl}, - {"title", result._title}, - {"subline", result._subline}, - {"resourceUrl", result._resourceUrl}, - {"icon", result._icon}, - {"rounded", result._rounded} - }); - } - - return list; - } - - const QVector resultsForProviderAsVector(const QString &providerId, int cursor) - { - QVector results; - - const auto provider = _searchResultsData.value(providerId, Provider()); - - if (provider._id.isEmpty() || cursor > provider._results.size()) { - return results; - } - - const int n = cursor + pageSize > provider._results.size() - ? 0 - : cursor + pageSize; - - for (int i = cursor; i < n; ++i) { - results.push_back(provider._results[i]); - } - - return results; - } - - const QByteArray queryProvider(const QString &providerId, const QString &searchTerm, int cursor) - { - if (!_searchResultsData.contains(providerId)) { - return fake404Response; - } - - if (searchTerm == QStringLiteral("[HTTP500]")) { - return fake500Response; - } - - if (searchTerm == QStringLiteral("[empty]")) { - const QVariantMap dataMap = {{QStringLiteral("name"), _searchResultsData[providerId]._name}, - {QStringLiteral("isPaginated"), false}, {QStringLiteral("cursor"), 0}, - {QStringLiteral("entries"), QVariantList{}}}; - - const QVariantMap ocsMap = {{QStringLiteral("meta"), _metaSuccess}, {QStringLiteral("data"), dataMap}}; - - return QJsonDocument::fromVariant(QVariantMap{{QStringLiteral("ocs"), ocsMap}}) - .toJson(QJsonDocument::Compact); - } - - const auto provider = _searchResultsData.value(providerId, Provider()); - - const auto nextCursor = cursor + pageSize; - - const QVariantMap dataMap = {{QStringLiteral("name"), _searchResultsData[providerId]._name}, - {QStringLiteral("isPaginated"), _searchResultsData[providerId]._isPaginated}, - {QStringLiteral("cursor"), nextCursor}, - {QStringLiteral("entries"), resultsForProvider(providerId, cursor)}}; - - const QVariantMap ocsMap = {{QStringLiteral("meta"), _metaSuccess}, {QStringLiteral("data"), dataMap}}; - - return QJsonDocument::fromVariant(QVariantMap{{QStringLiteral("ocs"), ocsMap}}).toJson(QJsonDocument::Compact); - } - - const QByteArray &fakeProvidersResponseJson() const { return _providersResponse; } - -private: - static FakeSearchResultsStorage *_instance; - - static const int pageSize = 5; - - QMap _searchResultsData; - - QByteArray _providersResponse = fake404Response; - - QVariantMap _metaSuccess; -}; - -FakeSearchResultsStorage *FakeSearchResultsStorage::_instance = nullptr; - -} - -class TestUnifiedSearchListmodel : public QObject -{ - Q_OBJECT - -public: - TestUnifiedSearchListmodel() = default; - - QScopedPointer fakeQnam; - OCC::AccountPtr account; - QScopedPointer accountState; - QScopedPointer model; - QScopedPointer modelTester; - - QScopedPointer fakeDesktopServicesUrlHandler; - - static const int searchResultsReplyDelay = 100; - -private slots: - void initTestCase() - { - fakeQnam.reset(new FakeQNAM({})); - account = OCC::Account::create(); - account->setCredentials(new FakeCredentials{fakeQnam.data()}); - account->setUrl(QUrl(("http://example.de"))); - - accountState.reset(new OCC::AccountState(account)); - - fakeQnam->setOverride([this](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *device) { - Q_UNUSED(device); - QNetworkReply *reply = nullptr; - - const auto urlQuery = QUrlQuery(req.url()); - const auto format = urlQuery.queryItemValue(QStringLiteral("format")); - const auto cursor = urlQuery.queryItemValue(QStringLiteral("cursor")).toInt(); - const auto searchTerm = urlQuery.queryItemValue(QStringLiteral("term")); - const auto path = req.url().path(); - - if (!req.url().toString().startsWith(accountState->account()->url().toString())) { - reply = new FakeErrorReply(op, req, this, 404, fake404Response); - } - if (format != QStringLiteral("json")) { - reply = new FakeErrorReply(op, req, this, 400, fake400Response); - } - - // handle fetch of providers list - if (path.startsWith(QStringLiteral("/ocs/v2.php/search/providers")) && searchTerm.isEmpty()) { - reply = new FakePayloadReply(op, req, - FakeSearchResultsStorage::instance()->fakeProvidersResponseJson(), fakeQnam.data()); - // handle search for provider - } else if (path.startsWith(QStringLiteral("/ocs/v2.php/search/providers")) && !searchTerm.isEmpty()) { - const auto pathSplit = path.mid(QString(QStringLiteral("/ocs/v2.php/search/providers")).size()) - .split(QLatin1Char('/'), Qt::SkipEmptyParts); - - if (!pathSplit.isEmpty() && path.contains(pathSplit.first())) { - reply = new FakePayloadReply(op, req, - FakeSearchResultsStorage::instance()->queryProvider(pathSplit.first(), searchTerm, cursor), - searchResultsReplyDelay, fakeQnam.data()); - } - } - - if (!reply) { - return qobject_cast(new FakeErrorReply(op, req, this, 404, QByteArrayLiteral("{error: \"Not found!\"}"))); - } - - return reply; - }); - - model.reset(new OCC::UnifiedSearchResultsListModel(accountState.data())); - - modelTester.reset(new QAbstractItemModelTester(model.data())); - - fakeDesktopServicesUrlHandler.reset(new FakeDesktopServicesUrlHandler); - } - void testSetSearchTermStartStopSearch() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - // #1 test setSearchTerm actually sets the search term and the signal is emitted - QSignalSpy searhTermChanged(model.data(), &OCC::UnifiedSearchResultsListModel::searchTermChanged); - model->setSearchTerm(QStringLiteral("dis")); - QCOMPARE(searhTermChanged.count(), 1); - QCOMPARE(model->searchTerm(), QStringLiteral("dis")); - - // #2 test setSearchTerm actually sets the search term and the signal is emitted - searhTermChanged.clear(); - model->setSearchTerm(model->searchTerm() + QStringLiteral("cuss")); - QCOMPARE(model->searchTerm(), QStringLiteral("discuss")); - QCOMPARE(searhTermChanged.count(), 1); - - // #3 test that model has not started search yet - QVERIFY(!model->isSearchInProgress()); - - - // #4 test that model has started the search after specific delay - QSignalSpy searchInProgressChanged(model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - // allow search jobs to get created within the model - QVERIFY(searchInProgressChanged.wait()); - QCOMPARE(searchInProgressChanged.count(), 1); - QVERIFY(model->isSearchInProgress()); - - // #5 test that model has stopped the search after setting empty search term - model->setSearchTerm(QStringLiteral("")); - QVERIFY(!model->isSearchInProgress()); - } - - void testSetSearchTermResultsFound() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - // test that search term gets set, search gets started and enough results get returned - model->setSearchTerm(model->searchTerm() + QStringLiteral("discuss")); - - QSignalSpy searchInProgressChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has started - QCOMPARE(searchInProgressChanged.count(), 1); - QVERIFY(model->isSearchInProgress()); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has finished - QVERIFY(!model->isSearchInProgress()); - - QVERIFY(model->rowCount() > 0); - } - - void testSetSearchTermResultsNotFound() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - // test that search term gets set, search gets started and enough results get returned - model->setSearchTerm(model->searchTerm() + QStringLiteral("[empty]")); - - QSignalSpy searchInProgressChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has started - QCOMPARE(searchInProgressChanged.count(), 1); - QVERIFY(model->isSearchInProgress()); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has finished - QVERIFY(!model->isSearchInProgress()); - - QVERIFY(model->rowCount() == 0); - } - - void testFetchMoreClicked() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - QSignalSpy searchInProgressChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - - // test that search term gets set, search gets started and enough results get returned - model->setSearchTerm(model->searchTerm() + QStringLiteral("whatever")); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has started - QVERIFY(model->isSearchInProgress()); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has finished - QVERIFY(!model->isSearchInProgress()); - - const auto numRowsInModelPrev = model->rowCount(); - - // test fetch more results - QSignalSpy currentFetchMoreInProgressProviderIdChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::currentFetchMoreInProgressProviderIdChanged); - QSignalSpy rowsInserted(model.data(), &OCC::UnifiedSearchResultsListModel::rowsInserted); - for (int i = 0; i < model->rowCount(); ++i) { - const auto type = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::TypeRole); - - if (type == OCC::UnifiedSearchResult::Type::FetchMoreTrigger) { - const auto providerId = - model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::ProviderIdRole) - .toString(); - model->fetchMoreTriggerClicked(providerId); - break; - } - } - - // make sure the currentFetchMoreInProgressProviderId was set back and forth and correct number fows has been inserted - QCOMPARE(currentFetchMoreInProgressProviderIdChanged.count(), 1); - - const auto providerIdFetchMoreTriggered = model->currentFetchMoreInProgressProviderId(); - - QVERIFY(!providerIdFetchMoreTriggered.isEmpty()); - - QVERIFY(currentFetchMoreInProgressProviderIdChanged.wait()); - - QVERIFY(model->currentFetchMoreInProgressProviderId().isEmpty()); - - QCOMPARE(rowsInserted.count(), 1); - - const auto arguments = rowsInserted.takeFirst(); - - QVERIFY(arguments.size() > 0); - - const auto first = arguments.at(0).toInt(); - const auto last = arguments.at(1).toInt(); - - const int numInsertedExpected = last - first; - - QCOMPARE(model->rowCount() - numRowsInModelPrev, numInsertedExpected); - - // make sure the FetchMoreTrigger gets removed when no more results available - if (!providerIdFetchMoreTriggered.isEmpty()) { - currentFetchMoreInProgressProviderIdChanged.clear(); - rowsInserted.clear(); - - QSignalSpy rowsRemoved(model.data(), &OCC::UnifiedSearchResultsListModel::rowsRemoved); - - for (int i = 0; i < 10; ++i) { - model->fetchMoreTriggerClicked(providerIdFetchMoreTriggered); - - QVERIFY(currentFetchMoreInProgressProviderIdChanged.wait()); - - if (rowsRemoved.count() > 0) { - break; - } - } - - QCOMPARE(rowsRemoved.count(), 1); - - bool isFetchMoreTriggerFound = false; - - for (int i = 0; i < model->rowCount(); ++i) { - const auto type = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::TypeRole); - const auto providerId = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::ProviderIdRole) - .toString(); - if (type == OCC::UnifiedSearchResult::Type::FetchMoreTrigger - && providerId == providerIdFetchMoreTriggered) { - isFetchMoreTriggerFound = true; - break; - } - } - - QVERIFY(!isFetchMoreTriggerFound); - } - } - - void testSearchResultlicked() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - // test that search term gets set, search gets started and enough results get returned - model->setSearchTerm(model->searchTerm() + QStringLiteral("discuss")); - - QSignalSpy searchInProgressChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has started - QCOMPARE(searchInProgressChanged.count(), 1); - QVERIFY(model->isSearchInProgress()); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has finished and some results has been received - QVERIFY(!model->isSearchInProgress()); - - QVERIFY(model->rowCount() != 0); - - QDesktopServices::setUrlHandler("http", fakeDesktopServicesUrlHandler.data(), "resultClicked"); - QDesktopServices::setUrlHandler("https", fakeDesktopServicesUrlHandler.data(), "resultClicked"); - - QSignalSpy resultClicked(fakeDesktopServicesUrlHandler.data(), &FakeDesktopServicesUrlHandler::resultClicked); - - // test click on a result item - QString urlForClickedResult; - - for (int i = 0; i < model->rowCount(); ++i) { - const auto type = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::TypeRole); - - if (type == OCC::UnifiedSearchResult::Type::Default) { - const auto providerId = - model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::ProviderIdRole) - .toString(); - urlForClickedResult = model->data(model->index(i), OCC::UnifiedSearchResultsListModel::DataRole::ResourceUrlRole).toString(); - - if (!providerId.isEmpty() && !urlForClickedResult.isEmpty()) { - model->resultClicked(providerId, QUrl(urlForClickedResult)); - break; - } - } - } - - QCOMPARE(resultClicked.count(), 1); - - const auto arguments = resultClicked.takeFirst(); - - const auto urlOpenTriggeredViaDesktopServices = arguments.at(0).toString(); - - QCOMPARE(urlOpenTriggeredViaDesktopServices, urlForClickedResult); - } - - void testSetSearchTermResultsError() - { - // make sure the model is empty - model->setSearchTerm(QStringLiteral("")); - QVERIFY(model->rowCount() == 0); - - QSignalSpy errorStringChanged(model.data(), &OCC::UnifiedSearchResultsListModel::errorStringChanged); - QSignalSpy searchInProgressChanged( - model.data(), &OCC::UnifiedSearchResultsListModel::isSearchInProgressChanged); - - model->setSearchTerm(model->searchTerm() + QStringLiteral("[HTTP500]")); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has started - QVERIFY(model->isSearchInProgress()); - - QVERIFY(searchInProgressChanged.wait()); - - // make sure search has finished - QVERIFY(!model->isSearchInProgress()); - - // make sure the model is empty and an error string has been set - QVERIFY(model->rowCount() == 0); - - QVERIFY(errorStringChanged.count() > 0); - - QVERIFY(!model->errorString().isEmpty()); - } - - void cleanupTestCase() - { - FakeSearchResultsStorage::destroy(); - } -}; - -QTEST_MAIN(TestUnifiedSearchListmodel) -#include "testunifiedsearchlistmodel.moc" diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testutility.cpp nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testutility.cpp --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/test/testutility.cpp 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/test/testutility.cpp 2022-01-03 12:25:12.000000000 +0000 @@ -58,7 +58,8 @@ void testLaunchOnStartup() { - QString postfix = QString::number(OCC::Utility::rand()); + qsrand(QDateTime::currentDateTime().toTime_t()); + QString postfix = QString::number(qrand()); const QString appName = QString::fromLatin1("testLaunchOnStartup.%1").arg(postfix); const QString guiName = "LaunchOnStartup GUI Name"; @@ -123,8 +124,8 @@ qDebug() << "Version of installed Nextcloud: " << ver; QVERIFY(!ver.isEmpty()); - const QRegularExpression rx(QRegularExpression::anchoredPattern(APPLICATION_SHORTNAME R"( version \d+\.\d+\.\d+.*)")); - QVERIFY(rx.match(ver).hasMatch()); + QRegExp rx(APPLICATION_SHORTNAME R"( version \d+\.\d+\.\d+.*)"); + QVERIFY(rx.exactMatch(ver)); } else { QVERIFY(versionOfInstalledBinary().isEmpty()); } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/calendar.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/calendar.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/calendar.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/calendar.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/clear.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/clear.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/clear.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/clear.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/comment.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/comment.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/comment.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/comment.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/deck.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/deck.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/deck.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/deck.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/edit.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/edit.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/edit.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/edit.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ - - - - - - - - - - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/email.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/email.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/email.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/email.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/search.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/search.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/black/search.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/black/search.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/colored/icons/Nextcloud-icon-win-folder.svg nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/colored/icons/Nextcloud-icon-win-folder.svg --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/colored/icons/Nextcloud-icon-win-folder.svg 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/colored/icons/Nextcloud-icon-win-folder.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/Style/Style.qml nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/Style/Style.qml --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme/Style/Style.qml 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme/Style/Style.qml 2022-01-03 12:25:12.000000000 +0000 @@ -12,11 +12,6 @@ property color lightHover: "#f7f7f7" property color menuBorder: "#bdbdbd" - // ErrorBox colors - property color errorBoxTextColor: Theme.errorBoxTextColor - property color errorBoxBackgroundColor: Theme.errorBoxBackgroundColor - property color errorBoxBorderColor: Theme.errorBoxBorderColor - // Fonts // We are using pixel size because this is cross platform comparable, point size isn't property int topLinePixelSize: 12 @@ -61,15 +56,4 @@ // Visual behaviour property bool hoverEffectsEnabled: true - - // unified search constants - readonly property int unifiedSearchItemHeight: trayWindowHeaderHeight - readonly property int unifiedSearchResultTextLeftMargin: 18 - readonly property int unifiedSearchResultTextRightMargin: 16 - readonly property int unifiedSearchResulIconWidth: 24 - readonly property int unifiedSearchResulIconLeftMargin: 12 - readonly property int unifiedSearchResulTitleFontSize: topLinePixelSize - readonly property int unifiedSearchResulSublineFontSize: subLinePixelSize - readonly property string unifiedSearchResulTitleColor: "black" - readonly property string unifiedSearchResulSublineColor: "grey" } diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme.qrc nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme.qrc --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme.qrc 1970-01-01 00:00:00.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme.qrc 2022-01-03 12:25:12.000000000 +0000 @@ -0,0 +1,202 @@ + + + theme/colored/16-Nextcloud-icon.png + theme/colored/24-Nextcloud-icon.png + theme/colored/32-Nextcloud-icon.png + theme/colored/48-Nextcloud-icon.png + theme/colored/64-Nextcloud-icon.png + theme/colored/128-Nextcloud-icon.png + theme/colored/256-Nextcloud-icon.png + theme/colored/512-Nextcloud-icon.png + theme/colored/1024-Nextcloud-icon.png + theme/colored/state-error-32.png + theme/colored/state-error-64.png + theme/colored/state-error-128.png + theme/colored/state-error-256.png + theme/colored/state-ok-32.png + theme/colored/state-ok-64.png + theme/colored/state-ok-128.png + theme/colored/state-ok-256.png + theme/colored/state-pause-32.png + theme/colored/state-pause-64.png + theme/colored/state-pause-128.png + theme/colored/state-pause-256.png + theme/colored/state-sync-32.png + theme/colored/state-sync-64.png + theme/colored/state-sync-128.png + theme/colored/state-sync-256.png + theme/colored/wizard_logo.png + theme/colored/wizard_logo@2x.png + theme/colored/wizard_logo.svg + theme/white/state-error-32.png + theme/white/state-error-64.png + theme/white/state-error-128.png + theme/white/state-error-256.png + theme/white/state-ok-32.png + theme/white/state-ok-64.png + theme/white/state-ok-128.png + theme/white/state-ok-256.png + theme/white/state-pause-32.png + theme/white/state-pause-64.png + theme/white/state-pause-128.png + theme/white/state-pause-256.png + theme/white/state-sync-32.png + theme/white/state-sync-64.png + theme/white/state-sync-128.png + theme/white/state-sync-256.png + theme/black/state-error-32.png + theme/black/state-error-64.png + theme/black/state-error-128.png + theme/black/state-error-256.png + theme/black/state-ok-32.png + theme/black/state-ok-64.png + theme/black/state-ok-128.png + theme/black/state-ok-256.png + theme/black/state-pause-32.png + theme/black/state-pause-64.png + theme/black/state-pause-128.png + theme/black/state-pause-256.png + theme/black/state-sync-32.png + theme/black/state-sync-64.png + theme/black/state-sync-128.png + theme/black/state-sync-256.png + theme/colored/state-error.svg + theme/colored/state-error-16.png + theme/colored/state-offline.svg + theme/colored/state-offline-16.png + theme/colored/state-offline-32.png + theme/colored/state-offline-64.png + theme/colored/state-offline-128.png + theme/colored/state-offline-256.png + theme/colored/state-ok.svg + theme/colored/state-ok-16.png + theme/colored/state-pause.svg + theme/colored/state-pause-16.png + theme/colored/state-sync.svg + theme/colored/state-sync-16.png + theme/colored/state-warning.svg + theme/colored/state-warning-16.png + theme/colored/state-warning-32.png + theme/colored/state-warning-64.png + theme/colored/state-warning-128.png + theme/colored/state-warning-256.png + theme/black/folder.png + theme/black/folder@2x.png + theme/white/folder.png + theme/white/folder@2x.png + theme/colored/folder.png + theme/colored/folder@2x.png + theme/black/control-next.svg + theme/black/control-prev.svg + theme/black/state-error.svg + theme/black/state-error-16.png + theme/black/state-offline.svg + theme/black/state-offline-16.png + theme/black/state-offline-32.png + theme/black/state-offline-64.png + theme/black/state-offline-128.png + theme/black/state-offline-256.png + theme/black/state-ok.svg + theme/black/state-ok-16.png + theme/black/state-pause.svg + theme/black/state-pause-16.png + theme/black/state-sync.svg + theme/black/state-sync-16.png + theme/black/state-warning.svg + theme/black/state-warning-16.png + theme/black/state-warning-32.png + theme/black/state-warning-64.png + theme/black/state-warning-128.png + theme/black/state-warning-256.png + theme/white/control-next.svg + theme/white/control-prev.svg + theme/white/state-error.svg + theme/white/state-error-16.png + theme/white/state-offline.svg + theme/white/state-offline-16.png + theme/white/state-offline-32.png + theme/white/state-offline-64.png + theme/white/state-offline-128.png + theme/white/state-offline-256.png + theme/white/state-ok.svg + theme/white/state-ok-16.png + theme/white/state-pause.svg + theme/white/state-pause-16.png + theme/white/state-sync.svg + theme/white/state-sync-16.png + theme/white/state-warning.svg + theme/white/state-warning-16.png + theme/white/state-warning-32.png + theme/white/state-warning-64.png + theme/white/state-warning-128.png + theme/white/state-warning-256.png + theme/white/wizard-files.png + theme/white/wizard-files@2x.png + theme/white/wizard-groupware.png + theme/white/wizard-groupware@2x.png + theme/white/wizard-nextcloud.png + theme/white/wizard-nextcloud@2x.png + theme/white/wizard-talk.png + theme/white/wizard-talk@2x.png + theme/black/wizard-files.png + theme/black/wizard-files@2x.png + theme/black/wizard-groupware.png + theme/black/wizard-groupware@2x.png + theme/black/wizard-nextcloud.png + theme/black/wizard-nextcloud@2x.png + theme/black/wizard-talk.png + theme/black/wizard-talk@2x.png + theme/black/wizard-files.png + theme/colored/wizard-files.png + theme/colored/wizard-files@2x.png + theme/colored/wizard-groupware.png + theme/colored/wizard-groupware@2x.png + theme/colored/wizard-nextcloud.png + theme/colored/wizard-nextcloud@2x.png + theme/colored/wizard-talk.png + theme/colored/wizard-talk@2x.png + theme/sync-arrow.svg + theme/white/external.png + theme/white/external@2x.png + theme/black/external.png + theme/black/external@2x.png + theme/colored/external.png + theme/colored/external@2x.png + theme/white/folder.svg + theme/white/more-apps.svg + theme/white/talk-app.svg + theme/white/caret-down.svg + theme/black/caret-down.svg + theme/white/user.svg + theme/black/user.svg + theme/white/add.svg + theme/black/add.svg + theme/black/activity.svg + theme/black/bell.svg + theme/black/state-info.svg + theme/close.svg + theme/files.svg + theme/public.svg + theme/settings.svg + theme/confirm.svg + theme/copy.svg + theme/more.svg + theme/change.svg + theme/lock-http.svg + theme/lock-https.svg + theme/lock-broken.svg + theme/network.svg + theme/account.svg + theme/colored/add.svg + theme/colored/delete.svg + theme/colored/Nextcloud-icon.svg + theme/add.svg + theme/share.svg + theme/reply.svg + theme/magnifying-glass.svg + theme/colored/user-status-online.svg + theme/colored/user-status-invisible.svg + theme/colored/user-status-away.svg + theme/colored/user-status-dnd.svg + + diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme.qrc.in nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme.qrc.in --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/theme.qrc.in 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/theme.qrc.in 2022-01-03 12:25:12.000000000 +0000 @@ -44,9 +44,6 @@ theme/white/state-sync-64.png theme/white/state-sync-128.png theme/white/state-sync-256.png - theme/black/clear.svg - theme/black/comment.svg - theme/black/search.svg theme/black/state-error-32.png theme/black/state-error-64.png theme/black/state-error-128.png @@ -84,7 +81,6 @@ theme/colored/state-warning-128.png theme/colored/state-warning-256.png theme/black/folder.png - theme/black/folder.svg theme/black/folder@2x.png theme/white/folder.png theme/white/folder@2x.png @@ -151,7 +147,6 @@ theme/black/wizard-talk.png theme/black/wizard-talk@2x.png theme/black/wizard-files.png - theme/black/wizard-groupware.svg theme/colored/wizard-files.png theme/colored/wizard-files@2x.png theme/colored/wizard-groupware.png @@ -178,9 +173,6 @@ theme/black/add.svg theme/black/activity.svg theme/black/bell.svg - theme/black/wizard-talk.svg - theme/black/calendar.svg - theme/black/deck.svg theme/black/state-info.svg theme/close.svg theme/files.svg @@ -206,8 +198,5 @@ theme/colored/user-status-invisible.svg theme/colored/user-status-away.svg theme/colored/user-status-dnd.svg - theme/black/email.svg - theme/black/edit.svg - theme/delete.svg diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_bg.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_bg.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_bg.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_bg.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Отворяне %1 локално - + Open share dialog Отваряне на диалоговия прозорец за споделяне - + Share %1 Споделяне %1 - - + + Show more actions Показване на повече действия @@ -39,7 +39,7 @@ ActivityList - + Activity list Списък на дейностите @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Връзката прекъсна - + Unknown error: network reply was deleted Неизвестна грешка: мрежовия отговор беше изтрит - + Server replied "%1 %2" to "%3 %4" Сървъра отговори "%1 %2" на "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Мнемонично криптиране от край до край - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). За да защитим вашата Криптографска идентичност, ние я криптираме мнемонично с 12 думи от речника. Моля, отбележете ги и ги пазете на сигурно място. Те ще са необходими, за да добавите други устройства към вашия профил (като вашия мобилен телефон или лаптоп). @@ -305,9 +305,9 @@ - - - + + + Cancel Отказ @@ -495,52 +495,52 @@ Премахни синхронизирането - + Disable virtual file support … Деактивиране на поддръжката на виртуални файлове ... - + Enable virtual file support %1 … Активиране на поддръжката на виртуални файлове %1 ... - + (experimental) (експериментално) - + Folder creation failed Създаването на папката се провали - + <p>Could not create local folder <i>%1</i>.</p> <p>Провалено е създаването на локална папка<i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Потвърждаване за премахване на синхронизация - + <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> - + Remove Folder Sync Connection Премахни - + Disable virtual file support? Да се деактивира ли поддръжката на виртуални файлове? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Това действие ще прекрати всяка текуща синхронизация. - + Disable support Деактивирне на поддръжката - + Sync Running Синхронизират се файлове - + The syncing operation is running.<br/>Do you want to terminate it? В момента се извършва синхронизиране.<br/>Да бъде ли прекратено? - + %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. В момента няма достъпна информация за използването на хранилището. - + %1 in use Ползвате %1 @@ -603,87 +603,87 @@ Вписване - + %1 as %2 %1 като %2 - + The server version %1 is 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. - + Server configuration error: %1 at %2. Грешка в конфигурацията на сървъра:% 1 при% 2. - + No %1 connection configured. Няма %1 конфигурирана връзка. - + 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 Премахни връзката @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Отписан - + Disconnected Без връзка - + Connected Свързан - + Service unavailable Услугата не е налична - + Maintenance mode Режим на поддръжка - + Network error Мрежова грешка - + Configuration error Грешка с конфигурацията - + Asking Credentials Въведете потребителска информация за вход - + Unknown account state Непознато състояние на профила @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Файловете от списъка за игнориране, както и символните връзки, не са синхронизирани. - + For more activities please open the Activity app. За повече дейности, моля, отворете приложението Дейност. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Продължаването ще означава <b>изтриване на тези настройки</b>. - + Continuing will mean <b>ignoring these settings</b>. Продължаването ще означава <b>игнориране на тези настройки</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Някои настройки са били конфигурирани в по-нови версии на този клиент и използват функции, които не са налични в тази версия.<br><br>% 1<br><br>Текущият конфигурационен файл вече е архивиран до% 2. - + Quit Напусни - + Continue Продължи - + Error accessing the configuration file Грешка при опита за отваряне на конфигурационния файл - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Възникна грешка при достъпа до конфигурационния файл при % 1 . Моля да се уверите, че вашият потребител има достъп до файла. - + Quit %1 Напускане %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - Файл% 1 не може да бъде качен, тъй като съществува друг файл със същото име, само че е в различено дело - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Файлът е премахнат (стартиране на качване) % 1 - - - - Local file changed during syncing. It will be resumed. - Локален файл е променен по време на синхронизирането. Ще бъде възобновен. - - - - - Local file changed during sync. - Локален файл е променен по време на синхронизирането. - - - - Error updating metadata: %1 - Грешка при актуализиране на метаданни: %1 - - - - The file %1 is currently in use - Файлът %1 в момента се използва - - - - The local file was removed during sync. - Локален файл е премахнат по време на синхронизирането. - - - - ; Restoration Failed: %1 - ; Възстановяването е Неуспешно: % 1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Възника грешка при запис на метаданните в базата данни @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Моля, въведете паролата си за шифроване от край до край:<br><br> Потребител:% 2Профил:% 3<br> - + Enter E2E passphrase Въведете парола E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ В отговора за откриване на сървърния файл липсват данни. - - + + Server error: PROPFIND reply is not XML formatted! Грешка на сървъра: PROPFIND отговорът не е форматиран в XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Грешка при отваряне на директория % 1 - + Directory not accessible on client, permission denied Директорията не е достъпна за клиента, разрешението е отказано - + Directory not found: %1 Директорията не е намерена:% 1 - + Filename encoding is not valid Кодирането на име на файл е невалидно - + Error while reading directory %1 Грешка при четене на директория% 1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Грешка, върната от сървъра: <em>%1</em> @@ -1190,24 +1127,24 @@ - + 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 Отговорът от сървъра не съдържа всички очаквани полета - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Върнатият URL адрес на сървъра не започва с HTTPS, въпреки че URL адресът за влизане започва с HTTPS. Влизането няма да е възможно, защото това може да е проблем със сигурността. Моля, свържете се с вашия администратор. @@ -1368,41 +1305,41 @@ Активност от синхронизиране - + 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. Моля, отидете в настройки, ако желаете да го свалите. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Папката % 1 е създадена, но преди това е била изключена от синхронизацията. Данните вътре в нея няма да бъдат синхронизирани. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Папката % 1 е създадена, но преди това е била изключена от синхронизацията. Данните вътре в нея няма да бъдат синхронизирани. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ % 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' бяха изтрити. Тези изтривания ще бъдат синхронизирани с вашия сървър, което прави тези файлове недостъпни, освен ако не бъдат възстановени. + Сигурни ли сте, че искате да синхронизирате тези действия със сървъра? +Ако това е инцидент и решите да запазите файловете си, те ще бъдат синхронизирани отново от сървъра. + + All files in the sync folder '%1' 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. @@ -1475,27 +1421,7 @@ Запазване на Локалните Файлове като Конфликтни - - 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 restore 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' бяха изтрити. Тези изтривания ще бъдат синхронизирани с вашия сървър, което прави тези файлове недостъпни, освен ако не бъдат възстановени. - Сигурни ли сте, че искате да синхронизирате тези действия със сървъра? -Ако това е инцидент и решите да запазите файловете си, те ще бъдат синхронизирани отново от сървъра. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1506,7 +1432,7 @@ Ако решите да изтриете файловете, те ще бъдат недостъпни за вас, освен ако не сте собственикът. - + 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. @@ -1515,17 +1441,28 @@ Ако това е инцидент и решите да запазите файловете си, те ще бъдат синхронизирани отново от сървъра. - + Remove All Files? Да се премахнат ли всички файлове? - + Remove all files Премахване на всички файлове - + + 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 restore 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“ бяха изтрити на сървъра. +Тези изтривания ще бъдат синхронизирани с вашата локална папка за синхронизиране, което прави тези файлове недостъпни, освен ако нямате право да ги възстановите. +Ако решите да възстановите файловете, те ще бъдат повторно синхронизирани със сървъра, ако имате права за това. +Ако решите да изтриете файловете, те ще бъдат недостъпни за вас, освен ако не сте собственикът. + + + Keep files Запазване на файловете @@ -1561,7 +1498,7 @@ OCC::FolderMan - + Could not reset folder state Състоянието на папка не можа да се нулира @@ -1571,37 +1508,37 @@ Намерен е стар дневник за синхронизиране '% 1', но не може да бъде премахнат. Моля да се уверите, че в момента не го използва нито едно приложение. - + 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. Синхронизиране на файлове. @@ -1611,67 +1548,67 @@ Синхронизирането беше успешно, неразрешени конфликти. - + Sync finished with unresolved conflicts. Синхронизирането приключи с неразрешени конфликти. - + Last Sync was successful. Последното синхронизиране завърши успешно. - + Setup Error. Грешка при Настройката. - + User Abort. Прекъсване от потребителя. - + Sync is paused. Синхронизирането е на пауза. - + %1 (Sync is paused) %1 (Синхронизирането е на пауза) - + No valid folder selected! Не сте избрали валидна папка! - + The selected path does not exist! Избраният път не съществува! - + The selected path is not a folder! Избраният път не е папка! - + You have no permission to write to the selected 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 вече се съдържа в папка, използвана във връзка за синхронизиране на папка. Моля, изберете друга! - + There is already a sync from the server to this local folder. Please pick another local folder! Вече има синхронизация от сървъра към тази локална папка. Моля, изберете друга локална папка! @@ -1883,12 +1820,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Добавяне на папка за синхронизиране - + Add Sync Connection Добави @@ -1929,42 +1866,42 @@ Въведете име за новата папка, която ще бъде създадена под „%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 <i>%1</i>, which is a subfolder of <i>%2</i>. Вече синхронизирате <i>1%</i>, която е подпапка от <i>%2</i>. @@ -1972,24 +1909,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Използвайте виртуални файлове, вместо да изтегляте незабавно% 1 съдържание - - + + (experimental) (експериментално) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Виртуалните файлове не се поддържат за основни дялове на Windows като локална папка. Моля, изберете валидна подпапка под буквата на устройството. - + Virtual files are not available for the selected folder Не са налични виртуални файлове за избраната папка @@ -2010,27 +1947,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Не е получен E-Tag от сървъра, проверете Proxy / Gateway - + We received a different E-Tag for resuming. Retrying next time. Получихме различен E-Tag за възобновяване. Повторен опит следващия път. - + We received an unexpected download Content-Length. Получихме неочаквано изтегляне, дължина на съдържанието.. - + Server returned wrong content-range Сървърът върна грешен обхват на съдържание - + Connection Timeout Грешка при свързване @@ -2150,22 +2087,22 @@ Създаване на Архив за Отстраняване на грешки ... - + Server notifications that require attention. Известия от сървъра, които изискват внимание. - + You cannot disable autostart because system-wide autostart is enabled. Не можете да деактивирате автоматичното стартиране, защото е активирано автоматично стартиране в цялата система. - + Change update channel? Промяна на канала за актуализация? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2174,32 +2111,32 @@ Обърнете внимание, че се избира само това от какво са взети надстройките на пула и че няма понижавания: Така че връщането от бета канала към стабилния канал обикновено не може да се направи веднага и означава изчакване на стабилна версия, която е по-нова от текущо инсталираната бета версия. - + Change update channel Промяна на канала за актуализация - + Cancel Отказ - + Create Debug Archive Създаване на Архив за Отстраняване на грешки - + Zip Archives Zip Архиви - + Debug Archive Created Създаден е Архив за Отстраняване на грешки - + Debug archive is created at %1 Архив за Отстраняване на грешки е създаден на %1 @@ -2207,22 +2144,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Нужна е парола за споделяне - + Please enter a password for your link share: Моля, въведете парола за споделяне на вашата връзка: - + Sharing error Грешка при споделянето - + Could not retrieve or create the public link share. Error: %1 @@ -2547,7 +2484,7 @@ OCC::Logger - + Error Грешка @@ -2557,7 +2494,7 @@ <nobr>Файл „% 1“<br/> не може да бъде отворен за записване.<br/><br/> Изходът на регистрационния файл <b>не</b> може да бъде записан!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Файл „% 1“<br/> не може да бъде отворен за записване.<br/><br/> Изходът на регистрационния файл <b>не</b> може да бъде записан!</nobr> @@ -2565,33 +2502,33 @@ 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 Получаване на актуализация - + Update Failed Неуспешна Актуализация @@ -2606,17 +2543,17 @@ <p>Налична е нова версия на % 1 Клиент, но процесът на актуализиране е неуспешен.</p><p><b>% 2</b> са изтеглени. Инсталираната версия е% 3. Ако потвърдите рестартиране и актуализиране, компютърът ви може да се рестартира, за да завърши инсталацията.</p> - + Ask again later Ново запитване по-късно - + Restart and update Рестартиране и актуализиране - + Update manually Ръчно актуализиране @@ -2727,7 +2664,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Грешка, върната от сървъра: <em>%1</em> @@ -2737,32 +2674,32 @@ Възникна грешка при достъпа до крайна точка 'маркер':<br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Възникна грешка при достъпа на крайната точка „маркер“: <br><em> %1</em> - + Empty JSON from OAuth2 redirect Изпразнете JSON от OAuth2, пренасочване - + 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> @@ -2832,12 +2769,12 @@ Актуализацията не можа да се изтегли. Моля, отворете <a href='%1'>тук</a>, за ръчно изтегляне на актуализацията. - + Could not download update. Please open %1 to download the update manually. Актуализацията не можа да се изтегли. Моля, отворете %1, за ръчно изтегляне на актуализацията. - + Could not check for new updates. Проверката за актуализации не може да бъде извършена. @@ -2847,27 +2784,27 @@ Наличен е нов % 1. Моля, отворете <a href='%2'>%2</a>, за изтегляне на актуализацията. - + New %1 is available. Please open %2 to download the update. Наличен е нов % 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 Проверка на Актуализацията @@ -2895,14 +2832,14 @@ Свързване ... - - + + Use &virtual files instead of downloading content immediately %1 Използване & на виртуални файлове, вместо да се изтегля съдържание веднага % 1 - - + + (experimental) (експериментално) @@ -2927,49 +2864,49 @@ Свободно пространство % 1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Виртуалните файлове не се поддържат за основни дялове на Windows като локална папка. Моля, изберете валидна подпапка под буквата на устройството. - + %1 folder "%2" is synced to local folder "%3" %1 папка „%2“ е синхронизирана с локалната папка „%3“ - + Sync the folder "%1" Синхронизиране на папка „%1“ - + Warning: The local folder is not empty. Pick a resolution! Предупреждение: Локалната папка не е празна. Изберете резолюция! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 свободно място - + Virtual files are not available for the selected folder Не са налични виртуални файлове за избраната папка - + Local Sync Folder Няма достатъчно място в Папка за Локално - - + + (%1) (%1) - + There isn't enough free space in the local folder! Няма достатъчно място в локалната папка @@ -3039,14 +2976,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3112,7 +3041,7 @@ Напред > - + Server address does not seem to be valid Адресът на сървъра изглежда е невалиден @@ -3122,7 +3051,7 @@ Невалиден URL - + Could not load certificate. Maybe wrong password? Сертификатът не можа да се зареди. Може би паролата е грешна? @@ -3220,54 +3149,54 @@ Създаване на папка на Nextcloud: %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 Преименуването на папка се провали @@ -3277,12 +3206,12 @@ Не може да се премахне и архивира папката, защото папката или файлът в нея е отворен в друга програма. Моля да затворете папката или файла и да натиснете бутон опитайте отново или отменете настройката. - + Cannot 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> @@ -3290,7 +3219,7 @@ OCC::OwncloudWizard - + Add %1 account Добавяне на %1 профил @@ -3300,17 +3229,17 @@ %1 - Помощник за свързване - + Skip folders configuration Пропусни настройването на папки - + Enable experimental feature? Активиране на експерименталната функция? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3327,12 +3256,12 @@ Това е нов, експериментален режим. Ако решите да го използвате, моля да докладвате за възникнали проблеми. - + Enable experimental placeholder mode Активиране на експериментален режим на заместител - + Stay safe Следете за безопасността си @@ -3340,7 +3269,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Невалиден JSON отговор от URL адреса на анкетата @@ -3358,17 +3287,17 @@ Файлът съдържа крайни интервали и не може да бъде преименуван, тъй като файл със същото име вече съществува локално. - + 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. Имена на файлове, завършващи с точка, не се поддържат от тази файлова система. @@ -3383,57 +3312,57 @@ Имената на файлове, съдържащи символа „%1“, не се поддържат в тази файлова система. - + File name contains at least one invalid character Името на файла съдържа поне един невалиден знак - + The file name is a reserved name on this file system. Името на файла е запазено име на тази файлова система. - + Filename contains trailing spaces. Името на файла съдържа крайни интервали. - + Filename is too long. Името на файла е твърде дълго. - + File/Folder is ignored because it's hidden. Файл / папка се игнорира, защото е скрит. - + Stat failed. Неуспешен Отчет - + Conflict: Server version downloaded, local copy renamed and not uploaded. Конфликт: Изтеглена е версия на сървъра, а локалното копие е преименувано и не е качено. - + The filename cannot be encoded on your file system. Името на файла не може да бъде кодирано във вашата система от файлове. - + The filename is blacklisted on the server. Името на файла е в черния списък на сървъра. - + File has extension reserved for virtual files. Файлът има разширение, запазено за виртуални файлове. - + size размер @@ -3443,72 +3372,62 @@ права - - server reported no %1 - сървърът е отчел не % 1 - - - - permission - право - - - + file id идентификатор на файла - - Server reported no %1 - Сървърът е отчел не % 1 + + server reported no %1 + сървърът е отчел не % 1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Конфликт при качване на някои файлове в папка. Тези, които са в конфликт, ще се изчистят! - + Conflict when uploading a folder. It's going to get cleared! Конфликт при качване на папка. Ще бъде изчистен! - + Conflict when uploading a file. It's going to get removed! Конфликт при качване на файл. Ще бъде премахнат! - + 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 because you don't have permission to add files in that folder Не е разрешено, защото нямате право да добавяте файлове в тази папка - + Not allowed to upload this file because it is read-only on the server, restoring Не е позволено да качвате този файл, тъй като той е само за четене на сървъра, възстановява се - + Moved to invalid target, restoring Преместено в невалидна цел, възстановява се - + Not allowed to remove, restoring Не е позволено да се премахва, възстановява се - + Error while reading the database Грешка при четене на базата данни @@ -3518,7 +3437,7 @@ Сървърът отговори с грешка при четене на директория '% 1' : % 2 - + Server replied with an error while reading directory "%1" : %2 Сървърът отговори с грешка при четене на директория „%1“: %2 @@ -3531,17 +3450,12 @@ Грешка при записването на метаданни в базата данни - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Грешка при актуализиране на метаданни: %1 - + File is currently in use Файлът в момента се използва @@ -3554,44 +3468,44 @@ Файл % 1 не може да бъде изтеглен, защото липсва информация за криптиране. - + File %1 cannot be downloaded because encryption information is missing. Файл %1 не може да бъде изтеглен, защото липсва информация за криптиране. - - + + File has changed since discovery Файлът се е променил след откриването - - + + File %1 cannot be downloaded because of a local file name clash! Файл % 1 не може да бъде изтеглен поради сблъсък с името на локален файл! - + File %1 can not be downloaded because of a local file name clash! Файл % 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. Целият файл не може да бъде свален. @@ -3601,12 +3515,12 @@ Изтегленият файл е празен, въпреки че сървърът обяви, че е трябвало да бъде % 1. - + The downloaded file is empty, but the server said it should have been %1. Изтегленият файл е празен, но сървърът обяви, че е трябвало да бъде % 1. - + File %1 cannot be saved because of a local file name clash! Файл % 1 не може да бъде записан поради сблъсък с името на локален файл! @@ -3616,18 +3530,12 @@ Грешка при записване на метаданни в базата данни - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Грешка при актуализиране на метаданни: %1 - + The file %1 is currently in use Файлът %1 в момента се използва @@ -3635,12 +3543,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Възстановяването е Неуспешно: % 1 - + A file or folder was removed from a read only share, but restoring failed: %1 Файл или папка бяха премахнати от споделянето само за четене, но възстановяването не бе успешно: % 1 @@ -3714,12 +3622,12 @@ Файл % 1 не може да бъде преименуван поради сблъсък с името на локален файл! - + Error updating metadata: %1 Грешка при актуализиране на метаданни: %1 - + The file %1 is currently in use Файлът %1 в момента се използва @@ -3730,12 +3638,12 @@ Грешка при записване на метаданни в базата данни - + Failed to rename file Неуспешно преименуване на файл - + Error setting pin state Грешка при настройване на състоянието на закачване @@ -3769,12 +3677,12 @@ Грешка при записване на метаданни в базата данни - + Error writing metadata to the database: %1 Грешка при актуализиране на метаданните: %1 - + The file %1 is currently in use Файлът %1 в момента се използва @@ -3792,22 +3700,22 @@ Грешен HTTP код, върнат от сървъра. Очаквани 201, но са получени „% 1% 2“. - + Error updating metadata: %1 Грешка при актуализиране на метаданни: %1 - + The file %1 is currently in use Файлът %1 в момента се използва - + Error setting pin state Грешка при настройване на състоянието на закачване - + Error writing metadata to the database Грешка при записване на метаданни в базата данни @@ -3815,46 +3723,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Неуспешно качване на криптиран файл. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Файл% 1 не може да бъде качен, тъй като съществува друг файл със същото име, само че е в различено дело - - + + Upload of %1 exceeds the quota for the folder Качването на% 1 надвишава квотата за папката - + File Removed (start upload) %1 Файлът е премахнат (стартиране на качване) % 1 - + Local file changed during syncing. It will be resumed. Локален файл е променен по време на синхронизирането. Ще бъде възобновен - + Local file changed during sync. Локален файл е променен по време на синхронизирането. - + Failed to unlock encrypted folder. Неуспешно отключване на криптирана папка. @@ -3864,12 +3764,12 @@ Грешка при записване на метаданни в базата данни - + Error updating metadata: %1 Грешка при актуализиране на метаданни: %1 - + The file %1 is currently in use Файлът %1 в момента се използва @@ -3877,32 +3777,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Локален файл е премахнат по време на синхронизирането. - + Local file changed during sync. Локален файл е променен по време на синхронизирането. - + Poll URL missing Липсва URL адресът на анкетата - + Unexpected return code from server (%1) Неочакван код за връщане от сървър (% 1) - + Missing File ID from server Липсващ Идентификатор на Файл от сървъра - + Missing ETag from server Липсващ E-Tag от сървъра @@ -3910,22 +3810,22 @@ OCC::PropagateUploadFileV1 - + 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 ) @@ -4003,7 +3903,7 @@ OCC::ServerNotificationHandler - + Dismiss Отхвърли @@ -4125,7 +4025,7 @@ &Share link - и Връзка за споделяне + &Връзка за споделяне @@ -4173,17 +4073,17 @@ Защита с Парола - + Allow editing Разреши редактиране - + View only Само изглед - + Allow upload and editing За качване и редактиране @@ -4193,7 +4093,7 @@ Дата на изтичане - + File drop (upload only) Само за качване @@ -4203,32 +4103,32 @@ Прекратяване на споделяне - + Link name Име на връзка - + Note to recipient Бележка за получателя - + Password protect Защита с парола - + Set expiration date Срок на валидност - + Delete link Изтриване на връзка - + Add another link Добавя още една връзка @@ -4238,27 +4138,27 @@ Изтрий споделената връзка - + Confirm Link Share Deletion Потвърждава Изтриването на Споделяне на Връзки - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Наистина ли желаете да изтриете споделеното с публична връзка <i>%1</i>?</p><p>Бележка: Изтриването е необратима операция.</p> - + Delete Изтрий - + Cancel Отказ - + Public link Публична връзка @@ -4271,12 +4171,12 @@ Споделяне с потребители или групи... - + Search globally Глобално търсене - + Copy link Копирай връзката @@ -4286,22 +4186,22 @@ Няма резултат за '%1' - + No results for "%1" Няма резултати за „%1“ - + Password for share required Нужна е парола за споделяне - + Please enter a password for your email share: Моля, въведете парола за споделяне на вашият имейл: - + I shared something with you Споделих нещо с вас @@ -4339,42 +4239,42 @@ Изтича: - + Can reshare Може да споделя повторно - + Note to recipient Бележка за получателя - + Set expiration date Задаване на дата на изтичане - + Unshare Прекратяване на споделяне - + Can create Може да създава - + Can change Може да променя - + Can delete Може да изтрива - + Password protect Защита с парола @@ -4391,23 +4291,23 @@ OCC::SocketApi - + Context menu share Споделяне на контекстното меню - + Select new location … Избор на ново местоположение ... - + I shared something with you Споделих нещо с вас - - + + Share options Опции за споделяне @@ -4423,73 +4323,73 @@ Активност - + Copy private link to clipboard Копиране на частната връзката в клипборда - + Send private link by email … Изпращане на частната връзката по имейл… - + Resharing this file is not allowed Повторното споделяне на този файл не е разрешено - + Resharing this folder is not allowed Повторното споделяне на тази папка не е разрешено - - + + Copy public link Копиране на публична връзка - + Copy internal link Копиране на вътрешна връзка - + Edit Редакция - + Open in browser Отвори в браузъра - + Resolve conflict … Разрешаване на конфликт ... - + Move and rename … Преместване и преименуване - + Move, rename and upload … Преместване, преименуване и качване ... - + Delete local changes Изтриване на местните промени - + Move and upload … Преместване и качване ... - + Delete Изтриване @@ -4635,77 +4535,77 @@ Приемане на сертификата - + Untrusted Certificate Недоверен сертификат - + Cannot connect securely to <i>%1</i>: Не може да се осъществи сигурна връзка с <i>%1</i>: Additional errors: - Допълнителни грешки: + - + with Certificate %1 със сертификат %1 - - - + + + &lt;not specified&gt; & lt; не е посочено & gt; - - + + Organization: %1 Организация: %1 - - + + Unit: %1 Отдел: %1 - - + + Country: %1 Държава: %1 - + Fingerprint (SHA1): <tt>%1</tt> Отпечатък (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Отпечатък (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Отпечатък (SHA-512): <tt>%1</tt> - + Effective Date: %1 Валиден от: %1 - + Expiration Date: %1 Валиден до: %1 - + Issuer: %1 Издател: %1 @@ -4798,33 +4698,33 @@ Възникна вътрешно сървърна грешка номер %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (пропуснато поради по-ранна грешка, повторен опит в % 2) - + Could not update file: %1 Файлът не можа да се актуализира: %1 - + Could not update virtual file metadata: %1 Невъзможност да се актуализират метаданните на виртуалния файл: % 1 - + Unresolved conflict. Неразрешени конфликт. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Наличен е само % 1, за започване трябват поне % 2 - + Aborted Прекратен @@ -4901,16 +4801,16 @@ Имена на файлове, завършващи с точка, не се поддържат от тази файлова система. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Не може да се отвори или създаде локална база данни за синхронизиране. Уверете се, че имате достъп за запис в папката за синхронизиране. + + File names containing the character '%1' are not supported on this file system. Имената на файлове, съдържащи символа '% 1', не се поддържат от тази файлова система. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Не може да се отвори или създаде локална база данни за синхронизиране. Уверете се, че имате достъп за запис в папката за синхронизиране. - - The file name is a reserved name on this file system. Името на файла е запазено име на тази файлова система. @@ -4931,7 +4831,7 @@ Файл/Папка е игнорирана, защото е скрита. - + Using virtual files with suffix, but suffix is not set Използване на виртуални файлове със суфикс, но суфиксът не е зададен @@ -4946,7 +4846,7 @@ Името на файла не може да бъде кодирано във вашата система от файлове. - + Unable to read the blacklist from the local database Не може да се прочете черният списък от локалната база данни @@ -4961,17 +4861,17 @@ Неуспешен Отчет + + Unable to read from the sync journal. + Не може да се чете от дневника за синхронизиране. + + Filename encoding is not valid Кодирането на име на файл е невалидно - - Unable to read from the sync journal. - Не може да се чете от дневника за синхронизиране. - - - + Cannot open the sync journal Не може да се отвори дневника за синхронизиране. @@ -4981,22 +4881,22 @@ Невалидни знаци, моля, преименувайте "%1" + + Synchronization will resume shortly. + Синхронизацията ще се възобнови скоро. + + File name contains at least one invalid character Името на файла съдържа поне един невалиден знак - - Synchronization will resume shortly. - Синхронизацията ще се възобнови скоро. - - - + 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. На сървъра няма достатъчно място за някои качвания. @@ -5065,49 +4965,49 @@ OCC::Systray - + Add account Добавяне на регистрация - + Open main dialog Отваряне на основния диалогов прозорец + - Pause sync Пауза в синхронизирането - - + + Resume sync Възобновяване на синхронизирането - + Settings Настройки - + Exit %1 Изход % 1 - + Pause sync for all Пауза в синхронизирането за всички - + Resume sync for all Възобновяване на синхронизирането за всички - + %1: %2 %1: %2 @@ -5115,24 +5015,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Клиент за настолен компютър</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Версия %1. За допълнителна информация, моля щракнете <a href='%2'>тук</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Използване на добавка за виртуални файлове: %1</small></p> - + <p>This release was supplied by %1</p> <p>Това издание е предоставено от % 1</p> @@ -5140,22 +5040,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Неуспешно извличане на доставчици - + Failed to fetch search providers for '%1'. Error: %2 Неуспешно извличане на доставчици на търсене на „%1“. Грешка: %2 - + Search has failed for '%2'. Търсенето на „%2“ не бе успешно. - + Search has failed for '%1'. Error: %2 Търсенето на „%1“ не бе успешно. Грешка: %2  @@ -5163,32 +5063,32 @@ OCC::User - + Retry all uploads Нов опит на всички качвания - + Synced %1 Синхронизиран %1 - + You renamed %1 Вие преименувахте %1 - + You deleted %1 Вие изтрихте %1 - + You created %1 Вие създадохте %1 - + You changed %1 Вие променихте %1 @@ -5196,22 +5096,22 @@ OCC::UserModel - + 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> да предизвика изтриване на файлове. - + Remove connection Премахване на връзката - + Cancel Отказ @@ -5316,30 +5216,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Функцията за Виртуална файлова система изисква файлова система NTFS, % 1 използва % 2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5861,52 +5743,52 @@ Нова папка - + %n day ago преди %n денпреди %n ден - + %n days ago преди %n денпреди %n дни - + in the future в бъдеще - + %n hour ago преди %n часпреди %n час - + %n hours ago преди %n часпреди %n часа - + now сега - + Less than a minute ago Преди по-малко от минута - + %n minute ago преди %n минутапреди %n минута - + %n minutes ago преди %n минутапреди %n минути - + Some time ago Преди известно време @@ -5940,7 +5822,7 @@ SyncJournalDb - + Failed to connect database. Неуспешно свързване на базата данни. @@ -5948,9 +5830,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Търсене на файлове, съобщения, събития... + @@ -5985,21 +5867,11 @@ Въвеждане на Профил - + Switch to account Превключване към профил - - Current user status is online - Текущият потребителски статус е на линия - - - - Current user status is do not disturb - Текущият потребителски статус е не безпокойте - - Account connected Профилът е свързан @@ -6010,7 +5882,17 @@ Профилът не е свързан - + + Current user status is online + Текущият потребителски статус е на линия + + + + Current user status is do not disturb + Текущият потребителски статус е не безпокойте + + + Account actions Действия на профил @@ -6020,24 +5902,24 @@ Премахване на профил - + Set status Задаване на състояние - - + + Log out Отписване - - + + Log in Вписване - + Remove account Премахване на профил @@ -6098,57 +5980,57 @@ 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 @@ -6156,7 +6038,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Заглавката на контролната сума е неправилна. @@ -6189,64 +6071,64 @@ Window - + Nextcloud desktop main dialog Nextcloud основен диалог на работния плот - + Current account Текущ профил - - + + Resume sync for all Възобновяване на синхронизирането за всички - - + + Pause sync for all Пауза в синхронизирането за всички - + Set user status Задаване на потребителско състояние - + Add account Добавяне на регистрация - + Add new account Добавяне на нов профил - + Settings Настройки - + Exit Изход - + Current user avatar Текущ потребителски аватар - + Current user status is online Текущият потребителски статус е на линия - + Current user status is do not disturb Текущият потребителски статус е не безпокойте @@ -6256,32 +6138,32 @@ Споделяне %1 - + Account switcher and settings menu Меню за превключване на профил и настройки - + Connected Свързан - + Disconnected Без връзка - + Open local folder of current account Отворяне на локалната папка на текущия профил - + Open Nextcloud Talk in browser Отваряне на Nextcloud Разговор в браузъра - + More apps Още приложения @@ -6291,7 +6173,7 @@ Меню с приложения - + Open %1 in browser Отвори %1 в браузъра @@ -6311,7 +6193,7 @@ Отваряне на диалоговия прозорец за споделяне - + Unified search results list Обединен списък с резултати от търсенето @@ -6322,7 +6204,7 @@ Показване на повече действия - + %1 - File activity %1 - Файлова активност @@ -6330,7 +6212,7 @@ main.cpp - + System Tray not available Системната област не е налична @@ -6340,7 +6222,7 @@ % 1 изисква в работеща системна област. Ако използвате XFCE, моля следвайте <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">тези инструкции</a>. В противен случай, моля, инсталирайте приложение в системната област, като например „trayer“ и опитайте отново. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. % 1 изисква в работеща системна област. Ако използвате XFCE, моля следвайте <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">тези инструкции</a>. В противен случай, моля, инсталирайте приложение в системната област, като например „trayer“ и опитайте отново. @@ -6348,7 +6230,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_br.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_br.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_br.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_br.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Arruet e ar genstagadenn da dermenn - + Unknown error: network reply was deleted Ur fazi dianv a zo bet : lamet eo bet respont ar rouedat - + Server replied "%1 %2" to "%3 %4" Respontet en deus "%1 %2" da "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Sifradenn mnemonic penn-kil-ha-troad - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Evit gwareziñ ho identitelez kriptografek, sifrit anezhi gant unr mnemonic 12 ger dezhañ. Notennit anezho ha gwarnit anezho en ul lec'h sur. Ezhomm ho po eus oute evit ouzhponnañ ardivinkoù all d'ho kont (evel un hezouk pe un urzhiataer). @@ -305,9 +305,9 @@ - - - + + + Cancel Arrest @@ -495,52 +495,52 @@ Lemel an teuliad eus ar genstagadenn kemprenn - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed C'hwitat krouadenn an teuliad - + <p>Could not create local folder <i>%1</i>.</p> <p>N'eo ke posupl krouiñ an teuliad diabarzh <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Gwiriañ Lamadenn ar Genstagadenn Kemprenn Teuliad - + <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>Sur oc'h lemel kemprenn an teuliad <i>%1</i> ?</p> <p><b>Notenn :</b> Ne lamo<b>ket</b> restr ebet.</p> - + Remove Folder Sync Connection Lemel ar Genstagadenn Kemprenn Teuliad - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support - + Sync Running Kemprenn ho treiñ - + The syncing operation is running.<br/>Do you want to terminate it? Ar gemprenn a zo o treiñ. <br/> C'hoant ho peus arest anezhi ? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) eus %2 implijet. Teuliadoù-so, an teuliadoù rannet hag ar rouedad staliat eus oute, e c'hell kaout bevennoù diheñvel. - + %1 of %2 in use %1 eus %2 implijet - + Currently there is no storage usage information available. Titour implij al lec'h renkañ ebet evit ar poent. - + %1 in use %1 implijet @@ -599,87 +599,87 @@ Kennaskañ - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Kenstaget da %1. - + Server %1 is temporarily unavailable. N'eo ket implijapl ar servijour %1 evit ar poent. - + Server %1 is currently in maintenance mode. Adnevesaet e vez ar servijour %1. - + Signed out from %1. Aet maez eus %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Kaout an aotre gant ar Furcher. <a href='%1'>Klikit amañ</a> evit adloc'hañ ar Furcher. - + Connecting to %1 … O kenstagañ da %1 ... - + No connection to %1 at %2. Kestagadenn ebet da %1 da %2 - + Server configuration error: %1 at %2. - + No %1 connection configured. Kesntagadenn %1 ebet lakaet. - + There are folders that were not synchronized because they are too big: Teuliadoù so n'int ket bet kempredet peogwir e oant re vras : - + There are folders that were not synchronized because they are external storages: Teuliadoù so n'int ket bet kempredet peogwir in lec'hioù klenkañ diavaez : - + There are folders that were not synchronized because they are too big or external storages: Teuliadoù so n'int ke bet kemredet peogwir e oant pe re vra pe lec'hioù klenkañ diavaez : - + Confirm Account Removal Gwiriañ Lamaden ar C'hont - + <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>Sur oc'h o peus c'hoant lemel ar genstagadenn d'ar c'hont %1<i> ?</p><p><b>Notenn :</b> Ne lamo <b>ket</b> restr ebet. - + Remove connection Lemel kenstagdenn @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out Mont kuit - + Disconnected Digemprennet - + Connected Kemprennet - + Service unavailable N'ez eus ket eus ar servij - + Maintenance mode Mod dec'hel - + Network error Fazi network - + Configuration error Ur fazi arventenn - + Asking Credentials Goulenn an titouroù idantitelezh - + Unknown account state Stad kont dianv @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. Evit muioc'h a oberniantiz digorit ar meziant oberiantiz. @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Ur fazi a zo bet en ur tizhout ar restr arvenntennañ - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Ur fazi a zo bet en ur tizhout ar restr arvenntennañ e %1. Grit sur eo posupl d'an implijourienn tizhout ar restr. - + Quit %1 Kuitaat %1 @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Ebarzhit ho frazenn-tremen klok: <br><br>Implijader: %2<br>Kont: %3<br> - + Enter E2E passphrase Ebarzhit ar frazenn-tremen E2E @@ -1099,19 +1049,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1119,8 +1056,8 @@ Respont disoloer restroù ar servijour en deus kollet roadennoù. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1128,27 +1065,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1171,7 +1108,7 @@ - + Error returned from the server: <em>%1</em> Ur fazi a zo bet kavet dre ar servijour : <em>%1</em> @@ -1183,24 +1120,24 @@ - + 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> Dibosupl dielfennañ ar JSON distroet eus ar servijour : <br><em>%1</em> - + The reply from the server did not contain all expected fields Nen doa ket respont ar servijour pep lec'hiad gortozet - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1361,41 +1298,41 @@ Oberiantiz Kemprennañ - + Could not read system exclude file Dibosupl lenn ar restr sistem er-maez - + A new folder larger than %1 MB has been added: %2. Un teuliad nevez brasoc'h eget %1 MB a zo bet ouzhpennet : %2. - + A folder from an external storage has been added. An teuliad eus ar lec'h renkañ diavaez a zo bet ouzhpennet. - + Please go in the settings to select it if you wish to download it. Ket d'an arventenno evit choaz m'ho peus c'hoant da pellkargañ anezhañ. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. An teuliad %1 a zo bet krouet mes er-maez eus ar kemprennadenn-mañ eo. Ne vo ket kempredet ar roadennoù e-barzh. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Ar restr %1 a zo bet krouet er-maez eus ar gemprennadenn-mañ. Ne vo ket kempredet. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1408,6 +1345,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1468,22 +1412,7 @@ Gouarn ar Restroù Diabarzh evel Stourm - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1491,24 +1420,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1544,7 +1481,7 @@ OCC::FolderMan - + Could not reset folder state Dibosupl adlaket d'ar stad orin an teuliad @@ -1554,37 +1491,37 @@ Ar gazetenn kemprenn kozh '%1' a zo bet kavet, mes n'eo ket bet posupl lemel anezhañ. Grit sur n'eo implijet gant meziant ebet. - + 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) (backup %1) - + Undefined State. Stad dianavezet. - + Waiting to start syncing. O gortoz e krogfe ar gemprenn. - + Preparing for sync. O prientiñ evit ar gemprenn. - + Sync is running. Kemprenn o treiñ @@ -1594,67 +1531,67 @@ Graet met eo bet ar gemprenn, sturmoù n'int ket bet diskoulmet. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Kemprenn divezhañ graet mat. - + Setup Error. Fazi Staliadur. - + User Abort. Arest Implijer. - + Sync is paused. Kemprenn ehañaet - + %1 (Sync is paused) %1 (kemprenn ehañaet) - + No valid folder selected! Teuliad mat choazet ebet ! - + The selected path does not exist! - + The selected path is not a folder! An hent choazet n'eo ket un teuliad ! - + You have no permission to write to the selected folder! N'ho peus aotre ebet evit skrivañ en teuliad choazet ! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! An teuliad diabarzh %1 en deus dija un teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! An teuliad diabarzh %1 a zo dija en teuliad implijet er genstagadenn kemprennañ teuliad. Choazit unan all ! - + There is already a sync from the server to this local folder. Please pick another local folder! Un gemprennadenn eus ar servijour d'an teuliad diabarzh ez eus dija. Choazit un teuliad diabarzh all ! @@ -1866,12 +1803,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Ouzhpennañ ur Genstagadenn Kemprennañ Teuliad - + Add Sync Connection Ouzhpennañ ur Genstagadenn Kemprennet @@ -1912,42 +1849,42 @@ - + Folder was successfully created on %1. Krouet mat eo bet an teuliad wat %1. - + Authentication failed accessing %1 C'hwitet an dilessa evit tizhout %1 - + Failed to create the folder on %1. Please check manually. C'hwitet da grouiñ an teuliad war %1. Gwiriit gant an dorn. - + Failed to list a folder. Error: %1 C'hwitet d'ober roll an teuliadoù Fazi : %1 - + Choose this to sync the entire account Choazit a dra mañ evit kemprenn tout ar c'hont - + This folder is already being synced. An teuliad a zo dija bet kemprennet. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ho kemprenn emaoc'h dija <i>%1</i>, ag a zo un teuliad kar eus <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1955,24 +1892,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1993,27 +1930,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway E-klav ebet resevet eus ar servijour, gwiriit ar Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Resevet hon eus E-klavoù disheñvel. Klaskit en dro ar wech da zont. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Ur ment-danvez fall a zo bet responted gant ar servijour - + Connection Timeout Kenstagadenn aet da dermenn @@ -2133,54 +2070,54 @@ - + Server notifications that require attention. Kemenadennoù servijour ho deus ezhomm ho hevez. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2188,22 +2125,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Ger-tremen ret evit gellout rannañ - + Please enter a password for your link share: Ebarzhit ur ger-tremen d'ho liamm rannet: - + Sharing error Fazi rannañ - + Could not retrieve or create the public link share. Error: %1 @@ -2525,7 +2462,7 @@ OCC::Logger - + Error Fazi @@ -2535,7 +2472,7 @@ <nobr>Ar restr '%1'<br/> na c'hell ket bezhañ digoret evit skrivañ.<br/> <br/>Ar gazetenn disoc'h ne c'hell ket<b>c'hell</b> ket bezhañ enrollet !</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2543,33 +2480,33 @@ OCC::NSISUpdater - + New Version Available Ur Stumm Nevez a zo posupl kaout - + <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>Ur stumm nevez eus kliant %1 ez eus.</p><p><b>%2</b> a zo posupl pellkargañ. ar stumm staliet a zo %3.</p> - - + + Skip this version Lezel hebiou ar stumm-mañ - + Skip this time Lezel hebiou evit ar wech-mañ - + Get update Kaout an adnevesadenn - + Update Failed @@ -2584,17 +2521,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2705,7 +2642,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Ur fazi a zo bet kavet dre ar servijour : <em>%1</em> @@ -2715,32 +2652,32 @@ Ur fazi a zo bet en ur tozhout andpoint ar 'jedouer' : <br> <em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Dibosupl dielfennañ ar JSON distroet eus ar servijour : <br><em>%1</em> - + The reply from the server did not contain all expected fields Nen doa ket respont ar servijour pep lec'hiad gortozet - + <h1>Login Error</h1><p>%1</p> <h1>Fazi mont-tre</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>Implijour fall</h1> <p>Deuet oc'h tre gant implijer <em>%1</em>, mes ret eo deoc'h mont tre gant implijer <em>%2</em>. <br>Kit kuit eus %3 en ur bajenn all, ha <a href='%4'>klikit amañ</a> ha deuit tre evel implijer %2</p> @@ -2810,12 +2747,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Dibosupl gwiriañ an adnevesadennoù nevez. @@ -2825,27 +2762,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … O gwiriañ adnevesadennoù ar serviljour ... - + Update status is unknown: Did not check for new updates. Ar stad adnevesañ a zo dian : N'eo ket bet gwiriet an adnevesadennoù nevez. - + No updates available. Your installation is at the latest version. Adnevesadenn nevz ebet. Ho staliadur he deus ar stumm divezhañ. - + Update Check Adnevesadenn gwiriet @@ -2873,14 +2810,14 @@ O kenstagañ ... - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2905,49 +2842,49 @@ Lec'h dieub : %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Teuliad diabarzh kemprennet - - + + (%1) (%1) - + There isn't enough free space in the local folder! N'ez eus ket traouac'h a blas dieub en teuliad diabarzh ! @@ -3017,14 +2954,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3089,7 +3018,7 @@ & Da heul > - + Server address does not seem to be valid @@ -3099,7 +3028,7 @@ URL fall - + Could not load certificate. Maybe wrong password? N'heller ket kargañ ar sertifikad. Ha mat eo ar ger-tremen? @@ -3197,54 +3126,54 @@ krouiñ teuliadoù war Nextcloud %1 - + Remote folder %1 created successfully. Teuliat pell %1 krouiet mat. - + The remote folder %1 already exists. Connecting it for syncing. Pez ez eus dija eus ar restr pell %1. Ar genstagañ anezhañ evit e kemprenn. + - The folder creation resulted in HTTP error code %1 Krouadenn an teuliad en deus roet ar c'hod fazi HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> C'hwitet da grouiñ ar restr pell abalamour an titouroù identitelez roet a zo fall ! <br/>Gwiriit ho titouroù identitelezh.</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">C'hwitet da grouiñ an teuliad pell abalamour da titouroù identitelezh fall roet sur walc'h.</font><br/>Gwiriit anezho</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. C'hwitat da grouiñ an teuliad pell %1 gant ar fazi <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Ur genstagadenn kemprenet eus %1 d'an teuliad pell %2 a zo bet staliet. - + Successfully connected to %1! Kenstaget mat da %1 ! - + Connection to %1 could not be established. Please check again. Ar genstagaden da %1 n'eo ket bet graet. Klaskit en dro. - + Folder rename failed C'hwitet da adenvel an teuliad @@ -3254,12 +3183,12 @@ Dibospul eo lemel hag enrollañ an teuliad peogwir en digor an teuliad pe ar rest en ur program all. Serit an teuliat pe ar restr ha pouerzit war klask en dro pe arestit ar staliadur. - + Cannot 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>An teuliad kempren diabarzh %1 a zo bet krouet mat !</b></font> @@ -3267,7 +3196,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3277,17 +3206,17 @@ %1 Kemprennadenn Wizard - + Skip folders configuration Lezeel hebiou kefluniadur an doserioù - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3298,12 +3227,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3311,7 +3240,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Respont JSON fal eus ar sontadeg URL @@ -3329,17 +3258,17 @@ - + 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. @@ -3354,57 +3283,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3414,72 +3343,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3489,7 +3408,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3502,17 +3421,12 @@ ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3525,44 +3439,44 @@ Ar restr %1 n'eo ket posupl bezhaén pellkarget peogwir e vank titouroù sifrañ. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Cheñchet eo bet ar restr abaoe m'ema bet disoloet - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! N'eo ket posupl pellkargañ ar restr %1 abalamour d'ur stourm anv restr diabarzh ! - + The download would reduce free local disk space below the limit Ar pellkargañ a lamo plas dieub el lenner dindan ar bevenn - + Free space on disk is less than %1 Al lec'h dieub war al lenner a zo dindan %1 - + File was deleted from server Lamet eo bet ar rest eus ar servijour - + The file could not be downloaded completely. Ne oa ket posupl pellkargañ ar restr penn-da-benn. @@ -3572,12 +3486,12 @@ Ar restr pellkarget a zo goulo memes m'en doa laret ar servijour e kemerfe %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Ar restr %1 ne c'hell ket bezhañ enrollet abalamour d'ur stourm anv diabarzh ! @@ -3587,18 +3501,12 @@ ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3606,12 +3514,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Adtapour ar restr c'hwitet : %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Ur restr pe teuliad a zo bet lamet eus ar rannadenn lenn-nemetken, mes c'hwitet eo bete adtapout : %1 @@ -3685,12 +3593,12 @@ Ar restr %1 n'eo ket posupl bezhañ adanvet da %2 abalamour d'ur stourm anv restr diabarzh - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3701,12 +3609,12 @@ ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz - + Failed to rename file - + Error setting pin state @@ -3740,12 +3648,12 @@ ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3763,22 +3671,22 @@ Kod HTTP fall roet gant ar servijour. O gortoz e oa 201, met resevet a zo ber "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz @@ -3786,46 +3694,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Ar restr %1 ne c'hell ket behañ pellkaset abalamour m'ez eus ur restr al memes anv, disheñvel nemet gant ar benlizerennoù/lizerennoù-bihañ - - + + Upload of %1 exceeds the quota for the folder Pellkargañ %1 a za en tu all ar vevenn quota an teuliad - + File Removed (start upload) %1 Restr lamet (kregiñ ar pellkas) %1 - + Local file changed during syncing. It will be resumed. Restr diabarzh cheñchet e pad ar gemprenn. Adkemeret e vo. - + Local file changed during sync. Rest diabarzh cheñchet e pad ar gemprenn. - + Failed to unlock encrypted folder. @@ -3835,12 +3735,12 @@ ur fazi a zo bet en ur skrivañ ar metadata er roadenn-diaz - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3848,32 +3748,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Ar restr diabarzh a zo bet lamet e pad ar gemprennadenn. - + Local file changed during sync. Rest diabarzh cheñchet e pad ar gemprenn. - + Poll URL missing - + Unexpected return code from server (%1) Kod distro dic'hortoz eus ar servijour (%1) - + Missing File ID from server Un ID restr a vant er servijour - + Missing ETag from server Un eKlav a vank evit ar servijour @@ -3881,22 +3781,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Ur sontadeg URL a vank - + The local file was removed during sync. Ar restr diabarzh a zo bet lamet e pad ar gemprennadenn. - + Local file changed during sync. Rest diabarzh cheñchet e pad ar gemprenn. - + The server did not acknowledge the last chunk. (No e-tag was present) N'en deus ket taolet pled ar servijour eus an tamm diveahñ. (E-klav ebet kavet) @@ -3974,7 +3874,7 @@ OCC::ServerNotificationHandler - + Dismiss Arrest @@ -4144,17 +4044,17 @@ Gwarez Ger-tremen - + Allow editing Cheñchamentoù aotreet - + View only - + Allow upload and editing Aotreañ ar pellkargañ hag an embann @@ -4164,7 +4064,7 @@ Deizat Termen - + File drop (upload only) Lakaat ur restr (evit pellkes nemetken) @@ -4174,32 +4074,32 @@ Nag eskemm ken - + Link name - + Note to recipient Kemenañ d'an degemerer - + Password protect Ger-tremen gwarezet - + Set expiration date Lakaat un deizat termen - + Delete link - + Add another link Implij ul liamm all @@ -4209,27 +4109,27 @@ Lemmet al liamm rannet - + Confirm Link Share Deletion Gwiriañ Lamadenn al Liamm Rannañ - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Sur oc'h ho peus c'hoant lemel al liamm rannañ publik <i>%1</i> ?</p><p>Notenn : Ne vo ket posupl hen disober.</p> - + Delete Diverkañ - + Cancel Arrest - + Public link Liamm publik @@ -4242,12 +4142,12 @@ Rannañ gant implijourienn pe strolladoù ... - + Search globally - + Copy link Kopiañ al liamm @@ -4257,22 +4157,22 @@ Disoc'h ebet evit '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Rannet am eus un dra bennak ganeoc'h @@ -4310,42 +4210,42 @@ - + Can reshare Posuple eo adrannan - + Note to recipient - + Set expiration date - + Unshare Nag eskemm ken - + Can create Posuple eo krouiñ - + Can change Posuple eo cheñch - + Can delete Posuple e lemel - + Password protect @@ -4362,23 +4262,23 @@ OCC::SocketApi - + Context menu share Roll kenaroud rannañ - + Select new location … - + I shared something with you Rannet am eus un dra bennak ganeoc'h - - + + Share options Dibaboù rannañ @@ -4394,73 +4294,73 @@ - + Copy private link to clipboard Eila al liamm prevez d'ar golver - + Send private link by email … Kas al liamm prevez dre bostel ... - + Resharing this file is not allowed N'eo ket aotret adrannañ ar restr - + Resharing this folder is not allowed - - + + Copy public link Eilañ al liamm publik - + Copy internal link Eilañ al liammm diabarzh - + Edit Cheñch - + Open in browser Digeriñ er furcher - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Lemel @@ -4606,12 +4506,12 @@ Kaout fiziañs er sertifikad memestra - + Untrusted Certificate Sertifikad difiziet - + Cannot connect securely to <i>%1</i>: Na genstag ket e surentez da <i>%1</i> : @@ -4621,62 +4521,62 @@ - + with Certificate %1 gant ar Sertfikad %1 - - - + + + &lt;not specified&gt; &lt;not specified&gt; - - + + Organization: %1 Aozadur : %1 - - + + Unit: %1 Unanenn : %1 - - + + Country: %1 Bro : %1 - + Fingerprint (SHA1): <tt>%1</tt> Roudenn bizh (SHA1) : <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Roudenn bizh (SHA-256) : <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Roudenn bizh (SHA-512) :<tt>%1</tt> - + Effective Date: %1 Deizat ober : %1 - + Expiration Date: %1 Deizat termenn : %1 - + Issuer: %1 Roer : %1 @@ -4769,33 +4669,33 @@ Ar fazi diabarzh niverenn %1 a zo bet. - + %1 (skipped due to earlier error, trying again in %2) %1 (lezet hebiou abalamour d'ar fazi kent, klasket e vo en-dro a benn %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Stroum diziskoulmet. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nez eus nemet %1 dieub, ret eo kaout %2 d'an neubeutañ evit kregiñ - + Aborted @@ -4872,16 +4772,16 @@ An anv restr a achu gant ur prantad n'int ket douget ar sistem restr. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Dibosupl digeriñ pe krouiñ ar rouadenn-diaz kemprennet diabarzh. Bezit sur ho peus an aotre embann en teuliad kemprenn. + + File names containing the character '%1' are not supported on this file system. An anv restr gant an arouez '%1' n'int ket douget gant ar sistem trestr-mañ. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Dibosupl digeriñ pe krouiñ ar rouadenn-diaz kemprennet diabarzh. Bezit sur ho peus an aotre embann en teuliad kemprenn. - - The file name is a reserved name on this file system. An anv restr a zo un anv restr miret ar sistem restr. @@ -4902,7 +4802,7 @@ Restr/Teuliad a zo dianvezet peogwir eo koachet. - + Using virtual files with suffix, but suffix is not set @@ -4917,7 +4817,7 @@ An anv restr ne c'hell ket bezhañ sifret war ho sistem restr. - + Unable to read the blacklist from the local database Dibosupl lenn ar roll-du eus ar roadenn-diaz diabarzh @@ -4932,17 +4832,17 @@ C'hwitet ar kregiñ. + + Unable to read from the sync journal. + Dibosupl eo lenn ar gazetenn kemprenn. + + Filename encoding is not valid N'eo ket mat sifradur an anv restr - - Unable to read from the sync journal. - Dibosupl eo lenn ar gazetenn kemprenn. - - - + Cannot open the sync journal Dibosupl eo digeriñ ar gazetenn kemprenn @@ -4952,22 +4852,22 @@ Arouez fall, andanvit "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Un arouez fall ez eus d'an neubeutañ en anv restr - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Plas el lenner re vihan : ar bellgargadennoù a lako ar plas dieub da mont dindan %1 a vo ankouaet. - + There is insufficient space available on the server for some uploads. N'ez eus ket trawalc'h a blas war ar servijour evit pelgasadennoù zo. @@ -5036,49 +4936,49 @@ OCC::Systray - + Add account Ouzhpenn ur c'hont - + Open main dialog Digeriñ an diviz pennañ + - Pause sync - - + + Resume sync - + Settings Arventennoù - + Exit %1 Kuitaat %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1 : %2 @@ -5086,24 +4986,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Kliant Burev</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Stumm %1. Evit muioc'h a ditouroù, klikit <a href='%2'>amañ</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>An digoradenn-mañ a zo bet roet gant %1</p> @@ -5111,22 +5011,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5134,32 +5034,32 @@ OCC::User - + Retry all uploads Klask en dro pep pellkasadenn - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5167,22 +5067,22 @@ OCC::UserModel - + Confirm Account Removal Gwiriañ Lamaden ar C'hont - + <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>Sur oc'h o peus c'hoant lemel ar genstagadenn d'ar c'hont %1<i> ?</p><p><b>Notenn :</b> Ne lamo <b>ket</b> restr ebet. - + Remove connection Lemel kenstagdenn - + Cancel Arrest @@ -5287,30 +5187,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5832,52 +5714,52 @@ - + %n day ago %n deiz-zo%n deiz-zo%n deiz-zo%n deiz-zo%n deiz-zo - + %n days ago %n deiz-zo%n deiz-zo%n deiz-zo%n deiz-zo%n deiz-zo - + in the future en dazont - + %n hour ago %n heurvez-zo%n heurvez-zo%n heurvez-zo%n heurvez-zo%n heurvez-zo - + %n hours ago %n heurvez-zo%n heurvez-zo%n heurvez-zo%n heurvez-zo%n heurvez-zo - + now bremañ - + Less than a minute ago Er munudenn divezhañ - + %n minute ago %n munudenn-zo%n munudenn-zo%n munudenn-zo%n munudenn-zo%n munudenn-zo - + %n minutes ago %n munudenn-zo%n munudenn-zo%n munudenn-zo%n munudenn-zo%n munudenn-zo - + Some time ago Neubeut amzer-zo @@ -5911,7 +5793,7 @@ SyncJournalDb - + Failed to connect database. @@ -5919,7 +5801,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5956,32 +5838,32 @@ - + Switch to account Cheñch d'ar gont - - Current user status is online - + + Account connected + Kont kenstaged - - Current user status is do not disturb + + Account not connected - Account connected - Kont kenstaged + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5991,24 +5873,24 @@ Lemel ar c'hont - + Set status - - + + Log out Kuitat - - + + Log in Kennaskañ - + Remove account Lemel ar c'hont @@ -6069,57 +5951,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KM - + %L1 B %L1 B - + %n year(s) %n bloaz%n bloaz%n bloaz%n bloaz%n bloaz - + %n month(s) %n miz%n miz%n miz%n miz%n miz - + %n day(s) %n deiz%n deiz%n deiz%n deiz%n deiz - + %n hour(s) %n heurvez%n heurvez%n heurvez%n heurvez%n heurvez - + %n minute(s) %n munudenn%n munudenn%n munudenn%n munudenn%n munudenn - + %n second(s) %n eilenn%n eilenn%n eilenn%n eilenn%n eilenn - + %1 %2 %1 %2 @@ -6127,7 +6009,7 @@ ValidateChecksumHeader - + The checksum header is malformed. N'eo ket mat niverenn kevetalder ar penn. @@ -6160,64 +6042,64 @@ Window - + Nextcloud desktop main dialog - + Current account Kont bremañ - - + + Resume sync for all Kendec'hel ar gemprenn evit pep tra - - + + Pause sync for all Ehanañ pep kemprennadenn - + Set user status - + Add account Ouzhpenn ur c'hont - + Add new account - + Settings Arventennoù - + Exit Kuitaat - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6227,32 +6109,32 @@ - + Account switcher and settings menu - + Connected Kemprennet - + Disconnected Digemprennet - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Muioc'h a veziantoù @@ -6262,7 +6144,7 @@ - + Open %1 in browser Digeriñ %1 er furcher @@ -6282,7 +6164,7 @@ Digeriñ an diviz rannañ - + Unified search results list @@ -6293,7 +6175,7 @@ - + %1 - File activity @@ -6301,7 +6183,7 @@ main.cpp - + System Tray not available N'eo ket aotreet ar varenn sistem @@ -6311,7 +6193,7 @@ %1 en deus ezhomm eus ur varenn sistem a gerzh. Ma lakait da dreiñ XFCE, heuliit <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ar pazennoù-mañ</a>. Mod all, staliit ur meziant varenn sistem avel 'trayer' ha klaskit en dro. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6319,7 +6201,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Krouet gant Git stumm<a href="%1">%2</a> war %3, %4 en ur implij Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ca.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ca.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ca.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ca.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Obre %1 localment - + Open share dialog Obre el quadre de diàleg de compartició - + Share %1 Comparteix %1 - - + + Show more actions Mostra més accions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out S'ha esgotat el temps d'espera de la connexió - + Unknown error: network reply was deleted Error desconegut: s'ha suprimit la resposta de la xarxa - + Server replied "%1 %2" to "%3 %4" El servidor ha contestat «%1 %2» a «%3 %4» @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Clau mnemotècnica del xifratge d'extrem a extrem - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Per a protegir la vostra identitat criptogràfica, la xifrarem amb una clau mnemotècnica de 12 paraules del diccionari. Anoteu-les i deseu-les en un lloc segur. Les necessitareu per a afegir altres dispositius al vostre compte (com ara un telèfon mòbil o un portàtil). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancel·la @@ -494,52 +494,52 @@ Suprimeix la connexió de la carpeta sincronitzada - + Disable virtual file support … Inhabilita la compatibilitat amb els fitxers virtuals... - + Enable virtual file support %1 … - + (experimental) (experimental) - + Folder creation failed S'ha produït un error en crear la carpeta - + <p>Could not create local folder <i>%1</i>.</p> <p>No s'ha pogut crear la carpeta local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmeu la supressió de la connexió de la carpeta sincronitzada - + <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 deixar de sincronitzar la carpeta <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> suprimirà cap fitxer.</p> - + Remove Folder Sync Connection Suprimeix la connexió de la carpeta sincronitzada - + Disable virtual file support? Voleu inhabilitar la compatibilitat amb els fitxers virtuals? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support Inhabilita la compatibilitat - + Sync Running S'està executant una sincronització - + The syncing operation is running.<br/>Do you want to terminate it? S'està executant una operació de sincronització.<br/>Voleu aturar-la? - + %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-hi les carpetes muntades a través de la xarxa o les carpetes 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 sobre l'ús de l'emmagatzematge. - + %1 in use %1 en ús @@ -598,87 +598,87 @@ Inicia la sessió - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. La versió del servidor (%1) ha quedat obsoleta. Continueu sota la vostra 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. El servidor %1 es troba en mode de manteniment. - + Signed out from %1. S'ha sortit de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. S'està obtenint l'autorització del navegador. <a href='%1'>Feu clic aquí</a> per a tornar a obrir el navegador. - + Connecting to %1 … S'està connectant a %1… - + No connection to %1 at %2. No hi ha connexió a %1 a %2. - + Server configuration error: %1 at %2. Error de configuració del servidor: %1 a %2. - + No %1 connection configured. No s'ha configurat cap connexió a %1. - + 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 extern: - + 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 extern: - + Confirm Account Removal Confirmeu la supressió 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 suprimir la connexió al compte <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> suprimirà cap fitxer.</p> - + Remove connection Suprimeix la connexió @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out S'ha tancat la sessió - + Disconnected Desconnectat - + Connected Connectat - + Service unavailable Servei no disponible - + Maintenance mode Mode de manteniment - + Network error Error de xarxa - + Configuration error Error de configuració - + Asking Credentials S'estan demanant les credencials - + Unknown account state Estat del compte desconegut @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Els fitxers de la llista de fitxers ignorats i els enllaços simbòlics no se sincronitzen. - + For more activities please open the Activity app. Per a veure més activitats, obriu l'aplicació Activitat. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Si continueu, <b>se suprimiran aquests paràmetres</b>. - + Continuing will mean <b>ignoring these settings</b>. Si continueu, <b>s'ignoraran aquests paràmetres</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Alguns paràmetres s'han configurat en versions més noves d'aquest client i utilitzen característiques no disponibles en aquesta versió.<br><br>%1<br><br>Ja hi ha una còpia de seguretat del fitxer de configuració actual a <i>%2</i>. - + Quit Surt - + Continue Continua - + 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. Please make sure the file can be accessed by your user. S'ha produït un error en accedir al fitxer de configuració a %1. Assegureu-vos que el vostre usuari pugui accedir a aquest fitxer. - + Quit %1 Surt del %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database S'ha produït un error en escriure les metadades a la base de dades @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Introduïu la contrasenya de xifratge d'extrem a extrem: <br><br>Usuari: %2<br>Compte: %3<br> - + Enter E2E passphrase Introduïu la contrasenya d'extrem a extrem @@ -1100,19 +1050,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1120,8 +1057,8 @@ Falten dades en la resposta de detecció de fitxers del servidor. - - + + Server error: PROPFIND reply is not XML formatted! Error del servidor: la resposta PROPFIND no té el format XML. @@ -1129,27 +1066,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Error en obrir la carpeta %1 - + Directory not accessible on client, permission denied La carpeta no és accessible en el client; s'ha denegat el permís - + Directory not found: %1 No s'ha trobat la carpeta: %1 - + Filename encoding is not valid La codificació del nom de fitxer no és vàlida. - + Error while reading directory %1 Error en llegir la carpeta %1 @@ -1172,7 +1109,7 @@ - + Error returned from the server: <em>%1</em> S'ha produït un error en el servidor: <em>%1</em> @@ -1184,24 +1121,24 @@ - + 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> No s'ha pogut analitzar el JSON retornat des del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La resposta del servidor no contenia tots els camps esperats - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1362,41 +1299,41 @@ 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 amb una mida superior a %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. Aneu als paràmetres per a seleccionar si voleu baixar-la. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. S'ha creat la carpeta %1 però ha estat exclosa de la sincronització anteriorment. Les dades que conté no se sincronitzaran. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. S'ha creat el fitxer %1 però ha estat exclosa de la sincronització anteriorment. No se sincronitzarà. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1405,6 +1342,15 @@ No s'ha pogut fer un seguiment fiable dels canvis en les carpetes sincronitzades. Això significa que és possible que el client de sincronització no pugui carregar els canvis locals immediatament i, en canvi, només cercarà els canvis locals i els pujarà ocasionalment (per defecte, cada dues hores). %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. + S'han suprimit tots els fitxers de la carpeta de sincronització local «%1». Aquestes supressions se sincronitzaran amb el servidor, per la qual cosa els fitxers deixaran d'estar disponibles si no els restaureu. +Segur que voleu sincronitzar aquestes accions amb el servidor? +Si es tracta d'un accident i decidiu mantenir els fitxers, es tornaran a sincronitzar des del servidor. + + All files in the sync folder '%1' 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. @@ -1457,27 +1403,7 @@ Mantén els fitxers locals com a conflicte - - 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 restore 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. - S'han suprimit tots els fitxers de la carpeta de sincronització «%1» del servidor. -Aquestes supressions se sincronitzaran a la vostra carpeta de sincronització local i aquests fitxers deixaran d'estar disponibles si no teniu dret a restaurar-los. -Si decidiu restaurar els fitxers, es tornaran a sincronitzar amb el servidor si teniu drets per a fer-ho. -Si decidiu suprimir els fitxers, deixaran d'estar disponibles, tret que en sigueu el propietari. - - - - 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. - S'han suprimit tots els fitxers de la carpeta de sincronització local «%1». Aquestes supressions se sincronitzaran amb el servidor, per la qual cosa els fitxers deixaran d'estar disponibles si no els restaureu. -Segur que voleu sincronitzar aquestes accions amb el servidor? -Si es tracta d'un accident i decidiu mantenir els fitxers, es tornaran a sincronitzar des del servidor. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1485,24 +1411,35 @@ - + 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? Voleu suprimir tots els fitxers? - + Remove all files Suprimeix tots els fitxers - + + 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 restore 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. + S'han suprimit tots els fitxers de la carpeta de sincronització «%1» del servidor. +Aquestes supressions se sincronitzaran a la vostra carpeta de sincronització local i aquests fitxers deixaran d'estar disponibles si no teniu dret a restaurar-los. +Si decidiu restaurar els fitxers, es tornaran a sincronitzar amb el servidor si teniu drets per a fer-ho. +Si decidiu suprimir els fitxers, deixaran d'estar disponibles, tret que en sigueu el propietari. + + + Keep files Mantén els fitxers @@ -1538,7 +1475,7 @@ OCC::FolderMan - + Could not reset folder state No s'ha pogut restaurar l'estat de la carpeta @@ -1548,37 +1485,37 @@ S'ha trobat un diari de sincronització antic «%1», però no s'ha pogut suprimir. Assegureu-vos que no hi hagi cap aplicació que l'estigui utilitzant. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (còpia de seguretat) - + (backup %1) (còpia de seguretat %1) - + Undefined State. Estat indefinit. - + Waiting to start syncing. S'està esperant per a iniciar la sincronització. - + Preparing for sync. S'està preparant la sincronització. - + Sync is running. S'està sincronitzant. @@ -1588,67 +1525,67 @@ La sincronització s'ha realitzat correctament; hi ha conflictes sense resoldre. - + Sync finished with unresolved conflicts. - + Last Sync was successful. La darrera sincronització s'ha realitzat correctament. - + Setup Error. Error de configuració. - + User Abort. L'usuari ho ha cancel·lat. - + Sync is paused. La sincronització està en pausa. - + %1 (Sync is paused) %1 (la sincronització està en pausa) - + No valid folder selected! No s'ha seleccionat cap carpeta vàlida. - + The selected path does not exist! El camí seleccionat no existeix. - + The selected path is not a folder! El camí seleccionat no és una carpeta. - + You have no permission to write to the selected folder! No teniu permís per a escriure a la carpeta seleccionada. - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ja conté una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ja forma part d'una carpeta utilitzada en una connexió de sincronització de carpetes. Trieu-ne una altra. - + There is already a sync from the server to this local folder. Please pick another local folder! Ja hi ha una sincronització entre el servidor i aquesta carpeta local. Trieu una altra carpeta local. @@ -1860,12 +1797,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Afegeix una connexió de sincronització de carpeta - + Add Sync Connection Afegeix una connexió de sincronització @@ -1906,42 +1843,42 @@ - + Folder was successfully created on %1. S'ha creat la carpeta correctament a %1. - + Authentication failed accessing %1 S'ha produït un error d'autenticació en accedir a %1 - + Failed to create the folder on %1. Please check manually. No s'ha pogut crear la carpeta a %1. Comproveu-ho manualment. - + Failed to list a folder. Error: %1 No s'han pogut enumerar els elements d'una carpeta. Error: %1 - + Choose this to sync the entire account Trieu això per a sincronitzar tot el compte - + This folder is already being synced. Ja s'està sincronitzant aquesta carpeta. - + 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 principal de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Ja esteu sincronitzant <i>%1</i>, que és una subcarpeta de <i>%2</i>. @@ -1949,24 +1886,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder Els fitxers virtuals no estan disponibles per la carpeta seleccionada @@ -1987,27 +1924,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No s'ha rebut cap etiqueta d'entitat del servidor; comproveu el servidor intermediari o la passarel·la - + We received a different E-Tag for resuming. Retrying next time. S'ha rebut una etiqueta d'entitat diferent per a la represa. Es tornarà a intentar la pròxima vegada. - + We received an unexpected download Content-Length. Hem rebut un element Content-Length de baixada inesperat. - + Server returned wrong content-range El servidor ha retornat un interval de contingut incorrecte - + Connection Timeout S'ha excedit el temps d'espera de la connexió @@ -2127,54 +2064,54 @@ Crea un arxiu de depuració... - + Server notifications that require attention. Notificacions del servidor que requereixen atenció. - + You cannot disable autostart because system-wide autostart is enabled. No podeu inhabilitar l'inici automàtic perquè l'inici automàtic per a tot el sistema està habilitat. - + Change update channel? Voleu canviar el canal d'actualitzacions? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel Canvia el canal d'actualització - + Cancel Cancel·la - + Create Debug Archive Crea un arxiu de depuració - + Zip Archives Arxius zip - + Debug Archive Created S'ha creat l'arxiu de depuració - + Debug archive is created at %1 S'ha creat l'arxiu de depuració a %1 @@ -2182,22 +2119,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Es requereix una contrasenya per a la compartició - + Please enter a password for your link share: Introduïu una contrasenya per a l'enllaç de compartició: - + Sharing error Error de compartició - + Could not retrieve or create the public link share. Error: %1 @@ -2515,7 +2452,7 @@ OCC::Logger - + Error Error @@ -2525,7 +2462,7 @@ <nobr>No es pot obrir el fitxer «%1»<br/>en mode d'escriptura.<br/><br/><b>No</b> es pot desar la sortida del registre.</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2533,33 +2470,33 @@ 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 disponible una nova versió del client del %1.</p> <p>Ja es pot baixar la versió <b>%2</b>. La versió instal·lada és la %3.</p> - - + + Skip this version Omet aquesta versió - + Skip this time Omet aquesta vegada - + Get update Obtén l'actualització - + Update Failed L'actualització ha fallat @@ -2574,17 +2511,17 @@ - + Ask again later Torneu a demanar-ho més endavant - + Restart and update Reinicia i actualitza - + Update manually Actualitza manualment @@ -2695,7 +2632,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> S'ha produït un error en el servidor: <em>%1</em> @@ -2705,32 +2642,32 @@ S'ha produït un error en accedir a l'extrem «token»: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No s'ha pogut analitzar el JSON retornat des del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La resposta del servidor no contenia tots els camps esperats - + <h1>Login Error</h1><p>%1</p> <h1>Error d'inici de sessió</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>Usuari incorrecte</h1><p>Heu iniciat la sessió amb l'usuari <em>%1</em>, però heu d'iniciar la sessió amb l'usuari <em>%2</em>.<br>Tanqueu la sessió de %3 en una altra pestanya, <a href='%4'>feu clic aquí</a> i inicieu la sessió amb l'usuari %2</p> @@ -2799,12 +2736,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No s'ha pogut comprovar si hi ha noves actualitzacions. @@ -2814,27 +2751,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … S'està comprovant el servidor d'actualitzacions... - + 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. Teniu instal·lada la versió més recent. - + Update Check Comprovació d'actualitzacions @@ -2862,14 +2799,14 @@ Connecta… - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) (experimental) @@ -2894,49 +2831,49 @@ Espai lliure: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder Els fitxers virtuals no estan disponibles per la carpeta seleccionada - + Local Sync Folder Carpeta de sincronització local - - + + (%1) (%1) - + There isn't enough free space in the local folder! No hi ha prou espai lliure a la carpeta local. @@ -3006,14 +2943,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3078,7 +3007,7 @@ &Següent > - + Server address does not seem to be valid @@ -3088,7 +3017,7 @@ L'URL no és vàlid - + Could not load certificate. Maybe wrong password? No s'ha pogut carregar el certificat. És possible que la contrasenya sigui incorrecta. @@ -3186,54 +3115,54 @@ s'està creant una carpeta al Nextcloud: %1 - + Remote folder %1 created successfully. S'ha creat la carpeta remota %1 correctament. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ja existeix. S'està connectant per a sincronitzar-la. + - The folder creation resulted in HTTP error code %1 La creació de la carpeta ha generat 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> S'ha produït un error en crear la carpeta perquè les credencials proporcionades són incorrectes.<br/>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">S'ha produït un error en crear la carpeta remota, probablement perquè les credencials proporcionades són incorrectes.</font><br/>Comproveu les credencials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. S'ha produït un error en crear la carpeta remota %1: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. S'ha configurat una connexió de sincronització de %1 a la carpeta remota %2. - + Successfully connected to %1! S'ha establert la connexió amb %1 correctament. - + Connection to %1 could not be established. Please check again. No s'ha pogut establir la connexió amb %1. Torneu-ho a provar. - + Folder rename failed S'ha produït un error en canviar el nom de la carpeta @@ -3243,12 +3172,12 @@ No es pot suprimir i fer una còpia de seguretat de la carpeta perquè la carpeta o un fitxer que conté està obert en un altre programa. Tanqueu la carpeta o el fitxer i torneu-ho a provar o cancel·leu la configuració. - + Cannot 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>S'ha creat la carpeta de sincronització %1 correctament!</b></font> @@ -3256,7 +3185,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3266,17 +3195,17 @@ Assistent de connexió del %1 - + Skip folders configuration Omet la configuració de carpetes - + Enable experimental feature? Voleu habilitar la característica experimental? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3287,12 +3216,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3300,7 +3229,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL L'URL de sol·licitud ha proporcionat una resposta JSON no vàlida @@ -3318,17 +3247,17 @@ - + Symbolic links are not supported in syncing. No s'admet la sincronització d'enllaços simbòlics. - + File is listed on the ignore list. El fitxer és a la llista de fitxers ignorats. - + File names ending with a period are not supported on this file system. No s'admeten els noms de fitxer que finalitzen amb un punt en aquest sistema de fitxers. @@ -3343,57 +3272,57 @@ - + File name contains at least one invalid character El nom del fitxer conté com a mínim un caràcter no vàlid - + The file name is a reserved name on this file system. Aquest nom de fitxer és un nom reservat en aquest sistema de fitxers. - + Filename contains trailing spaces. El nom del fitxer conté espais finals. - + Filename is too long. El nom del fitxer és massa llarg. - + File/Folder is ignored because it's hidden. S'ignora el fitxer o la carpeta perquè està ocult. - + Stat failed. S'ha produït un error en comprovar l'estat. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflicte: s'ha baixat la versió del servidor, s'ha canviat el nom de la còpia local i no s'ha pujat. - + The filename cannot be encoded on your file system. El nom del fitxer no es pot codificar en el vostre sistema de fitxers. - + The filename is blacklisted on the server. El nom del fitxer es troba en la llista de prohibicions del servidor. - + File has extension reserved for virtual files. El fitxer té una extensió reservada per als fitxers virtuals. - + size mida @@ -3403,72 +3332,62 @@ permisos - - server reported no %1 - - - - - permission - - - - + file id id de fitxer - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + Ignored because of the "choose what to sync" blacklist S'ha ignorat perquè es troba a la llista de prohibicions «Trieu què voleu sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder No es permet perquè no teniu permís per a afegir subcarpetes en aquesta carpeta - + Not allowed because you don't have permission to add files in that folder No es permet perquè no teniu permís per a afegir fitxers en aquesta carpeta - + Not allowed to upload this file because it is read-only on the server, restoring No es permet carregar aquest fitxer perquè és de només lectura en el servidor; s'està restaurant - + Moved to invalid target, restoring S'ha mogut a una destinació no vàlida; s'està restaurant - + Not allowed to remove, restoring No es permet suprimir; s'està restaurant - + Error while reading the database Error while reading the database @@ -3478,7 +3397,7 @@ El servidor ha respost amb un error en llegir la carpeta «%1»: %2 - + Server replied with an error while reading directory "%1" : %2 @@ -3491,17 +3410,12 @@ S'ha produït un error en escriure les metadades a la base de dades - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3514,44 +3428,44 @@ No es pot baixar el fitxer %1 perquè falta la informació de xifratge. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El fitxer ha canviat des del descobriment - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! No es pot baixar el fitxer %1 perquè hi ha un conflicte de nom amb un fitxer local. - + The download would reduce free local disk space below the limit La baixada reduiria l'espai lliure del disc local per sota del límit - + Free space on disk is less than %1 L'espai lliure en el disc és inferior a %1 - + File was deleted from server S'ha suprimit el fitxer del servidor - + The file could not be downloaded completely. No s'ha pogut baixar el fitxer completament. @@ -3561,12 +3475,12 @@ El fitxer baixat està buit malgrat que el servidor ha informat que tindria una mida de %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! No es pot desar el fitxer %1 perquè hi ha un conflicte de nom amb un fitxer local. @@ -3576,18 +3490,12 @@ S'ha produït un error en escriure les metadades a la base de dades - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3595,12 +3503,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; S'ha produït un error durant la restauració: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 S'ha suprimit un fitxer o carpeta d'una compartició de només lectura, però s'ha produït un error durant la restauració: %1 @@ -3674,12 +3582,12 @@ No es pot canviar el nom del fitxer %1 a %2 perquè hi ha un conflicte amb el nom d'un fitxer local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3690,12 +3598,12 @@ S'ha produït un error en escriure les metadades a la base de dades - + Failed to rename file - + Error setting pin state Error en establir l'estat d'ancoratge @@ -3729,12 +3637,12 @@ S'ha produït un error en escriure les metadades a la base de dades - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3752,22 +3660,22 @@ El servidor ha retornat un codi HTTP incorrecte. S'esperava el codi 201, però s'ha rebut «%1 %2». - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state Error en establir l'estat d'ancoratge - + Error writing metadata to the database S'ha produït un error en escriure les metadades a la base de dades @@ -3775,46 +3683,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists No es pot pujar el fitxer %1 perquè existeix un altre fitxer amb el mateix nom que només es distingeix per les majúscules i les minúscules - - + + Upload of %1 exceeds the quota for the folder La pujada de %1 supera la quota de la carpeta - + File Removed (start upload) %1 S'ha suprimit el fitxer (inicia la càrrega) %1 - + Local file changed during syncing. It will be resumed. El fitxer local ha canviat durant la sincronització. Es reprendrà. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + Failed to unlock encrypted folder. @@ -3824,12 +3724,12 @@ S'ha produït un error en escriure les metadades a la base de dades - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3837,32 +3737,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. S'ha suprimit el fitxer local durant la sincronització. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + Poll URL missing Falta l'URL de sol·licitud - + Unexpected return code from server (%1) Codi de retorn inesperat del servidor (%1) - + Missing File ID from server Falta l'ID de fitxer del servidor - + Missing ETag from server Falta l'etiqueta d'entitat del servidor @@ -3870,22 +3770,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta l'URL de sol·licitud - + The local file was removed during sync. S'ha suprimit el fitxer local 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) El servidor no ha reconegut el darrer fragment. (No hi havia cap etiqueta d'entitat) @@ -3963,7 +3863,7 @@ OCC::ServerNotificationHandler - + Dismiss Descarta @@ -4133,17 +4033,17 @@ Protecció amb contrasenya - + Allow editing Permet l'edició - + View only - + Allow upload and editing Permet la pujada i l'edició @@ -4153,7 +4053,7 @@ Data de venciment - + File drop (upload only) Arrossegament de fitxers (només pujada) @@ -4163,32 +4063,32 @@ Deixa de compartir - + Link name - + Note to recipient Nota per al destinatari - + Password protect Protecció amb contrasenya - + Set expiration date Definiu una data de venciment - + Delete link - + Add another link Afegeix un altre enllaç @@ -4198,27 +4098,27 @@ Suprimeix l'enllaç de compartició - + Confirm Link Share Deletion Confirmeu la supressió de l'enllaç de compartició - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Segur que voleu suprimir l'enllaç públic de compartició <i>%1</i>?</p><p>Nota: aquesta acció no es pot desfer.</p> - + Delete Suprimeix - + Cancel Cancel·la - + Public link Enllaç públic @@ -4231,12 +4131,12 @@ Comparteix amb usuaris o grups... - + Search globally Cerca globalment - + Copy link Copia l'enllaç @@ -4246,22 +4146,22 @@ No hi ha resultats per a «%1» - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you He compartit una cosa amb tu @@ -4299,42 +4199,42 @@ Venciment: - + Can reshare Pot tornar a compartir - + Note to recipient Nota per al destinatari - + Set expiration date - + Unshare Deixa de compartir - + Can create Pot crear - + Can change Pot canviar - + Can delete Pot suprimir - + Password protect Protecció amb contrasenya @@ -4351,23 +4251,23 @@ OCC::SocketApi - + Context menu share Compartició del menú contextual - + Select new location … Seleccioneu una ubicació nova… - + I shared something with you He compartit una cosa amb tu - - + + Share options Opcions de compartició @@ -4383,73 +4283,73 @@ - + Copy private link to clipboard Copia l'enllaç privat al porta-retalls - + Send private link by email … Envia l'enllaç privat per correu electrònic… - + Resharing this file is not allowed No es permet tornar a compartir el fitxer - + Resharing this folder is not allowed No es permet tornar a compartir la carpeta - - + + Copy public link Copia l'enllaç públic - + Copy internal link Copia l'enllaç intern - + Edit Edita - + Open in browser Obre en el navegador - + Resolve conflict … Resol el conflicte… - + Move and rename … Mou i canvia el nom... - + Move, rename and upload … Mou, canvia el nom i puja... - + Delete local changes Suprimeix els canvis locals - + Move and upload … Mou i puja... - + Delete Suprimeix @@ -4595,12 +4495,12 @@ Confia en aquest certificat de totes maneres - + Untrusted Certificate Certificat no fiable - + Cannot connect securely to <i>%1</i>: No es pot establir una connexió segura a <i>%1</i>: @@ -4610,62 +4510,62 @@ - + with Certificate %1 amb el certificat %1 - - - + + + &lt;not specified&gt; &lt;sense especificar&gt; - - + + Organization: %1 Organització: %1 - - + + Unit: %1 Unitat: %1 - - + + Country: %1 País: %1 - + Fingerprint (SHA1): <tt>%1</tt> Empremta digital (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Empremta (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Empremta (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data d'entrada en vigor: %1 - + Expiration Date: %1 Data de venciment: %1 - + Issuer: %1 Emissor: %1 @@ -4758,33 +4658,33 @@ S'ha produït l'error intern núm. %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (s'ha omès a causa d'un error anterior, torneu-ho a provar d'aquí %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 No s'han pogut actualitzar les metadades del fitxer virtual: %1 - + Unresolved conflict. Conflicte sense resoldre. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Només hi ha %1 disponibles, necessiteu com a mínim %2 per a començar - + Aborted S'ha cancel·lat @@ -4861,16 +4761,16 @@ No s'admeten els noms de fitxer que finalitzen amb un punt en aquest sistema de fitxers. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No es pot obrir o crear la base de dades de sincronització local. Assegureu-vos que teniu accés d'escriptura a la carpeta de sincronització. + + File names containing the character '%1' are not supported on this file system. No s'admeten els noms de fitxers que contenen el caràcter «%1» en aquest sistema de fitxers. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No es pot obrir o crear la base de dades de sincronització local. Assegureu-vos que teniu accés d'escriptura a la carpeta de sincronització. - - The file name is a reserved name on this file system. Aquest nom de fitxer és un nom reservat en aquest sistema de fitxers. @@ -4891,7 +4791,7 @@ S'ignora el fitxer o la carpeta perquè està ocult. - + Using virtual files with suffix, but suffix is not set S'estan utilitzant fitxers virtuals amb sufix però no s'ha definit el sufix @@ -4906,7 +4806,7 @@ El nom del fitxer no es pot codificar en el vostre sistema de fitxers. - + Unable to read the blacklist from the local database No s'ha pogut llegir la llista negra de la base de dades local. @@ -4921,17 +4821,17 @@ S'ha produït un error en comprovar l'estat. + + Unable to read from the sync journal. + No s'ha pogut llegir el diari de sincronització. + + Filename encoding is not valid La codificació del nom de fitxer no és vàlida. - - Unable to read from the sync journal. - No s'ha pogut llegir el diari de sincronització. - - - + Cannot open the sync journal No es pot obrir el diari de sincronització @@ -4941,22 +4841,22 @@ Caràcters no vàlids; canvieu el nom de «%1». + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nom del fitxer conté com a mínim un caràcter no vàlid - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Queda poc espai en el disc: s'han omès les baixades que reduirien l'espai lliure per sota de %1. - + There is insufficient space available on the server for some uploads. No hi ha prou espai en el servidor per a pujar-hi alguns fitxers. @@ -5025,49 +4925,49 @@ OCC::Systray - + Add account Afegeix un compte - + Open main dialog Obre el quadre de diàleg principal + - Pause sync Atura la sincronització - - + + Resume sync Reprèn la sincronització - + Settings Paràmetres - + Exit %1 Surt del %1 - + Pause sync for all Atura la sincronització de tot - + Resume sync for all Reprèn la sincronització de tot - + %1: %2 %1: %2 @@ -5075,24 +4975,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Client d'escriptori del %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versió %1. Per a obtenir més informació, feu clic <a href='%2'>aquí</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Aquesta versió ha estat proporcionada per %1</p> @@ -5100,22 +5000,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5123,32 +5023,32 @@ OCC::User - + Retry all uploads Torna a intentar totes les pujades - + Synced %1 S'ha sincronitzat %1 - + You renamed %1 Heu canviat el nom de %1 - + You deleted %1 Heu suprimit %1 - + You created %1 Heu creat %1 - + You changed %1 Heu canviat %1 @@ -5156,22 +5056,22 @@ OCC::UserModel - + Confirm Account Removal Confirmeu la supressió 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 suprimir la connexió al compte <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> suprimirà cap fitxer.</p> - + Remove connection Suprimeix la connexió - + Cancel Cancel·la @@ -5276,30 +5176,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 La característica de sistema de fitxers virtual requereix un sistema de fitxers NTFS; %1 utilitza %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5821,52 +5703,52 @@ - + %n day ago Fa %n diaFa %n dies - + %n days ago Fa %n diaFa %n dies - + in the future En el futur - + %n hour ago Fa %n horaFa %n hores - + %n hours ago Fa %n horaFa %n hores - + now Ara - + Less than a minute ago Fa menys d'un minut - + %n minute ago Fa %n minutFa %n minuts - + %n minutes ago Fa %n minutFa %n minuts - + Some time ago Fa una estona @@ -5900,7 +5782,7 @@ SyncJournalDb - + Failed to connect database. @@ -5908,7 +5790,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5945,21 +5827,11 @@ Entrada de compte - + Switch to account Canvia al compte - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Compte connectat @@ -5970,7 +5842,17 @@ Compte no connectat - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Accions del compte @@ -5980,24 +5862,24 @@ Suprimeix el compte - + Set status - - + + Log out Tanca la sessió - - + + Log in Inicia la sessió - + Remove account Suprimeix el compte @@ -6058,57 +5940,57 @@ 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 @@ -6116,7 +5998,7 @@ ValidateChecksumHeader - + The checksum header is malformed. La capçalera de la suma de verificació està mal formada. @@ -6149,64 +6031,64 @@ Window - + Nextcloud desktop main dialog Quadre de diàleg principal del client d'escriptori del Nextcloud - + Current account Compte actual - - + + Resume sync for all Reprèn la sincronització de tot - - + + Pause sync for all Atura la sincronització de tot - + Set user status - + Add account Afegeix un compte - + Add new account Afegeix un compte - + Settings Paràmetres - + Exit Surt - + Current user avatar Avatar de l'usuari actual - + Current user status is online - + Current user status is do not disturb @@ -6216,32 +6098,32 @@ Comparteix %1 - + Account switcher and settings menu Canvi de compte i menú de paràmetres - + Connected Connectat - + Disconnected Desconnectat - + Open local folder of current account Obre la carpeta local del compte actual - + Open Nextcloud Talk in browser Obre l'aplicació Converses del Nextcloud al navegador - + More apps Més aplicacions @@ -6251,7 +6133,7 @@ Menú d'aplicacions - + Open %1 in browser Obre %1 en el navegador @@ -6271,7 +6153,7 @@ Obre el quadre de diàleg de compartició - + Unified search results list @@ -6282,7 +6164,7 @@ Mostra més accions - + %1 - File activity @@ -6290,7 +6172,7 @@ main.cpp - + System Tray not available La safata del sistema no està disponible @@ -6300,7 +6182,7 @@ El %1 requereix una safata del sistema funcional. Si esteu executant l'Xfce, seguiu <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">aquestes instruccions</a>. En cas contrari, instal·leu una aplicació de safata del sistema com ara «trayer» i torneu-ho a provar. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6308,7 +6190,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Compilat a partir de la revisió del Git <a href="%1">%2</a> el %3 a les %4 mitjançant Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_cs.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_cs.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_cs.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_cs.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Otevřít %1 lokálně - + Open share dialog Otevřít dialog sdílení - + Share %1 Sdílet %1 - - + + Show more actions Zobrazit další akce @@ -39,7 +39,7 @@ ActivityList - + Activity list Seznam aktivit @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Překročen časový limit spojení - + Unknown error: network reply was deleted Neznámá chyba: odpověď sítě byla smazána - + Server replied "%1 %2" to "%3 %4" Odpověď ze serveru „%1 %2“ na „%3 %4“ @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemotechnická fráze pro šifrování mezi koncovými body - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pro ochranu vaší kryptografické identity ji šifrujeme pomocí mnemotechnické fráze, tvořené 12 slovy ze slovníku. Poznamenejte si ji někam bezpečně. Bude potřebná pro přidání dalších zařízení k vašemu účtu (jako je mobilní telefon či notebook). @@ -305,9 +305,9 @@ - - - + + + Cancel Storno @@ -495,52 +495,52 @@ Odstranit připojení synchronizace složky - + Disable virtual file support … Vypnout podporu pro virtuální soubory… - + Enable virtual file support %1 … Zapnout podporu pro virtuální soubory %1… - + (experimental) (experimentální) - + Folder creation failed Vytvoření složky se nezdařilo - + <p>Could not create local folder <i>%1</i>.</p> <p>Nedaří se vytvořit místní složku <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Potvrdit odstranění připojení synchronizace složky - + <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 složky <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + Remove Folder Sync Connection Odstranit připojení synchronizace složky - + Disable virtual file support? Vypnout podporu pro virtuální soubory? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Současně tato akce zruší jakoukoli právě probíhající synchronizaci. - + Disable support Vypnout podporu - + Sync Running Probíhá synchronizace - + The syncing operation is running.<br/>Do you want to terminate it? Právě probíhá operace synchronizace.<br/>Přejete si ji ukončit? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. Využito %1 (%3%) z %2. Některé složky, včetně těch připojených ze sítě nebo sdílených, mohou mít odlišné limity. - + %1 of %2 in use Využito %1 z %2 - + Currently there is no storage usage information available. V tuto chvíli nejsou k dispozici žádné informace o využití úložiště. - + %1 in use %1 využito @@ -603,87 +603,87 @@ Přihlásit - + %1 as %2 %1 jako %2 - + The server version %1 is unsupported! Proceed at your own risk. Verze serveru %1 není podporována! Pokračujte jen na vlastní nebezpečí. - + 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. Na serveru %1 v tuto chvíli probíhá údržba. - + Signed out from %1. Odhlášeno z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Získávání pověření z prohlížeče. <a href='%1'>Klikněte sem</a> a bude opětovně otevřen. - + Connecting to %1 … Připojování k %1… - + No connection to %1 at %2. Bez připojení k %1 na %2. - + Server configuration error: %1 at %2. Chyba nastavení serveru: %1 na %2. - + No %1 connection configured. Nenastaveno žádné připojení k %1. - + 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ázejí na externích úložištích: - + 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ázejí na externích úložištích: - + 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í @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Odhlášeno - + Disconnected Odpojeno - + Connected Připojeno - + Service unavailable Služba nedostupná - + Maintenance mode Režim údržby - + Network error Chyba sítě - + Configuration error Chyba v nastavení - + Asking Credentials Dotazování na přihlašovací údaje - + Unknown account state Neznámý stav účtu @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Soubory ze seznamu ignorovaných a symbolické odkazy nejsou synchronizovány. - + For more activities please open the Activity app. Více z aktivit si zobrazíte otevřením aplikace Aktivity @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Pokračování bude znamenat <b>vymazání těchto nastavení</b>. - + Continuing will mean <b>ignoring these settings</b>. Pokračování bude znamenat <b>ignorování těchto nastavení</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Některá nastavení byla vytvořena v novejší verzi tohoto klienta a využívají funkce, které tato verze nepodporuje.<br><br>%1<br><br>Stávající soubory s nastaveními byly zazálohovány do <i>%2</i>. - + Quit Ukončit - + Continue Pokračovat - + Error accessing the configuration file Chyba při přístupu k souboru s nastaveními - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Došlo k chybě při přístupu k souboru s nastaveními %1. Ověřte, že váš uživatelský účet má k souboru přístup. - + Quit %1 Ukončit %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - 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 %1 has invalid modified time. Do not upload to the server. - Soubor %1 nemá platný čas změny. Nenahrávat na server. - - - - File Removed (start upload) %1 - Soubor odebrán (zahájit nahrávání) %1 - - - - Local file changed during syncing. It will be resumed. - Místní soubor se během synchronizace změnil. Bude zopakována. - - - - - Local file changed during sync. - Místní soubor byl změněn během synchronizace. - - - - Error updating metadata: %1 - Chyba při aktualizování metadat: %1 - - - - The file %1 is currently in use - Soubor %1 je v tuto chvíli používán jinou aplikací - - - - The local file was removed during sync. - Místní soubor byl odstraněn během synchronizace. - - - - ; Restoration Failed: %1 - ; Obnovení se nezdařilo: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Zadejte heslovou frázi pro šifrování mezi koncovými body: <br><br>Uživatel: %2<br>Účet: %3<br> - + Enter E2E passphrase Zadejte heslovou frázi pro šifr. mezi konc. body @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - Chyba při rušení mazání souboru - - - - Error while canceling delete of %1 - Chyba při rušení mazání %1 - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Odpověď ze serveru na objevování souboru postrádá data. - - + + Server error: PROPFIND reply is not XML formatted! Chyba serveru: odpověď PROPFIND není ve formátu XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Chyba při otevírání adresáře %1 - + Directory not accessible on client, permission denied Adresář není klientem přístupný, oprávnění odepřeno - + Directory not found: %1 Adresář nenalezen: %1 - + Filename encoding is not valid Znaková sada názvu souboru není platná - + Error while reading directory %1 Chyba při načítání adresáře %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Chyba vrácená ze serveru: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Došlo k chybě při přístupu ke koncovému bodu „token“: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Nedaří se zpracovat JSON vrácený serverem: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odpověď ze serveru neobsahuje všechny očekávané kolonky - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. URL adresa serveru, která byla vrácena, nezačíná na HTTPS, ačkoli přihlašovací adresa na HTTPS začíná. Přihlášení nebude umožněno, protože by se jednalo a bezpečnostní problém. Obraťte se na svého správce. @@ -1368,40 +1305,40 @@ Průběh synchronizace - + Could not read system exclude file Nezdařilo se přečtení systémového souboru s položkami pro vynechání - + A new folder larger than %1 MB has been added: %2. Byla přidána nová složka větší než %1 MB: %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, jděte do nastavení a vyberte to. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Složka %1 byla vytvořena ale byla už dříve vynechána ze synchronizace. Data, která se v ní nacházejí, nebudou synchronizována. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Soubor %1 byl vytvořen ale byl už dříve vynechán ze synchronizace. Nebude synchronizován. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1414,6 +1351,15 @@ %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. + Všechny soubory v místní synchronizované složce „%1“ byly smazány. Tyto soubory budou smazány i v synchronizované složce na serveru a nebudou tedy dostupné, dokud nebudou obnovené. +Opravdu chcete tyto změny provést i na serveru? +Pokud to byla pouze chyba a chcete si tyto soubory ponechat, budou ze serveru znovu synchronizovány. + + All files in the sync folder '%1' 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. @@ -1473,8 +1419,8 @@ Ponechat místní soubory jako konflikt - - All files in the sync folder '%1' folder were deleted on the server. + + 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 restore 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. @@ -1484,8 +1430,8 @@ Pokud se rozhodnete soubory smazat, budou vám nedostupné, pokud nejste 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. + + 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. Všechny soubory v místní synchronizované složce „%1“ byly smazány. Tyto soubory budou smazány i v synchronizované složce na serveru a nebudou tedy dostupné, dokud nebudou obnovené. @@ -1494,7 +1440,17 @@ - All files in the sync folder "%1" folder were deleted on the server. + Remove All Files? + Odebrat veškeré soubory? + + + + Remove all files + Odebrat veškeré soubory + + + + 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 restore 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. @@ -1505,25 +1461,6 @@ - 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. - Všechny soubory v místní synchronizované složce „%1“ byly smazány. Tyto soubory budou smazány i v synchronizované složce na serveru a nebudou tedy dostupné, dokud nebudou obnovené. -Opravdu chcete tyto změny provést i na serveru? -Pokud to byla pouze chyba a chcete si tyto soubory ponechat, budou ze serveru znovu synchronizovány. - - - - Remove All Files? - Odebrat veškeré soubory? - - - - Remove all files - Odebrat veškeré soubory - - - Keep files Ponechat soubory @@ -1559,7 +1496,7 @@ OCC::FolderMan - + Could not reset folder state Nedaří se obnovit stav složky @@ -1569,37 +1506,37 @@ Byl nalezen starý záznam synchronizace „%1“, ale nebylo možné ho odebrat. Ujistěte se, že není aktuálně používán jinou aplikací. - + 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é ho 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 je spuštěná. @@ -1609,67 +1546,67 @@ Synchronizace byla úspěšná, nevyřešené konflikty. - + Sync finished with unresolved conflicts. Synchronizace dokončena s nevyřešenými konflikty. - + Last Sync was successful. Poslední synchronizace byla úspěšná. - + Setup Error. Chyba nastavení. - + User Abort. Zrušeno uživatelem. - + Sync is paused. Synchronizace je pozastavena. - + %1 (Sync is paused) %1 (synchronizace je pozastavena) - + No valid folder selected! Nevybrána platná složka! - + The selected path does not exist! Vybraný popis umístění neexistuje! - + The selected path is not a folder! Vybraný popis umístění není složka! - + You have no permission to write to the selected folder! Nemáte oprávnění pro zápis do zvolené složky! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Místní složka %1 už obsahuje podsložku použitou pro synchronizaci. Zvolte jinou! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Místní složka %1 už je obsažena ve složce, použité pro synchronizaci. Zvolte 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í už synchronizuje. Zvolte jinou místní složku! @@ -1881,12 +1818,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Přidat připojení pro synchronizaci složky - + Add Sync Connection Přidat synchronizační připojení @@ -1927,42 +1864,42 @@ Níže zadejte název pro nově vytvářenou složku „%1“: - + Folder was successfully created on %1. Složka byl úspěšně vytvořena na %1. - + Authentication failed accessing %1 Chyba ověření při přístupu k %1 - + Failed to create the folder on %1. Please check manually. Na %1 se nepodařilo vytvořit složku. Zkontrolujte to ručně. - + Failed to list a folder. Error: %1 Nepodařilo se vypsat obsah složky. Chyba: %1 - + Choose this to sync the entire account Zvolte toto pokud chcete provést synchronizaci celého účtu - + This folder is already being synced. Tato složka už je synchronizována. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Už synchronizujete složku <i>%1</i>, ve které se složka <i>%2</i> nachází. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Už synchronizujete složku <i>%1</i>, která je podsložkou <i>%2</i>. @@ -1970,24 +1907,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Použít virtuální soubory místo okamžitého stahování obsahu %1 - - + + (experimental) (experimentální) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Ve Windows kořenovém adresáři oddílu disku nejsou virtuální soubory podporovány. Vyberte platný adresář v disku. - + Virtual files are not available for the selected folder Pro označenou složku nejsou virtuální soubory k dispozici @@ -2008,27 +1945,27 @@ 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. Při navazování byl obdržen jiný E-Tag. Bude znovu vyzkoušeno příště. - + We received an unexpected download Content-Length. Obdržena neočekávaná délka stahovaného obsahu. - + Server returned wrong content-range Server vrátil chybný rozsah obsahu - + Connection Timeout Časový limit pro spojení překročen @@ -2148,22 +2085,22 @@ Vytvořit archiv s informacemi pro ladění… - + Server notifications that require attention. Upozornění ze serveru, která vyžadují pozornost. - + You cannot disable autostart because system-wide autostart is enabled. Automatické spouštění nemůžete vypnout, protože je celosystémově zapnuté pro všechny uživatele. - + Change update channel? Změnit kanál aktualizací? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2172,32 +2109,32 @@ Poznamenejme, že je možné přejít na novější verzi, ale není možné se vrátit ke starší. To znamená, že návrat z beta kanálu ke stabilnímu obvykle potrvá, protože se čeká, až bude nabídnuta stabilní verze klienta novější, než nainstalovaná vývojová verze. - + Change update channel Změnit kanál aktualizací - + Cancel Storno - + Create Debug Archive Vytvořit archiv s informacemi pro ladění - + Zip Archives Zip archivy - + Debug Archive Created Archiv s informacemi pro ladění vytvořen - + Debug archive is created at %1 Archiv s ladicími informacemi je vytvořen v %1 @@ -2205,22 +2142,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Je vyžadováno heslo ke sdílení - + Please enter a password for your link share: Zadejte heslo pro sdílení odkazem: - + Sharing error Chyba sdílení - + Could not retrieve or create the public link share. Error: %1 @@ -2392,7 +2329,7 @@ The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > - Následující znaky nejsou systémem dovoleny: * " | & ? , ; : \ / ~ < > + Následující znaky nejsou v systému povoleny: * " | & ? , ; : \ / ~ < > @@ -2545,7 +2482,7 @@ OCC::Logger - + Error Chyba @@ -2555,7 +2492,7 @@ <nobr>Soubor „%1“<br/>se nedaří otevřít pro zápis.<br/><br/>Výstup záznamu proto <b>nelze</b> uložit!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> Soubor „%1“<br/> se nepodařilo otevřít pro zápis.<br/><br/>Výstup záznamu událostí <b>není</b> možné uložit!<nobr> @@ -2563,33 +2500,33 @@ OCC::NSISUpdater - + New Version Available Je k dispozici 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čit tuto verzi - + Skip this time Tentokrát přeskočit - + Get update Získat aktualizaci - + Update Failed Aktualizace se nezdařila @@ -2604,17 +2541,17 @@ <p>Je k dispozici nová verze %1 klienta, ale aktualizace se nezdařila.</p><p><b>%2</b> byla stažena. Nyní je nainstalovaná %3. Pokud potvrdíte restart a aktualizaci, váš počítač se může pro dokončení instalace restartovat.</p> - + Ask again later Zeptat se později - + Restart and update Restartovat a aktualizovat - + Update manually Aktualizovat ručně @@ -2725,7 +2662,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Chyba vrácené ze serveru: <em>%1</em> @@ -2735,32 +2672,32 @@ Došlo k chybě při přístupu ke koncovému bodu „token“: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Došlo k chybě při přístupu ke koncovému bodu „token“: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Vyprázdnit JSON z OAuth2 přesměrování - + Could not parse the JSON returned from the server: <br><em>%1</em> Nedaří se zpracovat JSON data vrácená serverem:<br><em>%1</em> - + The reply from the server did not contain all expected fields Odpověď ze serveru neobsahovala všechny očekávané kolonky - + <h1>Login Error</h1><p>%1</p> <h1>Chyba přihlášení</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>Nesprávný uživatel</h1><p>Přihlásili jste se jako uživatel <em>%1</em>, ale je třeba, se přihlásit jako uživatel <em>%2</em>.<br>Odhlaste %3 v jiné kartě, pak <a href='%4'>klikněte sem</a> a přihlaste se jako uživatel %2</p> @@ -2830,12 +2767,12 @@ Aktualizaci se nedaří stáhnout. Zkuste to ručně, kliknutím na <a href='%1'>%1</a>. - + Could not download update. Please open %1 to download the update manually. Aktualizaci se nedaří stáhnout. Otevřete %1 a stáhněte si aktualizaci ručně. - + Could not check for new updates. Nedaří se zjistit dostupnost případných nových aktualizací. @@ -2845,27 +2782,27 @@ Je k dispozici nové %1. Kliknutím na <a href='%2'>%2</a> si stáhnete aktualizaci. - + New %1 is available. Please open %2 to download the update. Je k dispozici nové %1. Aktualizaci si stáhnete otevřením %2. - + Checking update server … Kontroluje se aktualizační server… - + Update status is unknown: Did not check for new updates. Stav aktualizace je neznámý: Nové aktualizace nebyly zkontrolovány. - + No updates available. Your installation is at the latest version. Nejsou k dispozici žádné aktualizace. Používáte nejnovější verzi. - + Update Check Ověřit aktualizace @@ -2893,14 +2830,14 @@ Připojit… - - + + Use &virtual files instead of downloading content immediately %1 Použít &virtuální soubory místo okamžitého stahování obsahu %1 - - + + (experimental) (experimentální) @@ -2925,49 +2862,49 @@ Volné místo: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Ve Windows kořenovém adresáři oddílu disku nejsou virtuální soubory podporovány. Vyberte platný adresář v disku. - + %1 folder "%2" is synced to local folder "%3" %1 složka „%2“ je synchronizována do místní složky „%3“ - + Sync the folder "%1" Synchronizovat složku „%1“ - + Warning: The local folder is not empty. Pick a resolution! Varování: Místní složka není prázdná. Zvolte další postup! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 volného místa - + Virtual files are not available for the selected folder Pro označenou složku nejsou virtuální soubory k dispozici - + Local Sync Folder Místní synchronizovaná složka - - + + (%1) (%1) - + There isn't enough free space in the local folder! V místní složce není dostatek volného místa! @@ -3037,14 +2974,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3039,7 @@ &Následující > - + Server address does not seem to be valid Vypadá to, že adresa serveru není platná @@ -3120,7 +3049,7 @@ Neplatná URL adresa - + Could not load certificate. Maybe wrong password? Certifikát není možné načíst. Nejspíš chybné heslo? @@ -3218,54 +3147,54 @@ vytváří se složka na Nextcloud: %1 - + Remote folder %1 created successfully. Složka %1 byla na federované straně úspěšně vytvořena. - + The remote folder %1 already exists. Connecting it for syncing. Složka %1 už na federované straně existuje. Probíhá propojení synchronizace. + - The folder creation resulted in HTTP error code %1 Vytvoření složky se nezdařilo 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í federované složky se nezdařilo, pravděpodobně z důvodu neplatných přihlašovacích údajů.<br/>Vraťte se 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í federované složky se nezdařilo, pravděpodobně z důvodu neplatných přihlašovacích údajů.</font><br/>Vraťte se zpět a zkontrolujte je.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytváření federované složky %1 se nezdařilo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Bylo nastaveno synchronizované spojení z %1 do federované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 se nedaří navázat. Znovu to zkontrolujte. - + Folder rename failed Přejmenování složky se nezdařilo @@ -3275,12 +3204,12 @@ Složku není možné odstranit ani zazálohovat, protože podložka nebo soubor v něm je otevřen v jiném programu. Zavřete podsložku nebo soubor v dané aplikaci a zkuste znovu nebo celou tuto akci zrušte. - + Cannot 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. Složku není možné odstranit ani zazálohovat, protože podložka nebo soubor v něm je otevřen v jiném programu. Zavřete podsložku nebo soubor v dané aplikaci a zkuste znovu nebo celou tuto akci zrušte. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Místní synchronizovaná složka %1 byla úspěšně vytvořena!</b></font> @@ -3288,7 +3217,7 @@ OCC::OwncloudWizard - + Add %1 account Přidat %1 účet @@ -3298,17 +3227,17 @@ %1 Průvodce spojením - + Skip folders configuration Přeskočit nastavení složek - + Enable experimental feature? Zapnout experimentální funkci? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ Toto je nový, experimentální režim. Pokud se jej rozhodnete používat, prosíme nahlaste případné chyby, které objevíte. - + Enable experimental placeholder mode Zapnout experimentální režim výplně - + Stay safe Zůstaňte v bezpečí @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Neplatná JSON odpověď z URL adresy pro dotazování @@ -3356,17 +3285,17 @@ Název souboru začíná mezerami a nebylo ho možné přejmenovat, protože lokálně už existuje soubor se stejným názvem. - + Symbolic links are not supported in syncing. Synchronizace nepodporuje symbolické odkazy. - + File is listed on the ignore list. Soubor je uveden na seznamu k ignorování. - + File names ending with a period are not supported on this file system. Na tomto souborovém systému nejsou podporovány názvy souborů končící na tečku. @@ -3381,57 +3310,57 @@ Názvy souborů obsahující znak „%1“ nejsou na tomto souborovém systému podporovány. - + File name contains at least one invalid character Název souboru obsahuje přinejmenším jeden neplatný znak - + The file name is a reserved name on this file system. Název souboru je na tomto souborovém systému rezervovaným názvem (nelze ho použít). - + Filename contains trailing spaces. Název souboru končí na mezery. - + Filename is too long. Název souboru je příliš dlouhý. - + File/Folder is ignored because it's hidden. Soubor/složka je ignorovaná, protože je skrytá. - + Stat failed. Zjištění existence (stat) se nezdařilo. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Stažena verze ze serveru, místní kopie přejmenována a nenahrána. - + The filename cannot be encoded on your file system. Enkódování tohoto názvu souboru je mimo technické možnosti daného souborového systému. - + The filename is blacklisted on the server. Takový název souboru je na serveru zařazen na seznam nepřípustných. - + File has extension reserved for virtual files. Soubor má příponu vyhrazenou pro virtuální soubory. - + size velikost @@ -3441,72 +3370,62 @@ oprávnění - - server reported no %1 - server nahlásil žádné %1 - - - - permission - oprávnění - - - + file id identif. souboru - - Server reported no %1 - Server nahlášen číslo %1 + + server reported no %1 + server nahlásil žádné %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Konflikt při nahrávání některých souborů do složky. Ty, které jsou v konfliktu budou vymazány! - + Conflict when uploading a folder. It's going to get cleared! Konflikt při nahrávání složky. Bude vymazána! - + Conflict when uploading a file. It's going to get removed! Konflikt při nahrávání souboru. Bude odebrán! - + 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 Neumožněno, protože nemáte oprávnění přidávat podsložky do této složky - + Not allowed because you don't have permission to add files in that folder Neumožněno, protože nemáte oprávnění přidávat soubory do této složky - + Not allowed to upload this file because it is read-only on the server, restoring Není možné tento soubor nahrát, protože je na serveru povoleno pouze čtení – obnovuje se - + Moved to invalid target, restoring Přesunuto do neplatného cíle – obnovuje se - + Not allowed to remove, restoring Odstranění není umožněno – obnovuje se - + Error while reading the database Chyba při čtení databáze @@ -3516,7 +3435,7 @@ Server vrátil chybu při čtení adresáře „%1“: %2 - + Server replied with an error while reading directory "%1" : %2 Server vrátil chybu při čtení adresáře „%1“: %2 @@ -3529,17 +3448,12 @@ Chyba při zapisování metadat do databáze - - Error updating metadata due to invalid modified time - Chyba při aktualizaci metadat z důvodu neplatného času změny - - - + Error updating metadata: %1 Chyba při aktualizování metadat: %1 - + File is currently in use Soubor je v tuto chvíli používán jinou aplikací @@ -3552,44 +3466,44 @@ Soubor %1 není možné stáhnout z důvodu chybějících informací o šifrování - + File %1 cannot be downloaded because encryption information is missing. Soubor %1 není možné stáhnout z důvodu chybějících informací o šifrování - - + + File has changed since discovery Soubor se mezitím změnil - - + + File %1 cannot 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! - + 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 local disk space below the limit Stahování by snížilo volné místo na místním disku pod nastavený limit - + Free space on disk is less than %1 Volného místa na úložišti 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. @@ -3599,12 +3513,12 @@ Stažený soubor je prázdný, přestože server oznámil, že by měl mít velikost %1. - + The downloaded file is empty, but the server said it should have been %1. Stažený soubor je prázdný, ale server sdělil, že měl mí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 s místním souborem! @@ -3614,18 +3528,12 @@ Chyba zápisu metadat do databáze - - - File %1 has invalid modified time reported by server. Do not save it. - Soubor %1 nemá platný čas změny, hlášený na server. Neukládat ho. - - - + Error updating metadata: %1 Chyba při aktualizování metadat: %1 - + The file %1 is currently in use Soubor %1 je v tuto chvíli používán jinou aplikací @@ -3633,12 +3541,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovení se nezdařilo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Soubor nebo složka byla odebrána ze sdílení pouze pro čtení, ale jeho obnovení se nezdařilo: %1 @@ -3712,12 +3620,12 @@ Soubor %1 nemohl být přejmenován na %2 z důvodu kolize názvu s místním souborem - + Error updating metadata: %1 Chyba při aktualizování metadat: %1 - + The file %1 is currently in use Soubor %1 je v tuto chvíli používán jinou aplikací @@ -3728,12 +3636,12 @@ Chyba zápisu metadat do databáze - + Failed to rename file Nepodařilo se přejmenovat soubor - + Error setting pin state Chyba při nastavování stavu pin @@ -3767,12 +3675,12 @@ Chyba zápisu metadat do databáze - + Error writing metadata to the database: %1 Chyba zápisu metadat do databáze: %1 - + The file %1 is currently in use Soubor %1 je v tuto chvíli používán jinou aplikací @@ -3790,22 +3698,22 @@ Serverem vrácen neplatný HTTP kód. Očekáván 201, ale obdržen „%1 %2“. - + Error updating metadata: %1 Chyba při aktualizování metadat: %1 - + The file %1 is currently in use Soubor %1 je v tuto chvíli používán jinou aplikací - + Error setting pin state Chyba při nastavování stavu pin - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - Soubor %1 nemá platný čas změny. Nenahrávat na server. - - - + Failed to upload encrypted file. Šifrovaný soubor se nepodařilo nahrát. - + 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 - - + + Upload of %1 exceeds the quota for the folder Nahrání %1 překračuje kvótu nastavenou pro složku - + File Removed (start upload) %1 Soubor odebrán (zahájit nahrávání) %1 - + Local file changed during syncing. It will be resumed. Místní soubor se během synchronizace změnil. Bude zopakována. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + Failed to unlock encrypted folder. Šifrovanou složku se nepodařilo odemknout. @@ -3862,12 +3762,12 @@ Chyba při zápisu metadat do databáze - + Error updating metadata: %1 Chyba při aktualizování metadat: %1 - + The file %1 is currently in use Soubor %1 je v tuto chvíli používán jinou aplikací @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing Chybí adresa URL - + Unexpected return code from server (%1) Neočekávaný návratový kód ze serveru (%1) - + Missing File ID from server Chybějící identifikátor souboru ze serveru - + Missing ETag from server Chybějící ETag ze serveru @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss Zamítnout @@ -4171,17 +4071,17 @@ Chránit heslem - + Allow editing Povolit úpravy - + View only Pouze prohlížet - + Allow upload and editing Povolit nahrávání a úpravy @@ -4191,7 +4091,7 @@ Datum skončení platnosti - + File drop (upload only) Přetažení souboru (pouze nahrání) @@ -4201,32 +4101,32 @@ Přestat sdílet - + Link name Název odkazu - + Note to recipient Poznámka pro příjemce - + Password protect Chránit heslem - + Set expiration date Nastavit datum skončení platnosti - + Delete link Smazat odkaz - + Add another link Přidat další odkaz @@ -4236,27 +4136,27 @@ Smazat odkaz pro sdílení - + Confirm Link Share Deletion Potvrďte smazání odkazu pro sdílení - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Opravdu chcete smazat odkaz na veřejné sdílení <i>%1</i>?</p><p>Pozn.: tuto akci nelze vzít zpět.</p> - + Delete Smazat - + Cancel Storno - + Public link Veřejný odkaz @@ -4269,12 +4169,12 @@ Sdílet s uživateli nebo skupinami… - + Search globally Hledat všude - + Copy link Zkopírovat odkaz @@ -4284,22 +4184,22 @@ Žádné výsledky pro „%1“ - + No results for "%1" Žádné výsledky pro „%1“ - + Password for share required K sdílení je vyžadováno heslo - + Please enter a password for your email share: Zadejte heslo e-mailového sdílení - + I shared something with you Něco jsem vám nasdílel(a) @@ -4337,42 +4237,42 @@ Platnost skončí: - + Can reshare Příjemce tohoto sdílení může sám dále nasdílet dalším - + Note to recipient Poznámka pro příjemce - + Set expiration date Nastavit datum skončení platnosti - + Unshare Přestat sdílet - + Can create Může vytvářet - + Can change Může měnit - + Can delete Může mazat - + Password protect Chránit heslem @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share Sdílení kontextové nabídky - + Select new location … Vyberte nové umístění… - + I shared something with you Něco jsem vám nasdílel(a) - - + + Share options Možnosti sdílení @@ -4421,73 +4321,73 @@ Aktivita - + Copy private link to clipboard Zkopírovat soukromý odkaz do schránky - + Send private link by email … Poslat soukromý odkaz e-mailem… - + Resharing this file is not allowed Příjemcům sdílení tohoto souboru není dovoleno ho sdílet dále dalším - + Resharing this folder is not allowed Sdílení této složky dál dalším není umožněno - - + + Copy public link Zkopírovat veřejný odkaz - + Copy internal link Zkopírovat interní odkaz - + Edit Upravit - + Open in browser Otevřít v prohlížeči - + Resolve conflict … Vyřešit konflikt… - + Move and rename … Přesunout a přejmenovat… - + Move, rename and upload … Přesunout, přejmenovat a nahrát… - + Delete local changes Smazat místní změny - + Move and upload … Přesunout a nahrát… - + Delete Smazat @@ -4633,77 +4533,77 @@ 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>: Additional errors: - Další chyby: + - + 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 (SHA1): <tt>%1</tt> Otisk (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Otisk (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Otisk (SHA-512): <tt>%1</tt> - + Effective Date: %1 Datum účinnosti: %1 - + Expiration Date: %1 Datum skončení platnosti: %1 - + Issuer: %1 Vydavatel: %1 @@ -4796,33 +4696,33 @@ Došlo k vnitřní chybě číslo %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (přeskočeno kvůli předchozí chybě, další pokus za %2) - + Could not update file: %1 Nedaří se aktualizovat soubor: %1 - + Could not update virtual file metadata: %1 Nedaří se aktualizovat metadata virtuálního souboru: %1 - + Unresolved conflict. Nevyřešený konflikt. - + 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 - + Aborted Přerušeno @@ -4899,16 +4799,16 @@ Názvy souborů končících tečkou nejsou na tomto souborovém systému podporovány. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Nedaří se otevřít nebo vytvořit místní synchronizační databázi. Ověřte, že máte přístup k zápisu do synchronizační složky. + + 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. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Nedaří se otevřít nebo vytvořit místní synchronizační databázi. Ověřte, že máte přístup k zápisu do synchronizační složky. - - The file name is a reserved name on this file system. Název souboru je na tomto souborovém systému rezervovaným názvem (nelze ho použít). @@ -4929,7 +4829,7 @@ Soubor/složka je ignorován, protože je skrytý. - + Using virtual files with suffix, but suffix is not set Používají se virtuální soubory s příponou, ale přípona není nastavena @@ -4944,7 +4844,7 @@ Enkódování tohoto názvu souboru je mimo technické možnosti daného souborového systému. - + Unable to read the blacklist from the local database Nedaří se z místní databáze načíst seznam vyloučených @@ -4959,17 +4859,17 @@ Zjištění existence (stat) se nezdařilo. + + Unable to read from the sync journal. + Nedaří se číst ze žurnálu synchronizace. + + Filename encoding is not valid Kódování znaků v názvu souboru není platné - - Unable to read from the sync journal. - Nedaří se číst ze žurnálu synchronizace. - - - + Cannot open the sync journal Nedaří se otevřít synchronizační žurnál @@ -4979,22 +4879,22 @@ Neplatné znaky, přejmenujte „%1“ + + Synchronization will resume shortly. + V synchronizaci bude zakrátko navázáno. + + File name contains at least one invalid character Název souboru obsahuje přinejmenším jeden neplatný znak - - Synchronization will resume shortly. - V synchronizaci bude zakrátko navázáno. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Na disku dochází místo: Stahování které by zmenšilo volné místo pod %1 bude přeskočeno. - + There is insufficient space available on the server for some uploads. Na serveru není pro některé z nahrávaných souborů dostatek místa. @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account Přidat účet - + Open main dialog Otevřít hlavní dialog + - Pause sync Pozastavit synchronizaci - - + + Resume sync Pokračovat v synchronizaci - + Settings Nastavení - + Exit %1 Ukončit %1 - + Pause sync for all Pozastavit synchronizaci u všeho - + Resume sync for all Pokračovat v synchronizaci u všeho - + %1: %2 %1: %2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 klient pro počítač</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Verze %1. Další informace získáte kliknutím <a href='%2'>sem</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Používá zásuvný modul pro virtuální soubory: %1</small></p> - + <p>This release was supplied by %1</p> <p>Toto vydání bylo poskytnuto %1</p> @@ -5138,22 +5038,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Nepodařilo se získat seznam poskytovatelů. - + Failed to fetch search providers for '%1'. Error: %2 Nepodařilo se získat z poskytovatelů vyhledávání pro „%1“: Chyba: %2 - + Search has failed for '%2'. Hledání „%2“ se nezdařilo. - + Search has failed for '%1'. Error: %2 Hledání „%1“ se nezdařilo: chyba: %2 @@ -5161,32 +5061,32 @@ OCC::User - + Retry all uploads Znovu spustit všechna nahrávání - + Synced %1 Synchronizováno %1 - + You renamed %1 Přejmenovali jste %1 - + You deleted %1 Smazali jste %1 - + You created %1 Vytvořili jste %1 - + You changed %1 Změnili jste %1 @@ -5194,22 +5094,22 @@ OCC::UserModel - + Confirm Account Removal Potvrďte odebrá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 odebrat propojení s účtem <i>%1</i>?</p><p><b>Pozn.:</b> Toto <b>nesmaže</b> žádné soubory.</p> - + Remove connection Odebrat spojení - + Cancel Storno @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Funkce virtuální souborový systém vyžaduje souborový systém NTFS, %1 používá %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Chyba při aktualizaci metadat z důvodu neplatného času změny - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Chyba při aktualizaci metadat z důvodu neplatného času změny - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ Nová složka - + %n day ago před %n dnempřed %n dnypřed %n dnypřed %n dny - + %n days ago Před %n dnemPřed %n dnyPřed %n dnyPřed %n dny - + in the future v budoucnosti - + %n hour ago před %n hodinoupřed %n hodinamipřed %n hodinamipřed %n hodinami - + %n hours ago před %n hodinoupřed %n hodinamipřed %n hodinamipřed %n hodinami - + now nyní - + Less than a minute ago Před méně než minutou - + %n minute ago před %n minutoupřed %n minutamipřed %n minutamipřed %n minutami - + %n minutes ago před %n minutoupřed %n minutamipřed %n minutamipřed %n minutami - + Some time ago Před nějakým časem @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. Nepodařilo se připojit k databázi. @@ -5946,7 +5828,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … Hledat soubory, zprávy, události @@ -5983,21 +5865,11 @@ Položka účtu - + Switch to account Přepnout na účet - - Current user status is online - Stávající stav uživatele je online - - - - Current user status is do not disturb - Stávající stav uživatele je nerušit - - Account connected Účet připojen @@ -6008,7 +5880,17 @@ Účet nepřipojen - + + Current user status is online + Stávající stav uživatele je online + + + + Current user status is do not disturb + Stávající stav uživatele je nerušit + + + Account actions Akce účtu @@ -6018,24 +5900,24 @@ Odebrat účet - + Set status Nastavit stav - - + + Log out Odhlásit se - - + + Log in Přihlásit - + Remove account Odebrat účet @@ -6096,57 +5978,57 @@ 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 roky - + %n month(s) %n měsíc%n měsíce%n měsíců%n měsíce - + %n day(s) %n den%n dny%n dní%n dny - + %n hour(s) %n hodina%n hodiny%n hodin%n hodiny - + %n minute(s) %n minuta%n minuty%n minut%n minuty - + %n second(s) %n sekunda%n sekundy%n sekund%n sekundy - + %1 %2 %1 %2 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolního součtu nemá správnou podobu. @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog Hlavní dialog Nextcloud desktop - + Current account Stávající účet - - + + Resume sync for all Pokračovat v synchronizaci u všeho - - + + Pause sync for all Pozastavit synchronizaci u všeho - + Set user status Nastavit stav uživatele - + Add account Přidat účet - + Add new account Přidat nový účet - + Settings Nastavení - + Exit Konec - + Current user avatar Zástupný obrázek stávajícího uživatele - + Current user status is online Stávající stav uživatele je online - + Current user status is do not disturb Stávající stav uživatele je nerušit @@ -6254,32 +6136,32 @@ Sdílet %1 - + Account switcher and settings menu Přepínání účtů a nabídka nastavení - + Connected Připojeno - + Disconnected Odpojeno - + Open local folder of current account Otevřít místní složku stávajícího účtu - + Open Nextcloud Talk in browser Otevřít Nextcloud Talk v prohlížeči - + More apps Více aplikací @@ -6289,7 +6171,7 @@ Nabídka aplikací - + Open %1 in browser Otevřít %1 v prohlížeči @@ -6309,7 +6191,7 @@ Otevřít dialog sdílení - + Unified search results list Seznam výsledků sjednoceného vyhledávání @@ -6320,7 +6202,7 @@ Zobrazit další akce - + %1 - File activity %1 – aktivita ohledně souboru @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available Není k dispozici oznamovací oblast systémového panelu @@ -6338,7 +6220,7 @@ %1 vyžaduje fungující oznamovací oblast systémového panelu. Pokud používáte XFCE, řiďte se <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">těmito pokyny</a>. V ostatních případech nainstalujte do svého systému aplikaci pro oznamovací oblast syst. panelu, např. „trayer“, a zkuste to znovu. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 vyžaduje fungující oznamovací oblast systémového panelu. Pokud používáte XFCE, řiďte se <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">těmito pokyny</a>. V ostatních případech nainstalujte do svého systému aplikaci pro oznamovací oblast syst. panelu, např. „trayer“, a zkuste to znovu. @@ -6346,7 +6228,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Sestaveno z Git revize <a href="%1">%2</a> na %3, %4 s použitím Qt %5, %6</small></p> @@ -6553,7 +6435,7 @@ Free up local space - Uvolnit lokální prostor + Uvolnit prostor diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_da.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_da.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_da.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_da.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,47 +1,47 @@ - + ActivityActionButton Activity action button - Aktivitetshandlingsknap + ActivityItem - + Open %1 locally - Åbn %1 lokalt + - + Open share dialog - Åbn deledialogen + - + Share %1 - Del %1 + - - + + Show more actions - Vis flere handlinger + View activity - Se aktivitet + ActivityList - + Activity list - Aktivitetsliste + @@ -54,7 +54,7 @@ Checking for changes in "%1" - Søger efter ændringer i "%1" + @@ -144,7 +144,7 @@ Could not move "%1" to "%2" - Kunne ikke flytte "%1" til "%2" + @@ -160,7 +160,7 @@ Error removing "%1": %2 - Fejl ved fjernelse af "%1": %2 + @@ -170,7 +170,7 @@ Could not remove folder "%1" - Kunne ikke fjerne mappen "%1" + @@ -198,7 +198,7 @@ Logo - Logo + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Forbindelsen udløb - + Unknown error: network reply was deleted Ukendt fejl: netværkssvar blev slettet - + Server replied "%1 %2" to "%3 %4" Serveren svarede "%1 %2" til "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Huskeregel for end-to-end kryptering - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). For at beskytte din kryptografiske identitet krypterer vi den vha. en huskeregel med 12 ordbogsopslag. Noter den venligst ned og opbevar dem sikkert. De skal bruges for at tilføje andre enheder til din konto (fx mobil eller bærbar). @@ -305,9 +305,9 @@ - - - + + + Cancel Annuller @@ -349,7 +349,7 @@ You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are End-to-End encrypted. To get the best experience with Virtual Files and End-to-End Encryption, make sure the encrypted folder is marked with "Make always available locally". - Du ser ud til at have funktionen Virtual Files aktiveret i denne mappe. I øjeblikket er det ikke muligt implicit at downloade virtuelle filer, der er End-to-End-krypteret. For at få den bedste oplevelse med virtuelle filer og ende-til-ende-kryptering skal du sørge for, at den krypterede mappe er markeret med "Gør altid tilgængelig lokalt". + @@ -495,52 +495,52 @@ Fjern mappesynkroniseringsforbindelse - + Disable virtual file support … Deaktiver virtuel fil-support … - + Enable virtual file support %1 … Aktiver virtuel fil-support %1 … - + (experimental) (eksperimentel) - + Folder creation failed Fejl ved oprettelse af mappe - + <p>Could not create local folder <i>%1</i>.</p> <p>Kunne ikke oprette lokal mappe <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Bekræft Fjern mappesynkroniseringsforbindelse - + <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>Ønsker du virkelig at stoppe synkronisering af mappen <i>%1</i>?</p><p><b>Note:</b>Dette sletter <b>ikke</b>nogen filer.</p> - + Remove Folder Sync Connection Fjern mappesynkroniseringsforbindelse - + Disable virtual file support? Deaktiver virtuel fil-support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Denne handling vil annullere alle i øjeblikket kørende synkroniseringer. - + Disable support Deaktiver understøttelse - + Sync Running Synkronisering i gang - + The syncing operation is running.<br/>Do you want to terminate it? Synkroniseringen er i gang.<br/>Ønsker du at afslutte den? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) af %2 i brug. Nogle mapper, inklusiv netværksdiske eller delte mapper, har muligvis andre begrænsninger. - + %1 of %2 in use %1 af %2 er i brug - + Currently there is no storage usage information available. Der er i øjeblikket ingen informationer om brug af lager tilgængelig. - + %1 in use %1 i brug @@ -603,87 +603,87 @@ Log ind - + %1 as %2 %1 som %2 - + The server version %1 is unsupported! Proceed at your own risk. Serverversion %1 er ikke supporteret! Fortsæt på egen risiko. - + Connected to %1. Forbundet til %1. - + Server %1 is temporarily unavailable. Serveren %1 er midlertidig utilgængelig. - + Server %1 is currently in maintenance mode. Serveren %1 er i vedligeholdelsestilstand. - + Signed out from %1. Logget ud fra %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Indhenter bemyndigelse fra browseren. <a href='%1'>Klik her</a> for at genåbne browseren. - + Connecting to %1 … Forbinder til %1 … - + No connection to %1 at %2. Ingen forbindelse til %1 hos %2. - + Server configuration error: %1 at %2. Serverkonfigurationsfejl: %1 på %2. - + No %1 connection configured. Ingen %1 forbindelse konfigureret. - + There are folders that were not synchronized because they are too big: Der er mapper som ikke blev synkroniseret fordi de er for store: - + There are folders that were not synchronized because they are external storages: Der er mapper som ikke blev synkroniseret fordi de er eksterne lagre: - + There are folders that were not synchronized because they are too big or external storages: Der er mapper som ikke blev synkroniseret fordi de er for store eller eksterne lagre: - + Confirm Account Removal Bekræft sletning af 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>Ønsker du virkelig at fjerne forbindelse til kontoen <i>%1</i>?</p><p><b>Note:</b>Dette sletter <b>ikke</b>nogen filer.</p> - + Remove connection Fjern forbindelse @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Logget ud - + Disconnected Frakoblet - + Connected Forbundet - + Service unavailable Service utilgængelig - + Maintenance mode Vedligeholdelsestilstand - + Network error Netværksfejl - + Configuration error Konfigurationsfejl - + Asking Credentials Forespørger om brugeroplysninger - + Unknown account state Ukendt konto tilstand @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Filer fra ignorerlisten såvel som symbolske links synkroniseres ikke. - + For more activities please open the Activity app. For flere aktiviteter åbn Activity app'n. @@ -769,7 +769,7 @@ Certificate & Key (pkcs12): - Certifikat og nøgle (pkcs12): + @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. At fortsætte vil betyde at <b>disse indstillinger slettes</b>. - + Continuing will mean <b>ignoring these settings</b>. At fortsætte vil betyde at <b>disse indstillinger ignoreres</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Nogle indstillinger blev konfigureret i en nyere version af denne klient og anvender funktionaliteter der ikke er tilgængelig i denne version.<br><br>%1<br><br>Den nuværende konfigurationsfil er blevet sikkerhedskopieret til <i>%2</i>. - + Quit Afslut - + Continue Fortsæt - + Error accessing the configuration file Adgang til konfigurationsfilen fejlede - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Der opstod en fejl, kunne ikke tilgå konfigurations filen %1. Sørg for at filen kan tilgås af din bruger. - + Quit %1 Afslut %1 @@ -855,7 +855,7 @@ Enter username and password for "%1" at %2. - Indtast brugernavn og adgangskode til "%1" ved %2. + @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Fejl ved skrivning af metadata til databasen @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Venligst indtast din end-to-end krypterings kode:<br><br>Bruger: %2<br>Konto: %3<br> - + Enter E2E passphrase Indtast E2E kodeord @@ -1037,12 +987,12 @@ Do you want to delete the directory <i>%1</i> and all its contents permanently? - Vil du slette mappen <i>%1</i> og alt dens indhold permanent? + Do you want to delete the file <i>%1</i> permanently? - Vil du slette filen <i>%1</i> permanent? + @@ -1103,19 +1053,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1123,8 +1060,8 @@ Serverens fil opdagelse svar mangler data. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1132,27 +1069,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1176,7 +1113,7 @@ - + Error returned from the server: <em>%1</em> Fejl meddelelse fra serveren: <em>%1</em> @@ -1188,24 +1125,24 @@ - + 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> Kunne ikke analysere den modtaget JSON fra serveren: <br><em>%1</em> - + The reply from the server did not contain all expected fields Svaret fra serveren indeholder ikke alle forventede informationer. - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1366,41 +1303,41 @@ Synkroniseringsaktivitet - + Could not read system exclude file Kunne ikke læse systemets udelukkelsesfil - + A new folder larger than %1 MB has been added: %2. En ny mappe med mere end %1M er blevet tilføjet : %2. - + A folder from an external storage has been added. En mappe er blevet tilføjet fra eksternt lager. - + Please go in the settings to select it if you wish to download it. Gå venligst til indstillinger for at vælge om du vil hente den. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Mappen %1 er oprettet men tidligere udelukket fra synkronisering. Data i mappen vil ikke blive synkroniseret. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Filen %1 er oprettet men tidligere udelukket fra synkronisering. Den vil ikke blive synkroniseret. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1413,6 +1350,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1472,22 +1416,7 @@ Behold Lokale Filer der Konflikter - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1495,24 +1424,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1548,7 +1485,7 @@ OCC::FolderMan - + Could not reset folder state Kunne ikke nulstille oprette mappetilstand @@ -1558,37 +1495,37 @@ En gammel sync journal '%1' fundet, men kunne ikke fjernes. Kontroller venligst at intet program benytter den. - + 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) (backup %1) - + Undefined State. Udefineret tilstand. - + Waiting to start syncing. Venter på at begynde synkronisering - + Preparing for sync. Forbereder synkronisering. - + Sync is running. Synkronisering er i gang. @@ -1598,67 +1535,67 @@ Synk var vellykket, uafgjorte konflikter. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Sidste Synk var vellykket. - + Setup Error. Fejl ved opsætning. - + User Abort. Bruger Afbrydelse. - + Sync is paused. Synkronisering er pauset. - + %1 (Sync is paused) %1 (Sync er sat på pause) - + No valid folder selected! Ingen gyldig mappe valgt! - + The selected path does not exist! - + The selected path is not a folder! Den valgte sti er ikke en mappe! - + You have no permission to write to the selected folder! Du har ikke tilladelse til at skrive til denne mappe. - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Den lokale mappe %1 indeholder allerede en mappe opsat som sync forbindelse. Vælg venligst en anden! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Den lokale mappe %1 er allerede indeholdt i en mappe opsat som sync forbindelse. Vælg venligst en anden! - + There is already a sync from the server to this local folder. Please pick another local folder! Der er allerede sync fra serveren til denne lokale mappe. Vælg venligst en anden mappe! @@ -1870,12 +1807,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Opret mappesynkroniseringsforbindelse - + Add Sync Connection Tilføj synkroniseringsforbindelse @@ -1916,42 +1853,42 @@ - + Folder was successfully created on %1. Mappe oprettet med succes hos %1 - + Authentication failed accessing %1 Godkendelse fejlet ved adgang til %1 - + Failed to create the folder on %1. Please check manually. Fejl ved oprettelse af mappe på %1. Undersøg venligst manuelt. - + Failed to list a folder. Error: %1 Fejl ved visning af mappe. Fejl: %1 - + Choose this to sync the entire account Vælg dette for sync af hele kontoen - + This folder is already being synced. Den mappe er allerede synkroniseret. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkroniserer allerede <i>%1</i>, der er en mappe over <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1959,24 +1896,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1997,27 +1934,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ingen E-Tag modtaget fra server, kontroller Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Vi modtog et andet E-Tag for at fortsætte. Prøver igen næste gang. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Server returnerede forkert indholdsinterval - + Connection Timeout Forbindelse udløbet @@ -2137,54 +2074,54 @@ - + Server notifications that require attention. Server notifikationer der kræver opmærksomhed. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2192,22 +2129,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Password til deling påkrævet - + Please enter a password for your link share: Indtast venligst et kodeord til denne linkdeling - + Sharing error Delefejl - + Could not retrieve or create the public link share. Error: %1 @@ -2529,7 +2466,7 @@ OCC::Logger - + Error Fejl @@ -2539,7 +2476,7 @@ <nobr>Fil '%1'<br/>kan ikke åbnes for skrivning.<br/><br/>Log resultatet kan <b>ikke</b> gemmes!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2547,33 +2484,33 @@ OCC::NSISUpdater - + New Version Available Ny version tilgængelig - + <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 af klienten %1 er til rådighed.</p><p><b>%2</b>er til rådighed til download. Den installerede version er %3.</p> - - + + Skip this version Spring denne version over - + Skip this time Spring over denne gang - + Get update Hent opdatering - + Update Failed @@ -2588,17 +2525,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2709,7 +2646,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Fejl meddelelse fra serveren: <em>%1</em> @@ -2719,32 +2656,32 @@ Fejl ved tilgang til 'token' endpoint: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Kunne ikke analysere den modtaget JSON fra serveren: <br><em>%1</em> - + The reply from the server did not contain all expected fields Svaret fra serveren indeholder ikke alle forventede informationer. - + <h1>Login Error</h1><p>%1</p> <h1>Login fejl</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>Forkert bruger</h1><p>Du loggede ind med bruger<em>%1</em>, men skal logge ind med bruger<em>%2</em>.<br>Log venligst ud fra %3 i en anden tab, <a href='%4'>klik her</a> bagefter og log ind som bruger %2</p> @@ -2813,12 +2750,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Kunne ikke søge efter nye opdateringer. @@ -2828,27 +2765,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … Tjekker opdateringsserver … - + Update status is unknown: Did not check for new updates. Opdateringsstatus ukendt. Søgte ikke efter opdateringer. - + No updates available. Your installation is at the latest version. Ingen opdateringer tilgængelige. Din installation kører nyeste version. - + Update Check Check for Opdatinger @@ -2876,14 +2813,14 @@ Tilslut … - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2908,49 +2845,49 @@ Ledig plads: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Lokal Sync mappe - - + + (%1) (%1) - + There isn't enough free space in the local folder! Der er ikke nok ledig plads i den lokale mappe! @@ -3020,14 +2957,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3093,7 +3022,7 @@ &Næste > - + Server address does not seem to be valid @@ -3103,7 +3032,7 @@ Ugyldig URL - + Could not load certificate. Maybe wrong password? Kunne ikke indlæse certifikat. Forkert kodeord? @@ -3201,54 +3130,54 @@ opretter mappe hos Nextcloud: %1 - + Remote folder %1 created successfully. Afsides mappe %1 oprettet med succes. - + The remote folder %1 already exists. Connecting it for syncing. Den afsides mappe %1 findes allerede. Forbinder til den for synkronisering. + - The folder creation resulted in HTTP error code %1 Mappeoprettelsen resulterede i HTTP fejlkode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Oprettelse af den afsides mappe fejlede da brugeroplysningerne er forkerte!<br/>Gå venligst tilbage og kontroller dine brugeroplysninger.</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">Afsides mappe oprettelse fejlede sansynligvis på grund af forkert angivne brugeroplysninger.</font><br/>Gå venligst tilbage og kontroller dine brugeroplysninger.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Oprettelse af afsides mappe %1 fejlet med fejl <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En sync forbindelse fra %1 til afsides mappe %2 blev oprettet. - + Successfully connected to %1! Forbundet til %1 med succes! - + Connection to %1 could not be established. Please check again. Forbindelse til %1 kunne ikke etableres. Kontroller venligst igen. - + Folder rename failed Fejl ved omdøbning af mappe @@ -3258,12 +3187,12 @@ Kan ikke fjerne eller kopiere mappen fordi mappen eller en fil i den er åben i et andet program. Luke venligst mappen eller filen og tryk Prøv igen eller afbryd installeringen. - + Cannot 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>Lokal sync mappe %1 oprette med succes!</b></font> @@ -3271,7 +3200,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3281,17 +3210,17 @@ %1 Forbindelses guide - + Skip folders configuration Spring mappe konfiguration over - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3302,12 +3231,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3315,7 +3244,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Ugyldigt JSON svar fra den forespurgte URL @@ -3333,17 +3262,17 @@ - + 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. @@ -3358,57 +3287,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3418,72 +3347,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3493,7 +3412,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3506,17 +3425,12 @@ Fejl ved skrivning af metadata til databasen - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3529,44 +3443,44 @@ Fil %1 kan ikke hentes fordi der mangler kryptograferings information. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Fil er ændret siden opdagelse - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Fil %1 kan ikke hentes på grund af lokal navnekonflikt! - + The download would reduce free local disk space below the limit Nedlagringen ville reducere ledig disk plads på lokalt lager under grænsen - + Free space on disk is less than %1 Ledig disk plads er under %1 - + File was deleted from server Fil var slettet fra server - + The file could not be downloaded completely. Filen kunne ikke hentes helt. @@ -3576,12 +3490,12 @@ Den hentede fil er tom selvom serveren annoncerede den skulle have været %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Fil %1 kan ikke gemmes på grund af lokal navnekonflikt! @@ -3591,18 +3505,12 @@ Fejl ved skrivning af metadata til databasen - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3610,12 +3518,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Genetablering Fejlet: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mappe blev fjernet fra en skrivebeskyttet deling, men genskabelse fejlede: %1 @@ -3689,12 +3597,12 @@ Fil %1 kunne ikke omdøbes til %2 på grund af lokal filnavnskonflikt - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3705,12 +3613,12 @@ Fejl ved skrivning af metadata til databasen - + Failed to rename file - + Error setting pin state @@ -3744,12 +3652,12 @@ Fejl ved skrivning af metadata til databasen - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3767,22 +3675,22 @@ Forkert HTTP kode returneret fra server. Forventet 201, men modtog "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Fejl ved skrivning af metadata til databasen @@ -3790,46 +3698,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Fil %1 kan ikke sendes fordi en anden fil med samme navn eksisterer kun med forskel i store/små bogstaver. - - + + Upload of %1 exceeds the quota for the folder Forsendelse af %1 overskriver mappens kvota - + File Removed (start upload) %1 Fil fjernet (start forsendelse) %1 - + Local file changed during syncing. It will be resumed. Lokal fil ændret under sync. Den vil blive genoptaget. - + Local file changed during sync. Lokal fil ændret under sync. - + Failed to unlock encrypted folder. @@ -3839,12 +3739,12 @@ Fejl ved skrivning af metadata til databasen - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3852,32 +3752,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Lokal fil fjernet under sync. - + Local file changed during sync. Lokal fil ændret under sync. - + Poll URL missing - + Unexpected return code from server (%1) Uventet retur kode fra server (%1) - + Missing File ID from server Manglende fil ID fra server - + Missing ETag from server Manglende ETag fra server @@ -3885,22 +3785,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing ForespørgselsURL mangler - + The local file was removed during sync. Lokal fil fjernet under sync. - + Local file changed during sync. Lokal fil ændret under sync. - + The server did not acknowledge the last chunk. (No e-tag was present) Serveren godkendte ikke de seneste luns. (Ingen e-tag fundet) @@ -3978,7 +3878,7 @@ OCC::ServerNotificationHandler - + Dismiss Afvis @@ -4148,17 +4048,17 @@ Beskyt med Adgangskode - + Allow editing Tillad redigering - + View only - + Allow upload and editing Tillad upload og redigering @@ -4168,7 +4068,7 @@ Udløbsdato - + File drop (upload only) Fil drop (kun upload) @@ -4178,32 +4078,32 @@ Ophæv deling - + Link name - + Note to recipient Note til modtager - + Password protect Beskyt med adgangskode - + Set expiration date Angiv udløbsdato - + Delete link - + Add another link Tilføj et link mere @@ -4213,27 +4113,27 @@ Slet delingslink - + Confirm Link Share Deletion Bekræft sletning af delt link - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ønsker du virkelig at fjerne offentlig link deling <i>%1</i>?</p><p>Note: Denne handling kan ikke fortrydes.</p> - + Delete Slet - + Cancel Annuller - + Public link Offentligt link @@ -4246,12 +4146,12 @@ Del med brugere eller grupper - + Search globally - + Copy link Kopiér link @@ -4261,22 +4161,22 @@ Ingen resultater for '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Jeg delte noget med dig @@ -4314,42 +4214,42 @@ - + Can reshare Kan gendele - + Note to recipient - + Set expiration date - + Unshare Ophæv deling - + Can create Kan oprette - + Can change Kan ændre - + Can delete Kan slette - + Password protect @@ -4366,23 +4266,23 @@ OCC::SocketApi - + Context menu share Deling af kontekst menu - + Select new location … - + I shared something with you Jeg delte noget med dig - - + + Share options Dele muligheder @@ -4398,73 +4298,73 @@ - + Copy private link to clipboard Kopier privat link til udklipsholderen - + Send private link by email … Send privat link via e-mail … - + Resharing this file is not allowed Videredeling af denne fil ikke tilladt - + Resharing this folder is not allowed - - + + Copy public link Kopier offentligt link - + Copy internal link Kopier internt link - + Edit Rediger - + Open in browser Åbn i browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Slet @@ -4610,12 +4510,12 @@ Stol på dette certifikatet alligevel? - + Untrusted Certificate Ubetroet Certifikat - + Cannot connect securely to <i>%1</i>: Kan ikke sikret forbinde til <i>%1</i>: @@ -4625,62 +4525,62 @@ - + with Certificate %1 med Certifikat %1 - - - + + + &lt;not specified&gt; &lt;ikke angivet&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Enhed: %1 - - + + Country: %1 Land: %1 - + Fingerprint (SHA1): <tt>%1</tt> Fingeraftryk (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingeraftryk (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingeraftryk (SHA-512): <tt>%1</tt> - + Effective Date: %1 Ikrafttrædningsdato: %1 - + Expiration Date: %1 Udløbsdato: %1 - + Issuer: %1 Udsteder: %1 @@ -4773,33 +4673,33 @@ Intern fejl nummer %1 opstået. - + %1 (skipped due to earlier error, trying again in %2) %1 (droppet på grund af tidligere fejl, prøver igen om %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Uafgjort konflikt. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Kun %1 til rådighed, behøver mindst %2 for at starte - + Aborted @@ -4876,16 +4776,16 @@ Filnavne der ender med punktum er ikke understøttet på dette filsystem. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Ikke i stand til at oprette en lokal sync database. Verificer at du har skriveadgang til sync mappen. + + File names containing the character '%1' are not supported on this file system. Filnavne der indeholder karakteren '%1' er ikke understøttet på dette filsystem. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Ikke i stand til at oprette en lokal sync database. Verificer at du har skriveadgang til sync mappen. - - The file name is a reserved name on this file system. Filnavnet er et reserveret navn på dette filsystem. @@ -4906,7 +4806,7 @@ Fil/mappe ignoreret da den er skjult. - + Using virtual files with suffix, but suffix is not set @@ -4921,7 +4821,7 @@ Filnavnet kan ikke krypteres på dit filsystem. - + Unable to read the blacklist from the local database Kunne ikke læse blacklist fra den lokale database @@ -4936,17 +4836,17 @@ Status fejlet. + + Unable to read from the sync journal. + Kunne ikke læse fra synkroniserings loggen. + + Filename encoding is not valid Kodning af filnavn ikke gyldig - - Unable to read from the sync journal. - Kunne ikke læse fra synkroniserings loggen. - - - + Cannot open the sync journal Kunne ikke åbne synkroniserings loggen @@ -4956,22 +4856,22 @@ Ugyldige karakterer, omdøb venligst "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Filnavnet indeholder mindst ét ugyldigt tegn - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Diskplads begrænset: Downloads der bringer ledig plads under %1 ignoreres. - + There is insufficient space available on the server for some uploads. Der er utilstrækkelig plads på serveren til visse uploads. @@ -5040,49 +4940,49 @@ OCC::Systray - + Add account Tilføj konto - + Open main dialog Åben hoved dialog + - Pause sync - - + + Resume sync - + Settings Indstillinger - + Exit %1 Afslut %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5090,24 +4990,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1-skrivebordsklient</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Version %1. For mere information venligst klik <a href='%2'>her</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Denne udgivelse blev leveret af %1</p> @@ -5115,22 +5015,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5138,32 +5038,32 @@ OCC::User - + Retry all uploads Prøv alle uploads igen - + Synced %1 Synkroniseret %1 - + You renamed %1 Du omdøbte %1 - + You deleted %1 Du slettede %1 - + You created %1 Du oprettede %1 - + You changed %1 Du ændrede %1 @@ -5171,22 +5071,22 @@ OCC::UserModel - + Confirm Account Removal Bekræft sletning af 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>Ønsker du virkelig at fjerne forbindelse til kontoen <i>%1</i>?</p><p><b>Note:</b>Dette sletter <b>ikke</b>nogen filer.</p> - + Remove connection Fjern forbindelse - + Cancel Annullér @@ -5291,30 +5191,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5836,52 +5718,52 @@ Ny mappe - + %n day ago %n dag siden%n dage siden - + %n days ago %1 dag siden%n dage siden - + in the future i fremtiden - + %n hour ago %n time siden%n time siden - + %n hours ago %n timer siden%n timer siden - + now nu - + Less than a minute ago For mindre end et minut siden - + %n minute ago %n minut siden%n minut siden - + %n minutes ago %n minutter siden%n minutter siden - + Some time ago Noget tid siden @@ -5915,7 +5797,7 @@ SyncJournalDb - + Failed to connect database. @@ -5923,7 +5805,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5960,21 +5842,11 @@ Kontoindgang - + Switch to account Skift til konto - - Current user status is online - Nuværende brugerstatus er online - - - - Current user status is do not disturb - Nuværende brugerstatus er forstyr ikke - - Account connected Kontoen er tilknyttet @@ -5985,7 +5857,17 @@ Kontoen er ikke tilknyttet - + + Current user status is online + Nuværende brugerstatus er online + + + + Current user status is do not disturb + Nuværende brugerstatus er forstyr ikke + + + Account actions Kontohandlinger @@ -5995,24 +5877,24 @@ Fjern konto - + Set status - - + + Log out Log ud - - + + Log in Log ind - + Remove account Fjern konto @@ -6073,57 +5955,57 @@ 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 dage - + %n hour(s) %n time%n timer - + %n minute(s) %n minut%n minutter - + %n second(s) %n sekund%n sekunder - + %1 %2 %1 %2 @@ -6131,7 +6013,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Kontrolsum-hovedet er misdannet. @@ -6164,64 +6046,64 @@ Window - + Nextcloud desktop main dialog Hovedvindue for Nextcloud-skrivebordsklienten - + Current account Nuværende konto - - + + Resume sync for all Genoptag synkronisering for alle - - + + Pause sync for all Sæt alle synk. på pause - + Set user status - + Add account Tilføj konto - + Add new account Tilføj ny konto - + Settings Indstillinger - + Exit Afslut - + Current user avatar Nuværende bruger-avater - + Current user status is online Nuværende brugerstatus er online - + Current user status is do not disturb Nuværende brugerstatus er forstyr ikke @@ -6231,32 +6113,32 @@ Del %1 - + Account switcher and settings menu Menuen til kontoskift og indstillinger - + Connected Forbundet - + Disconnected Frakoblet - + Open local folder of current account Åbn lokal mappe for nuværende konto - + Open Nextcloud Talk in browser Åbn Nextcloud Talk i browseren - + More apps Flere apps @@ -6266,7 +6148,7 @@ Apps-menuen - + Open %1 in browser Åbn %1 i browser @@ -6286,7 +6168,7 @@ Åbn delingsdialog - + Unified search results list @@ -6297,7 +6179,7 @@ Vis flere handlinger - + %1 - File activity @@ -6305,7 +6187,7 @@ main.cpp - + System Tray not available Systembakken er ikke tilgængelig @@ -6315,7 +6197,7 @@ %1 kræver en fungerende systembakke. Hvis du bruger Xfce, følg venligst 1disse instruktioner1. Ellers installer venligst et program til håndtering af systembakken såsom "trayer" og prøv igen. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 kræver en fungerende systembakke. Hvis du bruger Xfce, følg venligst <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">disse instruktioner</a>. Ellers installer venligst et program til håndtering af systembakken såsom "trayer" og prøv igen. @@ -6323,7 +6205,7 @@ nextcloudTheme::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-revision <a href="%1">%2</a> på %3, %4 med Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_de.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_de.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_de.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_de.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally %1 lokal öffnen - + Open share dialog Teilen-Dialog öffnen - + Share %1 %1 teilen - - + + Show more actions Weitere Aktionen anzeigen @@ -39,7 +39,7 @@ ActivityList - + Activity list Aktivitätenliste @@ -255,17 +255,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 @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Gedächtnisstütze für Ende-zu-Ende Verschlüsselung - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Um Ihre kryptografische Identität zu schützen, verschlüsseln wir sie mit einer Gedächtnisstütze von 12 Wörterbuchwörtern. Bitte notieren Sie sich diese und bewahren Sie sie auf. Sie werden benötigt, um Ihrem Konto weitere Geräte hinzuzufügen (z. B. Ihr Mobiltelefon oder Laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Abbrechen @@ -495,52 +495,52 @@ Ordner-Synchronisierung entfernen - + Disable virtual file support … Unterstützung für virtuelle Dateien deaktivieren - + Enable virtual file support %1 … Unterstützung für virtuelle Dateien aktivieren %1 … - + (experimental) (experimentell) - + Folder creation failed Anlegen des Ordners fehlgeschlagen - + <p>Could not create local folder <i>%1</i>.</p> <p>Konnte lokalen Ordner <i>%1</i> nicht anle‏gen.‎</p> - + Confirm Folder Sync Connection Removal Bestätigen Sie die Löschung der Ordner-Synchronisierung - + <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> nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> - + Remove Folder Sync Connection Ordner-Synchronisierung entfernen - + Disable virtual file support? Unterstützung für virtuelle Dateien deaktivieren? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Diese Aktion bricht jede derzeit laufende Synchronisierung ab. - + Disable support Unterstützung deaktivieren - + Sync Running Synchronisierung läuft - + The syncing operation is running.<br/>Do you want to terminate it? Die Synchronisierung läuft gerade.<br/>Wollen Sie diese beenden? - + %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 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. - + %1 in use %1 wird verwendet @@ -603,87 +603,87 @@ Anmelden - + %1 as %2 %1 als %2 - + The server version %1 is unsupported! Proceed at your own risk. Die Serverversion %1 wird 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'> Klicken Sie hier </a>, um den Browser erneut zu öffnen. - + Connecting to %1 … Verbinde zu %1 … - + No connection to %1 at %2. Keine Verbindung zu %1 auf %2 - + Server configuration error: %1 at %2. Konfigurationsfehler des Servers: %1 auf %2. - + No %1 connection configured. Keine %1-Verbindung konfiguriert. - + There are folders that were not synchronized because they are too big: Einige Ordner konnten nicht synchronisiert werden, da sie zu groß sind: - + There are folders that were not synchronized because they are external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie externe Speicher sind: - + There are folders that were not synchronized because they are too big or external storages: Es gibt Ordner, die nicht synchronisiert werden konnten, da sie zu groß oder externe Speicher sind: - + Confirm Account Removal Kontenentfernung bestätigen - + <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>Möchten 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 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Abgemeldet - + Disconnected Getrennt - + Connected Verbunden - + Service unavailable Dienst nicht verfügbar - + Maintenance mode Wartungsmodus - + Network error Netzwerkfehler - + Configuration error Konfigurationsfehler - + Asking Credentials Zugangsdaten werden abgefragt - + Unknown account state Unbekannter Konto-Zustand @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Dateien aus der Ignorierliste sowie symbolische Links werden nicht synchronisiert. - + For more activities please open the Activity app. Um weitere Aktivitäten anzusehen bitte die Activity-App öffnen. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Wenn Sie fortfahren, werden <b>diese Einstellungen gelöscht</b>. - + Continuing will mean <b>ignoring these settings</b>. Wenn Sie fortfahren, werden <b>diese Einstellungen ignoriert</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Einige Einstellungen wurden in neueren Versionen dieses Clients konfiguriert und verwenden Funktionen, die in dieser Version nicht verfügbar sind.<br><br>%1<br><br>Die aktuelle Konfigurationsdatei wurde bereits auf <i>%2</i> gesichert. - + Quit Beenden - + Continue Fortsetzen - + Error accessing the configuration file Fehler beim Zugriff auf die Konfigurationsdatei - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Beim Zugriff auf die Konfigurationsdatei bei %1 ist ein Fehler aufgetreten. Stellen Sie sicher, dass Ihr Benutzer auf die Datei zugreifen kann. - + Quit %1 Beende %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - 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ß-/Kleinschreibung, existiert - - - - - File %1 has invalid modified time. Do not upload to the server. - Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - - - - File Removed (start upload) %1 - Datei entfernt (starte das Hochladen) %1 - - - - Local file changed during syncing. It will be resumed. - Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wieder aufgenommen. - - - - - Local file changed during sync. - Lokale Datei wurde während der Synchronisierung geändert. - - - - Error updating metadata: %1 - Fehler beim Aktualisieren der Metadaten: %1 - - - - The file %1 is currently in use - Die Datei %1 wird aktuell verwendet - - - - The local file was removed during sync. - Die lokale Datei wurde während der Synchronisierung gelöscht. - - - - ; Restoration Failed: %1 - ; Wiederherstellung fehlgeschlagen: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Geben Sie Ihre Passphrase für Ende-zu-Ende-Verschlüsselung ein:<br><br>Benutzer: %2<br>Konto: %3<br> - + Enter E2E passphrase E2E-Passphrase eingeben @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - Fehler beim Abbrechen des Löschens einer Datei - - - - Error while canceling delete of %1 - Fehler beim Abbrechen des Löschens von %1 - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ In der Antwort der Server-Dateierkennung fehlen Daten. - - + + Server error: PROPFIND reply is not XML formatted! Serverantwort: PROPFIND-Antwort ist nicht im XML-Format! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Fehler beim Öffnen des Ordners %1 - + Directory not accessible on client, permission denied Verzeichnis auf dem Client nicht zugreifbar, Berechtigung verweigert - + Directory not found: %1 Ordner nicht gefunden: %1 - + Filename encoding is not valid Dateinamenkodierung ist ungültig - + Error while reading directory %1 Fehler beim Lesen des Ordners %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Vom Server zurückgegebener Fehler: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Der vom Server zurückgegebene JSON-Code konnte nicht verarbeitet werden: <br><em>%1</em> - + The reply from the server did not contain all expected fields Die Antwort des Servers enthielt nicht alle erwarteten Felder - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Die zurückgegebene Server-URL beginnt nicht mit HTTPS, obwohl die Anmelde-URL mit HTTPS beginnt. Die Anmeldung ist nicht möglich, da dies ein Sicherheitsproblem darstellen könnte. Bitte wenden Sie sich an Ihren Administrator. @@ -1368,41 +1305,41 @@ 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 neuer Ordner größer als %1 MB wurde hinzugefügt: %2. - + A folder from an external storage has been added. Ein Ordner 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 den Ordner herunterladen möchten. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Der Ordner %1 wurde erstellt, wurde jedoch zuvor von der Synchronisierung ausgeschlossen. Die darin enthaltenen Daten werden nicht synchronisiert. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Die Datei % 1 wurde erstellt, jedoch bereits zuvor von der Synchronisierung ausgeschlossen. Sie wird nicht synchronisiert werden. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Alle Dateien im lokalen Synchronisierungs-Ordner '%1' wurden gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, es sei denn, diese 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 Dateien entscheiden, werden diese wieder vom Server synchronisiert. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Lokale Dateien als Konflikt behalten - - 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 restore 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 Sync-Ordner '%1' wurden auf dem Server gelöscht. -Diese Löschungen werden mit Ihrem lokalen Sync-Ordner synchronisiert, wodurch diese Dateien nicht verfügbar sind, es sei denn, Sie haben das Recht, sie wiederherzustellen. -Wenn Sie sich entscheiden, die Dateien wiederherzustellen, werden sie erneut mit dem Server synchronisiert, wenn Sie das Recht dazu haben. -Wenn Sie sich entscheiden, die Dateien zu löschen, sind sie für Sie nicht mehr verfügbar, es sei denn, 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 lokalen Synchronisierungs-Ordner '%1' wurden gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, es sei denn, diese 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 Dateien entscheiden, werden diese wieder vom Server synchronisiert. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Wenn Sie sich entscheiden, die Dateien zu löschen, sind sie für Sie nicht mehr verfügbar, es sei denn, 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. @@ -1514,17 +1440,28 @@ 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 Alle Dateien entfernen - + + 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 restore 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 Sync-Ordner '%1' wurden auf dem Server gelöscht. +Diese Löschungen werden mit Ihrem lokalen Sync-Ordner synchronisiert, wodurch diese Dateien nicht verfügbar sind, es sei denn, Sie haben das Recht, sie wiederherzustellen. +Wenn Sie sich entscheiden, die Dateien wiederherzustellen, werden sie erneut mit dem Server synchronisiert, wenn Sie das Recht dazu haben. +Wenn Sie sich entscheiden, die Dateien zu löschen, sind sie für Sie nicht mehr verfügbar, es sei denn, Sie sind der Eigentümer. + + + Keep files Dateien behalten @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Konnte Ordner-Zustand nicht zurücksetzen @@ -1570,37 +1507,37 @@ Ein altes Synchronisierungsprotokoll '%1' wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisierungsprotokoll "%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 Synchronisierung. - + Preparing for sync. Synchronisierung wird vorbereitet. - + Sync is running. Synchronisierung läuft. @@ -1610,67 +1547,67 @@ Synchronisierung erfolgreich, ungelöste Konflikte vorhanden. - + Sync finished with unresolved conflicts. Synchronisierung mit ungelösten Konflikten beendet. - + Last Sync was successful. Die letzte Synchronisierung war erfolgreich. - + Setup Error. Einrichtungsfehler. - + User Abort. Benutzerabbruch. - + Sync is paused. Synchronisierung ist pausiert. - + %1 (Sync is paused) %1 (Synchronisierung ist pausiert) - + No valid folder selected! Kein gültiger Ordner gewählt! - + The selected path does not exist! Der gewählte Pfad existiert nicht! - + 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 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! - + There is already a sync from the server to this local folder. Please pick another local folder! Es existiert bereits eine Synchronisierung vom Server zu diesem lokalen Ordner. Bitte wählen Sie einen anderen lokalen Ordner! @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Ordner-Synchronisierung hinzufügen - + Add Sync Connection Synchronisierung hinzufügen @@ -1928,42 +1865,42 @@ Geben Sie den Namen des neuen, unter "%1" zu erstellenden Ordners ein: - + Folder was successfully created on %1. Ordner 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>, der ein übergeordneter Ordner von <i>%2</i> ist. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Sie synchronisieren bereits <i>%1</i>, der ein Unterordner von <i>%2</i> ist. @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - + + (experimental) (experimentell) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - + Virtual files are not available for the selected folder Virtuelle Dateien sind für den ausgewählten Ordner nicht verfügbar @@ -2009,27 +1946,27 @@ 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 unterschiedliches E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. - + We received an unexpected download Content-Length. Wir haben eine unerwartete Download-Content-Länge erhalten. - + Server returned wrong content-range Server hat falschen Bereich für den Inhalt zurückgegeben - + Connection Timeout Zeitüberschreitung der Verbindung @@ -2149,22 +2086,22 @@ Debug-Archiv erstellen … - + Server notifications that require attention. Server-Benachrichtigungen, die Aufmerksamkeit erfordern. - + You cannot disable autostart because system-wide autostart is enabled. Sie können den Autostart nicht deaktivieren, da der systemweite Autostart aktiviert ist. - + Change update channel? Update-Kanal ändern? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ Beachten Sie bitte, dass hierdurch nur ausgewählt wird, aus welchem Pool Upgrades heruntergeladen werden und dass Downgrades nicht möglich sind. Die Rückkehr vom Beta- zum stabilen Kanal kann daher zumeist nicht sofort erfolgen, sondern es muss auf eine neue stabile Version gewartet werden, die neuer als die aktuell installierte Beta ist. - + Change update channel Update-Kanal ändern - + Cancel Abbrechen - + Create Debug Archive Debug-Archiv erstellen - + Zip Archives Zip-Archive - + Debug Archive Created Debug-Archiv erstellt - + Debug archive is created at %1 Debug-Archiv erstellt in %1 @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Passwort für die Freigabe erforderlich - + Please enter a password for your link share: Bitte Passwort für die Link-Freigabe eingeben: - + Sharing error Fehler beim Teilen - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Fehler @@ -2556,7 +2493,7 @@ <nobr>Datei '%1'<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</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> @@ -2564,33 +2501,33 @@ 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 - Clients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p> - - + + Skip this version Diese Version überspringen - + Skip this time Dieses Mal überspringen - + Get update Aktualisierung durchführen - + Update Failed Aktualisierung fehlgeschlagen @@ -2605,17 +2542,17 @@ <p>Eine neue Version des %1 - Clients ist verfügbar, aber die Aktualisierung ist fehlgeschlagen.</p><p><b>%2</b> wurde heruntergeladen. Die installierte Version ist %3. Wenn Sie Neustart und Aktualisieren bestätigen, wird Ihr Computer möglicherweise neu gestartet, um die Installation abzuschließen.</p> - + Ask again later Versuchen Sie es später erneut - + Restart and update Neustarten und aktualisieren - + Update manually Manuell aktualisieren @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Fehler vom Server zurückgegeben: <em>%1</em> @@ -2736,32 +2673,32 @@ Fehler beim Zugriff auf den 'token'-Endpunkt: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Fehler beim Zugriff auf den "Token"-Endpunkt: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Leeres JSON aus OAuth2-Redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Die JSON-Antwort des Servers konnte nicht geparst werden: <br><em>%1</em> - + 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> - + <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>Falscher Benutzer</h1><p>Sie haben sich mit dem Benutzer <em>%1</em> angemeldet, sollten sich jedoch mit dem Benutzer <em>%2</em> anmelden. <br>Bitte melden Sie sich in einem anderen Tab von %3 ab und <a href='%4'>klicken hier</a>, um sich als %2</p> anzumelden @@ -2830,12 +2767,12 @@ Aktualisierung kann nicht herunter geladen werden. Bitte öffnen Sie <a href='%1'>%1</a>, um die Aktualisierung manuell herunterzuladen. - + Could not download update. Please open %1 to download the update manually. Aktualisierung kann nicht herunter geladen werden. Bitte öffnen Sie %1 um die Aktualisierung manuell herunterzuladen. - + Could not check for new updates. Auf neue Aktualisierungen kann nicht geprüft werden. @@ -2845,27 +2782,27 @@ Neue Version von %1 vorhanden. Bitte öffnen Sie <a href='%2'>%2</a> um die Aktualisierung herunterzuladen. - + New %1 is available. Please open %2 to download the update. Neue Version von %1 vorhanden. Bitte öffnen Sie %2 um die Aktualisierung herunterzuladen. - + Checking update server … Aktualisierungsserver wird überprüft … - + Update status is unknown: Did not check for new updates. Aktualisierungsstatus unbekannt: Auf neue Aktualisierungen 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 @@ -2893,14 +2830,14 @@ Verbinden … - - + + Use &virtual files instead of downloading content immediately %1 &Virtuelle Dateien verwenden, anstatt den Inhalt sofort herunterzuladen %1 - - + + (experimental) (experimentell) @@ -2925,49 +2862,49 @@ Freier Platz: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuelle Dateien werden für die Wurzel von Windows-Partitionen als lokaler Ordner nicht unterstützt. Bitte wählen Sie einen gültigen Unterordner unter dem Laufwerksbuchstaben. - + %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 - + Warning: The local folder is not empty. Pick a resolution! Achtung: Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 freier Platz - + Virtual files are not available for the selected folder Virtuelle Dateien sind für den ausgewählten Ordner nicht verfügbar - + Local Sync Folder Lokaler Ordner für die Synchronisierung - - + + (%1) (%1) - + There isn't enough free space in the local folder! Nicht genug freier Platz im lokalen Ordner vorhanden! @@ -3037,14 +2974,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3039,7 @@ &Weiter > - + Server address does not seem to be valid Serveradresse scheint nicht gültig zu sein @@ -3120,7 +3049,7 @@ Ungültige URL - + Could not load certificate. Maybe wrong password? Das Zertifikat konnte nicht geladen werden. Vielleicht ein falsches Passwort? @@ -3218,54 +3147,54 @@ Erstelle Ordner auf Nextcloud: %1 - + Remote folder %1 created successfully. Entfernter Ordner %1 erfolgreich erstellt. - + The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisierung. + - The folder creation resulted in HTTP error code %1 Das Erstellen des Ordners 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 Erstellung des entfernten Ordners ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. <br/>Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten.</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">Die Erstellung des entfernten Ordners 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>. Entfernter 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 Synchronisierungsverbindung 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. @@ -3275,12 +3204,12 @@ 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. - + Cannot 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 und versuchen Sie es erneut 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> @@ -3288,7 +3217,7 @@ OCC::OwncloudWizard - + Add %1 account %1 Konto hinzufügen @@ -3298,17 +3227,17 @@ %1-Verbindungsassistent - + Skip folders configuration Ordner-Konfiguration überspringen - + Enable experimental feature? Experimentelle Funktion aktivieren? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ Dies ist ein neuer, experimenteller Modus. Wenn Sie sich entscheiden, ihn zu verwenden, melden Sie bitte alle auftretenden Probleme. - + Enable experimental placeholder mode Experimentellen Platzhaltermodus aktivieren - + Stay safe Bleiben Sie sicher @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Ungültige JSON-Antwort von der Poll-URL @@ -3356,17 +3285,17 @@ Datei enthält Leerzeichen am Ende und konnte nicht umbenannt werden, da eine Datei mit demselben Namen bereits lokal existiert. - + Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisierung nicht unterstützt. - + File is listed on the ignore list. Die Datei ist in der Ignorierliste aufgeführt. - + File names ending with a period are not supported on this file system. Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. @@ -3381,57 +3310,57 @@ Dateinamen, welche das Zeichen "%1" enthalten, werden von diesem Dateisystem nicht unterstützt. - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - + 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 enthält Leerzeichen am Ende. - + Filename is too long. Der Dateiname ist zu lang. - + File/Folder is ignored because it's hidden. Datei/Ordner wird ignoriert, weil sie unsichtbar ist. - + Stat failed. Stat fehlgeschlagen. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. - + The filename cannot be encoded on your file system. Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. - + The filename is blacklisted on the server. Der Dateiname steht auf dem Server auf einer schwarzen Liste. - + File has extension reserved for virtual files. Die Endung der Datei ist für virtuelle Dateien reserviert. - + size Größe @@ -3441,72 +3370,62 @@ Berechtigungen - - server reported no %1 - Server meldet kein %1 - - - - permission - Berechtigung - - - + file id Datei-ID - - Server reported no %1 - Server meldet keine %1 + + server reported no %1 + Server meldet kein %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Konflikt beim Hochladen einiger Dateien in einen Ordner. Diejenigen, die in Konflikt stehen, werden gelöscht! - + Conflict when uploading a folder. It's going to get cleared! Konflikt beim Hochladen eines Ordners. Er wird gelöscht! - + Conflict when uploading a file. It's going to get removed! Konflikt beim Hochladen einer Datei. Sie wird entfernt! - + Ignored because of the "choose what to sync" blacklist Ignoriert wegen der "Choose what to sync"-Blacklist - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie nicht die Berechtigung haben, Unterordner zu diesem Ordner hinzuzufügen. - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Berechtigung zum Hinzufügen von Dateien in diesen Ordner 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. Wiederherstellen. - + Moved to invalid target, restoring Auf ungültiges Ziel verschoben, wiederherstellen. - + Not allowed to remove, restoring Entfernen nicht erlaubt, wiederherstellen. - + Error while reading the database Fehler beim Lesen der Datenbank @@ -3516,7 +3435,7 @@ Der Server hat während des Lesens des Verzeichnisses '%1' mit einem Fehler geantwortet: %2 - + Server replied with an error while reading directory "%1" : %2 Der Server hat während des Lesens des Verzeichnisses "%1" mit einem Fehler geantwortet: %2 @@ -3529,17 +3448,12 @@ Fehler beim Schreiben der Metadaten in die Datenbank - - Error updating metadata due to invalid modified time - Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - - + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - + File is currently in use Datei ist aktuell in Benutzung @@ -3552,44 +3466,44 @@ Datei %1 kann nicht heruntergeladen werden, da keine Verschlüsselungsinformationen vorhanden sind. - + File %1 cannot be downloaded because encryption information is missing. Die Datei %1 kann nicht heruntergeladen werden, da die Verschlüsselungsinformationen fehlen. - - + + File has changed since discovery Datei ist seit der Entdeckung geändert worden - - + + File %1 cannot be downloaded because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht heruntergeladen werden! - + 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 local disk space below the limit Das Herunterladen würde den lokalen freien Speicherplatz unter die Grenze reduzieren - + 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 heruntergeladen werden. @@ -3599,12 +3513,12 @@ Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. - + The downloaded file is empty, but the server said 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 Konflikts mit dem lokalen Dateinamen nicht gespeichert geladen werden! @@ -3614,18 +3528,12 @@ Fehler beim Schreiben der Metadaten in die Datenbank - - - File %1 has invalid modified time reported by server. Do not save it. - Datei %1 hat eine ungültige Änderungszeit, die vom Server gemeldet wurde. Speichern Sie sie nicht. - - - + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3633,12 +3541,12 @@ 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 @@ -3712,12 +3620,12 @@ %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht zu %2 umbenannt werden - + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3728,12 +3636,12 @@ Fehler beim Schreiben der Metadaten in die Datenbank - + Failed to rename file Konnte Datei nicht umbenennen - + Error setting pin state Fehler beim Setzen des PIN-Status @@ -3767,12 +3675,12 @@ Fehler beim Schreiben der Metadaten in die Datenbank - + Error writing metadata to the database: %1 Fehler beim Schreiben der Metadaten in die Datenbank: %1 - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3790,22 +3698,22 @@ Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung - + Error setting pin state Fehler beim Setzen des PIN-Status - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - Die Datei %1 hat eine ungültige Änderungszeit. Nicht auf den Server hochladen. - - - + Failed to upload encrypted file. Das Hochladen der verschlüsselten Datei ist fehlgeschlagen. - + 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ß-/Kleinschreibung, existiert - - + + Upload of %1 exceeds the quota for the folder Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners - + File Removed (start upload) %1 Datei entfernt (starte Hochladen) %1 - + Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisierung geändert. Die Synchronisierung wird wiederaufgenommen. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - + Failed to unlock encrypted folder. Der verschlüsselte Ordner konnte nicht entsperrt werden. @@ -3862,12 +3762,12 @@ Fehler beim Schreiben der Metadaten in die Datenbank - + Error updating metadata: %1 Fehler beim Aktualisieren der Metadaten: %1 - + The file %1 is currently in use Die Datei %1 ist aktuell in Benutzung @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - + Poll URL missing Poll-URL fehlt - + 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 @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Poll-URL fehlt - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisierung gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisierung geändert. - + The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Kein E-Tag vorhanden) @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss Ausblenden @@ -4171,17 +4071,17 @@ Passwortschutz - + Allow editing Bearbeitung erlauben - + View only Nur anzeigen - + Allow upload and editing Hochladen und Bearbeiten erlauben @@ -4191,7 +4091,7 @@ Ablaufdatum - + File drop (upload only) Dateien ablegen (nur Hochladen) @@ -4201,32 +4101,32 @@ Freigabe aufheben - + Link name Link-Name - + Note to recipient Notiz an Empfänger - + Password protect Passwortschutz - + Set expiration date Ablaufdatum setzen - + Delete link Link löschen - + Add another link Weiteren Link hinzufügen @@ -4236,27 +4136,27 @@ Freigabe-Link löschen - + Confirm Link Share Deletion Löschen des öffentlichen Links bestätigen - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Möchten Sie wirklich den öffentlichen Link <i>%1 </i>löschen?<p>Hinweis: Dies kann nicht rückgängig gemacht werden.</p> - + Delete Löschen - + Cancel Abbrechen - + Public link Öffentlicher Link @@ -4269,12 +4169,12 @@ Mit Benutzern oder Gruppen teilen … - + Search globally Global suchen - + Copy link Link kopieren @@ -4284,22 +4184,22 @@ Keine Ergebnisse für '%1' - + No results for "%1" Keine Ergebnisse für "%1" - + Password for share required Passwort für die Freigabe erforderlich - + Please enter a password for your email share: Bitte geben Sie ein Passwort für die E-Mail-Freigabe ein: - + I shared something with you Ich habe etwas mit Ihnen geteilt @@ -4337,42 +4237,42 @@ Läuft ab: - + Can reshare kann weiterteilen - + Note to recipient Notiz an Empfänger - + Set expiration date Ablaufdatum setzen - + Unshare Freigabe aufheben - + Can create kann erstellen - + Can change kann ändern - + Can delete kann löschen - + Password protect Passwortschutz @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share Kontextmenü Freigabe - + Select new location … Neuen Ort auswählen … - + I shared something with you Ich habe etwas mit Ihnen geteilt - - + + Share options Freigabeoptionen @@ -4421,73 +4321,73 @@ Aktivität - + Copy private link to clipboard Privater Link in die Zwischenablage kopiert - + Send private link by email … Privaten Link als E-Mail verschicken … - + Resharing this file is not allowed Weiterteilen dieser Datei ist nicht erlaubt - + Resharing this folder is not allowed Weiterteilen dieses Ordners ist nicht erlaubt - - + + Copy public link Öffentlichen Link kopieren - + Copy internal link Kopiere internen Link - + Edit Bearbeiten - + Open in browser Im Browser öffnen - + Resolve conflict … Konflikt lösen… - + Move and rename … Verschieben und umbenennen … - + Move, rename and upload … Verschieben, umbenennen und hochladen … - + Delete local changes Lokale Änderungen löschen - + Move and upload … Verschieben und hochladen … - + Delete Löschen @@ -4633,77 +4533,77 @@ 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: Additional errors: - Zusätzliche Fehler: + - + 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 (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingerabdruck (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingerabdruck (SHA-512): <tt>%1</tt> - + Effective Date: %1 Datum des Inkrafttretens: %1 - + Expiration Date: %1 Ablaufdatum: %1 - + Issuer: %1 Aussteller: %1 @@ -4796,33 +4696,33 @@ Ein interner Fehler mit der Fehlernummer %1 ist aufgetreten. - + %1 (skipped due to earlier error, trying again in %2) %1 (übersprungen aufgrund des früheren Fehlers, erneuter Versuch in %2) - + Could not update file: %1 Datei konnte nicht aktualisiert werden: %1 - + Could not update virtual file metadata: %1 Metadaten der virtuellen Datei konnten nicht aktualisiert werden: %1 - + Unresolved conflict. Ungelöster Konflikt. - + 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. - + Aborted Abgebrochen @@ -4899,16 +4799,16 @@ Dateinamen, die mit einem Punkt enden, werden von diesem Dateisystem nicht unterstützt. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. + + File names containing the character '%1' are not supported on this file system. Dateinamen, welche das Zeichen '%1' enthalten, werden von diesem Dateisystem nicht unterstützt. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Öffnen oder erstellen der Sync-Datenbank nicht möglich. Bitte sicherstellen, dass Schreibrechte für den zu synchronisierenden Ordner existieren. - - The file name is a reserved name on this file system. Der Dateiname ist ein reservierter Name in diesem Dateisystem. @@ -4929,7 +4829,7 @@ Datei/Ordner wird ignoriert, weil sie unsichtbar ist. - + Using virtual files with suffix, but suffix is not set Virtuelle Dateien mit Endung verwenden, aber Endung ist nicht gesetzt. @@ -4944,7 +4844,7 @@ Der Dateiname kann auf Ihrem Dateisystem nicht entschlüsselt werden. - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank @@ -4959,17 +4859,17 @@ Stat fehlgeschlagen. + + Unable to read from the sync journal. + Fehler beim Einlesen des Synchronisierungsprotokolls. + + Filename encoding is not valid Dateikodierung ist ungültig - - Unable to read from the sync journal. - Fehler beim Einlesen des Synchronisierungsprotokolls. - - - + Cannot open the sync journal Synchronisierungsprotokoll kann nicht geöffnet werden @@ -4979,22 +4879,22 @@ Ungültige Zeichen, bitte benennen Sie "%1" um + + Synchronization will resume shortly. + Die Synchronisierung wird in Kürze fortgesetzt. + + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - Synchronization will resume shortly. - Die Synchronisierung wird in Kürze fortgesetzt. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Der freie Speicherplatz wird knapp: Downloads, die den freien Speicher unter %1 reduzieren, wurden ausgelassen. - + There is insufficient space available on the server for some uploads. Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account Konto hinzufügen - + Open main dialog Hauptfenster öffnen + - Pause sync Synchronisierung pausieren - - + + Resume sync Synchronisierung fortsetzen - + Settings Einstellungen - + Exit %1 %1 beenden - + Pause sync for all Synchronisierung für alle pausieren - + Resume sync for all Synchronisierung für alle fortsetzen - + %1: %2 %1: %2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Desktop-Client</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Version %1. Für weitere Informationen klicken Sie bitte <a href='%2'>hier</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Plugin für virtuelle Dateien: %1</small></p> - + <p>This release was supplied by %1</p> <p>Diese Version wird von %1 bereitgestellt</p> @@ -5138,22 +5038,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Anbieter konnten nicht abgerufen werden. - + Failed to fetch search providers for '%1'. Error: %2 Konnte Suchanbieter für '%1' nicht abrufen. Fehler: %2 - + Search has failed for '%2'. Suche nach '%2' fehlgeschlagen. - + Search has failed for '%1'. Error: %2 Suche nach '%1' fehlgeschlagen. Fehler: %2 @@ -5161,32 +5061,32 @@ OCC::User - + Retry all uploads Alle Uploads neu starten - + Synced %1 %1 synchronisiert - + You renamed %1 Sie haben %1 umbenannt - + You deleted %1 Sie haben %1 gelöscht - + You created %1 Sie haben %1 erstellt - + You changed %1 Sie haben %1 geändert @@ -5194,22 +5094,22 @@ OCC::UserModel - + Confirm Account Removal Kontenentfernung bestätigen - + <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>Möchten Sie wirklich die Verbindung zum Konto <i>%1</i> entfernen?</p><p><b>Hinweis:</b> Es werden <b>keine</b> Dateien gelöscht.</p> - + Remove connection Verbindung entfernen - + Cancel Abbrechen @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Die Funktion "Virtuelles Dateisystem" erfordert ein NTFS-Dateisystem, %1 verwendet %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Fehler beim Aktualisieren der Metadaten aufgrund einer ungültigen Änderungszeit - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ Neuer Ordner - + %n day ago Vor %n TagVor %n Tagen - + %n days ago Vor %n TagVor %n Tagen - + in the future in der Zukunft - + %n hour ago Vor %n StundeVor %n Stunden - + %n hours ago Vor %n StundeVor %n Stunden - + now jetzt - + Less than a minute ago Vor weniger als einer Minute - + %n minute ago Vor %n MinuteVor %n Minuten - + %n minutes ago Vor %n MinuteVor %n Minuten - + Some time ago Vor einiger Zeit @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. Fehler beim Verbinden mit der Datenbank. @@ -5946,7 +5828,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … Suche Dateien, Nachrichten und Termine … @@ -5983,21 +5865,11 @@ Kontoeintrag - + Switch to account Zu Konto wechseln - - Current user status is online - Aktueller Benutzerstatus ist Online - - - - Current user status is do not disturb - Aktueller Benutzerstatus ist Nicht stören - - Account connected Konto verbunden @@ -6008,7 +5880,17 @@ Konto nicht verbunden - + + Current user status is online + Aktueller Benutzerstatus ist Online + + + + Current user status is do not disturb + Aktueller Benutzerstatus ist Nicht stören + + + Account actions Konto-Aktionen @@ -6018,24 +5900,24 @@ Konto entfernen - + Set status Status setzen - - + + Log out Abmelden - - + + Log in Anmelden - + Remove account Konto löschen @@ -6096,57 +5978,57 @@ 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 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Der Prüfsummen-Header hat ein fehlerhaftes Format. @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog Nextcloud Desktop-Hauptdialog - + Current account Aktuelles Konto - - + + Resume sync for all Synchronisierung für alle fortsetzen - - + + Pause sync for all Synchronisierung für alle pausieren - + Set user status Benutzerstatus setzen - + Add account Konto hinzufügen - + Add new account Neues Konto hinzufügen - + Settings Einstellungen - + Exit Beenden - + Current user avatar Avatar des aktuellen Benutzers - + Current user status is online Aktueller Benutzerstatus ist Online - + Current user status is do not disturb Aktueller Benutzerstatus ist Nicht stören @@ -6254,32 +6136,32 @@ %1 teilen - + Account switcher and settings menu Konto-Umschalter und Einstellungsmenü - + Connected Verbunden - + Disconnected Getrennt - + Open local folder of current account Lokalen Ordner des aktuellen Kontos öffnen - + Open Nextcloud Talk in browser Nextcloud Talk im Browser öffnen - + More apps Weitere Apps @@ -6289,7 +6171,7 @@ Apps-Menü - + Open %1 in browser %1 im Browser öffnen @@ -6309,7 +6191,7 @@ Teilen-Dialog öffnen - + Unified search results list Einheitliche Suchergebnisliste @@ -6320,7 +6202,7 @@ Weitere Aktionen anzeigen - + %1 - File activity %1 - Dateiaktivitäten @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available Benachrichtigungsfeld (Taskleiste) ist nicht verfügbar. @@ -6338,7 +6220,7 @@ %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel „Trayer“ und versuchen es nochmal. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 benötigt ein funktionierendes Benachrichtigungsfeld. Falls Sie XFCE einsetzen, dann folgen Sie bitte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">diesen Anweisungen</a>. Andernfalls installieren Sie bitte ein Benachrichtigungsfeld wie zum Beispiel "Trayer“ und versuchen es nochmal. @@ -6346,7 +6228,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_el.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_el.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_el.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_el.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,36 +10,36 @@ ActivityItem - + Open %1 locally Ανοίξτε το %1 τοπικά - + Open share dialog Άνοιγμα του διαλόγου διαμοιρασμού - + Share %1 Κοινή χρήση %1 - - + + Show more actions Εμφάνιση περισσότερων ενεργειών. View activity - Εμφάνιση δραστηριότητας + ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Η σύνδεση έληξε. - + Unknown error: network reply was deleted Άγνωστο σφάλμα: η απάντηση δικτύου διαγράφηκε - + Server replied "%1 %2" to "%3 %4" Ο διακομιστής απάντησε "%1 %2" σε "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Από άκρη σε άκρη απομνημόνευση κρυπτογράφησης - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Για την προστασία της Κρυπτογραφικής σας Ταυτότητας, την αποκρύψαμε με απομνημόνευση 12 λέξεων. Παρακαλώ σημειώστε τις και κρατήστε τις ασφαλείς. Θα χρειαστούν σε περίπτωση που θέλετε να προσθέσετε άλλες συσκευές στον λογαριασμό σας (όπως το κινητό ή το λαπτοπ). @@ -305,9 +305,9 @@ - - - + + + Cancel Άκυρο @@ -495,52 +495,52 @@ Αφαίρεση συγχρονισμού φακέλου - + Disable virtual file support … Απενεργοποίηση εικονικής υποστήριξης αρχείων… - + Enable virtual file support %1 … - + (experimental) (πειραματικό) - + Folder creation failed Αποτυχία δημιουργίας φακέλου - + <p>Could not create local folder <i>%1</i>.</p> <p>Αδυναμία δημιουργίας τοπικού φακέλου <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Επιβεβαίωση αφαίρεσης συγχρονισμού - + <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> - + Remove Folder Sync Connection Αφαίρεση συγχρονισμού - + Disable virtual file support? Απενεργοποίηση εικονικής υποστήριξης αρχείων; - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support Απενεργοποίηση υποστήριξης - + Sync Running Εκτελείται Συγχρονισμός - + The syncing operation is running.<br/>Do you want to terminate it? Η λειτουργία συγχρονισμού εκτελείται.<br/> Θέλετε να την τερματίσετε; - + %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. Προς το παρόν δεν υπάρχουν πληροφορίες χρήσης χώρου αποθήκευσης διαθέσιμες. - + %1 in use %1 σε χρήση @@ -599,87 +599,87 @@ Είσοδος - + %1 as %2 - + The server version %1 is 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. - + Server configuration error: %1 at %2. Σφάλμα ρυθμίσεων διακομιστή: %1 σε %2. - + No %1 connection configured. Δεν έχει ρυθμιστεί σύνδεση με το %1. - + 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 Αφαίρεση σύνδεσης @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out Αποσύνδεση - + Disconnected Αποσυνδεδεμένο - + Connected Συνδεδεμένο - + Service unavailable Η υπηρεσία δεν είναι διαθέσιμη - + Maintenance mode Κατάσταση συντήρησης - + Network error Σφάλμα δικτύου - + Configuration error Σφάλμα ρυθμίσεων - + Asking Credentials Ερώτηση πιστοποιητικών - + Unknown account state Άγνωστη κατάσταση λογαριασμού @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Τα αρχεία από τη λίστα παράβλεψης καθώς και οι συμβολικοί σύνδεσμοι δεν συγχρονίζονται. - + For more activities please open the Activity app. Για εμφάνιση περισσότερων δραστηριοτήτων παρακαλώ ανοίξτε την εφαρμογή Activity. @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Η συνέχιση θα σημαίνει διαγραφή αυτών των ρυθμίσεων. - + Continuing will mean <b>ignoring these settings</b>. Η συνέχιση θα σημαίνει διαγραφή αυτών των ρυθμίσεων. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Ορισμένες ρυθμίσεις διαμορφώθηκαν σε νεότερες εκδόσεις αυτού του πελάτη και χρησιμοποιούν λειτουργίες που δεν είναι διαθέσιμες σε αυτήν την έκδοση.<br><br>%1 <br><br>Το τρέχον αρχείο διαμόρφωσης έχει ήδη μπει σε διαδικασία δημιουργίας αντιγράφων ασφαλείας έως <i> 2%</i>. - + Quit Έξοδος - + Continue Συνέχεια - + Error accessing the configuration file Σφάλμα πρόσβασης στο αρχείο ρυθμίσεων - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Υπήρξε σφάλμα κατά την πρόσβαση του αρχείου ρυθμίσεων στο %1. Παρακαλώ επαληθεύστε αν μπορείτε να προσπελάσετε το αρχείο. - + Quit %1 Κλείσιμο %1 @@ -851,7 +851,7 @@ Enter username and password for "%1" at %2. - Εισαγάγετε όνομα χρήστη και κωδικό πρόσβασης για το "%1" στο %2. + @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Παρακαλώ εισάγετε τον απο άκρη σε άκρη κρυπτογραφημένο κωδικό σας: <br><br> Χρήστης:%2<br>Λογαριασμός: %3<br> - + Enter E2E passphrase Εισάγετε κωδικό E2E @@ -1077,7 +1027,7 @@ Timeout - Λήξη χρόνου + @@ -1101,19 +1051,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1121,8 +1058,8 @@ Η αναζήτηση αρχείων διακομιστή απάντησε με ελλιπή δεδομένα. - - + + Server error: PROPFIND reply is not XML formatted! Σφάλμα διακομιστή: Η απάντηση PROPFIND δεν έχει μορφοποίηση XML! @@ -1130,27 +1067,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Σφάλμα κατά το άνοιγμα του καταλόγου %1 - + Directory not accessible on client, permission denied Ο κατάλογος δεν είναι προσβάσιμος στον πελάτη, απορρίπτεται η άδεια - + Directory not found: %1 Ο κατάλογος δεν βρέθηκε: %1 - + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Error while reading directory %1 Σφάλμα κατά την ανάγνωση του καταλόγου %1 @@ -1174,7 +1111,7 @@ - + Error returned from the server: <em>%1</em> Ο διακομιστής επέστρεψε σφάλμα: <em>%1</em> @@ -1186,24 +1123,24 @@ - + 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 Η απάντηση του διακομιστή δεν περιέχει όλα τα αναμενόμενα στοιχεία - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1238,7 +1175,7 @@ Reopen Browser - Επανεκκίνηση περιηγητή + @@ -1364,41 +1301,41 @@ Δραστηριότητα Συγχρονισμού - + 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. Μεταβείτε στις ρυθμίσεις για να το επιλέξετε εάν επιθυμείτε να το κατεβάσετε. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Ο φάκελος %1 που δημιουργήθηκε έχει εξαιρεθεί απο τον συγχρονισμό. Τα δεδομένα του δεν θα συγχρονιστούν. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Το αρχείο %1 που δημιουργήθηκε έχει εξαιρεθεί απο τον συγχρονισμό. Δεν θα συγχρονιστή. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1409,6 +1346,13 @@ Αυτό σημαίνει ότι η εφαρμογή δεν θα ανεβάσει τις τοπικές αλλαγές άμεσα, θα ελέγξει μόνο τις τοπικές αλλαγές και θα τις ανεβάσει περιοδικά (κάθε δύο ώρες από προεπιλογή). + + 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' διαγράφησαν. Αυτές οι διαγραφές θα συγχρονιστούν με τον διακομιστή σας, καθιστώντας τα αρχεία αυτά μη διαθέσιμα εκτός αν γίνει επαναφορά. Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτές τις ενέργειες με τον διακομιστή; Εάν αυτό ήταν ατύχημα και αποφασίσετε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν ξανά από το διακομιστή. + + All files in the sync folder '%1' 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. @@ -1468,52 +1412,40 @@ Διατήρηση τοπικών αρχείων ως Διένεξη - - 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 restore 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' διαγράφησαν. Αυτές οι διαγραφές θα συγχρονιστούν με τον διακομιστή σας, καθιστώντας τα αρχεία αυτά μη διαθέσιμα εκτός αν γίνει επαναφορά. Είστε βέβαιοι ότι θέλετε να συγχρονίσετε αυτές τις ενέργειες με τον διακομιστή; Εάν αυτό ήταν ατύχημα και αποφασίσετε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν ξανά από το διακομιστή. - - - + 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 restore 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 Κατάργηση όλων των αρχείων. - + + 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 restore 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' διαγράφηκαν στο διακομιστή. Αυτές οι διαγραφές θα συγχρονιστούν με τον τοπικό φάκελο συγχρονισμού, καθιστώντας αυτά τα αρχεία μη διαθέσιμα εκτός εάν έχετε δικαίωμα επαναφοράς. Εάν αποφασίσετε να επαναφέρετε τα αρχεία, θα συγχρονιστούν ξανά με τον διακομιστή, εφόσον έχετε τα δικαιώματα. Εάν αποφασίσετε να διαγράψετε τα αρχεία, θα είναι μη διαθέσιμα σε εσάς, εκτός εάν είστε ο κάτοχος. + + + Keep files Κράτησε τα αρχεία @@ -1549,7 +1481,7 @@ OCC::FolderMan - + Could not reset folder state Δεν ήταν δυνατό να επαναφερθεί η κατάσταση του φακέλου @@ -1559,37 +1491,37 @@ Βρέθηκε ένα παλαιότερο αρχείο συγχρονισμού '%1', αλλά δεν μπόρεσε να αφαιρεθεί. Παρακαλώ βεβαιωθείτε ότι καμμία εφαρμογή δεν το χρησιμοποιεί αυτή τη στιγμή. - + 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. Ο συγχρονισμός εκτελείται. @@ -1599,67 +1531,67 @@ Ο συγχρονισμός ήταν επιτυχής, μη διευθετημένες διενέξεις. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Ο τελευταίος συγχρονισμός ήταν επιτυχής. - + Setup Error. Σφάλμα Ρύθμισης. - + User Abort. Ματαίωση από Χρήστη. - + Sync is paused. Παύση συγχρονισμού. - + %1 (Sync is paused) %1 (Παύση συγχρονισμού) - + No valid folder selected! Δεν επιλέχθηκε έγκυρος φάκελος! - + The selected path does not exist! Η επιλεγμένη διαδρομή δεν υπάρχει! - + The selected path is not a folder! Η επιλεγμένη διαδρομή δεν είναι φάκελος! - + You have no permission to write to the selected 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 περιέχεται ήδη σε φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού. Παρακαλώ επιλέξτε άλλον! - + There is already a sync from the server to this local folder. Please pick another local folder! Υπάρχει ήδη συγχρονισμός από το διακομιστή σε αυτόν τον τοπικό φάκελο. Επιλέξτε έναν άλλο τοπικό φάκελο! @@ -1871,12 +1803,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού Φακέλου - + Add Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού @@ -1914,45 +1846,45 @@ 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Συγχρονίζετε ήδη το <i>1% </i>, το οποίο είναι υποφάκελος του</i>%2</i>. @@ -1960,24 +1892,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - Χρησιμοποιήστε εικονικά αρχεία αντί να κατεβάσετε το περιεχόμενο άμεσα %1 + - - + + (experimental) (πειραματικό) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder Τα εικονικά αρχεία δεν είναι διαθέσιμα για τον επιλεγμένο φάκελο. @@ -1998,27 +1930,27 @@ 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 για συνέχιση. Επανάληψη την επόμενη φορά. - + We received an unexpected download Content-Length. Λάβαμε μια απροσδόκητη λήψη Content-Length. - + Server returned wrong content-range Ο διακομιστής επέστρεψε εσφαλμένο πεδίο τιμών - + Connection Timeout Λήξη Χρόνου Αναμονής Σύνδεσης @@ -2138,22 +2070,22 @@ Δημιουργία αρχείου εντοπισμού σφαλμάτων… - + Server notifications that require attention. Ειδοποιήσεις από τον διακομιστή που απαιτούν την προσοχή σας. - + You cannot disable autostart because system-wide autostart is enabled. Δεν μπορείτε να απενεργοποιήσετε την αυτόματη εκκίνηση επειδή είναι ενεργοποιημένη η αυτόματη εκκίνηση σε όλο το σύστημα. - + Change update channel? Αλλαγή καναλιού ενημέρωσης; - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2161,32 +2093,32 @@ Λάβετε υπόψη ότι αυτό επιλέγει μόνο από τη δεξαμενήαπό την οποία προέρχονται οι αναβαθμίσεις της ομάδας και ότι δεν υπάρχουν υποβαθμίσεις: Επομένως, η επιστροφή από το κανάλι beta στο σταθερό κανάλι συνήθως δεν μπορεί να γίνει αμέσως και σημαίνει αναμονή για μια σταθερή έκδοση που είναι νεότερη από την τρέχουσα εγκατεστημένη έκδοση beta. - + Change update channel Αλλαγή καναλιού ενημέρωσης. - + Cancel Ακύρωση - + Create Debug Archive Δημιουργία αρχείου εντοπισμού σφαλμάτων. - + Zip Archives Αρχεία zip. - + Debug Archive Created Δημιουργήθηκε αρείο εντοπισμού σφαλμάτων. - + Debug archive is created at %1 Το αρχείο εντοπισμού σφαλμάτων δημιουργείται στο % 1. @@ -2194,22 +2126,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Απαιτείται κωδικός πρόσβασης για το κοινόχρηστο - + Please enter a password for your link share: Παρακαλώ εισάγετε κωδικό πρόσβασης για το κοινόχρηστο σύνδεσμο: - + Sharing error Σφάλμα διαμοιρασμού - + Could not retrieve or create the public link share. Error: %1 @@ -2346,7 +2278,7 @@ Invalid filename - Μη έγκυρο όνομα αρχείου + @@ -2356,22 +2288,22 @@ Error - Σφάλμα + Please enter a new name for the file: - Παρακαλούμε εισαγάγετε νέο όνομα για το αρχείο: + New filename - Νέο όνομα αρχείου + Rename file - Μετονομασία αρχείου + @@ -2381,27 +2313,27 @@ The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > - Οι ακόλουθοι χαρακτήρες δεν επιτρέπονται στο σύστημα: * " | & ? , ; : \ / ~ < > + You don't have the permission to rename this file. Please ask the author of the file to rename it. - Δεν έχετε τα απαραίτητα δικαιώματα για τη μετονομασία του αρχείου. Παρακαλούμε ρωτήστε τον κάτοχο του αρχείου να το μετονομάσει. + Filename contains illegal characters: %1 - Το όνομα αρχείου περιέχει μη αποδεκτούς χαρακτήρες: %1 + Could not rename file. Please make sure you are connected to the server. - Δεν είναι δυνατή η μετονομασία του αρχείου. Παρακαλούμε ελέγξτε τη σύνδεσή σας με το διακομιστή. + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Δεν είναι δυνατή η μετονομασία του αρχείου καθώς χρησιμοποιείται ήδη στο διακομιστή. Παρακαλούμε επιλέξτε διαφορετικό. + @@ -2532,7 +2464,7 @@ OCC::Logger - + Error Σφάλμα @@ -2542,7 +2474,7 @@ <nobr>Το αρχείο '%1'<br/>δεν μπορεί να ανοιχθεί για εγγραφή.<br/><br/>Το αρχείο καταγραφής <b>δεν</b> μπορεί να αποθηκευτεί!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2550,33 +2482,33 @@ 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 Λήψη ενημέρωσης - + Update Failed Η ενημέρωση απέτυχε. @@ -2591,17 +2523,17 @@ - + Ask again later Ρωτήστε ξανά αργότερα. - + Restart and update Επανεκκινήστε και ενημερώστε. - + Update manually Μη αυτόματη ενημέρωση. @@ -2712,7 +2644,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Ο διακομιστής επέστρεψε το σφάλμα: <em>%1</em> @@ -2722,32 +2654,32 @@ Υπήρξε σφάλμα κατά την πρόσβαση στο 'αναγνωριστικό': <br><em> %1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Αδειάστε JSON από OAuth2 ανακατεύθυνση. - + 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> @@ -2817,12 +2749,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Αδυναμία ελέγχου για νέες ενημερώσεις. @@ -2832,27 +2764,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 Έλεγχος για ενημερώσεις @@ -2880,14 +2812,14 @@ Σύνδεση '...' - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) (πειραματικό) @@ -2912,49 +2844,49 @@ Ελεύθερος χώρος: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" Συγχρονισμός του φακέλου «%1» - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 ελεύθερος χώρος - + Virtual files are not available for the selected folder Τα εικονικά αρχεία δεν είναι διαθέσιμα για τον επιλεγμένο φάκελο. - + Local Sync Folder Τοπικός Φάκελος Συγχρονισμού - - + + (%1) (%1) - + There isn't enough free space in the local folder! Δεν υπάρχει αρκετός ελεύθερος χώρος στον τοπικό φάκελο! @@ -3024,14 +2956,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3097,7 +3021,7 @@ &Επόμενο > - + Server address does not seem to be valid @@ -3107,7 +3031,7 @@ Μη έγκυρη διεύθυνση URL - + Could not load certificate. Maybe wrong password? Δεν ήταν δυνατή η φόρτωση του πιστοποιητικού. Ίσος είναι λάθος ο κωδικός; @@ -3205,54 +3129,54 @@ δημιουργία φακέλου στο Nextcloud: %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 Αποτυχία μετονομασίας φακέλου @@ -3262,12 +3186,12 @@ Αδυναμία αφαίρεσης και δημιουργίας αντιγράφου ασφαλείας του φακέλου διότι ο φάκελος ή ένα αρχείο του είναι ανοικτό από άλλο πρόγραμμα. Παρακαλώ κλείστε τον φάκελο ή το αρχείο και πατήστε επανάληψη ή ακυρώστε την ρύθμιση. - + Cannot 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> @@ -3275,7 +3199,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3285,17 +3209,17 @@ %1 Οδηγός Σύνδεσης - + Skip folders configuration Παράλειψη διαμόρφωσης φακέλων - + Enable experimental feature? Ενεργοποίηση πειραματικής λειτουργίας; - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3306,12 +3230,12 @@ Όταν είναι ενεργοποιημένη η λειτουργία "εικονικά αρχεία", κανένα αρχείο δε θα ληφθεί αρχικά. Αντ 'αυτού, θα δημιουργηθεί ένα μικρό "% 1" αρχείο για κάθε αρχείο που υπάρχει στο διακομιστή. Μπορείτε να κατεβάσετε τα περιεχόμενα εκτελώντας αυτά τα αρχεία ή χρησιμοποιώντας το μενού περιβάλλοντος. Η λειτουργία εικονικών αρχείων είναι αμοιβαία αποκλειστική με επιλεκτικό συγχρονισμό. Πρόσφατα μη επιλεγμένοι φάκελοι θα μεταφράζονται σε μόνο- διαδικτυακούς φακέλους και οι επιλεγμένες ρυθμίσει συγχρονισμού θα επαναφέρονται. Η μετάβαση σε αυτήν τη λειτουργία θα ακυρώσει οποιονδήποτε τρέχοντα συγχρονισμό. Πρόκειται για μια νέα, πειραματική λειτουργία. Εάν αποφασίσετε να τη χρησιμοποιήσετε, παρακαλώ όπως αναφέρετε τυχόν προβλήματα που προκύψουν. - + Enable experimental placeholder mode Ενεργοποίηση πειραματικής λειτουργίας κράτησης θέσης. - + Stay safe Μείνετε ασφαλής. @@ -3319,7 +3243,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Λανθασμένη απάντηση JSON από την ιστοσελίδα poll @@ -3337,17 +3261,17 @@ - + 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. Τα ονόματα αρχείων που τελειώνουν με τελεία δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. @@ -3362,57 +3286,57 @@ - + File name contains at least one invalid character Το όνομα αρχείου περιέχει τουλάχιστον έναν μη έγκυρο χαρακτήρα. - + The file name is a reserved name on this file system. Το όνομα αρχείου είναι ένα δεσμευμένο όνομα σε αυτό το σύστημα αρχείων. - + Filename contains trailing spaces. Το όνομα αρχείου περιέχει κενά διαστήματα. - + Filename is too long. Το όνομα αρχείου είναι πολύ μακρύ. - + File/Folder is ignored because it's hidden. Το αρχείο / φάκελος αγνοείται επειδή είναι κρυμμένο. - + Stat failed. Το Stat απέτυχε. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Διένεξη: Λήψη έκδοσης διακομιστή, μετονομασία τοπικού αντιγράφου και μη μεταφόρτωση. - + The filename cannot be encoded on your file system. Το όνομα αρχείου δεν μπορεί να κωδικοποιηθεί στο σύστημα αρχείων σας. - + The filename is blacklisted on the server. Το όνομα αρχείου είναι στη μαύρη λίστα στον διακομιστή. - + File has extension reserved for virtual files. Το αρχείο έχει επέκταση που προορίζεται για εικονικά αρχεία. - + size μέγεθος @@ -3422,72 +3346,62 @@ άδειες - - server reported no %1 - ο διακομιστής δεν ανέφερε %1 - - - - permission - - - - + file id αναγνωριστκό αρχείου (id) - - Server reported no %1 - + + server reported no %1 + ο διακομιστής δεν ανέφερε %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε άδεια να προσθέσετε φακέλους σε αυτόν το φάκελο. - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται η μεταφόρτωση αυτού του αρχείου επειδή είναι μόνο για ανάγνωση στον διακομιστή, γίνεται επαναφορά. - + Moved to invalid target, restoring Μετακινήθηκε σε μη έγκυρο στόχο, επαναφορά. - + Not allowed to remove, restoring Δεν επιτρέπεται η κατάργηση, επαναφορά. - + Error while reading the database Σφάλμα κατά την ανάγνωση της βάσης δεδομένων. @@ -3497,7 +3411,7 @@ Ο διακομιστής απάντησε με σφάλμα κατά την ανάγνωση της διεύθυνσης ΄%1' : %2 - + Server replied with an error while reading directory "%1" : %2 @@ -3510,17 +3424,12 @@ Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use Το αρχείο χρησιμοποιείται αυτήν τη στιγμή @@ -3533,44 +3442,44 @@ Δεν είναι δυνατή η λήψη του αρχείου %1, διότι λείπουν οι πληροφορίες κρυπτογράφησης. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Το αρχείο έχει αλλάξει από όταν ανακαλύφθηκε - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Το αρχείο %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. Η λήψη του αρχείου δεν ολοκληρώθηκε. @@ -3580,12 +3489,12 @@ Το ληφθέν αρχείο είναι άδειο, παρόλο που ο διακομιστής ανακοίνωσε ότι θα έπρεπε να ήταν% 1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Το αρχείο %1 δεν είναι δυνατό να αποθηκευτεί λόγω διένεξης με το όνομα ενός τοπικού ονόματος αρχείου! @@ -3595,18 +3504,12 @@ Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use Το αρχείο %1 χρησιμοποιείται αυτήν τη στιγμή @@ -3614,12 +3517,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Η Αποκατάσταση Απέτυχε: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Ένα αρχείο ή ένας κατάλογος αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση, αλλά η επαναφορά απέτυχε: %1 @@ -3693,12 +3596,12 @@ Το αρχείο %1 δεν είναι δυνατό να μετονομαστεί σε %2 λόγω μιας διένεξης με το όνομα ενός τοπικού αρχείου - + Error updating metadata: %1 Σφάλμα ενημέρωσης μεταδεδομένων: %1 - + The file %1 is currently in use Το αρχείο %1 χρησιμοποιείται αυτήν τη στιγμή @@ -3709,12 +3612,12 @@ Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων - + Failed to rename file Αποτυχία μετονομασίας αρχείου - + Error setting pin state @@ -3748,12 +3651,12 @@ Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων - + Error writing metadata to the database: %1 Σφάλμα εγγραφής μεταδεδομένων στη βάση δεδομένων: %1 - + The file %1 is currently in use Το αρχείο %1 χρησιμοποιείται αυτήν τη στιγμή @@ -3771,22 +3674,22 @@ Ο διακομιστής επέστρεψε εσφαλμένο κωδικό HTTP. Αναμενόταν 201, αλλά ελήφθη "%1 %2". - + Error updating metadata: %1 Σφάλμα ενημέρωσης μεταδεδομένων: %1 - + The file %1 is currently in use Το αρχείο %1 χρησιμοποιείται αυτήν τη στιγμή - + Error setting pin state - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -3794,46 +3697,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Το αρχείο % 1 δεν μπορεί να ανέβει επειδή υπάρχει ένα άλλο αρχείο με το ίδιο όνομα, που διαφέρει μόνο στη περίπτωση, - - + + Upload of %1 exceeds the quota for the folder Η μεταφόρτωση του %1 υπερβαίνει το όριο του φακέλου - + File Removed (start upload) %1 Το Αρχείο Αφαιρέθηκε (έναρξη μεταφόρτωσης) %1 - + Local file changed during syncing. It will be resumed. Το τοπικό αρχείο τροποποιήθηκε κατά τη διάρκεια του συγχρονισμού. Θα συγχρονιστεί πάλι. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + Failed to unlock encrypted folder. @@ -3843,12 +3738,12 @@ Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων - + Error updating metadata: %1 Σφάλμα ενημέρωσης μεταδεδομένων: %1 - + The file %1 is currently in use Το αρχείο %1 χρησιμοποιείται αυτήν τη στιγμή @@ -3856,32 +3751,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + Poll URL missing Λείπει το URL δημοσκόπησης. - + Unexpected return code from server (%1) Ο διακομιστής επέστρεψε απροσδόκητο κωδικό (%1) - + Missing File ID from server Απουσία ID αρχείου από τον διακομιστή - + Missing ETag from server Απουσία ETag από τον διακομιστή @@ -3889,22 +3784,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3982,7 +3877,7 @@ OCC::ServerNotificationHandler - + Dismiss Αποδέσμευση @@ -4152,17 +4047,17 @@ Προστασία με συνθηματικό - + Allow editing Επιτρέπεται η επεξεργασία - + View only - + Allow upload and editing Επέτρεψε την μεταφόρτωση και επεξεργασία @@ -4172,7 +4067,7 @@ Ημερομηνία λήξης - + File drop (upload only) Απόθεση αρχείου (μόνο μεταφόρτωση) @@ -4182,32 +4077,32 @@ Αναίρεση διαμοιρασμού - + Link name - + Note to recipient Σημείωση προς τον παραλήπτη - + Password protect Προστασία με συνθηματικό - + Set expiration date Ορισμός ημερομηνίας λήξης - + Delete link - + Add another link Προσθήκη άλλου συνδέσμου @@ -4217,27 +4112,27 @@ Διαγραφή κοινόχρηστου συνδέσμου - + Confirm Link Share Deletion Επιβεβαίωση Διαγραφής Κοινόχρηστου Συνδέσμου - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Θέλετε σίγουρα να διαγράψετ τον δημόσιο σύνδεσμο κοινής χρήσης <i> %1</i>?</p><p>Σημείωση: Η ενέργεια δεν αναιρείται.</p> - + Delete Διαγραφή - + Cancel Ακύρωση - + Public link Δημόσιος σύνδεσμος @@ -4250,12 +4145,12 @@ Διαμοιρασμός με χρήστες ή ομάδες ... - + Search globally Αναζήτηση παγκοσμίως - + Copy link Αντιγραφή συνδέσμου @@ -4265,22 +4160,22 @@ Κανένα αποτέλεσμα για '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Μοιράστηκα κάτι μαζί σου @@ -4318,42 +4213,42 @@ Λήγει: - + Can reshare Δυνατότητα να διαμοιραστεί ξανά - + Note to recipient - + Set expiration date Ορισμός ημερομηνίας λήξης - + Unshare Διακοπή διαμοιρασμού - + Can create Δυνατότητα δημιουργίας - + Can change Μπορεί να αλλάξει - + Can delete Μπορεί να διαγράψει - + Password protect Προστασία με συνθηματικό @@ -4370,23 +4265,23 @@ OCC::SocketApi - + Context menu share Διαμοιρασμός καταλόγου μενού - + Select new location … Επιλέξτε νέα τοποθεσία… - + I shared something with you Μοιράστηκα κάτι μαζί σου - - + + Share options Επιλογές κοινής χρήσης @@ -4402,73 +4297,73 @@ - + Copy private link to clipboard Αντιγραφή ιδιωτικού συνδέσμου στο πρόχειρο - + Send private link by email … Αποστολή ιδιωτικού συνδέσμου με αλληλογραφία... - + Resharing this file is not allowed Δεν επιτρέπεται ο επαναδιαμοιρασμός - + Resharing this folder is not allowed Δεν επιτρέπεται η αναδημοσίευση αυτού του φακέλου. - - + + Copy public link Αντιγραφή δημόσιου συνδέσμου - + Copy internal link Αντιγραφή εσωτερικού συνδέσμου - + Edit Επεξεργασία - + Open in browser Άνοιγμα στον περιηγητή - + Resolve conflict … Επίλυση διένεξης… - + Move and rename … Μετακίνηση και μετονομασία... - + Move, rename and upload … Μετακίνηση, μετονομασία και μεταφόρτωση ... - + Delete local changes Διαγραφή τοπικών αλλαγών - + Move and upload … Μετακίνηση και μεταφόρτωση ... - + Delete Διαγραφή @@ -4614,12 +4509,12 @@ Προσθήκη αυτού του πιστοποιητικού στα έμπιστα παρ'όλα αυτά - + Untrusted Certificate Μη έμπιστο πιστοποιητικό - + Cannot connect securely to <i>%1</i>: Αδυναμία ασφαλούς σύνδεσης σε <i>%1</i>: @@ -4629,62 +4524,62 @@ - + with Certificate %1 με Πιστοποιητικό: %1 - - - + + + &lt;not specified&gt; &lt;δεν κατονομάζονται&gt; - - + + Organization: %1 Οργανισμός: %1 - - + + Unit: %1 Μονάδα: %1 - - + + Country: %1 Χώρα: %1 - + Fingerprint (SHA1): <tt>%1</tt> Αποτύπωμα (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Αποτύπωμα (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Αποτύπωμα (SHA-512): <tt>%1</tt> - + Effective Date: %1 Ημερομηνία Έναρξης: 1% - + Expiration Date: %1 Ημερομηνία Λήξης: %1 - + Issuer: %1 Εκδότης: %1 @@ -4777,33 +4672,33 @@ Προέκυψε ένα εσωτερικό σφάλμα με αριθμό %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (παράλειψη λόγω προηγούμενου λάθους, επόμενη προσπάθεια σε %2) - + Could not update file: %1 Αδυναμία ενημέρωσης αρχείου: %1. - + Could not update virtual file metadata: %1 Δεν ήταν δυνατή η ενημέρωση των εικονικών μεταδεδομένων αρχείων: %1. - + Unresolved conflict. Άλυτες διενέξεις - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Aborted Ματαιώθηκε @@ -4880,16 +4775,16 @@ Τα ονόματα αρχείων που διαρκούν μια ορισμένη χρονική περίοδο δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Ανικανότητα στο άνοιγμα ή στη δημιουργία της τοπικής βάσης δεδομένων. Εξετάστε αν έχετε δικαιώματα εγγραφής στο φάκελο συγχρονισμού. + + File names containing the character '%1' are not supported on this file system. Τα ονόματα αρχείων που περιέχουν τον χαρακτήρα '% 1' δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Ανικανότητα στο άνοιγμα ή στη δημιουργία της τοπικής βάσης δεδομένων. Εξετάστε αν έχετε δικαιώματα εγγραφής στο φάκελο συγχρονισμού. - - The file name is a reserved name on this file system. Το όνομα αρχείου είναι ένα κατοχυρωμένο όνομα σε αυτό το σύστημα αρχείων. @@ -4910,7 +4805,7 @@ Το Αρχείο/ο Φάκελος αγνοήθηκε επειδή είναι κρυφό. - + Using virtual files with suffix, but suffix is not set Χρήση εικονικών αρχείων με κατάληξη, αλλά η κατάληξη δεν έχει οριστεί. @@ -4925,7 +4820,7 @@ Το όνομα αρχείου δεν μπορεί να κωδικοποιηθεί στο σύστημα αρχείων σας. - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων @@ -4940,17 +4835,17 @@ Απέτυχε. + + Unable to read from the sync journal. + Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. + + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - - Unable to read from the sync journal. - Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - - - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού @@ -4960,22 +4855,22 @@ Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - Synchronization will resume shortly. - - - - + 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. Μη αρκετός διαθέσιμος χώρος στον διακομιστή για μερικές μεταφορτώσεις. @@ -5044,49 +4939,49 @@ OCC::Systray - + Add account Προσθήκη λογαριασμού - + Open main dialog Άνοιγμα κύριου διαλόγου + - Pause sync Παύση συγχρονισμού - - + + Resume sync Συνέχιση συγχρονισμού - + Settings Ρυθμίσεις - + Exit %1 Έξοδος %1 - + Pause sync for all Παύση συγχρονισμού για όλους - + Resume sync for all Συνέχιση συγχρονισμού για όλους - + %1: %2 %1: %2 @@ -5094,24 +4989,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Εφαρμογή Υπολογιστή %1 </p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Έκδοση %1. Για περισσότερες πληροφορίες δείτε <a href='%2'>εδώ</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Η έκδοση παρέχεται από %1</p> @@ -5119,22 +5014,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5142,32 +5037,32 @@ OCC::User - + Retry all uploads Επανάληψη όλων των μεταφορτώσεων - + Synced %1 Συγχρονίστηκε το %1 - + You renamed %1 Μετονομάσατε το %1 - + You deleted %1 Διαγράψατε το %1 - + You created %1 Δημιουργήσατε το %1 - + You changed %1 Αλλάξατε το %1 @@ -5175,22 +5070,22 @@ OCC::UserModel - + 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 Αφαίρεση σύνδεσης - + Cancel Ακύρωση @@ -5295,30 +5190,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Η δυνατότητα εικονικού συστήματος αρχείων απαιτεί σύστημα αρχείων NTFS, το %1 χρησιμοποιεί %2. - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5840,52 +5717,52 @@ Νέος φάκελος - + %n day ago %n ημέρα πριν%n ημέρα πριν - + %n days ago % ημέρες πριν%n ημέρες πριν - + in the future στο μέλλον - + %n hour ago %n ώρα πριν%n ώρα πριν - + %n hours ago %n ώρες πριν%n ώρες πριν - + now τώρα - + Less than a minute ago Λιγότερο από ένα λεπτό πριν - + %n minute ago %n λεπτό πριν%n λεπτό πριν - + %n minutes ago %n λεπτά πριν%n λεπτά πριν - + Some time ago Λίγη ώρα πριν @@ -5919,7 +5796,7 @@ SyncJournalDb - + Failed to connect database. Αποτυχία σύνδεσης με βάση δεδομένων. @@ -5927,7 +5804,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5964,21 +5841,11 @@ Καταχώρηση λογαριασμού - + Switch to account Αλλαγή στον λογαριασμό - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Συνδεδεμένος λογαριασμός @@ -5989,7 +5856,17 @@ Ο λογαριασμός δεν συνδέθηκε - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Δραστηριότητα λογαριασμού @@ -5999,24 +5876,24 @@ Αφαίρεση λογαριασμού - + Set status Ορισμός κατάστασης - - + + Log out Αποσύνδεση - - + + Log in Είσοδος - + Remove account Αφαίρεση λογαριασμού @@ -6077,57 +5954,57 @@ 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 @@ -6135,7 +6012,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Η κεφαλίδα του αθροίσματος ελέγχου δεν είναι σωστά διαμορφωμένη. @@ -6168,64 +6045,64 @@ Window - + Nextcloud desktop main dialog Κύριος διάλογος της επιφάνειας εργασίας Nextcloud. - + Current account Τρέχον λογαριασμός - - + + Resume sync for all Συνέχιση όλων των συγχρονισμών - - + + Pause sync for all Παύση όλων των συγχρονισμών - + Set user status Ορισμός κατάστασης χρήστη - + Add account Προσθήκη λογαριασμού - + Add new account Προσθήκη νέου λογαριασμού - + Settings Ρυθμίσεις - + Exit Έξοδος - + Current user avatar Τρέχων avatar χρήστη - + Current user status is online - + Current user status is do not disturb @@ -6235,32 +6112,32 @@ Κοινή χρήση %1 - + Account switcher and settings menu Μενού εναλλαγής λογαριασμού και ρυθμίσεων. - + Connected Συνδεδεμένο - + Disconnected Αποσυνδεδεμένο - + Open local folder of current account Άνοιγμα τοπικού φακέλου του τρέχων λογαριασμού - + Open Nextcloud Talk in browser Άνοιγμα του Nextcloud Talk με το πρόγραμμα περιήγησης. - + More apps Περισσότερες εφαρμογές @@ -6270,7 +6147,7 @@ Μενού εφαρμογών - + Open %1 in browser Άνοιγμα %1 στον περιηγητή @@ -6290,7 +6167,7 @@ Άνοιγμα του διαλόγου διαμοιρασμού - + Unified search results list @@ -6301,7 +6178,7 @@ Εμφάνιση περισσότερων ενεργειών. - + %1 - File activity @@ -6309,7 +6186,7 @@ main.cpp - + System Tray not available Μπάρα Συστήματος μη-διαθέσιμη @@ -6319,7 +6196,7 @@ Το %1 απαιτεί μια μπάρα συστήματος σε λειτουργία. Εάν χρησιμοποιείτε το XFCE, παρακαλώ ακολουθείστε <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">αυτές τις οδηγίες</a>. Διαφορετικά, παρακαλώ εγκαταστείστε μια εφαρμογή μπάρας συστήματος όπως η 'trayer' και δοκιμάστε ξανά. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6327,7 +6204,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_en_GB.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_en_GB.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_en_GB.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_en_GB.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Connection timed out - + Unknown error: network reply was deleted Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" Server replied "%1 %2" to "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancel @@ -494,52 +494,52 @@ Remove folder sync connection - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Folder creation failed - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirm Folder Sync Connection Removal - + <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>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> - + Remove Folder Sync Connection Remove Folder Sync Connection - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sync Running - + The syncing operation is running.<br/>Do you want to terminate it? The syncing operation is running.<br/>Do you want to terminate it? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %1 of %2 in use - + Currently there is no storage usage information available. Currently there is no storage usage information available. - + %1 in use %1 in use @@ -598,87 +598,87 @@ Log in - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Connected to %1. - + Server %1 is temporarily unavailable. Server %1 is temporarily unavailable. - + Server %1 is currently in maintenance mode. Server %1 is currently in maintenance mode. - + Signed out from %1. Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obtaining authorisation from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1 … - + No connection to %1 at %2. No connection to %1 at %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No %1 connection configured. - + There are folders that were not synchronized because they are too big: There are folders that were not synchronised because they are too big: - + There are folders that were not synchronized because they are external storages: There are folders that were not synchronised because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: There are folders that were not synchronised because they are too big or external storages: - + Confirm Account Removal 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>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 Remove connection @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Signed out - + Disconnected Disconnected - + Connected Connected - + Service unavailable Service unavailable - + Maintenance mode Maintenance mode - + Network error Network error - + Configuration error Configuration error - + Asking Credentials Asking Credentials - + Unknown account state Unknown account state @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error accessing the configuration file - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error writing metadata to the database @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ The server file discovery reply is missing data. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sync Activity - + Could not read system exclude file Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. Please go in the settings to select it if you wish to download it. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1407,6 +1344,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1461,22 +1405,7 @@ Keep Local Files as Conflict - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1484,24 +1413,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1537,7 +1474,7 @@ OCC::FolderMan - + Could not reset folder state Could not reset folder state @@ -1547,37 +1484,37 @@ An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + 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) (backup %1) - + Undefined State. Undefined State. - + Waiting to start syncing. Waiting to start syncing. - + Preparing for sync. Preparing for sync. - + Sync is running. Sync is running. @@ -1587,67 +1524,67 @@ Sync was successful, unresolved conflicts. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Last Sync was successful. - + Setup Error. Setup Error. - + User Abort. User Abort. - + Sync is paused. Sync is paused. - + %1 (Sync is paused) %1 (Sync is paused) - + No valid folder selected! No valid folder selected! - + The selected path does not exist! - + The selected path is not a folder! The selected path is not a folder! - + You have no permission to write to the selected folder! You have no permission to write to the selected folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! 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 already contained in a folder used in a folder sync connection. Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! There is already a sync from the server to this local folder. Please pick another local folder! @@ -1859,12 +1796,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Add Folder Sync Connection - + Add Sync Connection Add Sync Connection @@ -1905,42 +1842,42 @@ - + Folder was successfully created on %1. Folder was successfully created on %1. - + Authentication failed accessing %1 Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 Failed to list a folder. Error: %1 - + Choose this to sync the entire account Choose this to sync the entire account - + This folder is already being synced. 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 <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1948,24 +1885,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1986,27 +1923,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Server returned wrong content-range - + Connection Timeout Connection Timeout @@ -2126,54 +2063,54 @@ - + Server notifications that require attention. Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2181,22 +2118,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2516,7 +2453,7 @@ OCC::Logger - + Error Error @@ -2526,7 +2463,7 @@ <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2534,33 +2471,33 @@ OCC::NSISUpdater - + New Version Available 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>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 version - + Skip this time Skip this time - + Get update Get update - + Update Failed @@ -2575,17 +2512,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2696,7 +2633,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error returned from the server: <em>%1</em> @@ -2706,32 +2643,32 @@ There was an error accessing the 'token' endpoint: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <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 The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> <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> <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> @@ -2801,12 +2738,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Could not check for new updates. @@ -2816,27 +2753,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. No updates available. Your installation is at the latest version. - + Update Check Update Check @@ -2864,14 +2801,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2896,49 +2833,49 @@ Free space: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Local Sync Folder - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3008,14 +2945,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3080,7 +3009,7 @@ &Next > - + Server address does not seem to be valid @@ -3090,7 +3019,7 @@ Invalid URL - + Could not load certificate. Maybe wrong password? Could not load certificate. Maybe wrong password? @@ -3188,54 +3117,54 @@ creating folder on Nextcloud: %1 - + Remote folder %1 created successfully. Remote folder %1 created successfully. - + The remote folder %1 already exists. Connecting it for syncing. The remote folder %1 already exists. Connecting it for syncing. + - The folder creation resulted in HTTP error code %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> 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">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>. Remote folder %1 creation failed with error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A sync connection from %1 to remote directory %2 was set up. - + Successfully connected to %1! Successfully connected to %1! - + Connection to %1 could not be established. Please check again. Connection to %1 could not be established. Please check again. - + Folder rename failed Folder rename failed @@ -3245,12 +3174,12 @@ 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. - + Cannot 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>Local sync folder %1 successfully created!</b></font> @@ -3258,7 +3187,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3268,17 +3197,17 @@ %1 Connection Wizard - + Skip folders configuration Skip folders configuration - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3289,12 +3218,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3302,7 +3231,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Invalid JSON reply from the poll URL @@ -3320,17 +3249,17 @@ - + 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. @@ -3345,57 +3274,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3405,72 +3334,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3480,7 +3399,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3493,17 +3412,12 @@ Error writing metadata to the database - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3516,44 +3430,44 @@ File %1 can not be downloaded because encryption information is missing. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! File %1 can not be downloaded because of a local file name clash! - + The download would reduce free local disk space below the limit The download would reduce free local disk space below the limit - + Free space on disk is less than %1 Free space on disk is less than %1 - + File was deleted from server File was deleted from server - + The file could not be downloaded completely. The file could not be downloaded completely. @@ -3563,12 +3477,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! File %1 cannot be saved because of a local file name clash! @@ -3578,18 +3492,12 @@ Error writing metadata to the database - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3597,12 +3505,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 A file or folder was removed from a read only share, but restoring failed: %1 @@ -3676,12 +3584,12 @@ File %1 can not be renamed to %2 because of a local file name clash - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3692,12 +3600,12 @@ Error writing metadata to the database - + Failed to rename file - + Error setting pin state @@ -3731,12 +3639,12 @@ Error writing metadata to the database - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3754,22 +3662,22 @@ Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error writing metadata to the database @@ -3777,46 +3685,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. Local file changed during syncing. It will be resumed. - + Local file changed during sync. Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3826,12 +3726,12 @@ Error writing metadata to the database - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3839,32 +3739,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. The local file was removed during sync. - + Local file changed during sync. Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) Unexpected return code from server (%1) - + Missing File ID from server Missing File ID from server - + Missing ETag from server Missing ETag from server @@ -3872,22 +3772,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Poll URL missing - + The local file was removed during sync. The local file was removed during sync. - + Local file changed during sync. Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) The server did not acknowledge the last chunk. (No e-tag was present) @@ -3965,7 +3865,7 @@ OCC::ServerNotificationHandler - + Dismiss Dismiss @@ -4135,17 +4035,17 @@ Password Protect - + Allow editing Allow editing - + View only - + Allow upload and editing Allow upload and editing @@ -4155,7 +4055,7 @@ Expiration Date - + File drop (upload only) File drop (upload only) @@ -4165,32 +4065,32 @@ Unshare - + Link name - + Note to recipient Note to recipient - + Password protect Password protect - + Set expiration date Set expiration date - + Delete link - + Add another link Add another link @@ -4200,27 +4100,27 @@ - + Confirm Link Share Deletion Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Delete - + Cancel Cancel - + Public link Public link @@ -4233,12 +4133,12 @@ - + Search globally - + Copy link Copy link @@ -4248,22 +4148,22 @@ No results for '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you I shared something with you @@ -4301,42 +4201,42 @@ - + Can reshare Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create Can create - + Can change Can change - + Can delete Can delete - + Password protect @@ -4353,23 +4253,23 @@ OCC::SocketApi - + Context menu share Context menu share - + Select new location … - + I shared something with you I shared something with you - - + + Share options @@ -4385,73 +4285,73 @@ - + Copy private link to clipboard Copy private link to clipboard - + Send private link by email … - + Resharing this file is not allowed Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Delete @@ -4597,12 +4497,12 @@ Trust this certificate anyway - + Untrusted Certificate Untrusted Certificate - + Cannot connect securely to <i>%1</i>: Cannot connect securely to <i>%1</i>: @@ -4612,62 +4512,62 @@ - + with Certificate %1 with Certificate %1 - - - + + + &lt;not specified&gt; &lt;not specified&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Unit: %1 - - + + Country: %1 Country: %1 - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Effective Date: %1 - + Expiration Date: %1 Expiration Date: %1 - + Issuer: %1 Issuer: %1 @@ -4760,33 +4660,33 @@ An internal error number %1 occurred. - + %1 (skipped due to earlier error, trying again in %2) %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Only %1 are available, need at least %2 to start - + Aborted @@ -4863,16 +4763,16 @@ File names ending with a period are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. File names containing the character '%1' are not supported on this file system. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - The file name is a reserved name on this file system. The file name is a reserved name on this file system. @@ -4893,7 +4793,7 @@ File/Folder is ignored because it's hidden. - + Using virtual files with suffix, but suffix is not set @@ -4908,7 +4808,7 @@ The filename cannot be encoded on your file system. - + Unable to read the blacklist from the local database Unable to read the blacklist from the local database @@ -4923,17 +4823,17 @@ Stat failed. + + Unable to read from the sync journal. + Unable to read from the sync journal. + + Filename encoding is not valid Filename encoding is not valid - - Unable to read from the sync journal. - Unable to read from the sync journal. - - - + Cannot open the sync journal Cannot open the sync journal @@ -4943,22 +4843,22 @@ Invalid characters, please rename "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character File name contains at least one invalid character - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. 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. There is insufficient space available on the server for some uploads. @@ -5027,49 +4927,49 @@ OCC::Systray - + Add account Add account - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Settings - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5077,24 +4977,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>This release was supplied by %1</p> @@ -5102,22 +5002,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5125,32 +5025,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5158,22 +5058,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5278,30 +5178,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5823,52 +5705,52 @@ - + %n day ago %n day ago%n day ago - + %n days ago %n days ago%n days ago - + in the future in the future - + %n hour ago %n hour ago%n hour ago - + %n hours ago %n hours ago%n hours ago - + now now - + Less than a minute ago Less than a minute ago - + %n minute ago %n minute ago%n minute ago - + %n minutes ago %n minutes ago%n minutes ago - + Some time ago Some time ago @@ -5902,7 +5784,7 @@ SyncJournalDb - + Failed to connect database. @@ -5910,7 +5792,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5947,32 +5829,32 @@ - + Switch to account Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Account actions @@ -5982,24 +5864,24 @@ - + Set status - - + + Log out Log out - - + + Log in Log in - + Remove account Remove account @@ -6060,57 +5942,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n year%n years - + %n month(s) %n month%n months - + %n day(s) %n day%n days - + %n hour(s) %n hour%n hours - + %n minute(s) %n minute%n minutes - + %n second(s) %n second%n seconds - + %1 %2 %1 %2 @@ -6118,7 +6000,7 @@ ValidateChecksumHeader - + The checksum header is malformed. The checksum header is malformed. @@ -6151,64 +6033,64 @@ Window - + Nextcloud desktop main dialog - + Current account Current account - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Add account - + Add new account - + Settings Settings - + Exit Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6218,32 +6100,32 @@ - + Account switcher and settings menu - + Connected Connected - + Disconnected Disconnected - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps More apps @@ -6253,7 +6135,7 @@ - + Open %1 in browser Open %1 in browser @@ -6273,7 +6155,7 @@ - + Unified search results list @@ -6284,7 +6166,7 @@ - + %1 - File activity @@ -6292,7 +6174,7 @@ main.cpp - + System Tray not available System Tray not available @@ -6302,7 +6184,7 @@ %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as 'trayer' and try again. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6310,7 +6192,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_eo.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_eo.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_eo.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_eo.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Konekto eltempiĝis - + Unknown error: network reply was deleted Nekonata eraro: reta respondo estis forigita - + Server replied "%1 %2" to "%3 %4" Servilo respondis „%1 %2“ al „%3 %4“ @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Memorigilo por tutvoja ĉifrado - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Por protekti vian ĉifran identecon, ni ĉifras ĝin kun memorigilo de 12 vortoj el la vortaro. Bv. noti tiujn kaj gardi tion en sekura loko. Vi bezonos ilin por aldoni aliajn aparatojn al via konto (kiel via poŝtelefono aŭ via portebla komputilo). @@ -305,9 +305,9 @@ - - - + + + Cancel Nuligi @@ -494,52 +494,52 @@ Ne plu sinkronigi tiun dosierujon - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Kreo de dosierujo malsukcesis - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Konfirmu la forigadon de la sinkronigo de tiu dosierujo - + <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>Ĉu vi vere volas ĉesi sinkronigi la dosierujon <i>%1</i>?</p><p><b>Notu:</b> Tio <b>ne</b> forigos la dosierojn.</p> - + Remove Folder Sync Connection Ne plu sinkronigi tiun dosierujon - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sinkronigo ruliĝanta - + The syncing operation is running.<br/>Do you want to terminate it? Sinkronigo estas ruliĝanta.<br/>Ĉu vi volas fini ĝin? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) el %2 uzataj. Certaj dosierujoj, inkluzive de rete muntitaj aŭ kunhavigitaj dosierujoj, eble havas aliajn limigojn. - + %1 of %2 in use %1 el %2 uzitaj - + Currently there is no storage usage information available. Ĉi-momente estas neniu informo pri konservejospaco. - + %1 in use %1 uzata(j) @@ -598,87 +598,87 @@ Ensaluti - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Konektita al %1. - + Server %1 is temporarily unavailable. Servilo %1 dumtempe ne disponeblas - + Server %1 is currently in maintenance mode. La servilo %1 estas en reĝimo de prizorgado - + Signed out from %1. Elsalutita de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Atendante rajtigon el la retumilo. <a href='%1'>Alklaku ĉi tie</a> por remalfermi la retumilon. - + Connecting to %1 … - + No connection to %1 at %2. Neniu konekto al servilo %1 je la adreso %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. Neniu konekto al %1 agordita. - + There are folders that were not synchronized because they are too big: Kelkaj dosierujoj ne sinkroniĝis, ĉar ili estas tro grandaj: - + There are folders that were not synchronized because they are external storages: Kelkaj dosierujoj ne sinkroniĝis, ĉar ili estas konservataj en ekstera konservejo: - + There are folders that were not synchronized because they are too big or external storages: Kelkaj dosierujoj ne sinkroniĝis, ĉar ili estas tro grandaj âù konservataj en ekstera konservejo: - + Confirm Account Removal Konfirmi forigadon de la 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>Ĉu vi vere volas forigi konekton al la konto <i>%1</i>?</p><p><b>Notu:</b> Tio <b>ne</b> forigos la dosierojn.</p> - + Remove connection Forigi konekton @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Elsalutita - + Disconnected Malkonektita - + Connected Konektita - + Service unavailable Servo nedisponebla - + Maintenance mode Reĝimo de prizorgado - + Network error Reta eraro - + Configuration error Agorda eraro - + Asking Credentials Akreditiloj petitaj - + Unknown account state Konto-stato nekonita @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Eraro dum aliro al la dosiero de agordoj - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Okazis eraro dum aliro al la agorda dosiero en %1. Bv. certigi, ke la dosiero estas alirebla de via uzanto. - + Quit %1 Fini %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Eraro dum konservado de pridatumoj en la datumbazo @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Bv. entajpi vian pasfrazon de tutvoja ĉifrado:<br><br>Uzanto: %2<br>Konto: %3<br> - + Enter E2E passphrase Entajpu E2E (tutvoja) pasfrazon @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ La servila respondo pri dosiera malkovro havas mankantajn datumojn. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> Eraro ricevita el la servilo: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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> Ne eblis analizi la JSON-datumojn ricevitajn el la servilo: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respondo el la servilo ne enhavis ĉiujn atenditajn kampojn - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sinkronigaj aktivaĵoj - + Could not read system exclude file Ne eblis legi la sisteman dosieron pri esceptoj - + A new folder larger than %1 MB has been added: %2. Nova dosierujo pli granda ol %1 MB estis aldonita: %2. - + A folder from an external storage has been added. Dosierujo el ekstera konservejo estis aldonita. - + Please go in the settings to select it if you wish to download it. Bv. iri al la agordoj por elekti, ĉu vi volas elŝuti ĝin. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. La dosierujo %1 estis kreita sed estis eksigita el sinkronigo antaŭe. Datumoj ene de ĝi ne estos sinkronigitaj. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. La dosiero %1 estis kreita sed estis eksigita el sinkronigo antaŭe. Ĝi ne estos sinkronigita. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1407,6 +1344,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1466,22 +1410,7 @@ Konservi la lokajn dosierojn kiel konfliktojn - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1489,24 +1418,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1542,7 +1479,7 @@ OCC::FolderMan - + Could not reset folder state Ne eblis restarigi la staton de la dosierujo @@ -1552,37 +1489,37 @@ Malnova protokoldosiero „%1“ estis trovita, se ĝi ne estas forigebla. Bv. certigi, ke neniu aplikaĵo estas nuntempe uzanta ĝin. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (savkopio) - + (backup %1) (savkopio %1) - + Undefined State. Nedifinita stato. - + Waiting to start syncing. Atendo de eksinkronigo. - + Preparing for sync. Pretigado de la sinkronigo. - + Sync is running. Sinkronigo ruliĝanta. @@ -1592,67 +1529,67 @@ Sinkronigo sukcesis, estas nesolvitaj konfliktoj. - + Sync finished with unresolved conflicts. - + Last Sync was successful. La lasta sinkronigo sukcesis. - + Setup Error. Eraro de instalaĵo. - + User Abort. Haltigita de la uzanto. - + Sync is paused. Sinkronigo estas paŭzigita. - + %1 (Sync is paused) %1 (Sinkronigo estas paŭzigita) - + No valid folder selected! Nevalida dosierujo elektita! - + The selected path does not exist! - + The selected path is not a folder! La elektita vojo ne estas dosierujo! - + You have no permission to write to the selected folder! Vi ne rajtas skribi en la elektitan dosierujon! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La loka dosierujo %1 jam enhavas dosierujon uzitan en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La loka dosierujo %1 jam troviĝas en dosierujo uzita en alia dosieruja sinkronigo. Bv. elekti alian dosierujon! - + There is already a sync from the server to this local folder. Please pick another local folder! Jam ekzistas sinkronigo el la servilo al tiu ĉi loka dosierujo. Bv. elekti alian lokan dosierujon! @@ -1864,12 +1801,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Aldoni dosierujan sinkronigon - + Add Sync Connection Aldoni sinkronigon @@ -1910,42 +1847,42 @@ - + Folder was successfully created on %1. Dosierujo sukcese kreita en %1. - + Authentication failed accessing %1 Aŭtentigo malsukcesis dum aliro al %1 - + Failed to create the folder on %1. Please check manually. Malsukcesis krei la dosierujon en %1. Bv. kontroli permane. - + Failed to list a folder. Error: %1 Ne eblis listigi dosierujon. Eraro: %1 - + Choose this to sync the entire account Elektu tion ĉi por sinkronigi la tutan konton - + This folder is already being synced. Tiu ĉi dosierujo jam estas sinkroniganta. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Vi jam estas sinkroniganta <i>%1</i>, kio estas patra dosierujo de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1953,24 +1890,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1991,27 +1928,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Neniu „E-Tag“ ricevita el la servilo, kontrolu la prokurilon kaj la kluzon - + We received a different E-Tag for resuming. Retrying next time. Ni ricevis malsaman „E-Tag“ por rekomenci. Reprovo venontfoje. - + We received an unexpected download Content-Length. - + Server returned wrong content-range La servilo sendis neĝustan enhavintervalon („content-range“) - + Connection Timeout Konekto eltempiĝis @@ -2131,54 +2068,54 @@ - + Server notifications that require attention. Servilaj sciigoj, kiu bezonas atenton. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2186,22 +2123,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Eraro de kunhavigo - + Could not retrieve or create the public link share. Error: %1 @@ -2523,7 +2460,7 @@ OCC::Logger - + Error Eraro @@ -2533,7 +2470,7 @@ <nobr>Dosiero „%1“<br/>ne eblis malfermiĝi.<br/><br/>La eligo de la protokolo <b>ne</b> povas esti konservita!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2541,33 +2478,33 @@ OCC::NSISUpdater - + New Version Available Nova versio disponeblas - + <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>Nova versio de la kliento %1 disponeblas.</p><p><b>%2</b> elŝuteblas. La instalita versio estas %3.</p> - - + + Skip this version Preterpasi tiun version - + Skip this time Preterpasi momente - + Get update Ĝisdatigi - + Update Failed @@ -2582,17 +2519,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2703,7 +2640,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Eraro ricevita el la servilo: <em>%1</em> @@ -2713,32 +2650,32 @@ Eraro okazis dum aliro al la ĵetona generilo: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Ne eblis analizi la JSON-datumojn ricevitajn el la servilo: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respondo el la servilo ne enhavis ĉiujn atenditajn kampojn - + <h1>Login Error</h1><p>%1</p> <h1>Ensaluta eraro</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>Neĝusta uzanto</h1><p>Vi ensalutis kiel uzanto <em>%1</em>, sed vi devas ensaluti kiel uzanto <em>%2</em>.<br>Bv. elsaluti el %3 en alia langeto, poste <a href='%4'>alklaku ĉi tie</a> kaj ensaluti kiel uzanto %2</p> @@ -2807,12 +2744,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Ne eblis kontroli, ĉu estas novaj ĝisdatigoj. @@ -2822,27 +2759,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Stato pri ĝisdatigoj estas nekonata: ne eblis kontroli, ĉu estas novaj ĝisdatigoj. - + No updates available. Your installation is at the latest version. Neniu ĝisdatigo disponeblas. Via instalaĵo ĝisdatas. - + Update Check Kontrolo pri ĝisdatigoj @@ -2870,14 +2807,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2902,49 +2839,49 @@ Libera spaco: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Loka sinkroniga dosierujo - - + + (%1) (%1) - + There isn't enough free space in the local folder! Ne estas sufiĉe da libera spaco en la loka dosierujo! @@ -3014,14 +2951,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3086,7 +3015,7 @@ &Sekva > - + Server address does not seem to be valid @@ -3096,7 +3025,7 @@ Nevalida retadreso - + Could not load certificate. Maybe wrong password? Ne eblis ŝargi atestilon. Ĉu neĝusta pasvorto? @@ -3194,54 +3123,54 @@ kreado de dosierujo ĉe Nextcloud: %1 - + Remote folder %1 created successfully. Fora dosierujo %1 sukcese kreita - + The remote folder %1 already exists. Connecting it for syncing. La fora dosierujo %1 jam ekzistas. Konektado. + - The folder creation resulted in HTTP error code %1 Dosieruja kreado ricevis HTTP-eraran kodon %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Kreo de fora dosierujo malsukcesis, ĉar la akreditiloj ne ĝustas!<br/>Bv. antaŭeniri kaj kontroli viajn akreditilojn.</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">Kreado de fora dosierujo malsukcesis, eble ĉar la akreditiloj ne ĝustas.</font><br/>Bv. antaŭeniri kaj kontroli viajn akreditilojn.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Kreado de fora dosierujo %1 malsukcesis kun eraro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Sinkroniga konekto el %1 al fora dosierujo %2 agordiĝis. - + Successfully connected to %1! Sukcese konektita al %1! - + Connection to %1 could not be established. Please check again. Konekto al %1 ne eblis. Bv. rekontroli. - + Folder rename failed Dosieruja alinomado malsukcesis. @@ -3251,12 +3180,12 @@ Ne eblas forigi kaj savkopii la dosierujon, ĉar tiu dosierujo aŭ iu dosiero ene de ĝi estas malfermita en alia programo. Bv. malfermi la dosierujon aŭ dosieron kaj reprovi, aŭ nuligu la agordojn. - + Cannot 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>Loka sinkroniga dosierujo %1 sukcese kreita!</b></font> @@ -3264,7 +3193,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3274,17 +3203,17 @@ Asistilo pri konekto %1 - + Skip folders configuration Preterpasi agordon de dosierujoj - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3295,12 +3224,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3308,7 +3237,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Nevalida JSON-respondo el la enketila retadreso @@ -3326,17 +3255,17 @@ - + 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. @@ -3351,57 +3280,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3411,72 +3340,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3486,7 +3405,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3499,17 +3418,12 @@ Eraro dum skribo de pridatumoj en la datumbazo - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3522,44 +3436,44 @@ Dosiero %1 ne elŝuteblis, ĉar ĉifra informo mankas. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Dosiero ŝanĝiĝis ekde sia malkovro - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Dosiero %1 ne elŝuteblis, ĉar estas konflikto kun loka dosiernomo! - + The download would reduce free local disk space below the limit Tiu elŝuto malpligrandigus la liberan lokan diskospacon. - + Free space on disk is less than %1 Libera diskospaco estas malpli ol %1 - + File was deleted from server Dosiero estis forigita el la servilo - + The file could not be downloaded completely. La dosiero ne estis elŝutita plene. @@ -3569,12 +3483,12 @@ La elŝutita dosiero malplenas, kvankam la servilo anoncis, ke ĝi estos %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Dosiero %1 ne eblis esti konservita pro konflikto kun loka dosiernomo! @@ -3584,18 +3498,12 @@ Eraro dum konservado de pridatumoj en la datumbazo - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3603,12 +3511,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; malsukcesis la restaŭro: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Dosiero aŭ dosierujo estis forigita el nurlega kunhavo, sed restaŭrado malsukcesis: %1 @@ -3682,12 +3590,12 @@ Dosiero %1 ne eblis esti alinomita al %2 pro konflikto kun loka dosiernomo - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3698,12 +3606,12 @@ Eraro dum skribo de pridatumoj en la datumbazo - + Failed to rename file - + Error setting pin state @@ -3737,12 +3645,12 @@ Eraro dum skribo de pridatumoj en la datumbazo - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3760,22 +3668,22 @@ Neĝusta HTTP-kodo ricevita de servilo. Atendita: 201, ricevita: „%1 %2“. - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Eraro dum konservado de pridatumoj en la datumbazo @@ -3783,46 +3691,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Dosiero %1 ne elŝuteblis, ĉar alia samnoma dosiero, kiu malsamas nur usklece, ekzistas. - - + + Upload of %1 exceeds the quota for the folder Alŝuto de %1 transpasas la dosierujan kvoton - + File Removed (start upload) %1 Forigita dosiero (ekalŝuti) %1 - + Local file changed during syncing. It will be resumed. Loka dosiero ŝanĝiĝis dum sinkronigo. Ĝi rekomenciĝos. - + Local file changed during sync. Loka dosiero ŝanĝiĝis dum sinkronigo. - + Failed to unlock encrypted folder. @@ -3832,12 +3732,12 @@ Eraro dum skribo de pridatumoj en la datumbazo - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3845,32 +3745,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Loka dosiero estis forigita dum sinkronigo. - + Local file changed during sync. Loka dosiero ŝanĝiĝis dum sinkronigo. - + Poll URL missing - + Unexpected return code from server (%1) Neatendita elirkodo el servilo (%1) - + Missing File ID from server Mankanta identigilo de dosiero el la servilo - + Missing ETag from server Mankanta ETag el la servilo @@ -3878,22 +3778,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Mankanta enketilo-retadreso - + The local file was removed during sync. Loka dosiero estis forigita dum sinkronigo. - + Local file changed during sync. Loka dosiero ŝanĝiĝis dum sinkronigo. - + The server did not acknowledge the last chunk. (No e-tag was present) La servilo ne konfirmis la lastan pecon. (Estis neniu ETag.) @@ -3971,7 +3871,7 @@ OCC::ServerNotificationHandler - + Dismiss Ignori @@ -4141,17 +4041,17 @@ Protekti per pasvorto - + Allow editing Permesi modifon - + View only - + Allow upload and editing Permesi alŝuton kaj redakton @@ -4161,7 +4061,7 @@ Limdato - + File drop (upload only) Demeti dosieron (nur alŝuto) @@ -4171,32 +4071,32 @@ Malkunhavigi - + Link name - + Note to recipient Noto por la ricevonto - + Password protect Protekti per pasvorto - + Set expiration date Uzi limdaton - + Delete link - + Add another link Aldoni plian ligilon @@ -4206,27 +4106,27 @@ Forigi kunhavo-ligilon - + Confirm Link Share Deletion Konfirmi forigon de kunhava ligilo - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ĉu vi ja volas forigi la kunhavigon per publika ligilo <i>%1</i>?</p><p>Notu: tio ne povas esti malfarita.</p> - + Delete Forigi - + Cancel Nuligi - + Public link Publika ligilo @@ -4239,12 +4139,12 @@ - + Search globally - + Copy link Kopii ligilon @@ -4254,22 +4154,22 @@ Neniu rezulto por „%1“ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Mi kunhavigis ion kun vi @@ -4307,42 +4207,42 @@ - + Can reshare Eblas rekunhavigi - + Note to recipient - + Set expiration date - + Unshare Malkunhavigi - + Can create Povas krei - + Can change Eblas ŝanĝi - + Can delete Povas forigi - + Password protect @@ -4359,23 +4259,23 @@ OCC::SocketApi - + Context menu share Menuo pri kunhavigo - + Select new location … - + I shared something with you Mi kunhavigis ion kun vi - - + + Share options Opcioj pri kunhavigo @@ -4391,73 +4291,73 @@ - + Copy private link to clipboard Kopii privatan ligilon al tondujo - + Send private link by email … - + Resharing this file is not allowed Re-kunhavigi ne estas permesata - + Resharing this folder is not allowed - - + + Copy public link Kopii publikan ligilon - + Copy internal link Kopii internan ligilon - + Edit - + Open in browser Malfermi per retumilo - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Forigi @@ -4602,12 +4502,12 @@ Fidi ĉi tiun atestilon ĉiuokaze - + Untrusted Certificate Ne fidinda atestilo - + Cannot connect securely to <i>%1</i>: Ne eblas konekte sekura al <i>%1</i>: @@ -4617,62 +4517,62 @@ - + with Certificate %1 kun atestilo %1 - - - + + + &lt;not specified&gt; &lt;ne specifita&gt; - - + + Organization: %1 Organizaĵo: - - + + Unit: %1 Unuo: %1 - - + + Country: %1 Lando: %1 - + Fingerprint (SHA1): <tt>%1</tt> SHA1-fingrospuro: <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> SHA256-fingrospuro: <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> SHA512-fingrospuro: <tt>%1</tt> - + Effective Date: %1 Ekvalida dato: %1 - + Expiration Date: %1 Limdato: %1 - + Issuer: %1 Eldonanto: %1 @@ -4765,33 +4665,33 @@ Interna eraro n-ro %1 okazis. - + %1 (skipped due to earlier error, trying again in %2) %1 (preterpasita pro antaŭa eraro, reprovo je %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Nesolvita konflikto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur disponeblas %1, bezono de almenaŭ %2 por eki - + Aborted @@ -4868,16 +4768,16 @@ Dosieroj finantaj per punkto ne eblas en tiu ĉi dosiersistemo. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Ne eblas malfermi aŭ krei lokan sinkronigan datumbazon. Certigu, ke vi rajtas aliri al la sinkroniga dosierujo. + + File names containing the character '%1' are not supported on this file system. Dosieroj enhavantaj la signon „%1“ ne eblas en tiu ĉi dosiersistemo. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Ne eblas malfermi aŭ krei lokan sinkronigan datumbazon. Certigu, ke vi rajtas aliri al la sinkroniga dosierujo. - - The file name is a reserved name on this file system. Tiu ĉi dosiernomo ne estas permesata en tiu ĉi dosiersistemo. @@ -4898,7 +4798,7 @@ Dosiero aŭ dosierujo estas ignorita, ĉar ĝi estas kaŝita. - + Using virtual files with suffix, but suffix is not set @@ -4913,7 +4813,7 @@ Tiu ĉi dosiernomo ne estas kodebla en tiu ĉi dosiersistemo. - + Unable to read the blacklist from the local database Ne eblas legi la nigran liston el la loka datumbazo @@ -4928,17 +4828,17 @@ Statinformo malsukcesis. + + Unable to read from the sync journal. + Ne eblas legi el la sinkroniga protokolo. + + Filename encoding is not valid Kodigi de dosiernomo ne validas - - Unable to read from the sync journal. - Ne eblas legi el la sinkroniga protokolo. - - - + Cannot open the sync journal Ne eblas malfermi la sinkronigan protokolon @@ -4948,22 +4848,22 @@ Nevalidaj signoj, bv. alinomi „%1“ + + Synchronization will resume shortly. + + + File name contains at least one invalid character La dosiernomo enhavas almenaŭ unu nevalidan signon. - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Diskospaco ne sufiĉas: elŝutoj, kiuj reduktos liberan spacon sub %1, ne okazis. - + There is insufficient space available on the server for some uploads. La servilo ne plu havas sufiĉan spacon por iuj alŝutoj. @@ -5032,49 +4932,49 @@ OCC::Systray - + Add account Aldoni konton - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Agordoj - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5082,24 +4982,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versio %1. Por pli da informoj, alklaku <a href='%2'>ĉi tie</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Tiu eldono estis liverita de %1</p> @@ -5107,22 +5007,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5130,32 +5030,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5163,22 +5063,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5283,30 +5183,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5828,52 +5710,52 @@ - + %n day ago antaŭ %n tagoantaŭ %n tagoj - + %n days ago antaŭ %n tagoantaŭ %n tagoj - + in the future en la estonteco - + %n hour ago antaŭ %n horoantaŭ %n horoj - + %n hours ago antaŭ %n horoantaŭ %n horoj - + now nun - + Less than a minute ago Malpli ol antaŭ unu minuto - + %n minute ago antaŭ %n minutoantaŭ %n minutoj - + %n minutes ago antaŭ %n minutoantaŭ %n minutoj - + Some time ago Antaŭ nelonge @@ -5907,7 +5789,7 @@ SyncJournalDb - + Failed to connect database. @@ -5915,7 +5797,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5952,32 +5834,32 @@ - + Switch to account - - Current user status is online - + + Account connected + Konto konektita - - Current user status is do not disturb + + Account not connected - Account connected - Konto konektita + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5987,24 +5869,24 @@ - + Set status - - + + Log out Elsaluti - - + + Log in Ensaluti - + Remove account Forigi konton @@ -6065,57 +5947,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n jaro%n jaroj - + %n month(s) %n monato%n monatoj - + %n day(s) %n tago%n tagoj - + %n hour(s) %n horo%n horoj - + %n minute(s) %n minuto%n minutoj - + %n second(s) %n sekundo%n sekundoj - + %1 %2 %1 %2 @@ -6123,7 +6005,7 @@ ValidateChecksumHeader - + The checksum header is malformed. La kontrosumo-kapo estas misformita. @@ -6156,64 +6038,64 @@ Window - + Nextcloud desktop main dialog - + Current account Nuna konto - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Aldoni konton - + Add new account - + Settings Agordoj - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6223,32 +6105,32 @@ - + Account switcher and settings menu - + Connected Konektita - + Disconnected Malkonektita - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Pli da aplikaĵoj @@ -6258,7 +6140,7 @@ - + Open %1 in browser Malfermi %1 per la retumilo @@ -6278,7 +6160,7 @@ - + Unified search results list @@ -6289,7 +6171,7 @@ - + %1 - File activity @@ -6297,7 +6179,7 @@ main.cpp - + System Tray not available Taskopleto ne disponeblas @@ -6307,7 +6189,7 @@ %1 bezonas funkciantan taskopleton. Si vi uzas XFCE-on, bv. sekvi la <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">instrukcion</a>. Alimaniere, bv. instali alian taskopleton kiel „trayer“, kaj reprovi. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6315,7 +6197,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Konstruita el Git-a revizio <a href="%1">%2</a> je %3, %4, uzante Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_AR.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_AR.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_AR.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_AR.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar conexión de sincronización de carpeta - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creacion de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar eliminación de conexión de sincronización de carpeta - + <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> - + Remove Folder Sync Connection Eliminar Conexión de Sincronización de Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + 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 (%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. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is 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. 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 … - + No connection to %1 at %2. Sin conexión a %1 desde %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. - + 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 @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Desautentificado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Pidiendo Credenciales - + Unknown account state Estado de la cuenta desconocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error escribiendo metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,39 +1297,39 @@ 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1401,6 +1338,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1453,22 +1397,7 @@ Mantener Archivos Locales como Conflicto - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1476,24 +1405,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1529,7 +1466,7 @@ OCC::FolderMan - + Could not reset folder state No se pudo @@ -1539,37 +1476,37 @@ Una antigua sincronización con journaling '%1' fue encontrada, pero no se pudo eliminar. Por favor, asegurate que ninguna aplicación la está utilizando. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (Copia de seguridad) - + (backup %1) (Copia de seguridad %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Esperando para comenzar sincronización. - + Preparing for sync. Preparando la sincronización. - + Sync is running. Sincronización en funcionamiento. @@ -1579,67 +1516,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última sincronización fue exitosa. - + 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! Carpeta válida no seleccionada! - + The selected path does not exist! - + 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 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1851,12 +1788,12 @@ OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1897,42 +1834,42 @@ - + Folder was successfully created on %1. El directorio fue creado con éxito en %1. - + Authentication failed accessing %1 Autenticación fallida accediendo a %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 Fallo al listar carpetas. 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1940,24 +1877,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1978,27 +1915,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout @@ -2118,54 +2055,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2173,22 +2110,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2504,7 +2441,7 @@ OCC::Logger - + Error Error @@ -2514,7 +2451,7 @@ <nobr>El archivo '%1'<br/>no puede ser abierto para escritura.<br/><br/>¡El archivo de log <b>no</b> puede ser guardado!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2522,33 +2459,33 @@ 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 - + Update Failed @@ -2563,17 +2500,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2684,7 +2621,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> @@ -2694,32 +2631,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2788,12 +2725,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. @@ -2803,27 +2740,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 @@ -2851,14 +2788,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2883,49 +2820,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Directorio local de sincronización - - + + (%1) - + There isn't enough free space in the local folder! @@ -2995,14 +2932,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3067,7 +2996,7 @@ - + Server address does not seem to be valid @@ -3077,7 +3006,7 @@ URL invalida - + Could not load certificate. Maybe wrong password? @@ -3175,54 +3104,54 @@ - + 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 @@ -3232,12 +3161,12 @@ - + Cannot 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> @@ -3245,7 +3174,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3255,17 +3184,17 @@ %1 Asistente de Conexión - + Skip folders configuration - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3276,12 +3205,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3289,7 +3218,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3307,17 +3236,17 @@ - + 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. @@ -3332,57 +3261,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3392,72 +3321,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3467,7 +3386,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3480,17 +3399,12 @@ Error escribiendo metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3503,44 +3417,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3550,12 +3464,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3565,18 +3479,12 @@ Error escribiendo metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3584,12 +3492,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3663,12 +3571,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3679,12 +3587,12 @@ Error escribiendo metadatos a la base de datos - + Failed to rename file - + Error setting pin state @@ -3718,12 +3626,12 @@ Error escribiendo metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3741,22 +3649,22 @@ - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error escribiendo metadatos a la base de datos @@ -3764,46 +3672,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3813,12 +3713,12 @@ Error escribiendo metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3826,32 +3726,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. - + Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3859,22 +3759,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3952,7 +3852,7 @@ OCC::ServerNotificationHandler - + Dismiss @@ -4122,17 +4022,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir cargar y editar @@ -4142,7 +4042,7 @@ - + File drop (upload only) Soltar archivo (solo para carga) @@ -4152,32 +4052,32 @@ - + Link name - + Note to recipient Nota al destinatario - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de caducidad - + Delete link - + Add another link Agregar otro enlace @@ -4187,27 +4087,27 @@ - + Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Borrar - + Cancel Cancelar - + Public link @@ -4220,12 +4120,12 @@ - + Search globally - + Copy link @@ -4235,22 +4135,22 @@ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you @@ -4288,42 +4188,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4340,23 +4240,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you - - + + Share options @@ -4372,73 +4272,73 @@ - + Copy private link to clipboard - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link Copiar link publico - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Eliminar @@ -4582,12 +4482,12 @@ Confiar en este certificado de todas maneras - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: @@ -4597,62 +4497,62 @@ - + 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 (SHA1): <tt>%1</tt> Huella (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Desde: %1 - + Expiration Date: %1 - + Issuer: %1 Generado por: %1 @@ -4745,33 +4645,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4848,13 +4748,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4878,7 +4778,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4893,7 +4793,7 @@ - + Unable to read the blacklist from the local database @@ -4908,17 +4808,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal @@ -4928,22 +4828,22 @@ - - File name contains at least one invalid character + + Synchronization will resume shortly. - - Synchronization will resume shortly. + + File name contains at least one invalid character - + 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. @@ -5012,49 +4912,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Ajustes - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5062,24 +4962,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5087,22 +4987,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5110,32 +5010,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5143,22 +5043,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5263,30 +5163,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5808,52 +5690,52 @@ - + %n day ago Hace %n díaHace %n días - + %n days ago Hace %n díaHace %n días - + in the future - + %n hour ago - + %n hours ago - + now - + Less than a minute ago - + %n minute ago - + %n minutes ago - + Some time ago @@ -5887,7 +5769,7 @@ SyncJournalDb - + Failed to connect database. @@ -5895,7 +5777,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5932,32 +5814,32 @@ - + Switch to account - - Current user status is online - + + Account connected + Cuenta conectada - - Current user status is do not disturb + + Account not connected - Account connected - Cuenta conectada + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5967,24 +5849,24 @@ - + Set status - - + + Log out Cerrar la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6045,57 +5927,57 @@ Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) %n día%n días - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -6103,7 +5985,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6136,64 +6018,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Ajustes - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6203,32 +6085,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6238,7 +6120,7 @@ - + Open %1 in browser Abrir %1 en el navegador... @@ -6258,7 +6140,7 @@ - + Unified search results list @@ -6269,7 +6151,7 @@ - + %1 - File activity @@ -6277,7 +6159,7 @@ main.cpp - + System Tray not available La bandeja del sistema no está disponible @@ -6287,7 +6169,7 @@ % 1 requiere una bandeja del sistema funcionando. Si estás usando XFCE, por favor leé <a href="http://docs.xfce.org/xfce/xfce4-panel/systray"> estas instrucciones</ a>. De lo contrario, instalá una aplicación de la bandeja del sistema, como 'trayer' e intentalo de nuevo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6295,7 +6177,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CL.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CL.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CL.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CL.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CO.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CO.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CO.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CO.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 MB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CR.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CR.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_CR.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_CR.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_DO.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_DO.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_DO.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_DO.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_EC.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_EC.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_EC.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_EC.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link Agregar otro enlace @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_GT.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_GT.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_GT.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_GT.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_HN.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_HN.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_HN.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_HN.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_MX.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_MX.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_MX.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_MX.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Soltar archivo (solo carga) @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establece la fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link Copiar enlace público - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_SV.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_SV.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es_SV.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es_SV.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Se agotó el tiempo de la conexión - + Unknown error: network reply was deleted Error desconocido: la respuesta de la red fue borrada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Eliminar la conexión de sincronización de carpetas - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Falló la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar la Eliminación de la Conexión de Sincronización de Carpeta - + <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 dejar de sincronizar la carpeta <i>%1</i>?<p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove Folder Sync Connection Eliminar la Conexión de Sincronización de la Carpeta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La operación de sincronización está en curso. <br/>¿Deseas terminarla? - + %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, incluidas carpetas montadas en red o carpetas compartidas, pueden tener diferentes límites - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible del espacio usado. - + %1 in use %1 en uso @@ -598,87 +598,87 @@ Iniciar sesión - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. El servidor %1 se encuntra temporalmente no disponible - + Server %1 is currently in maintenance mode. Actualmente el servidor %1 se encuentra en modo mantenimiento. - + Signed out from %1. Cerraste sesión en %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'>Haz click aquí</a> para re-abrir el navegador. - + Connecting to %1 … - + No connection to %1 at %2. No hay conexión a %1 en %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. No hay %1 conexión configurada. - + 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 son de 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 son de almacenamiento externo: - + Confirm Account Removal Confirma la Remosion 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> <p>¿Realmente quieres eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> borrará ningún archivo.</p> - + Remove connection Eliminar conexión @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sesión cerrada - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo Mantenimiento - + Network error Error de red - + Configuration error Error de configuración - + Asking Credentials Solicitando Credenciales - + Unknown account state Estado de la cuenta no conocido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Error al acceder el archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir metadatos a la base de datos @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sincronizar Actividad - + Could not read system exclude file No fue posible leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una nueva carpeta de más de %1 MB ha sido agregada: %2 - + A folder from an external storage has been added. Una carpeta de un almacenamiento externo ha sido agregada. - + Please go in the settings to select it if you wish to download it. Por favor ve a las configuraciones para seleccionarlo si deseas descargarlo. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ Mantener los Archivos Locales como Conflictos - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state No fue posible restablecer el estado de la carpeta @@ -1544,37 +1481,37 @@ Un diario antiguo de sincronización '%1' fue encontrado, pero no pudo ser eliminado. Por favor asegurate que ninguna aplicación lo esté usando actualmente. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (respaldo) - + (backup %1) (respaldo %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Agurardando para iniciar la sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. La Sincronización está en curso. @@ -1584,67 +1521,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. La última Sincronización fue exitosa. - + Setup Error. Error de Configuración. - + User Abort. Abortado por el Usuario. - + Sync is paused. La sincronización está pausada. - + %1 (Sync is paused) %1 (La sincronización está pausada) - + No valid folder selected! ¡No se ha seleccionado una carpeta válida! - + The selected path does not exist! - + The selected path is not a folder! ¡La ruta seleccionada no es de una carpeta! - + You have no permission to write to the selected folder! ¡No tienes permisos para escribir en la carpeta seleccionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La carpeta local %1 contiene una carpeta ya usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La carpeta local %1 ya está contenida en una carpeta usada en una conexión de sincronización de carpeta. ¡Por favor elige otra! - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una sincronización desde el servidor a esta carpeta local. ¡Por favor elige otra carpeta local! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agregar Conexión de Carpeta de Sincronización - + Add Sync Connection Agregar Conexión de Sincronización @@ -1902,42 +1839,42 @@ - + Folder was successfully created on %1. La carpeta se creó exitosamente en %1. - + Authentication failed accessing %1 La autenticación fallo al acceder %1 - + Failed to create the folder on %1. Please check manually. Se presentó una falla al crear la carpeta en %1. Por favor verifica manualmente. - + Failed to list a folder. Error: %1 Se presentó una falla al enlistar la carpeta. Error: %1 - + Choose this to sync the entire account Selecciona esta opción para sincronizar la cuenta completa - + This folder is already being synced. Esta carpeta ya está siendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una carpeta padre de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se recibió un E-Tag del servidor, verifica el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recibimos una E-Tag diferente para reanudar. Reintentando la proxima vez. - + We received an unexpected download Content-Length. - + Server returned wrong content-range El servidor regreso un rango de contenido equivocado - + Connection Timeout El tiempo de la conexión expiró @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Error @@ -2519,7 +2456,7 @@ <nobr>El archivo '%1'<br/> no se puede abrir para escritura. <br/><br/> ¡La salida de la bitácora <b>no</b>puede ser guardada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Cliente %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - - + + Skip this version Omitir esta versión - + Skip this time Omitir esta vez - + Get update Obtener la actualización - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error regresado del servidor: <em>%1</em> @@ -2699,32 +2636,32 @@ Se presentó un error al acceder el endpoint de la 'ficha' : <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> No fue posible interpretar el JSON que rereso del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contenía todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Inicio de Sesión</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 equivocado</h1><p>Estas firmado con el usuario <em>%3</em>, pero debes estar firmado con el usuario <em>%2</em>.<br>Por favor sal de la sesión %3 en otra pestaña y luego<a href='%4'>haz click aqui</a> e inicia sesión como el usuario %2</p> @@ -2794,12 +2731,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. No fue posible verificar nuevas actualizaciones. @@ -2809,27 +2746,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Estado de la actualización desconocido. No se verificó si había nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tu instalación tiene la versión más reciente. - + Update Check Verificar Actualizaciones @@ -2857,14 +2794,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2889,49 +2826,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Carpeta de Sincronización Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3001,14 +2938,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Siguiente> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3181,54 +3110,54 @@ - + Remote folder %1 created successfully. La carpeta remota %1 fue creada exitosamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectandola para sincronizar. + - The folder creation resulted in HTTP error code %1 La creación de la carpeta dio como resultado 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 falló porque las credenciales proporcionadas están mal!<br/> Por favor regresa y verifica 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">La creación de la carpeta remota falló probablemente porque las credenciales proporcionadas son incorrectas. </font><br/> Por favor regresa y verifica tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creación de la carpeta remota %1 falló con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una conexión de sincronización de %1 al directorio remoto %2 fue establecida. - + Successfully connected to %1! ¡Conectado exitosamente a %1! - + Connection to %1 could not be established. Please check again. No se pudo establecer la conexión a %1. Por favor verifica de nuevo. - + Folder rename failed Falla al renombrar la carpeta @@ -3238,12 +3167,12 @@ No se puede eliminar la carpeta de respaldos porque la carpeta o un archivo en ella está en uso por otro programa. Por favor cierra la carpeta o archivo y haz click en reintentar o cancela la configuración. - + Cannot 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>¡La carpeta de sincronización local %1 fue creada exitosamente!</b></font> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ %1 Asistente de Conexión - + Skip folders configuration Omitir las carpetas de configuración - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL JSON de respuesta invalido de la URL de encuesta. @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Se presentó un error al escribir los metadatos a la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no puede ser descargado porque hay un conflicto con el nombre del archivo local! - + The download would reduce free local disk space below the limit La descarga reduciría el espacio local disponible por debajo del límite - + Free space on disk is less than %1 El espacio disponible en disco es menos del 1% - + File was deleted from server El archivo fue borrado del servidor - + The file could not be downloaded completely. El archivo no pudo ser descargado por completo. @@ -3556,12 +3470,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede ser guardado debido a un conflicto en su nombre con un archivo local! @@ -3571,18 +3485,12 @@ Error al escribir los metadatos a la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; La Restauración Falló: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o carpeta fue eliminado de un elemento compartido de solo lectura, pero la restauracion falló: %1 @@ -3669,12 +3577,12 @@ El archivo %1 no se pudo renombrar a %2 porque hay un conflicto con el nombre del archivo local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Error al escribir los metadados a la base de datos - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Error al escribir los metadatos a la base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Código equivocado de HTTP regresado por el servidor. Se esperaba 201, pero se recibió "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Error al escribir los metadatos a la base de datos @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no puede ser cargado porque existe otro archivo con el mismo nombre, con diferencias en su uso de mayúsculas / minúsculas - - + + Upload of %1 exceeds the quota for the folder La carga de %1 excede la cuota de la carpeta - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. El archivo local cambió durante la sincronización. Se resumirá. - + Local file changed during sync. El archivo local cambio durante la sincronización. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Error al escribir los metadatos a la base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización. - + Poll URL missing - + Unexpected return code from server (%1) Código de retorno del servidor inesperado (%1) - + Missing File ID from server El ID de archivo no está en el servidor - + Missing ETag from server ETag no está en el servidor @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Falta la URL de encuesta - + The local file was removed during sync. El archivo local se eliminó durante la sincronización. - + Local file changed during sync. El archivo local cambió durante la sincronización - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no confirmó el último pedazo. (No hay una e-tag presente) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4128,17 +4028,17 @@ - + Allow editing Permitir edición - + View only - + Allow upload and editing Permitir carga y edición @@ -4148,7 +4048,7 @@ - + File drop (upload only) Permitir carga @@ -4158,32 +4058,32 @@ - + Link name - + Note to recipient - + Password protect Proteger con contraseña - + Set expiration date Establecer fecha de expiración - + Delete link - + Add another link @@ -4193,27 +4093,27 @@ - + Confirm Link Share Deletion Confirmar el Borrado de la Liga del Elemento Compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente deseas borrar el vínculo público al elemento <i>%1</i>?</p> <p>Nota: Esta acción no se puede deshacer.</p> - + Delete Borrar - + Cancel Cancelar - + Public link Liga pública @@ -4226,12 +4126,12 @@ - + Search globally - + Copy link @@ -4241,22 +4141,22 @@ No se encontraron resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartí algo contigo @@ -4294,42 +4194,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Te compartí algo - - + + Share options @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Copiar la liga privada al portapapeles - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Borrar @@ -4590,12 +4490,12 @@ Confiar en este certificado de cualquier modo - + Untrusted Certificate Certificado No de Confianza - + Cannot connect securely to <i>%1</i>: No se puede conectar de forma segura a <i>%1</i>: @@ -4605,62 +4505,62 @@ - + 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 (SHA1): <tt>%1</tt> Huekka (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha Efectiva: %1 - + Expiration Date: %1 Fecha de Expiración: %1 - + Issuer: %1 Emitido por: %1 @@ -4753,33 +4653,33 @@ Se presentó el error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por un error previo, intentando de nuevo en %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflicto no resuelto. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo tiene %1 disponible, se necesita de al menos %2 para iniciar - + Aborted @@ -4856,16 +4756,16 @@ Los nombres de archivos que terminan en punto no están siportados en este sistema de archivos. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. + + File names containing the character '%1' are not supported on this file system. Los nombres de archivos que contengan el caracter '%1' no son soportados en este sistema de archivos. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - No fue posible abrir o crear la base de datos de sincronización local. Asegúrate de que tengas permisos de escritura en la carpeta de sincronización. - - The file name is a reserved name on this file system. El nombre del archivo está reservado en este sistema de archivos. @@ -4886,7 +4786,7 @@ El Archivo/Carpeta se ignoró porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ El nombre del archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No fue posible leer la lista negra de la base de datos local @@ -4916,17 +4816,17 @@ Stat falló. + + Unable to read from the sync journal. + No es posible leer desde el diario de sincronización. + + Filename encoding is not valid La codificación del nombre del archivo no es válida - - Unable to read from the sync journal. - No es posible leer desde el diario de sincronización. - - - + Cannot open the sync journal No se puede abrir el diario de sincronización @@ -4936,22 +4836,22 @@ Caracteres inválidos, por favor renombra "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character El nombre del archivo contiene al menos un caracter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Espacio en disco bajo: Las descargas que podrían reducir el espacio por debajo de %1 se omitieron. - + There is insufficient space available on the server for some uploads. No hay espacio disponible en el servidor para algunas cargas. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configuraciones - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago - + %n days ago - + in the future en el futuro - + %n hour ago - + %n hours ago - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago - + %n minutes ago - + Some time ago Hace algún tiempo @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Acciones de la cuenta @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Salir de la sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6053,57 +5935,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año(s)%n año(s) - + %n month(s) %n mes(es)%n mes(es) - + %n day(s) %n día(s)%n día(s) - + %n hour(s) %n hora(s)%n hora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n segundo(s)%n segundo(s) - + %1 %2 %1 %2 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cuenta actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Agregar cuenta - + Add new account - + Settings Configuraciones - + Exit Salir - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Más aplicaciones @@ -6246,7 +6128,7 @@ - + Open %1 in browser Abrir %1 en el navegador @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available La Bandeja del Sistema no está disponible. @@ -6295,7 +6177,7 @@ %1 requiere una bandeja de sistema funcionando. Si estás usando XFCE, por favor sigue <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. De lo contrario, por favor instala una aplicación de bandeja del sistema como 'trayer' y vuelve a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_es.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_es.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Abrir %1 localmente - + Open share dialog Abrir diálogo de compartir - + Share %1 Compartir %1 - - + + Show more actions Mostrar más acciones @@ -39,7 +39,7 @@ ActivityList - + Activity list Lista de actividad @@ -255,17 +255,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" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Regla mnemotécnica del cifrado de extremo a extremo - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para proteger tu identidad criptográfica, la ciframos con una regla mnemotécnica de 12 palabras del diccionario. Por favor, anótalas y mantenlas a salvo. Estas palabras serán necesarias para añadir otros dispositivos a su cuenta (como un teléfono móvil o un portátil). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -495,52 +495,52 @@ Eliminar la sincronización de carpetas conectadas - + Disable virtual file support … Desactivar soporte para archivos virtuales … - + Enable virtual file support %1 … Activar soporte para archivos virtuales %1 ... - + (experimental) (experimental) - + Folder creation failed Ha fallado la creación de la carpeta - + <p>Could not create local folder <i>%1</i>.</p> <p>No pudo crear la carpeta local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirme la sincronización para la eliminación de la carpeta conectada - + <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> - + Remove Folder Sync Connection Eliminar carpeta de sincronización conectada - + Disable virtual file support? ¿Desactivar soporte para archivos virtuales? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Además, esta acción interrumpirá cualquier sincronización en curso. - + Disable support Desactivar soporte - + 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 (%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. - + %1 in use %1 en uso @@ -603,87 +603,87 @@ Iniciar sesión - + %1 as %2 %1 como %2 - + The server version %1 is unsupported! Proceed at your own risk. ¡La versión %1 del servidor 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 clic aquí</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. - + Server configuration error: %1 at %2. Error de configuración del servidor: %1 en %2, - + No %1 connection configured. No hay ninguna conexión de %1 configurada. - + There are folders that were not synchronized because they are too big: Hay carpetas que no se han sincronizado porque son demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hay carpetas que no se han sincronizado porque están en el almacenamiento externo: - + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no se han sincronizado porque son demasiado grandes o están en el almacenamiento externo: - + 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 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Cerrar sesión - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + Maintenance mode Modo mantenimiento - + Network error Error en la red - + Configuration error Error en la configuración - + Asking Credentials Solicitando credenciales - + Unknown account state Estado de cuenta desconocido @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Los archivos de la lista de ignorados así como los enlace simbólicos no estarán sincronizados. - + For more activities please open the Activity app. Para más detalles, por favor, abre la app Actividades. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Continuar significará <b>eliminar estos ajustes</b>. - + Continuing will mean <b>ignoring these settings</b>. Continuar significará <b>ignorar estos ajustes</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Algunos ajustes fueron configurados en nuevas versiones de este cliente y usan características que no están disponibles en esta versión.<br><br>%1<br><br>Ya se ha hecho una copia de seguridad del archivo de configuración a <i>%2</i>. - + Quit Salir - + Continue Continuar - + Error accessing the configuration file Error al acceder al archivo de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Se ha producido un error al acceder al archivo de configuración en %1. Por favor asegúrese de que el archivo es accesible por su usuario. - + Quit %1 Salir %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - El archivo %1 no se puede subir porque ya existe otro con el mismo nombre, solo difiere en las mayúsculas/minúsculas - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Archivo eliminado (comenzar subida) %1 - - - - Local file changed during syncing. It will be resumed. - Un archivo local ha cambiado durante la sincronización. Será subido. - - - - - Local file changed during sync. - Un archivo local ha cambiado durante la sincronización. - - - - Error updating metadata: %1 - Error al actualizar los metadatos: %1 - - - - The file %1 is currently in use - El archivo %1 se encuentra en uso - - - - The local file was removed during sync. - El archivo local ha sido eliminado durante la sincronización. - - - - ; Restoration Failed: %1 - ; Fallo al restaurar: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Por favor, introduce la frase de seguridad del cifrado extremo a extremo: <br><br>Usuario: %2<br>Cuenta: %3<br> - + Enter E2E passphrase Introduce la frase de acceso E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ A la respuesta de descubrimiento de archivos del servidor le faltan datos. - - + + Server error: PROPFIND reply is not XML formatted! Error del servidor: ¡la respuesta de PROPFIND no tiene formato XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Error al abrir el directorio %1 - + Directory not accessible on client, permission denied Directorio no accesible en el cliente, permiso denegado - + Directory not found: %1 Directorio no encontrado: %1 - + Filename encoding is not valid La codificación del nombre del archivo no es válida - + Error while reading directory %1 Error al leer el directorio %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Error devuelto por el servidor: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Hubo un error accediendo al "token" endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> No se pudo 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. La URL de consulta no comienza con HTTPS a pesar de que la URL de inicio de sesión comenzó con HTTPS. El inicio de sesión no será posible porque esto podría ser un problema de seguridad. Por favor, póngase en contacto con su administrador. @@ -1368,41 +1305,41 @@ 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Se ha creado la carpeta %1 pero se excluyó de la sincronización con anterioridad. Los datos en su interior no se sincronizarán. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Se ha creado el archivo %1 pero se excluyó de la sincronización con anterioridad. No se sincronizará. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,16 @@ %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. + Todos los archivos en tu carpeta local de sincronización «%1» serán borrados. +Esta eliminación será sincronizada con tu servidor, haciendo que esos archivos no estén disponibles a no ser que sean restaurados. +¿Estás seguro de que deseas sincronizarte con el servidor? +Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincronizados con el servidor. + + All files in the sync folder '%1' 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. @@ -1474,28 +1421,7 @@ Mantener los archivos locales en caso de conflicto - - 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 restore 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. - Todos los archivos en la carpeta de sincronización «%1» han sido eliminados en el servidor. -Esta eliminación se sincronizará con tu carpeta local sincronizada, haciendo que esos archivos ya no estén disponibles a no ser que tengas derecho a restaurarlos. -Si decides restaurar los archivos, volverán a sincronizarse con el servidor si tienes derecho a hacer esto. -Si decides eliminar los archivos, ya no los tendrás disponibles, a no ser que seas 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. - Todos los archivos en tu carpeta local de sincronización «%1» serán borrados. -Esta eliminación será sincronizada con tu servidor, haciendo que esos archivos no estén disponibles a no ser que sean restaurados. -¿Estás seguro de que deseas sincronizarte con el servidor? -Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincronizados con el servidor. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1506,7 +1432,7 @@ Si decides eliminar los archivos, ya no los tendrás disponibles, a no ser que seas 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. @@ -1516,17 +1442,28 @@ Si esto ha sido un accidente, y decides mantener tus archivos, serán re-sincronizados desde el servidor. - + Remove All Files? ¿Eliminar todos los archivos? - + Remove all files Eliminar todos los archivos - + + 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 restore 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. + Todos los archivos en la carpeta de sincronización «%1» han sido eliminados en el servidor. +Esta eliminación se sincronizará con tu carpeta local sincronizada, haciendo que esos archivos ya no estén disponibles a no ser que tengas derecho a restaurarlos. +Si decides restaurar los archivos, volverán a sincronizarse con el servidor si tienes derecho a hacer esto. +Si decides eliminar los archivos, ya no los tendrás disponibles, a no ser que seas el propietario. + + + Keep files Mantener archivos @@ -1562,7 +1499,7 @@ OCC::FolderMan - + Could not reset folder state No se ha podido restablecer el estado de la carpeta @@ -1572,37 +1509,37 @@ 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. - + 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 registro de sincronización antiguo "%1", que no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación lo está utilizando en este momento. - + (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. @@ -1612,67 +1549,67 @@ La sincronización ha tenido éxito, pero hay conflictos sin resolver. - + Sync finished with unresolved conflicts. La sincronización finalizó pero con conflictos sin resolver. - + Last Sync was successful. La última sincronización se ha realizado con éxito. - + 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 does not exist! ¡La ruta seleccionada no existe! - + The selected path is not a folder! ¡La ruta seleccionada no es una carpeta! - + You have no permission to write to the selected folder! ¡No tiene permiso para escribir en la carpeta seleccionada! - + 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. - + 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. @@ -1884,12 +1821,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Añadir conexión para el directorio de sincronización - + Add Sync Connection Añadir conexión de sincronización @@ -1930,42 +1867,42 @@ Introduce el nombre de la nueva carpeta que se creará debajo de "%1": - + Folder was successfully created on %1. La carpeta ha sido creada con éxito en %1. - + Authentication failed accessing %1 Fallo de 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 Fallo 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. Esta carpeta 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, que es una subcarpeta de <i>%2</i>. @@ -1973,24 +1910,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Usa archivos virtuales en vez de descargar el contenido inmediatamente %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - + Virtual files are not available for the selected folder Los archivos virtuales no están disponibles para la carpeta seleccionada @@ -2011,27 +1948,27 @@ 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. - + We received an unexpected download Content-Length. Hemos recibido una longitud inesperada de contenido de la descarga. - + Server returned wrong content-range El servidor ha devuelto un content-range erróneo - + Connection Timeout Tiempo de espera de conexión agotado @@ -2151,22 +2088,22 @@ Crear Archivo de Depuración … - + Server notifications that require attention. Notificaciones del servidor que requieren atención. - + You cannot disable autostart because system-wide autostart is enabled. No puedes desactivar el inicio automático porque el inicio automático de todo el sistema está activado. - + Change update channel? ¿Cambiar el canal de actualización? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2175,32 +2112,32 @@ Tenga en cuenta que esto sólo selecciona de qué grupo se tomarán las actualizaciones, y que no hay vuelta atrás: Por lo tanto volver del canal "beta" al canal "estable" normalmente no puede hacerse inmediatamente y significa esperar a una versión estable que sea más reciente que la versión beta instalada actualmente. - + Change update channel Cambiar canal de actualización - + Cancel Cancelar - + Create Debug Archive Crear archivo de depuración - + Zip Archives Archivos Zip - + Debug Archive Created Archivo de depuración creado - + Debug archive is created at %1 El archivo de depuración se ha creado en %1 @@ -2208,22 +2145,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Se requiere contraseña para compartir - + Please enter a password for your link share: Por favor, introduce una contraseña para tu enlace compartido: - + Sharing error Error al compartir - + Could not retrieve or create the public link share. Error: %1 @@ -2548,7 +2485,7 @@ OCC::Logger - + Error Error @@ -2558,7 +2495,7 @@ <nobr>El archivo '%1'<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no</b> se puede guardar!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>El archivo "%1"<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no se puede</b> guardar!</nobr> @@ -2566,33 +2503,33 @@ 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 Omitir esta versión - + Skip this time Omitir esta vez - + Get update Actualizar - + Update Failed La actualización falló @@ -2607,17 +2544,17 @@ <p>Una nueva versión del Cliente %1 está disponible pero el proceso de actualización ha fallado.</p><p><b>%2</b> se ha descargado. La versión instalada es %3. Si confirmas el reinicio y la actualización, es posible que su ordenador se reinicie para completar la instalación. - + Ask again later Preguntar de nuevo más tarde - + Restart and update Reiniciar y actualizar - + Update manually Actualizar manualmente @@ -2728,7 +2665,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Error devuelto desde el servidor: <em>%1</em> @@ -2738,32 +2675,32 @@ Se ha producido un error al acceder al token endpoint:: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Hubo un error accediendo al "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON vacío de la redirección de OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> No se puede 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 al iniciar sesión</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 iniciar sesión con el usuario: <em>%1</em>, pero debe iniciar sesión con el usuario: <em>%2</em>.<br>Por favor, cierre la sesión de %3 en otra pestaña, haga<a href='%4'>clic aquí</a> e inicie sesión como el usuario %2</p> @@ -2832,12 +2769,12 @@ No se puede descargar la actualización. Por favor, abra <a href='%1'>%1</a> para descargar la actualización manualmente. - + Could not download update. Please open %1 to download the update manually. No se pudo descargar la actualización. Por favor, abra %1 para descargarla manualmente. - + Could not check for new updates. No se puede comprobar si hay actualizaciones. @@ -2847,27 +2784,27 @@ La nueva %1 está disponible. Por favor, abra<a href='%2'>%2</a> para descargar la actualización. - + New %1 is available. Please open %2 to download the update. La nueva %1 está disponible. Por favor, abra %2 para descargar la actualización. - + 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 @@ -2895,14 +2832,14 @@ Conectando... - - + + Use &virtual files instead of downloading content immediately %1 Usa &archivos virtuales en vez de descargar el contenido inmediatamente %1 - - + + (experimental) (experimental) @@ -2927,49 +2864,49 @@ Espacio libre: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Los archivos virtuales no son compatibles con la carpeta raíz de la partición de Windows como carpeta local. Por favor, elija una subcarpeta válida bajo la letra de la unidad. - + %1 folder "%2" is synced to local folder "%3" %1 carpeta "%2" está sincronizada con la carpeta local "%3" - + Sync the folder "%1" Sincronizar la carpeta "%1" - + Warning: The local folder is not empty. Pick a resolution! Advertencia: La carpeta local no está vacía. ¡Elija una solución! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 espacio libre - + Virtual files are not available for the selected folder Los archivos virtuales no están disponiblespara la carpeta seleccionada - + Local Sync Folder Carpeta local de sincronización - - + + (%1) (%1) - + There isn't enough free space in the local folder! ¡No hay suficiente espacio libre en la carpeta local! @@ -3039,14 +2976,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3112,7 +3041,7 @@ &Siguiente > - + Server address does not seem to be valid La dirección del servidor no es válida @@ -3122,7 +3051,7 @@ Dirección URL incorrecta - + Could not load certificate. Maybe wrong password? No se ha podido guardar el certificado. ¿Quizás la contraseña sea incorrecta? @@ -3220,54 +3149,54 @@ Creando carpeta en Nextcloud: %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 @@ -3277,12 +3206,12 @@ 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. - + Cannot 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 pudo eliminar y restaurar la carpeta porque ella o un archivo dentro de ella está abierto por otro programa. Por favor, cierre la carpeta o el archivo y pulsa en reintentar o cancelar 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> @@ -3290,7 +3219,7 @@ OCC::OwncloudWizard - + Add %1 account Añadir %1 cuenta @@ -3300,17 +3229,17 @@ Asistente de conexión %1 - + Skip folders configuration Omitir la configuración de carpetas - + Enable experimental feature? ¿Activar característica experimental? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3327,12 +3256,12 @@ Esta es un modo nuevo y experimental. Si decides usarlo, por favor, informa de cualquier tipo de problema que pueda surgir. - + Enable experimental placeholder mode Activar modo experimental de marcador de posición - + Stay safe Mantente a salvo @@ -3340,7 +3269,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Respuesta JSON invalida de la poll URL @@ -3358,17 +3287,17 @@ El archivo contiene espacios al final y no puede ser renombrado porque ya existe localmente un archivo con el mismo nombre. - + Symbolic links are not supported in syncing. Los enlaces simbólicos no están soportados en la sincronización. - + 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. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. @@ -3383,57 +3312,57 @@ Los nombres de archivo que contienen el carácter "%1" no son compatibles con este sistema de archivos. - + File name contains at least one invalid character El nombre del archivo contiene al menos un carácter no válido - + 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. - + File/Folder is ignored because it's hidden. El archivo o carpeta es ignorado porque está oculto. - + Stat failed. Stat ha fallado. - + 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. - + The filename cannot be encoded on your file system. El nombre de archivo no se puede codificar en tu sistema de archivos. - + The filename is blacklisted on the server. El nombre del archivo está prohibido en el servidor. - + File has extension reserved for virtual files. El archivo tiene una extensión reservada para archivos virtuales. - + size tamaño @@ -3443,72 +3372,62 @@ permisos - - server reported no %1 - el servidor informó de no %1 - - - - permission - permisos - - - + file id identificador de archivo - - Server reported no %1 - El servidor informó de no %1 + + server reported no %1 + el servidor informó de no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Se ha producido un conflicto al subir algunos archivos a una carpeta. ¡Se eliminarán los conflictivos! - + Conflict when uploading a folder. It's going to get cleared! Se ha producido un conflicto al subir una carpeta. ¡Se eliminará! - + Conflict when uploading a file. It's going to get removed! Se ha producido un conflicto al subir un archivo. ¡Se eliminará! - + 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 subcarpetas a esa carpeta. - + 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 esa carpeta. - + 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. - + Moved to invalid target, restoring Movido a un lugar no válido, restaurando - + Not allowed to remove, restoring No está permitido borrar, restaurando - + Error while reading the database Error mientras se leía la base de datos @@ -3518,7 +3437,7 @@ El servidor contestó con un error al leer el directorio «%1» : %2 - + Server replied with an error while reading directory "%1" : %2 El servidor contestó con un error al leer el directorio "%1" : %2 @@ -3531,17 +3450,12 @@ Error al escribir los metadatos en la base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Error al actualizar los metadatos: %1 - + File is currently in use El archivo se encuentra en uso @@ -3554,44 +3468,44 @@ El archivo %1 no se ha podido descargar porque falta la información de cifrado. - + File %1 cannot be downloaded because encryption information is missing. El archivo %1 no puede ser descargado porque falta la información de cifrado, - - + + File has changed since discovery El archivo ha cambiado desde que fue descubierto - - + + File %1 cannot be downloaded because of a local file name clash! ¡El archivo %1 no se pudo descargar a causa de un conflicto con el nombre de un archivo local! - + 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 local disk space below the limit La descarga reducirá el espacio libre local por debajo del límite. - + 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. @@ -3601,12 +3515,12 @@ El archivo descargado está vacío a pesar de que el servidor comunicó que debería haber sido %1. - + The downloaded file is empty, but the server said it should have been %1. El archivo descargado está vacío, aunque el servidor dijo que debía ocupar %1. - + File %1 cannot be saved because of a local file name clash! ¡El archivo %1 no puede guardarse debido a un conflicto con el nombre de otro archivo local! @@ -3616,18 +3530,12 @@ Error al escribir los metadatos en la base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Error al actualizar los metadatos: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3635,12 +3543,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Fallo al restaurar: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio ha sido eliminado de una carpeta compartida de solo lectura pero la recuperación ha fallado: %1 @@ -3714,12 +3622,12 @@ El archivo %1 no se puede renombrar a %2 por causa de un conflicto con el nombre de un archivo local - + Error updating metadata: %1 Error al actualizar los metadatos: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3730,12 +3638,12 @@ Error al escribir los metadatos en la base de datos - + Failed to rename file Fallo al renombrar el archivo - + Error setting pin state Error al configurar el estado fijado @@ -3769,12 +3677,12 @@ Error al escribir los metadatos en la base de datos - + Error writing metadata to the database: %1 Error al escribir los metadatos en la base de datos: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3792,22 +3700,22 @@ El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". - + Error updating metadata: %1 Error al actualizar los metadatos: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso - + Error setting pin state Error al configurar el estado fijado - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -3815,46 +3723,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Fallo al subir el archivo cifrado. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 no se puede subir porque ya existe otro con el mismo nombre. Puede que sólo haya diferencias de mayúsculas/minúsculas - - + + Upload of %1 exceeds the quota for the folder La subida %1 excede el límite de tamaño de la carpeta - + File Removed (start upload) %1 Archivo eliminado (comenzar subida) %1 - + Local file changed during syncing. It will be resumed. Un archivo local ha cambiado durante la sincronización. Se reanudará. - + Local file changed during sync. Un archivo local ha sido modificado durante la sincronización. - + Failed to unlock encrypted folder. Fallo al desbloquear la carpeta cifrada. @@ -3864,12 +3764,12 @@ Error al escribir los metadatos en la base de datos - + Error updating metadata: %1 Error al actualizar los metadatos: %1 - + The file %1 is currently in use El archivo %1 se encuentra en uso @@ -3877,32 +3777,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing Falta la URL de la encuesta - + Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) - + Missing File ID from server ID perdido del archivo del servidor - + Missing ETag from server Perdido ETag del servidor @@ -3910,22 +3810,22 @@ OCC::PropagateUploadFileV1 - + 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 ha sido modificado durante la sincronización. - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no ha reconocido la última parte. (No había una e-tag presente) @@ -4003,7 +3903,7 @@ OCC::ServerNotificationHandler - + Dismiss Descartar @@ -4173,17 +4073,17 @@ Protección con contraseña - + Allow editing Permitir edición - + View only Solo lectura - + Allow upload and editing Permitir la subida y la edición @@ -4193,7 +4093,7 @@ Fecha de caducidad - + File drop (upload only) Entrega de archivos (solo subida) @@ -4203,32 +4103,32 @@ Dejar de compartir - + Link name Nombre del enlace - + Note to recipient Nota para el destinatario - + Password protect Protegido por contraseña - + Set expiration date Fijar fecha de caducidad - + Delete link Borrar enlace - + Add another link Añadir otro enlace @@ -4238,27 +4138,27 @@ Eliminar enlace compartido - + Confirm Link Share Deletion Confirmar eliminación de enlace de recurso compartido - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>¿Realmente desea borrar el enlace público compartido <i>%1</i>?</p><p>Nota: Esta acción no se puede deshacer</p> - + Delete Eliminar - + Cancel Cancelar - + Public link Enlace público @@ -4271,12 +4171,12 @@ Compartir con usuarios o grupos ... - + Search globally Buscar globalmente - + Copy link Copiar enlace @@ -4286,22 +4186,22 @@ No hay resultados para '%1' - + No results for "%1" Sin resultados para "%1" - + Password for share required Se requiere contraseña para compartir - + Please enter a password for your email share: Por favor, introduce una contraseña para tu enlace compartido por email: - + I shared something with you He compartido algo contigo @@ -4339,42 +4239,42 @@ Caduca: - + Can reshare Puede compartir - + Note to recipient Nota para el destinatario - + Set expiration date Fijar fecha de caducidad - + Unshare No compartir - + Can create Puede crear - + Can change Puede cambiar - + Can delete Puede eliminar - + Password protect Protección por contraseña @@ -4391,23 +4291,23 @@ OCC::SocketApi - + Context menu share Compartir en menú contextual - + Select new location … Seleccione nueva ubicación … - + I shared something with you He compartido algo contigo - - + + Share options Opciones de compartir @@ -4423,73 +4323,73 @@ Actividad - + Copy private link to clipboard Copiar enlace privado al portapapeles - + Send private link by email … Enviar enlace privado por correo electrónico ... - + Resharing this file is not allowed No está permitido compartir de nuevo - + Resharing this folder is not allowed No está permitido compartir de nuevo esta carpeta - - + + Copy public link Copiar enlace público - + Copy internal link Copiar enlace interno - + Edit Editar - + Open in browser Abrir en navegador - + Resolve conflict … Resolver conflicto … - + Move and rename … Mover y renombrar … - + Move, rename and upload … Mover, renombrar y subir … - + Delete local changes Borra cambios en local - + Move and upload … Mover y subir … - + Delete Eliminar @@ -4635,77 +4535,77 @@ 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>: Additional errors: - Errores adicionales: + - + 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 (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Huella digital (SHA-256):<tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Huella digital (SHA-512): <tt>%1</tt> - + Effective Date: %1 Fecha de vigencia: %1 - + Expiration Date: %1 Fecha de caducidad: %1 - + Issuer: %1 Emisor: %1 @@ -4798,33 +4698,33 @@ Se ha producido un error interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (no realizado por el error anterior, intente de nuevo %2) - + Could not update file: %1 No se pudo actualizar el archivo: %1 - + Could not update virtual file metadata: %1 No se ha podido actualizar los metadatos del archivo virtual: %1 - + Unresolved conflict. Conflicto sin resolver. - + 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 - + Aborted Cancelado @@ -4901,16 +4801,16 @@ Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. + + 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. + + 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. - - 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. - - The file name is a reserved name on this file system. El nombre del archivo es una palabra reservada del sistema de archivos. @@ -4931,7 +4831,7 @@ Se ignoran los Archivos/Carpetas ocultos. - + Using virtual files with suffix, but suffix is not set Usando archivos virtuales con sufijo, pero el sufijo no está establecido @@ -4946,7 +4846,7 @@ El nombre de archivo no se puede codificar en tu sistema de archivos. - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local @@ -4961,17 +4861,17 @@ Stat ha fallado. + + Unable to read from the sync journal. + No se ha podido leer desde el registro de sincronización + + Filename encoding is not valid Los caracteres del nombre de fichero no son válidos - - 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 @@ -4981,22 +4881,22 @@ Caracteres inválidos, por favor renombre "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - Synchronization will resume shortly. - La sincronización continuará en breves. - - - + 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. @@ -5039,7 +4939,7 @@ Some files could not be synced! - ¡Algunos archivos no pueden ser sincronizados! + @@ -5065,49 +4965,49 @@ OCC::Systray - + Add account Agregar cuenta - + Open main dialog Abrir diálogo principal + - Pause sync Pausar sincronización - - + + Resume sync Continuar sincronización - + Settings Ajustes - + Exit %1 Salir %1 - + Pause sync for all Pausar sincronización a todos - + Resume sync for all Continuar sincronización a todos - + %1: %2 %1: %2 @@ -5115,24 +5015,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 - Cliente de escritorio</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versión %1. Para obtener más información, haga clic <a href='%2'> aquí </a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Usando el plugin de archivos virtuales: %1</small></p> - + <p>This release was supplied by %1</p> <p>Esta versión ha sido suministrada por %1</p> @@ -5140,55 +5040,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Fallo al recuperar los proveedores. + - + Failed to fetch search providers for '%1'. Error: %2 - Fallo al recuperar los proveedores de búsqueda para '%1'. Error: %2 + - + Search has failed for '%2'. - La búsqueda ha fallado para '%2'. + - + Search has failed for '%1'. Error: %2 - La búsqueda ha fallado para '%1'. Error: %2 + OCC::User - + Retry all uploads Reintentar todas las subidas - + Synced %1 Sincronizado %1 - + You renamed %1 Has renombrado %1 - + You deleted %1 Has borrado %1 - + You created %1 Has creado %1 - + You changed %1 Has cambiado %1 @@ -5196,22 +5096,22 @@ OCC::UserModel - + Confirm Account Removal Confirma la 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 quieres eliminar la conexión con la cuenta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>no eliminará</b> ningún archivo.</p> - + Remove connection Eliminar vinculación - + Cancel Cancelar @@ -5316,30 +5216,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 La característica de archivos virtuales necesita un sistema de archivos NTFS, %1 está usando %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5861,52 +5743,52 @@ Nueva carpeta - + %n day ago hace %n díahace %n días - + %n days ago hace %n díahace %n días - + in the future en el futuro - + %n hour ago hace %n horahace %n horas - + %n hours ago hace %n horahace %n horas - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute ago hace %n minutohace %n minutos - + %n minutes ago hace %n minutohace %n minutos - + Some time ago Hace tiempo @@ -5940,7 +5822,7 @@ SyncJournalDb - + Failed to connect database. Fallo en la conexión a la base de datos. @@ -5948,9 +5830,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Buscando archivos, mensajes, eventos … + @@ -5958,7 +5840,7 @@ Load more results - Cargar más resultados + @@ -5966,7 +5848,7 @@ Search result skeleton. - Árbol de resultados de la búsqueda + @@ -5974,7 +5856,7 @@ Load more results - Cargar más resultados + @@ -5985,21 +5867,11 @@ Entrada de cuenta - + Switch to account Cambiar a la cuenta - - Current user status is online - El estado actual del usuario es en línea - - - - Current user status is do not disturb - El estado actual del usuario es no molestar - - Account connected Cuenta conectada @@ -6010,7 +5882,17 @@ Cuenta no conectada - + + Current user status is online + El estado actual del usuario es en línea + + + + Current user status is do not disturb + El estado actual del usuario es no molestar + + + Account actions Acciones de la cuenta @@ -6020,24 +5902,24 @@ Eliminar Cuenta - + Set status Establecer estado - - + + Log out Cerrar sesión - - + + Log in Iniciar sesión - + Remove account Eliminar cuenta @@ -6098,57 +5980,57 @@ 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 @@ -6156,7 +6038,7 @@ ValidateChecksumHeader - + The checksum header is malformed. El encabezado del checksum tiene un formato incorrecto. @@ -6189,64 +6071,64 @@ Window - + Nextcloud desktop main dialog Cuadro de diálogo principal de escritorio de Nextcloud - + Current account Cuenta actual - - + + Resume sync for all Continuar sincronización para todos - - + + Pause sync for all Pausar sincronización para todos - + Set user status Cambiar el estado del usuario - + Add account Agregar cuenta - + Add new account Añadir cuenta nueva - + Settings Ajustes - + Exit Salir - + Current user avatar Avatar del usuario actual - + Current user status is online El estado actual del usuario es en línea - + Current user status is do not disturb El estado actual del usuario es no molestar @@ -6256,32 +6138,32 @@ Comparte %1 - + Account switcher and settings menu Cambiador de cuentas y menú de configuración - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account Abrir carpeta local de la cuenta actual - + Open Nextcloud Talk in browser Abrir Nextcloud Talk en el navegador - + More apps Más aplicaciones @@ -6291,7 +6173,7 @@ Menú de apps - + Open %1 in browser Abrir %1 en el navegador @@ -6311,9 +6193,9 @@ Abrir diálogo de compartir - + Unified search results list - Unificar la lista de resultados de la búsqueda + @@ -6322,7 +6204,7 @@ Mostrar más acciones - + %1 - File activity %1 - Actividad del archivo @@ -6330,7 +6212,7 @@ main.cpp - + System Tray not available La bandeja del sistema no está disponible @@ -6340,7 +6222,7 @@ % 1 requiere una bandeja del sistema de trabajo. Si está ejecutando XFCE, por favor siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray"> estas instrucciones </ a>. De lo contrario, instale una aplicación de la bandeja del sistema, tales como 'trayer' y vuelva a intentarlo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requiere una bandeja del sistema de trabajo. Si estás ejecutando XFCE, por favor, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucciones</a>. Por otro lado, instale una bandeja del sistema de aplicaciones como "trayer" e inténtelo de nuevo. @@ -6348,7 +6230,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construido desde la revisión Git <a href="%1">%2</a> en %3, %4, usando Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_et.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_et.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_et.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_et.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Ühendus aegus - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Loobu @@ -494,52 +494,52 @@ - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Kausta loomine ebaõnnestus - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal - + <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> - + Remove Folder Sync Connection - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + 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 (%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. - + %1 in use %1 kasutusel @@ -598,87 +598,87 @@ Logi sisse - + %1 as %2 - + The server version %1 is 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. - + Server configuration error: %1 at %2. - + No %1 connection configured. Ühtegi %1 ühendust pole seadistatud. - + 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 @@ -686,47 +686,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 @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,39 +1297,39 @@ 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1401,6 +1338,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1453,22 +1397,7 @@ - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1476,24 +1405,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1529,7 +1466,7 @@ OCC::FolderMan - + Could not reset folder state Ei suutnud tühistada kataloogi staatust @@ -1539,37 +1476,37 @@ Leiti vana sünkroniseeringu zurnaal '%1', kuid selle eemaldamine ebaõnnenstus. Palun veendu, et seda kasutaks ükski programm. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (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. @@ -1579,67 +1516,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. Viimane sünkroniseerimine oli edukas. - + 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 does not exist! - + 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 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1851,12 +1788,12 @@ OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1897,42 +1834,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1940,24 +1877,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1978,27 +1915,27 @@ 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. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Server tagastas vale vahemiku - + Connection Timeout Ühenduse aegumine @@ -2118,54 +2055,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2173,22 +2110,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2504,7 +2441,7 @@ OCC::Logger - + Error Viga @@ -2514,7 +2451,7 @@ <nobr>Faili '%1'<br/>ei saa kirjutamiseks avada.<br/><br/>Logi väljundit <b>ei saa</b> salvestada!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2522,33 +2459,33 @@ 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 - + Update Failed @@ -2563,17 +2500,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2684,7 +2621,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> @@ -2694,32 +2631,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2788,12 +2725,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Uuenduste kontrollimine ebaõnnestus. @@ -2803,27 +2740,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + 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 @@ -2851,14 +2788,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2883,49 +2820,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Kohalik Sync Kataloog - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -2995,14 +2932,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3067,7 +2996,7 @@ &Edasi > - + Server address does not seem to be valid @@ -3077,7 +3006,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3175,54 +3104,54 @@ - + 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 @@ -3232,12 +3161,12 @@ 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. - + Cannot 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>Kohalik kataloog %1 edukalt loodud!</b></font> @@ -3245,7 +3174,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3255,17 +3184,17 @@ %1 seadistamise juhendaja - + Skip folders configuration Jäta kaustade seadistamine vahele - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3276,12 +3205,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3289,7 +3218,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3307,17 +3236,17 @@ - + 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. @@ -3332,57 +3261,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3392,72 +3321,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3467,7 +3386,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3480,17 +3399,12 @@ - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3503,44 +3417,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Faili on pärast avastamist muudetud - - + + File %1 cannot be downloaded because of a local file name clash! - + 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 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. @@ -3550,12 +3464,12 @@ - + The downloaded file is empty, but the server said 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! @@ -3565,18 +3479,12 @@ - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3584,12 +3492,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Taastamine ebaõnnestus: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3663,12 +3571,12 @@ Faili %1 ei saa ümber nimetada %2-ks, kuna on konflikt kohaliku faili nimega - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3679,12 +3587,12 @@ - + Failed to rename file - + Error setting pin state @@ -3718,12 +3626,12 @@ - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3741,22 +3649,22 @@ Server saatis vale HTTP koodi. Ootuspärane kood oli 201, aga saadeti kood "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database @@ -3764,46 +3672,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + 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. - + Failed to unlock encrypted folder. @@ -3813,12 +3713,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3826,32 +3726,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3859,22 +3759,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3952,7 +3852,7 @@ OCC::ServerNotificationHandler - + Dismiss Jäta vahele @@ -4122,17 +4022,17 @@ - + Allow editing Luba muutmine - + View only - + Allow upload and editing Luba üleslaadimine ja muutmine @@ -4142,7 +4042,7 @@ - + File drop (upload only) Faili lohistamine (ainult üleslaadimine) @@ -4152,32 +4052,32 @@ - + Link name - + Note to recipient Märge saajale - + Password protect Parooliga kaitsmine - + Set expiration date Määra aegumise kuupäev - + Delete link - + Add another link @@ -4187,27 +4087,27 @@ Kustuta jagamise link - + Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Kustuta - + Cancel Loobu - + Public link Avalik link @@ -4220,12 +4120,12 @@ - + Search globally - + Copy link @@ -4235,22 +4135,22 @@ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you @@ -4288,42 +4188,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4340,23 +4240,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you - - + + Share options @@ -4372,73 +4272,73 @@ - + Copy private link to clipboard - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link Kopeeri avalik link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Kustuta @@ -4584,12 +4484,12 @@ Usalda siiski seda sertifikaati - + Untrusted Certificate Tundmatu sertifikaat - + Cannot connect securely to <i>%1</i>: @@ -4599,62 +4499,62 @@ - + 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 (SHA1): <tt>%1</tt> Sõrmejälg (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Efektiivne kuupäev: %1 - + Expiration Date: %1 Aegumise kuupäev: %1 - + Issuer: %1 Esitaja: %1 @@ -4747,33 +4647,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4850,13 +4750,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4880,7 +4780,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4895,7 +4795,7 @@ - + Unable to read the blacklist from the local database @@ -4910,17 +4810,17 @@ + + Unable to read from the sync journal. + + + Filename encoding is not valid Failinime kodeering pole kehtiv - - Unable to read from the sync journal. - - - - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali @@ -4930,22 +4830,22 @@ + + Synchronization will resume shortly. + + + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - Synchronization will resume shortly. - - - - + 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. @@ -5014,49 +4914,49 @@ OCC::Systray - + Add account Lisa konto - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Seaded - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5064,24 +4964,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5089,22 +4989,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5112,32 +5012,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5145,22 +5045,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5265,30 +5165,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5810,52 +5692,52 @@ - + %n day ago - + %n days ago - + in the future tulevikus - + %n hour ago - + %n hours ago - + now kohe - + Less than a minute ago Vähem kui minut tagasi - + %n minute ago - + %n minutes ago - + Some time ago Mõni aeg tagasi @@ -5889,7 +5771,7 @@ SyncJournalDb - + Failed to connect database. @@ -5897,7 +5779,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5934,32 +5816,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions @@ -5969,24 +5851,24 @@ - + Set status - - + + Log out Logi välja - - + + Log in Logi sisse - + Remove account Eemalda konto @@ -6047,57 +5929,57 @@ 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 @@ -6105,7 +5987,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6138,64 +6020,64 @@ Window - + Nextcloud desktop main dialog - + Current account - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Lisa konto - + Add new account - + Settings Seaded - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6205,32 +6087,32 @@ - + Account switcher and settings menu - + Connected Ühendatud - + Disconnected Lahti ühendatud - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Veel rakendusi @@ -6240,7 +6122,7 @@ - + Open %1 in browser Ava %1 veebilehitsejas @@ -6260,7 +6142,7 @@ - + Unified search results list @@ -6271,7 +6153,7 @@ - + %1 - File activity @@ -6279,7 +6161,7 @@ main.cpp - + System Tray not available Süsteemisalv pole saadaval @@ -6289,7 +6171,7 @@ %1 vajab tööks süsteemisalve. Kui Sa kasutad XFCE-d, palun järgi <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">neid juhiseid</a>. Muudel juhtudel palun paigalda süsteemisalve rakendus nagu näiteks 'trayer' ning proovi uuesti. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6297,7 +6179,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_eu.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_eu.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_eu.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_eu.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Ireki %1 lokalean - + Open share dialog Ireki partekatzeko elkarrizketa-koadroa - + Share %1 Partekatu %1 - - + + Show more actions Erakutsi ekintza gehiago @@ -39,7 +39,7 @@ ActivityList - + Activity list Jarduera zerrenda @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Konexioa denboraz kanpo - + Unknown error: network reply was deleted Errore ezezaguna: sareko erantzuna ezabatu da - + Server replied "%1 %2" to "%3 %4" Zerbitzariak erantzun du "%1 %2" "%3 %4"-ra @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Amaitu muturretik muturrerako zifratzea - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Zure nortasun kriptografikoa babesteko, hiztegietako 12 hitzen mnemoniko batekin zifratzen dugu. Mesedez, kontuan hartu horiek eta gorde itzazu. Beharrezkoak izango dira zure kontuan beste gailu batzuk gehitzeko (telefono mugikorra edo ordenagailu eramangarria adibidez). @@ -305,9 +305,9 @@ - - - + + + Cancel Ezeztatu @@ -495,52 +495,52 @@ Ezabatu karpeta honen konexioa - + Disable virtual file support … Desgaitu fitxategi birtualaren laguntza ... - + Enable virtual file support %1 … Gaitu fitxategi birtualaren laguntza %1 ... - + (experimental) (esperimentala) - + Folder creation failed Karpeta sortzeak huts egin du - + <p>Could not create local folder <i>%1</i>.</p> <p>Ezin izan da <i>%1</i> bertako karpeta sortu.</p> - + Confirm Folder Sync Connection Removal Baieztatu Karpetaren Konexioaren Ezabatzea - + <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>Ziur zaude <i>%1</i>karpetaren sinkronizazioa gelditu nahi duzula?</p><p><b>Oharra:</b> Honek <b>ez</b> du fitxategirik ezabatuko.</p> - + Remove Folder Sync Connection Ezabatu Karpeta Honen Konexioa - + Disable virtual file support? Desgaitu fitxategi birtualen laguntza? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Ekintza honek unean uneko sinkronizazioa bertan behera utziko du. - + Disable support Desgaitu laguntza - + 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 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %2-tik %1 (%3%) erabiltzen ari da. Zenbait karpetek, sarean muntatutako edo partekatutako karpetak barne, muga desberdinak izan ditzakete. - + %1 of %2 in use %2tik %1 erabilita - + Currently there is no storage usage information available. Orain ez dago eskuragarri biltegiratze erabileraren informazioa. - + %1 in use %1 erabiltzen @@ -603,87 +603,87 @@ Hasi saioa - + %1 as %2 %1 %2 gisa - + The server version %1 is unsupported! Proceed at your own risk. Zerbitzariko %1 bertsioa ez da onartzen! Zure ardurapean jarraitu. - + Connected to %1. %1ra konektatuta. - + Server %1 is temporarily unavailable. %1 zerbitzaria ez dago orain eskuragarri - + Server %1 is currently in maintenance mode. %1 zerbitzaria une honetan mantenu lanetan dago. - + Signed out from %1. %1etik saioa itxita. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Nabigatzailearen baimena eskuratzen. Egin <a href= '%1'>klik hemen</a> nabigatzailea berrabiarazteko. - + Connecting to %1 … %1(e)ra konektatzen … - + No connection to %1 at %2. - Konexiorik ez %1-ekin %2-en + Konexiorik ez %1-ekin %2-etan - + Server configuration error: %1 at %2. Zerbitzariaren konfigurazio errorea: %1 %2-n. - + No %1 connection configured. Ez dago %1 konexiorik konfiguratuta. - + There are folders that were not synchronized because they are too big: Hainbat karpeta ez dira sinkronizatu handiegiak direlako: - + There are folders that were not synchronized because they are external storages: Hainbat karpeta ez dira sinkronizatu kanpoko biltegietan daudelako: - + There are folders that were not synchronized because they are too big or external storages: Hainbat karpeta ez dira sinkronizatu handiegiak direlako edo kanpoko biltegietan daudelako: - + 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> <p>Ziur zaude <i>%1</i>kontuaren konexioa kendu nahi duzula?</p><p><b>Oharra:</b> Honek<b>ez</b> du fitxategirik ezabatuko.</p> - + Remove connection Ezabatu konexioa @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Saioa bukatuta - + Disconnected Deskonektatuta - + Connected Konektatuta - + Service unavailable Zerbitzua ez dago eskuragarri - + Maintenance mode Mantenu lanetan - + Network error Sare errorea - + Configuration error Konfigurazio errorea - + Asking Credentials Kredentzialak eskatzen - + Unknown account state Kontuaren egoera ezezaguna @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Ez ikusi zerrendako fitxategiak eta esteka sinbolikoak ez dira sinkronizatuko. - + For more activities please open the Activity app. Jarduera gehiagorako ireki Jarduerak aplikazioa. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Jarraitzeak <b>ezarpen horiek ezabattzea</b> supostuko du. - + Continuing will mean <b>ignoring these settings</b>. Jarraitzeak <b>ezarpen horiek ez ikustea</b>suposatuko du. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Ezarpen batzuk bezero honen bertsio berriagoetan konfiguratu ziren eta bertsio honetan erabilgarri ez dauden funtzioak erabiltzen dituzte.<br><br>%1<br><br>Uneko konfigurazio fitxategiaren babeskopia egin zen<i>%2</i>-ra. - + Quit Irten - + Continue Jarraitu - + Error accessing the configuration file Errorea ezarpen fitxategia atzitzean - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. % 1 konfigurazio fitxategian sartzean akats bat gertatu da. Egiaztatu zure erabiltzaileak fitxategi hau atzitzeko baimena duela. - + Quit %1 %1etik Irten @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - %1 fitxategia ezin da kargatu izen bereko beste fitxategi bat dagoelako -soilik kasuan ezberdina- - - - - - File %1 has invalid modified time. Do not upload to the server. - %1 fitxategiak aldaketa-data baliogabea du. Ez igo hau zerbitzarira. - - - - File Removed (start upload) %1 - Fitxategia kendu da (hasi karga) %1 - - - - Local file changed during syncing. It will be resumed. - Fitxategi lokala aldatu egin da sinkronizazioa egin bitartean. Berrekin egingo da. - - - - - Local file changed during sync. - Fitxategi lokala aldatu da sinkronizazioan. - - - - Error updating metadata: %1 - Erorrea metadatuak eguneratzen: %1 - - - - The file %1 is currently in use - %1 fitxategia momentu honetan erabilpean dago - - - - The local file was removed during sync. - Fitxategi lokala ezabatu da sinkronizazioan. - - - - ; Restoration Failed: %1 - ; Berreskurapenak huts egin du: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Sartu zure muturretik muturrerako zifratzeko pasahitza:<br><br>Erabiltzailea: %2<br>Kontua: %3<br> - + Enter E2E passphrase Sartu muturretik muturrerako (E2E) pasahitza @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Zerbitzariaren fitxategiak bilatzeko erantzunean datuak falta dira. - - + + Server error: PROPFIND reply is not XML formatted! Zerbitzariko errorea: PROPFINDaren erantzunak ez du XML formaturik! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 %1 direktorioaren irekitzeak huts egin du - + Directory not accessible on client, permission denied Direktorioa ez dago eskuragarri bezeroan, baimena ukatua - + Directory not found: %1 Direktorioa ez da aurkitu: %1 - + Filename encoding is not valid Fitxategiaren kodeketa baliogabea da - + Error while reading directory %1 Errorea gertatu da %1 direktorioa irakurtzean @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Zerbitzariak itzuli duen errorea: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Errore bat gertatu da "token" amaierako puntuan sartzean: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Ezin izan da zerbitzariaren JSON formatuko erantzuna irakurri: <br><em>%1</em> - + The reply from the server did not contain all expected fields Zerbitzariaren erantzunak ez ditu espero ziren eremu guztiak - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Lortutako zerbitzariaren URLa ez da HTTPStik hasten nahiz eta saio-hasiera URLa HTTPSrekin hasten den. Saio-hasiera ez da posible izango segurtasun arazoa izan daitekelako. Mesedez, jarri harremanetan zure administratzailearekin. @@ -1368,41 +1305,41 @@ Sinkronizatu 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. %1 MB baino handiagoa den karpeta berri bat gehitu da: %2. - + A folder from an external storage has been added. Kanpoko biltegi bateko karpeta gehitu da. - + Please go in the settings to select it if you wish to download it. Jo ezarpenetara aukeratzeko deskargatu nahi ote duzun. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. %1 karpeta sortu zen baina sinkronizaziotik kanpo ezarri zen. Haren barneko fitxategiak ez dira sinkronizatuko. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. %1 fitxategia sortu zen baina sinkronizaziotik kanpo ezarri zen. Fitxategia ez da sinkronizatuko. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Zure tokiko '%1' sinkronizazio karpetako fitxategi guztiak ezabatu dira. Ezabaketa hauek zerbitzarian sinkronizatuko dira, beraz ezingo dituzu fitxategiok erabili leheneratu ezean. +Ziur zaude ekintza hauek zerbitzarian sinkronizatu nahi dituzula? +Ezabaketa nahigabea izan bada eta erabakitzen baduzu fitxategiok mantentzea, hauek zerbitzarian ber-sinkronizatuko dira. + + All files in the sync folder '%1' 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. @@ -1475,27 +1421,7 @@ Mantendu fitxategi lokalak gatazka gisa - - 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 restore 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' sinkronizazio-karpetaren fitxategi guztiak ezabatuko dira zerbitzaritik. -Ezabaketa horiek zure sinkronizazio-karpetan sinkronizatuko dira, eta horren ondorioz fitxategiak ezingo dituzu berriro erabili leheneratzeko eskubiderik ez baduzu. -Fitxategiak leheneratzea erabakitzen baduzu, zerbitzariarekin berriro sinkronizatuko dira horretarako eskubiderik baduzu. -Fitxategiak ezabatzea erabakitzen baduzu, ez dira erabilgarri egongo, jabea izan ezean. - - - - 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. - Zure tokiko '%1' sinkronizazio karpetako fitxategi guztiak ezabatu dira. Ezabaketa hauek zerbitzarian sinkronizatuko dira, beraz ezingo dituzu fitxategiok erabili leheneratu ezean. -Ziur zaude ekintza hauek zerbitzarian sinkronizatu nahi dituzula? -Ezabaketa nahigabea izan bada eta erabakitzen baduzu fitxategiok mantentzea, hauek zerbitzarian ber-sinkronizatuko dira. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1506,7 +1432,7 @@ Fitxategiak ezabatzea erabakitzen baduzu, ezingo dituzu erabilgarri izan, jabea ez bazara behintzat. - + 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. @@ -1515,17 +1441,28 @@ Istripua izan bada eta zure fitxategiak mantentzea erabakitzen baduzu, zerbitzaritik berriro sinkronizatuko dira. - + Remove All Files? Ezabatu fitxategi guztiak? - + Remove all files Ezabatu fitxategi guztiak - + + 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 restore 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' sinkronizazio-karpetaren fitxategi guztiak ezabatuko dira zerbitzaritik. +Ezabaketa horiek zure sinkronizazio-karpetan sinkronizatuko dira, eta horren ondorioz fitxategiak ezingo dituzu berriro erabili leheneratzeko eskubiderik ez baduzu. +Fitxategiak leheneratzea erabakitzen baduzu, zerbitzariarekin berriro sinkronizatuko dira horretarako eskubiderik baduzu. +Fitxategiak ezabatzea erabakitzen baduzu, ez dira erabilgarri egongo, jabea izan ezean. + + + Keep files Mantendu fitxategiak @@ -1561,7 +1498,7 @@ OCC::FolderMan - + Could not reset folder state Ezin izan da karpetaren egoera berrezarri @@ -1571,37 +1508,37 @@ Aurkitu da '%1' sinkronizazio erregistro zaharra, baina ezin da ezabatu. Ziurtatu aplikaziorik ez dela erabiltzen ari. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. "% 1" sinkronizazio egunkari zahar bat aurkitu da, baina ezin izan da kendu. Ziurtatu ez dela aplikaziorik erabiltzen ari. - + (backup) (backup) - + (backup %1) (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. @@ -1611,67 +1548,67 @@ Sinkronizazioa behar bezala burutu da, konpondu gabeko gatazkak. - + Sync finished with unresolved conflicts. Sinkronizazioa burutu da, ebatzi gabeko gatazka batzuekin. - + Last Sync was successful. Azkeneko sinkronizazioa behar bezala burutu da. - + Setup Error. Konfigurazio errorea. - + User Abort. Erabiltzaileak bertan behera utzi du. - + Sync is paused. Sinkronizazioa pausatuta dago. - + %1 (Sync is paused) %1 (Sinkronizazioa pausatuta dago) - + No valid folder selected! Ez da baliozko karpetarik hautatu! - + The selected path does not exist! Hautatutako bidea ez da existitzen! - + 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 already contains a folder used in a folder sync connection. Please pick another one! Tokiko '%1' karpetak badu dagoeneko sinkronizatutako karpeta bat. Hautatu beste bat! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Tokiko '%1' karpeta dagoeneko sinkronizatutako karpeta batean dago. Hautatu beste bat! - + There is already a sync from the server to this local folder. Please pick another local folder! Dagoeneko sinkronizazio bat dago zerbitzaritik karpeta lokal honetara. Aukeratu tokiko beste karpeta bat! @@ -1883,12 +1820,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Gehitu Karpeta Sinkronizatzeko Konexioa - + Add Sync Connection Gehitu Sinkronizazio Konexioa @@ -1929,42 +1866,42 @@ Idatzi "% 1" azpian sortuko den karpeta berriaren izena: - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Dagoeneko <i>%1</i>sinkronizatzen ari zara, <i>%2</i>-ren azpi-karpeta dena. @@ -1972,24 +1909,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Erabili fitxategi birtualak edukia berehala deskargatu beharrean% 1 - - + + (experimental) (esperimentala) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Fitxategi birtualak ez dira bateragarriak Windows partizio sustraiekin karpeta lokal bezala. Mesedez aukeratu baliozko azpikarpeta bat diskoaren letra azpian. - + Virtual files are not available for the selected folder Fitxategi birtualak ez daude hautatutako karpetarentzako eskuragarri @@ -2010,27 +1947,27 @@ 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. - + We received an unexpected download Content-Length. Ustekabeko eduki-luzera deskarga jaso dugu. - + Server returned wrong content-range Zerbitzariak eduki-hein desegokia itzuli du - + Connection Timeout Konexioa denboraz kanpo @@ -2150,22 +2087,22 @@ Sortu arazketa fitxategia... - + Server notifications that require attention. Arreta eskatzen duten zerbitzariaren jakinarazpenak. - + You cannot disable autostart because system-wide autostart is enabled. Ezin da abiarazte automatikoa desgaitu sistema osoaren abiarazte automatikoa gaituta dagoelako. - + Change update channel? Eguneratze kanala aldatu nahi duzu? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2174,32 +2111,32 @@ Kontuan izan honek bertsio berriak nondik hartu bakarrik hautatzen duela, ezin dela bertsio zaharretara itzuli: beraz, beta kanaletik batzuetan ezin da automatikoki kanal egonkorrera itzuli, jarrita dagoena baino berriagoa den bertsio egonkor bati itxaron behar zaio. - + Change update channel Aldatu eguneratze kanala - + Cancel Ezeztatu - + Create Debug Archive Sortu arazketa fitxategia - + Zip Archives Zip fitxategiak - + Debug Archive Created Arazketa fitxategia sortu da - + Debug archive is created at %1 Arazketa fitxategia sortuta dago, hemen: %1 @@ -2207,22 +2144,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Partekatzeak pasahitza izan behar du - + Please enter a password for your link share: Idatzi zure partekatze estekaren pasahitza: - + Sharing error Errorea partekatzerakoan - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Errorea @@ -2556,7 +2493,7 @@ <nobr>'%1' Fitxategia<br/> ezin da idazteko ireki.<br/><br/>Egunkariaren irteera <b>ezin</b> da gorde!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>"%1" fitxategia<br/> ezin da ireki idazteko.<br/><br/> Erregistroaren irteera <b>ezin da </b> gorde!</nobr> @@ -2564,33 +2501,33 @@ 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 - + Update Failed Eguneratzeak huts egin du @@ -2605,17 +2542,17 @@ <p>% 1 bezeroaren bertsio berria eskuragarri dago baina eguneratze prozesuak huts egin du.</p><p><b>%2</b> deskargatu da. Instalatutako bertsioa %3 da. Berrabiaraztea eta eguneratzea baieztatzen baduzu, baliteke ordenagailua berrabiaraztea instalazioa amaitzeko.</p> - + Ask again later Galdetu berriro geroago - + Restart and update Berrabiarazi eta eguneratu - + Update manually Eguneratu eskuz @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Zerbitzariak itzuli duen errorea: <em>%1</em> @@ -2736,32 +2673,32 @@ Errorea gertatu da 'token' puntura deia egitean: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Errorea gertatu da "token" amaiera-puntua atzitzean: <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON hutsa OAuth2 birbideratzetik - + Could not parse the JSON returned from the server: <br><em>%1</em> Ezin izan da zerbitzariaren JSON formatuko erantzuna irakurri: <br><em>%1</em> - + The reply from the server did not contain all expected fields Zerbitzariaren erantzunak ez ditu espero ziren eremu guztiak - + <h1>Login Error</h1><p>%1</p> <h1>Saio hasiera errorea</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>Erabiltzailea ez da zuzena</h1><p><em>%1</em> erabiltzailearekin sartu zara, baina <em>%2</em> erabiltzailearekin sartu behar zara. <br>Irten %3-tik beste fitxa baten, ondoren <a href='%4'>egin klik hemen</a> eta sartu %2 erabiltzaile gisa.</p> @@ -2831,12 +2768,12 @@ Ezin da eguneraketa deskargatu. Mesedez, ireki <a href='%1'>%1</a> eguneraketa eskuz deskargatzeko. - + Could not download update. Please open %1 to download the update manually. Ezin izan da eguneraketa deskargatu. Ireki %1 eguneraketa eskuz deskargatzeko. - + Could not check for new updates. Ezin da eguneraketarik bilatu. @@ -2846,27 +2783,27 @@ %1 berria dago eskuragarri. Mesedez, ireki<a href='%2'>%2</a> eguneraketa deskargatzeko. - + New %1 is available. Please open %2 to download the update. %1 berria dago eskuragarri. Ireki %2 eguneraketa deskargatzeko. - + Checking update server … Eguneraketa-zerbitzaria egiaztatzen... - + Update status is unknown: Did not check for new updates. Eguneraketaren egoera ez da ezaguna. Ez da eguneraketarik bilatu. - + 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 @@ -2894,14 +2831,14 @@ Konektatu … - - + + Use &virtual files instead of downloading content immediately %1 Erabili & fitxategi birtualak edukia berehala deskargatu beharrean % 1 - - + + (experimental) (esperimentala) @@ -2926,49 +2863,49 @@ Toki librea: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Fitxategi birtualak ez dira bateragarriak Windows partizio sustraiekin karpeta lokal bezala. Mesedez aukeratu baliozko azpikarpeta bat diskoaren letra azpian. - + %1 folder "%2" is synced to local folder "%3" %1 karpeta "%2" lokaleko "%3" karpetan dago sinkronizatuta - + Sync the folder "%1" Sinkronizatu "%1" karpeta - + Warning: The local folder is not empty. Pick a resolution! Abisua: karpeta lokala ez dago hutsik. Aukeratu nola konpondu! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 egin leku librea - + Virtual files are not available for the selected folder Fitxategi birtualak ez daude hautatutako karpetarentzako eskuragarri - + Local Sync Folder Sinkronizazio karpeta lokala - - + + (%1) (%1) - + There isn't enough free space in the local folder! Ez dago nahikoa toki librerik karpeta lokalean! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3111,7 +3040,7 @@ &Hurrengoa > - + Server address does not seem to be valid Badirudi zerbitzariaren helbidea ez dela baliozkoa @@ -3121,7 +3050,7 @@ Baliogabeko URLa - + Could not load certificate. Maybe wrong password? Ezin izan da ziurtagira kargatu. Baliteke pasahitza okerra izatea? @@ -3219,54 +3148,54 @@ Nextcloud-en 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 @@ -3276,12 +3205,12 @@ 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. - + Cannot 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 kendu eta babeskopiarik egin, karpeta edo barruko fitxategiren bat beste programa batean irekita dagoelako. Itxi karpeta edo fitxategia eta sakatu berriro saiatu edo bertan behera utzi 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> @@ -3289,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account Gehitu %1 kontua @@ -3299,17 +3228,17 @@ %1 Konexio Morroia - + Skip folders configuration Saltatu karpeten ezarpenak - + Enable experimental feature? Ezaugarri esperimentala gaitu? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3326,12 +3255,12 @@ Modu hau berria eta experimentala da. Erabiltzea erabakitzen baduzu, agertzen diren arazoen berri eman mesedez. - + Enable experimental placeholder mode Gaitu leku-marka modu esperimentala - + Stay safe Jarraitu era seguruan @@ -3339,7 +3268,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Baliogabeko JSON erantzuna galdeketaren URLtik @@ -3349,25 +3278,25 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Fitxategiak zuriuneak ditu eta ezin izan da berrizendatu, izen berdina duen fitxategi bat zerbitzarian existitzen delako dagoeneko. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Fitxategiak zuriuneak ditu eta ezin izan da berrizendatu, izen berdina duen fitxategi bat existitzen delako lokalean dagoeneko. + - + 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. Puntu batekin amaitzen diren fitxategi-izenak ez dira onartzen fitxategi-sistema honetan. @@ -3382,57 +3311,57 @@ "%1" karakterea daukaten fitxategi-izenak ez dira onartzen fitxategi-sistema honetan. - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - + The file name is a reserved name on this file system. Fitxategi-izena izen erreserbatua da fitxategi-sistema honetan. - + Filename contains trailing spaces. Fitxategi-izenak amaierako zuriunea dauka. - + Filename is too long. Fitxategiaren izena luzeegia da. - + File/Folder is ignored because it's hidden. Fitxategia/Karpeta ez da ikusi ezkutuan dagoelako. - + Stat failed. Hasierak huts egin du. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Gatazka: zerbitzari bertsioa deskargatu da, kopia lokala berrizendatua eta ez igoa. - + The filename cannot be encoded on your file system. Fitxategi-izen hori ezin da kodetu fitxategi-sistema honetan. - + The filename is blacklisted on the server. Fitxategiaren izena zerrenda beltzean dago zerbitzarian. - + File has extension reserved for virtual files. Fitxategiak fitxategi birtualentzako gordetako luzapena du. - + size tamaina @@ -3442,72 +3371,62 @@ baimenak - - server reported no %1 - zerbitzariak ez du %1-rik jakinarazi - - - - permission - baimena - - - + file id fitxategiaren id-a - - Server reported no %1 - Zerbitzariak ez du %1-rik jakinarazi + + server reported no %1 + zerbitzariak ez du %1-rik jakinarazi - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Gatazka gertatu da fitxategi batzuk karpetara kargatzean. Gatazka sortu dutenak garbitu egingo dira! - + Conflict when uploading a folder. It's going to get cleared! Gatazka gertatu da karpeta kargatzean. Garbituko da! - + Conflict when uploading a file. It's going to get removed! Gatazka gertatu da fitxategia kargatzean. Garbituko da! - + Ignored because of the "choose what to sync" blacklist Ez ikusi egin zaio, "aukeratu zer sinkronizatu" zerrenda beltzagatik. - + Not allowed because you don't have permission to add subfolders to that folder Ez da onartu, ez daukazulako baimenik karpeta horretan azpikarpetak gehitzeko - + Not allowed because you don't have permission to add files in that folder Ez da onartu, ez daukazulako baimenik karpeta horretan fitxategiak gehitzeko - + Not allowed to upload this file because it is read-only on the server, restoring Ez dago baimenik fitxategi hau kargatzek zerbitzarian irakurtzeko soilik delako, leheneratzen. - + Moved to invalid target, restoring Baliogabeko helburura mugitu da, berrezartzen - + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Error while reading the database Errorea datu-basea irakurtzean @@ -3517,7 +3436,7 @@ Zerbitzariak errore batekin erantzun du irakurtzean '%1' : %2 direktorioa - + Server replied with an error while reading directory "%1" : %2 Zerbitzariak errore batekin erantzun du "% 1" direktorioa irakurtzean:% 2 @@ -3530,17 +3449,12 @@ Errorea metadatuak datu-basean idaztean - - Error updating metadata due to invalid modified time - Errorea metadatuak eguneratzen aldaketa-data baliogabeagatik - - - + Error updating metadata: %1 Erorrea metadatuak eguneratzen: %1 - + File is currently in use Fitxategia erabiltzen ari da @@ -3553,44 +3467,44 @@ %1 fitxategia ezin da deskargatu zifratze informazioa falta delako. - + File %1 cannot be downloaded because encryption information is missing. Ezin da% 1 fitxategia deskargatu enkriptatze-informazioa falta delako. - - + + File has changed since discovery Fitxategia aldatu egin da aurkitu zenetik - - + + File %1 cannot be downloaded because of a local file name clash! Ezin da% 1 fitxategia deskargatu, fitxategi lokal baten izenarekin talka! - + File %1 can not be downloaded because of a local file name clash! %1 fitxategia ezin da deskargatu, fitxategi lokal baten izenarekin gatazka! - + The download would reduce free local disk space below the limit Deskargak disko lokaleko toki librea muga azpitik gutxituko luke - + Free space on disk is less than %1 %1 baino toki libre gutxiago diskoan - + File was deleted from server Fitxategia zerbitzaritik ezabatua izan da - + The file could not be downloaded completely. Fitxategia ezin izan da guztiz deskargatu. @@ -3600,12 +3514,12 @@ Deskargatutako fitxategia hutsik dago zerbitzariak %1 izan beharko lituzkeela iragarri badu ere. - + The downloaded file is empty, but the server said it should have been %1. Deskargatutako fitxategia hutsik dago, baina zerbitzariak %1 izan beharko lukeela iragarri du. - + File %1 cannot be saved because of a local file name clash! %1 fitxategia ezin da gorde, fitxategi lokal baten izenarekin gatazka! @@ -3615,18 +3529,12 @@ Errorea metadatuak datu-basean idaztean - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Erorrea metadatuak eguneratzen: %1 - + The file %1 is currently in use %1 fitxategia erabiltzen ari da @@ -3634,12 +3542,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Berreskurapenak huts egin du: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Fitxategi edo karpeta bat kendu da irakurtzeko soilik zen partekatzetik, baina berreskurapenak huts egin du: %1 @@ -3713,12 +3621,12 @@ %1 fitxategiari ezin zaio %2 izena eman fitxategi lokal batekin izen gatazka dagoelako - + Error updating metadata: %1 Erorrea metadatuak eguneratzen: %1 - + The file %1 is currently in use %1 fitxategia erabiltzen ari da @@ -3729,12 +3637,12 @@ Errorea metadatuak datu-basean idaztean - + Failed to rename file Fitxategia berrizendatzeak huts egin du - + Error setting pin state Errorea pin egoera ezartzean @@ -3768,12 +3676,12 @@ Errorea metadatuak datu-basean idaztean - + Error writing metadata to the database: %1 Errorea metadatuak datu-basean idaztean: %1 - + The file %1 is currently in use %1 fitxategia erabiltzen ari da @@ -3791,22 +3699,22 @@ HTTP kode okerra erantzun du zerbitzariak. 201 espero zen, baina "%1 %2" jaso da. - + Error updating metadata: %1 Erorrea metadatuak eguneratzen: %1 - + The file %1 is currently in use %1 fitxategia erabiltzen ari da - + Error setting pin state Errorea pin egoera ezartzean - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -3814,46 +3722,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - %1 fitxategiak aldaketa-data baliogabea du. Ez igo hau zerbitzarira. - - - + Failed to upload encrypted file. Ezin izan da enkriptatutako fitxategia kargatu. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists %1 fitxategia ezin da kargatu izen bereko beste fitxategi bat dagoelako -soilik kasuan ezberdina- - - + + Upload of %1 exceeds the quota for the folder %1-aren kargak karpetaren kuota gainditzen du - + File Removed (start upload) %1 Fitxategia kendu da (hasi karga) %1 - + Local file changed during syncing. It will be resumed. Fitxategi lokala aldatu egin da sinkronizazioa egin bitartean. Berrekin egingo da. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + Failed to unlock encrypted folder. Ezin izan da enkriptatutako karpeta desblokeatu. @@ -3863,12 +3763,12 @@ Errorea metadatuak datu-basean idaztean - + Error updating metadata: %1 Erorrea metadatuak eguneratzen: %1 - + The file %1 is currently in use %1 fitxategia erabiltzen ari da @@ -3876,32 +3776,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Fitxategi lokala ezabatu da sinkronizazioan. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + Poll URL missing Inkesta URLa falta da - + Unexpected return code from server (%1) Espero ez zen erantzuna (%1) zerbitzaritik - + Missing File ID from server Fitxategiaren IDa falta da zerbitzarian - + Missing ETag from server ETag-a falta da zerbitzarian @@ -3909,22 +3809,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Galdeketa URLa falta da - + 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) Zerbitzariak ez du adierazi azken zatia jaso denik. Ez zegoen e-etiketarik (e-tag) @@ -4002,7 +3902,7 @@ OCC::ServerNotificationHandler - + Dismiss Baztertu @@ -4172,17 +4072,17 @@ Pasahitzarekin babestu - + Allow editing Baimendu editatzea - + View only Ikusi soilik - + Allow upload and editing Onartu kargatzea eta edizioa @@ -4192,7 +4092,7 @@ Iraungitze-data - + File drop (upload only) Fitxategia jaregin (kargatzeko soilik) @@ -4202,32 +4102,32 @@ Ez partekatu - + Link name Estekaren izena - + Note to recipient Oharra hartzailearentzat - + Password protect Babestu pasahitzarekin - + Set expiration date Ezarri iraungitze-data - + Delete link Ezabatu esteka - + Add another link Gehitu beste esteka bat @@ -4237,27 +4137,27 @@ Ezabatu partekatze esteka - + Confirm Link Share Deletion Baieztatu partekatze estekaren ezabaketa - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ziur zaude <i>%1</i>esteka publikoaren partekatzea ezabatu nahi duzula?</p><p>Oharra: Ekintza hau ezin da desegin.</p> - + Delete Ezabatu - + Cancel Utzi - + Public link Esteka publikoa @@ -4270,12 +4170,12 @@ Partekatu erabiltzaile edo taldeekin ... - + Search globally Bilatu globalki - + Copy link Esteka kopiatu @@ -4285,22 +4185,22 @@ Ez dago emaitzarik '%1'(r)entzako - + No results for "%1" Ez dago "% 1" (r)entzako emaitzarik - + Password for share required Partekatzearen pasahitza beharrezkoa - + Please enter a password for your email share: Idatzi pasahitza zure posta partekatzeko: - + I shared something with you Zerbait partekatu dut zurekin @@ -4338,42 +4238,42 @@ Iraungitzea: - + Can reshare Birparteka daiteke - + Note to recipient Oharra hartzailearentzat - + Set expiration date Ezarri iraungitze-data - + Unshare Ez partekatu - + Can create Sortu dezake - + Can change Aldatu dezake - + Can delete Ezabatu dezake - + Password protect Pasahitzarekin babestuta @@ -4390,23 +4290,23 @@ OCC::SocketApi - + Context menu share Testuinguruaren partekatze menua - + Select new location … Hautatu kokapen berria ... - + I shared something with you Zerbait partekatu dut zurekin - - + + Share options Partekatze aukerak @@ -4422,73 +4322,73 @@ Jarduera - + Copy private link to clipboard Kopiatu esteka pribatua arbelera - + Send private link by email … Bidali esteka pribatua postaz... - + Resharing this file is not allowed Fitxategi hau birpartekatzea ez da onartzen - + Resharing this folder is not allowed Karpeta hau berriro partekatzea ez dago onartuta - - + + Copy public link Kopiatu esteka publikoa - + Copy internal link Kopiatu barne esteka - + Edit Editatu - + Open in browser Ireki nabigatzailean - + Resolve conflict … Ebatzi gatazka ... - + Move and rename … Mugitu eta izena aldatu ... - + Move, rename and upload … Mugitu, izena aldatu eta igo ... - + Delete local changes Ezabatu tokiko aldaketak - + Move and upload … Mugitu eta igo ... - + Delete Ezabatu @@ -4634,77 +4534,77 @@ Fidatu ziurtagiri honetaz hala ere - + Untrusted Certificate Ziurtagiri ez-fidagarria - + Cannot connect securely to <i>%1</i>: Ezin da segurtasunarekin <i>%1</i>(e)ra konektatu: Additional errors: - Errore gehigarriak: + - + 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 (SHA1): <tt>%1</tt> Hatz-marka (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Hatz-marka (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Hatz-marka (SHA-512): <tt>%1</tt> - + Effective Date: %1 Balio-data: %1 - + Expiration Date: %1 Iraungitze data: %1 - + Issuer: %1 Jaulkitzailea: %1 @@ -4797,33 +4697,33 @@ %1 zenbakia duen barne errorea gertatu a. - + %1 (skipped due to earlier error, trying again in %2) %1 (saltatua zena aurreko errore batengatik, berriro saiatzen hemen: %2) - + Could not update file: %1 Ezin izan da eguneratu fitxategia: % 1 - + Could not update virtual file metadata: %1 Ezin izan dira fitxategi birtualaren metadatuak eguneratu: %1 - + Unresolved conflict. Ebatzi gabeko gatazka. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 bakarrik dago eskuragarri, gutxienez %2 behar da hasteko. - + Aborted Bertan behera utzia @@ -4900,16 +4800,16 @@ Puntu batekin amaitzen diren fitxategi-izenak ez dira onartzen fitxategi-sistema honetan. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Ezin izan da ireki edo sortu datu-base lokal sinkronizatua. Ziurtatu idazteko baimena daukazula karpeta sinkronizatu lokalean. + + File names containing the character '%1' are not supported on this file system. '%1' karakterea daukaten fitxategi-izenak ez dira onartzen fitxategi-sistema honetan. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Ezin izan da ireki edo sortu datu-base lokal sinkronizatua. Ziurtatu idazteko baimena daukazula karpeta sinkronizatu lokalean. - - The file name is a reserved name on this file system. Fitxategi-izena izen erreserbatua da fitxategi-sistema honetan. @@ -4930,7 +4830,7 @@ Fitxategia/Karpeta ez da ikusi ezkutuan dagoelako. - + Using virtual files with suffix, but suffix is not set Suffix erabiltzen da fitxategi birtualak kudeatzeko, baina suffix ez dago konfiguratuta @@ -4945,7 +4845,7 @@ Fitxategi-izen hori ezin da kodetu fitxategi-sistema honetan. - + Unable to read the blacklist from the local database Ezin izan da zerrenda beltza irakurri datu-base lokaletik @@ -4960,17 +4860,17 @@ Hasierak huts egin du. + + Unable to read from the sync journal. + Ezin izan da sinkronizazio-egunkaria irakurri. + + Filename encoding is not valid Fitxategiaren kodeketa baliogabea da - - Unable to read from the sync journal. - Ezin izan da sinkronizazio-egunkaria irakurri. - - - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki @@ -4980,22 +4880,22 @@ Baliogabeko karaktereak, aldatu "%1" izena + + Synchronization will resume shortly. + Sinkronizazioak laster jarraituko du. + + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - Synchronization will resume shortly. - Sinkronizazioak laster jarraituko du. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Toki gutxi dago diskoan: toki librea %1 azpitik gutxituko zuten deskargak saltatu egin dira. - + There is insufficient space available on the server for some uploads. Ez dago nahiko toki erabilgarririk zerbitzarian hainbat kargatarako. @@ -5064,49 +4964,49 @@ OCC::Systray - + Add account Gehitu kontua - + Open main dialog Ireki elkarrizketa nagusia + - Pause sync Gelditu sinkronizazioa - - + + Resume sync Berrekin sinkronizazioa - + Settings Ezarpenak - + Exit %1 Irten %1-(e)tik - + Pause sync for all Pausatu sinkronizazioa guztientzat - + Resume sync for all Berrekin sinkronizazioa guztientzat - + %1: %2 %1: %2 @@ -5114,24 +5014,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Mahaigaineko %1 bezeroa</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>%1 bertsioa. Informazio gehiago eskuratzeko egin klik <a href='%2'>hemen</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Fitxategi birtualen plugina erabiltzen:% 1</small></p> - + <p>This release was supplied by %1</p> <p>Argitalpen hau %1(e)k eman du</p> @@ -5139,55 +5039,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Ezin izan dira hornitzaileak atzitu. + - + Failed to fetch search providers for '%1'. Error: %2 - Ezin izan dira bilaketa hornitzaileak lortu '%1?-(r)entzat. Errorea: %2 + - + Search has failed for '%2'. - '%2' bilaketak huts egin du. + - + Search has failed for '%1'. Error: %2 - '%1' bilaketak huts egin du. Errorea: %2 + OCC::User - + Retry all uploads Saiatu dena berriro kargatzen - + Synced %1 %1 sinkronizatuta - + You renamed %1 %1 berrizendatu duzu - + You deleted %1 %1 ezabatu duzu - + You created %1 %1 sortu duzu - + You changed %1 %1 aldatu duzu @@ -5195,22 +5095,22 @@ OCC::UserModel - + Confirm Account Removal Baieztatu kontua kentzea - + <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>Ziur zaude <i>%1</i> kontura konexioa kendu nahi duzula?</p><p><b>Oharra:</b> Honek <b>ez</b> du fitxategirik ezabatuko.</p> - + Remove connection Kendu konexioa - + Cancel Utzi @@ -5315,30 +5215,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Fitxategi birtualen sistemak NTFS fitxategi sistema bat behar du, %1-ek darabilena %2 da. - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Errorea metadatuak eguneratzen aldaketa-data baliogabeagatik - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Errorea metadatuak eguneratzen aldaketa-data baliogabeagatik - - - OCC::WebEnginePage @@ -5860,52 +5742,52 @@ Karpeta berria - + %n day ago duela egun %nduela %n egun - + %n days ago duela egun %nduela %n egun - + in the future etorkizunean - + %n hour ago duela ordu %nduela %n ordu - + %n hours ago duela ordu %nduela %n ordu - + now orain - + Less than a minute ago orain dela minutu bat baino gutxiago - + %n minute ago duela minutu %nduela %n minutu - + %n minutes ago duela minutu %nduela %n minutu - + Some time ago Duela zenbait denbora @@ -5939,7 +5821,7 @@ SyncJournalDb - + Failed to connect database. Datu-basera konektatzeak huts egin du @@ -5947,9 +5829,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Bilatu fitxategiak, mezuak, gertaerak ... + @@ -5957,7 +5839,7 @@ Load more results - Kargatu emaitza gehiago + @@ -5965,7 +5847,7 @@ Search result skeleton. - Bilaketa emaitzen eskeletoa. + @@ -5973,7 +5855,7 @@ Load more results - Kargatu emaitza gehiago + @@ -5984,21 +5866,11 @@ Kontu sarrera - + Switch to account Aldatu kontu honetara - - Current user status is online - Erabiltzailea linean dago - - - - Current user status is do not disturb - Erabiltzailea 'ez molestatu' egoeran dago - - Account connected Kontua konektatuta @@ -6009,7 +5881,17 @@ Kontua ez dago konektatuta - + + Current user status is online + Erabiltzailea linean dago + + + + Current user status is do not disturb + Erabiltzailea 'ez molestatu' egoeran dago + + + Account actions Kontuaren ekintzak @@ -6019,24 +5901,24 @@ Kendu kontua - + Set status Ezarri egoera - - + + Log out Amaitu saioa - - + + Log in Hasi saioa - + Remove account Kendu kontua @@ -6097,57 +5979,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) urte %n%n urte - + %n month(s) hilabete %n %n hilabete - + %n day(s) egun %n% egun - + %n hour(s) ordu %n%n ordu - + %n minute(s) minutu %n%n minutu - + %n second(s) segundo %n%n segundo - + %1 %2 %1 %2 @@ -6155,7 +6037,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Kontroleko baturaren goiburua gaizki osatu da. @@ -6188,64 +6070,64 @@ Window - + Nextcloud desktop main dialog Mahaigaineko Nextclouden elkarrizketa-koadro nagusia - + Current account Uneko kontua - - + + Resume sync for all Berrekin sinkronizazioa guztientzat - - + + Pause sync for all Pausatu sinkronizazioa guztientzat - + Set user status Ezarri erabiltzaile-egoera - + Add account Gehitu kontua - + Add new account Gehitu kontu berri bat - + Settings Ezarpenak - + Exit Irten - + Current user avatar Uneko erabiltzailearen avatarra - + Current user status is online Erabiltzailea linean dago - + Current user status is do not disturb Erabiltzailea 'ez molestatu' egoeran dago @@ -6255,32 +6137,32 @@ Partekatu %1 - + Account switcher and settings menu Kontu txandakatze eta ezarpenen menua - + Connected Konektatuta - + Disconnected Deskonektatuta - + Open local folder of current account Ireki uneko kontuaren karpeta lokala - + Open Nextcloud Talk in browser Ireki Nextcloud Talk nabigatzailean - + More apps Aplikazio gehiago @@ -6290,7 +6172,7 @@ Aplikazioen menua - + Open %1 in browser Ireki %1 arakatzailean @@ -6310,9 +6192,9 @@ Ireki partekatzeko elkarrizketa-koadroa - + Unified search results list - Bateratutako bilaketaren emaitzen zerrenda + @@ -6321,7 +6203,7 @@ Erakutsi ekintza gehiago - + %1 - File activity %1 - Fitxategiaren jarduera @@ -6329,7 +6211,7 @@ main.cpp - + System Tray not available Sistemaren erretilua ez dago erabilgarri @@ -6339,7 +6221,7 @@ %1(e)k sistema-erretilu funtzionala behar du. XFCE exekutatzen ari bazara, mesedez jarraitu <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">argibide hauek</a>. Bestela, mesedez instalatu 'trayer' bezalako sistema-erretilu aplikazio bat eta saiatu berriro. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1-k sistema-erretilu funtzionala behar du. XFCE exekutatzen ari bazara, mesedez jarraitu <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">argibide hauek</a>. Bestela, mesedez instalatu 'trayer' bezalako sistema-erretilu aplikazio bat eta saiatu berriro. @@ -6347,7 +6229,7 @@ nextcloudTheme::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 berrikuspenetik eraikia %3, %4 Qt %5 erabiliz, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fa.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fa.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fa.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fa.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out زمان ارتباط تمام شد - + Unknown error: network reply was deleted خطای ناشناخته: پاسخ شبکه پاک شد - + Server replied "%1 %2" to "%3 %4" سرور "1% 2%" به "3% 4%" پاسخ داد @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel منصرف شدن @@ -494,52 +494,52 @@ حذف اتصال همگام سازی پوشه - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed ساخت پوشه ناموفق - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal تأیید حذف اتصال همگام سازی پوشه - + <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> - + Remove Folder Sync Connection حذف اتصال همگام سازی پوشه - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running همگام سازی در حال اجراست - + The syncing operation is running.<br/>Do you want to terminate it? عملیات همگام سازی در حال اجراست.<br/>آیا دوست دارید آن را متوقف کنید؟ - + %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. در حال حاضر هیچ اطلاعات کاربرد ذخیره سازی در دسترس نیست. - + %1 in use 1% در استفاده @@ -598,87 +598,87 @@ ورود - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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 … - + No connection to %1 at %2. اتصال به 1% در 2% وجود ندارد. - + Server configuration error: %1 at %2. - + No %1 connection configured. بدون %1 اتصال پیکربندی شده. - + 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 حذف ارتباط @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out خارج شد - + Disconnected قطع شده - + Connected متصل - + Service unavailable سرویس خارج از دسترس - + Maintenance mode حالت تعمیر - + Network error خطای شبکه - + Configuration error خطای پیکربندی - + Asking Credentials درخواست مجوزها - + Unknown account state وضعیت حساب ناشناخته @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file خطای دسترسی به پرونده پیکربندی - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database خطا در نوشتن متادیتا در پایگاه داده @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ فعالیت همگام سازی - + 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. اگر می خواهید این را دانلود کنید لطفا به تنظیمات بروید تا آن را انتخاب کنید. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1457,22 +1401,7 @@ پرونده های محلی را به عنوان ناسازگار نگه دارید - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1480,24 +1409,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1533,7 +1470,7 @@ OCC::FolderMan - + Could not reset folder state نمی تواند حالت پوشه را تنظیم مجدد کند @@ -1543,37 +1480,37 @@ یک مجله همگام قدیمی '1%' پیدا شد، اما حذف نمی شود. لطفا مطمئن شوید که هیچ برنامه ای در حال حاضر از آن استفاده نمی کند. - + 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. همگام سازی در حال اجراست @@ -1583,67 +1520,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. آخرین همگام سازی موفقیت آمیز بود - + Setup Error. خطا در پیکر بندی. - + User Abort. خارج کردن کاربر. - + Sync is paused. همگام سازی فعلا متوقف شده است - + %1 (Sync is paused) %1 (همگام‌سازی موقتا متوقف شده است) - + No valid folder selected! هیچ پوشه‌ی معتبری انتخاب نشده است! - + The selected path does not exist! - + The selected path is not a folder! مسیر انتخاب شده یک پوشه نیست! - + You have no permission to write to the selected 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% از قبل یک پوشه استفاده شده در یک اتصال همگام سازی پوشه دارد. لطفا یکی دیگر را انتخاب کنید! - + There is already a sync from the server to this local folder. Please pick another local folder! در حال حاضر یک همگام سازی از سرور به این پوشه محلی وجود دارد. لطفا یک پوشه محلی دیگر را انتخاب کنید! @@ -1855,12 +1792,12 @@ OCC::FolderWizard - + Add Folder Sync Connection اضافه کردن اتصال همگام سازی پوشه - + Add Sync Connection افزودن اتصال همگام سازی @@ -1901,42 +1838,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1944,24 +1881,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1982,27 +1919,27 @@ 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 متفاوتی دریافت کردیم. بار بعدی دوباره امتحان کنید. - + We received an unexpected download Content-Length. - + Server returned wrong content-range سرور محدوده محتوای اشتباهی برگرداند. - + Connection Timeout تایم اوت اتصال @@ -2122,54 +2059,54 @@ - + Server notifications that require attention. نمایش اعلانات سرور نیازمند تائید می باشد - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2177,22 +2114,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error خطای به اشتراک گذاری - + Could not retrieve or create the public link share. Error: %1 @@ -2508,7 +2445,7 @@ OCC::Logger - + Error خطا @@ -2518,7 +2455,7 @@ <nobr>پرونده '1%' <br/> را نمی توان برای نوشتن باز کرد. <br/><br/>خروجی log <b>نمی تواند</b> ذخیره شود!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2526,33 +2463,33 @@ 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 به دست آوردن به روز رسانی - + Update Failed @@ -2567,17 +2504,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2688,7 +2625,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> خطای بازگشت از سرور: <em>1%</em> @@ -2698,32 +2635,32 @@ خطایی در دسترسی به نقطه پایانی 'token' وجود داشت: <br><em>1%</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2792,12 +2729,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. نمی توان به روز رسانی های جدید را بررسی کرد. @@ -2807,27 +2744,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 بررسی بروز‌ رسانی @@ -2855,14 +2792,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2887,49 +2824,49 @@ فضای خالی: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder پوشه همگام سازی محلی - - + + (%1) (%1) - + There isn't enough free space in the local folder! فضای خالی کافی در پوشه محلی وجود ندارد! @@ -2999,14 +2936,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3071,7 +3000,7 @@ &بعدی> - + Server address does not seem to be valid @@ -3081,7 +3010,7 @@ آدرس غیر معتبر - + Could not load certificate. Maybe wrong password? امکان بارگزاری گواهی وجود ندارد، ممکن است رمز عبور اشتباه باشد؟ @@ -3179,54 +3108,54 @@ ایجاد پوشه در نکس کلود: %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 تغییر نام پوشه ناموفق بود @@ -3236,12 +3165,12 @@ نمی توانید پوشه را حذف کنید یا پشتیبان بگیرید زیرا پوشه یا یک پرونده در آن در برنامه دیگری باز است. لطفا پوشه یا پرونده را ببندید و مجددا تلاش کنید یا تنظیم را لغو کنید. - + Cannot 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> @@ -3249,7 +3178,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3259,17 +3188,17 @@ - + Skip folders configuration از پیکربندی پوشه‌ها بگذرید - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3280,12 +3209,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3293,7 +3222,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL پاسخ JSON نامعتبر از آدرس نظرسنجی @@ -3311,17 +3240,17 @@ - + 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. @@ -3336,57 +3265,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3396,72 +3325,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3471,7 +3390,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3484,17 +3403,12 @@ خطا در نوشتن متادیتا در پایگاه داده - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3507,44 +3421,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery پرونده از زمان کشف تغییر کرده است. - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! پرونده 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. فایل به طور کامل قابل دانلود نیست. @@ -3554,12 +3468,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! پرونده 1% بخاطر یک پرونده محلی به نام برخورد ذخیره نمی شود! @@ -3569,18 +3483,12 @@ خطا در نوشتن متادیتا در پایگاه داده - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3588,12 +3496,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ؛ بازگردانی شکست خورد: 1% - + A file or folder was removed from a read only share, but restoring failed: %1 یک پرونده یا پوشه از یک اشتراک فقط خواندنی حذف شد، اما بازگردانی شکست خورد: 1% @@ -3667,12 +3575,12 @@ پرونده 1% بخاطر یک پرونده محلی به نام برخورد نتغییر نام داده نمی شود - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3683,12 +3591,12 @@ خطا در نوشتن متادیتا در پایگاه داده - + Failed to rename file - + Error setting pin state @@ -3722,12 +3630,12 @@ خطا در نوشتن متادیتا در پایگاه داده - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3745,22 +3653,22 @@ کد HTTP اشتباه توسط سرور برگردانده شد. 201 انتظار می رفت، اما "1% 2%" دریافت شد. - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database خطا در نوشتن متادیتا در پایگاه داده @@ -3768,46 +3676,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists پرونده 1% بارگذاری نمی شود زیرا پرونده دیگری با نام مشابه، که تنها در وضعیت متفاوت است، وجود دارد - - + + Upload of %1 exceeds the quota for the folder بارگذاری از 1% بیش از سهمیه برای پوشه است - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. پرونده محلی در طول همگام سازی تغییر کرد. این ادامه خواهد یافت. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + Failed to unlock encrypted folder. @@ -3817,12 +3717,12 @@ خطا در نوشتن متادیتا در پایگاه داده - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3830,32 +3730,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. فایل محلی در حین همگام‌سازی حذف شده است. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + Poll URL missing - + Unexpected return code from server (%1) کد بازگشت غیر منتظره از سرور (1%) - + Missing File ID from server فاقد شناسه پرونده از سرور - + Missing ETag from server فاقد ETag از سرور @@ -3863,22 +3763,22 @@ OCC::PropagateUploadFileV1 - + 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) سرور آخرین تکه را تایید نکرد. (برچسب الکترونیکی وجود نداشت) @@ -3956,7 +3856,7 @@ OCC::ServerNotificationHandler - + Dismiss پنهان کن @@ -4126,17 +4026,17 @@ محافظت کلمه عبور - + Allow editing اجازه‌ی ویرایش - + View only - + Allow upload and editing اجازه آپلود و ویرایش @@ -4146,7 +4046,7 @@ تاریخ انقضا - + File drop (upload only) انداختن فایل (فقط آپلود) @@ -4156,32 +4056,32 @@ لغو اشتراک - + Link name - + Note to recipient توجه داشته باشید به گیرنده - + Password protect نگهداری کردن رمز عبور - + Set expiration date تنظیم تاریخ انقضا - + Delete link - + Add another link افزودن آدرس دیگر @@ -4191,27 +4091,27 @@ پیوند اشتراک را حذف کنید - + Confirm Link Share Deletion حذف اشتراک گذاری لینک را تایید کنید - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>آیا شما واقعا می خواهید اشتراک لینک عمومی را حذف کنید<i>1%</i>؟</p><p> توجه: این عمل نمی تواند انجام نشود.</p> - + Delete حذف - + Cancel لغو - + Public link پیوند عمومی @@ -4224,12 +4124,12 @@ - + Search globally - + Copy link کپی کردن آدرس لینک @@ -4239,22 +4139,22 @@ هیچ نتیجه ای برای '1%' وجود ندارد - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you من چیزی را با شما به اشتراک گذاشتم @@ -4292,42 +4192,42 @@ - + Can reshare امکان اشتراک گذاری وجود دارد - + Note to recipient - + Set expiration date - + Unshare - + Can create امکان ایجاد وجود دارد - + Can change امکان تغییر وجود دارد - + Can delete امکان حذف وجود دار - + Password protect @@ -4344,23 +4244,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you من چیزی را با شما به اشتراک گذاشتم - - + + Share options @@ -4376,73 +4276,73 @@ - + Copy private link to clipboard لینک خصوصی را در کلیپ بورد کپی کنید - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser بازکردن در مرورگر - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete حذف @@ -4587,12 +4487,12 @@ د رهر صورت به این گواهی نامه اطمینان کن. - + Untrusted Certificate گواهینامه‎ی غیر معتبر - + Cannot connect securely to <i>%1</i>: عدم امکان اتصال امن به <i>%1</i>: @@ -4602,62 +4502,62 @@ - + with Certificate %1 با گواهی %1 - - - + + + &lt;not specified&gt; &lt؛ مشخص نشده است &gt؛ - - + + Organization: %1 سازماندهی : %1 - - + + Unit: %1 واحد: %1 - - + + Country: %1 کشور: %1 - + Fingerprint (SHA1): <tt>%1</tt> اثرانگشت (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 تاریخ موثر: %1 - + Expiration Date: %1 تاریخ انقضا: %1 - + Issuer: %1 صادرکننده: %1 @@ -4750,33 +4650,33 @@ یک خطای داخلی با شماره خطای %1 رخ داده است. - + %1 (skipped due to earlier error, trying again in %2) 1% (به علت خطای قبلی از بین رفته است، دوباره در 2% امتحان کنید) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. ناسازگاری حل نشده. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() تنها 1% موجود است، حداقل 2% برای شروع مورد نیاز است - + Aborted @@ -4853,16 +4753,16 @@ نام پرونده هایی که با دوره ای پایان می یابند در این سیستم پرونده پشتیبانی نشده اند. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + پایگاه داده محلی باز یا ساخته نمی شود. اطمینان حاصل کنید که دسترسی به نوشتن در پوشه همگام سازی دارید. + + File names containing the character '%1' are not supported on this file system. نام پرونده هایی که شامل کاراکتر '1%' هستند در این سیستم پرونده پشتیبانی نشده اند. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - پایگاه داده محلی باز یا ساخته نمی شود. اطمینان حاصل کنید که دسترسی به نوشتن در پوشه همگام سازی دارید. - - The file name is a reserved name on this file system. نام پرونده یک نام رزرو شده در این سیستم پرونده است. @@ -4883,7 +4783,7 @@ پرونده/پوشه رد شد زیرا مخفی است. - + Using virtual files with suffix, but suffix is not set @@ -4898,7 +4798,7 @@ نام پرونده در سیستم پرونده شما رمزگذاری نمی شود. - + Unable to read the blacklist from the local database نمی توان لیست سیاه را از پایگاه داده محلی خواند @@ -4913,17 +4813,17 @@ وضعیت ناموفق + + Unable to read from the sync journal. + نمی توان از مجله همگام ساز خواند. + + Filename encoding is not valid رمزگذاری نام فایل معتبر نیست - - Unable to read from the sync journal. - نمی توان از مجله همگام ساز خواند. - - - + Cannot open the sync journal نمی توان مجله همگام ساز را باز کرد @@ -4933,22 +4833,22 @@ کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید + + Synchronization will resume shortly. + + + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - Synchronization will resume shortly. - - - - + 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. برای بعضی از بارگذاری ها در سرور فضای کافی موجود نیست. @@ -5017,49 +4917,49 @@ OCC::Systray - + Add account افزودن حساب کاربری - + Open main dialog + - Pause sync - - + + Resume sync - + Settings تنظیمات - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5067,24 +4967,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5092,22 +4992,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5115,32 +5015,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5148,22 +5048,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5268,30 +5168,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5813,52 +5695,52 @@ - + %n day ago %n روز گذشته%n روز گذشته - + %n days ago %n ساعت پیش%n روز پیش - + in the future در آینده - + %n hour ago - + %n hours ago - + now اکنون - + Less than a minute ago کمتر از یک دقیقه پیش - + %n minute ago - + %n minutes ago - + Some time ago چند وقت پیش @@ -5892,7 +5774,7 @@ SyncJournalDb - + Failed to connect database. @@ -5900,7 +5782,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5937,32 +5819,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions اقدامات حساب @@ -5972,24 +5854,24 @@ - + Set status - - + + Log out خروج - - + + Log in ورود - + Remove account حذف حساب کاربری @@ -6050,57 +5932,57 @@ 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 @@ -6108,7 +5990,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6141,64 +6023,64 @@ Window - + Nextcloud desktop main dialog - + Current account حساب جاری - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account افزودن حساب کاربری - + Add new account - + Settings تنظیمات - + Exit خروج - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6208,32 +6090,32 @@ - + Account switcher and settings menu - + Connected متصل - + Disconnected قطع شده - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps برنامه های بیشتر @@ -6243,7 +6125,7 @@ - + Open %1 in browser 1% را در مرورگر باز کنید @@ -6263,7 +6145,7 @@ - + Unified search results list @@ -6274,7 +6156,7 @@ - + %1 - File activity @@ -6282,7 +6164,7 @@ main.cpp - + System Tray not available @@ -6292,7 +6174,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6300,7 +6182,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fi.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fi.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fi.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fi.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Avaa %1 paikallisesti - + Open share dialog Avaa jakoikkuna - + Share %1 Jaa %1 - - + + Show more actions Näytä enemmän toimintoja @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -160,7 +160,7 @@ Error removing "%1": %2 - Virhe poistaessa "%1": %2 + @@ -170,7 +170,7 @@ Could not remove folder "%1" - Ei voitu poistaa kansiota "%1" + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Yhteys aikakatkaistiin - + Unknown error: network reply was deleted Tuntematon virhe: verkkovastaus poistettiin - + Server replied "%1 %2" to "%3 %4" Palvelin vastasi "%1 %2" pyyntöön "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Päästä päähän-salauksen avain - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Kryptografisen identiteettisi suojaamiseksi salaamme sen 12-sanaisella avainkoodilla. Kirjaa se ylös ja pidä turvassa. Avainkoodia tarvitaan muiden laitteiden (kuten puhelimen tai kannettavan tietokoneen) yhdistämiseksi tiliisi. @@ -305,9 +305,9 @@ - - - + + + Cancel Peruuta @@ -494,52 +494,52 @@ Poista kansion synkronointiyhteys - + Disable virtual file support … Poista virtuaalitiedostojen tuki käytöstä … - + Enable virtual file support %1 … Ota käyttöön virtuaalitiedostojen tuki %1 … - + (experimental) (kokeellinen) - + Folder creation failed Kansion luominen epäonnistui - + <p>Could not create local folder <i>%1</i>.</p> <p>Ei voitu luoda paikallista kansiota <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Vahvista kansion synkronointiyhteyden poisto - + <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> - + Remove Folder Sync Connection Poista kansion synkronointiyhteys - + Disable virtual file support? Poistetaanko virtuaalitiedostojen tuki käytöstä? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -552,37 +552,37 @@ Tämä toiminto peruu kaikki tämänhetkiset synkronoinnit. - + Disable support Poista tuki - + 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 (%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. - + %1 in use %1 käytössä @@ -602,87 +602,87 @@ Kirjaudu sisään - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. Palvelimen versiota %1 ei tueta! 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. Palvelin %1 on parhaillaan huoltotilassa. - + Signed out from %1. Kirjauduttu ulos kohteesta %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Hankitaan valtuutus selaimelta. <a href='%1'>Napsauta tästä</a> avataksesi selaimen uudelleen. - + Connecting to %1 … Yhdistetään kohteeseen %1 … - + No connection to %1 at %2. Ei yhteyttä kohteeseen %1 osoitteessa %2. - + Server configuration error: %1 at %2. - Palvelimen kokoonpanovirhe: %1 at %2. + - + No %1 connection configured. %1-yhteyttä ei ole määritelty. - + There are folders that were not synchronized because they are too big: Havaittiin kansioita, joita ei synkronoitu, koska ne ovat kooltaan liian suuria: - + There are folders that were not synchronized because they are external storages: Seuraavia kansioita ei synkronoitu, koska ne sijaitsevat ulkoisella tallennustilalla: - + There are folders that were not synchronized because they are too big or external storages: Seuraavia kansioita ei synkronoitu, koska ne ovat liian suuria tai ulkoisia tallennustiloja: - + 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 @@ -690,47 +690,47 @@ OCC::AccountState - + Signed out Kirjauduttu ulos - + Disconnected Yhteys katkaistu - + Connected Yhdistetty - + Service unavailable Palvelu ei ole käytettävissä - + Maintenance mode Huoltotila - + Network error Verkkovirhe - + Configuration error Asetusvirhe - + Asking Credentials Kysytään tilitietoja - + Unknown account state Tuntematon tilin tila @@ -738,12 +738,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Symbolisia linkkejä ja tiedostoja, jotka ovat ohitettavien tiedostojen listalla, ei synkronoida. - + For more activities please open the Activity app. Lisää tapahtumia löydät Tapahtumat-sovelluksesta. @@ -804,42 +804,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Jatkaminen tarkoittaa <b>näiden asetusten poistamista </b>. - + Continuing will mean <b>ignoring these settings</b>. Jatkaminen tarkoittaa <b>näiden asetusten ohittamista </b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Jotkin asetetukset on asetettu uudemmalla sovelluksen versiolla ja käyttävät ominaisuuksia, jotka eivät ole saatavilla tässä versiossa.<br><br>%1<br><br>Nykyiset asetukset on varmuuskopioituna kohteeseen %2</i>. - + Quit Lopeta - + Continue Jatka - + Error accessing the configuration file Asetustiedostoa ei voitu käyttää - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 Lopeta %1 @@ -873,59 +873,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -933,12 +883,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1104,19 +1054,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1124,8 +1061,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! Palvelinvirhe: PROPFIND-vastaus ei ole XML-formaatissa! @@ -1133,27 +1070,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Virhe kansion %1 avaamisessa - + Directory not accessible on client, permission denied Kansioon ei ole käyttöoikeutta - + Directory not found: %1 Kansiota ei löytynyt: %1 - + Filename encoding is not valid Tiedostonimen merkkikoodaus ei ole kelvollinen - + Error while reading directory %1 Virhe kansion %1 luvussa @@ -1177,7 +1114,7 @@ - + Error returned from the server: <em>%1</em> Palvelun palautti virheen: <em>%1</em> @@ -1189,24 +1126,24 @@ - + 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> Palvelimen palauttamaa JSON:ia ei voitu jäsentää: <br><em>%1</em> - + The reply from the server did not contain all expected fields Vastaus palvelimelta ei sisältänyt kaikkia odotettuja kenttiä - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1367,41 +1304,41 @@ Synkronointiaktiviteetti - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. Uusi kansio kooltaan yli %1 Mt on lisätty: %2. - + A folder from an external storage has been added. Kansio erillisestä tallennustilasta on lisätty. - + Please go in the settings to select it if you wish to download it. Jos haluat ladata sen, valitse kansio asetuksista. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1410,6 +1347,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1462,22 +1406,7 @@ Pidä paikalliset tiedostot konfliktina - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1485,24 +1414,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files Pidä tiedostot @@ -1538,7 +1475,7 @@ OCC::FolderMan - + Could not reset folder state Kansion tilaa ei voitu alustaa @@ -1548,37 +1485,37 @@ - + 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. @@ -1588,67 +1525,67 @@ Synkronointi onnistui, ratkaisemattomia konflikteja. - + Sync finished with unresolved conflicts. Synkronointi päättyi ratkaisemattomilla konflikteilla. - + Last Sync was successful. Viimeisin synkronointi suoritettiin onnistuneesti. - + Setup Error. Asetusvirhe. - + User Abort. Käyttäjän keskeyttämä. - + 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 does not exist! Valittua polkua ei ole olemassa! - + 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 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! - + There is already a sync from the server to this local folder. Please pick another local folder! Palvelimelta synkronoidaan jo tähän paikalliseen kansioon. Valitse toinen sijainti! @@ -1860,12 +1797,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Lisää kansion synkronointiyhteys - + Add Sync Connection Lisää synkronointiyhteys @@ -1906,42 +1843,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1949,24 +1886,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) (kokeellinen) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1987,27 +1924,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout Yhteys aikakatkaistiin @@ -2127,54 +2064,54 @@ Koosta vianetsintätiedot... - + Server notifications that require attention. Palvelinilmoitukset jotka vaativat huomiota. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? Vaihdetaanko päivityskanavaa? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel Vaihda päivityskanava - + Cancel Peruuta - + Create Debug Archive Koosta vianetsintätiedot - + Zip Archives - Zip-arkistot + - + Debug Archive Created Vianetsintätiedot koostettu - + Debug archive is created at %1 Vianetsintätietodot koostettu kohteeseen %1 @@ -2182,22 +2119,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Salasana vaaditaan jaettavalle - + Please enter a password for your link share: Syötä salasana linkkijaolle: - + Sharing error Jakamisvirhe - + Could not retrieve or create the public link share. Error: %1 @@ -2517,7 +2454,7 @@ OCC::Logger - + Error Virhe @@ -2527,7 +2464,7 @@ <nobr>Tiedostoa '%1'<br/>ei voida avata kirjoittamista varten.<br/><br/>Lokitulostusta<b>ei</b>pystytä tallentamaan!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2535,33 +2472,33 @@ 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ä - + Update Failed Päivitys epäonnistui @@ -2576,17 +2513,17 @@ - + Ask again later Kysy myöhemmin uudelleen - + Restart and update Käynnistä uudelleen ja päivitä - + Update manually Päivitä manuaalisesti @@ -2697,7 +2634,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Palvelimelta palautunut virhe: <em>%1</em> @@ -2707,32 +2644,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - Tyhjä JSON OAuth2-uudelleenohjauksesta + - + Could not parse the JSON returned from the server: <br><em>%1</em> Ei voitu jäsentää palvelimen palauttamaa JSON:ia: <br><em>%1</em> - + The reply from the server did not contain all expected fields Vastaus palvelimelta ei sisältänyt kaikkia odotettuja kenttiä - + <h1>Login Error</h1><p>%1</p> <h1>Kirjautumisvirhe</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> @@ -2801,12 +2738,12 @@ - + Could not download update. Please open %1 to download the update manually. Päivityksen lataus epäonnistui. Avaa %1 ladataksesi päivityksen manuaalisesti. - + Could not check for new updates. Päivitysten tarkistus epäonnistui. @@ -2816,27 +2753,27 @@ - + New %1 is available. Please open %2 to download the update. Uusi %1 on saatavilla. Avaa %2 ladataksesi päivityksen. - + 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 @@ -2864,14 +2801,14 @@ Yhdistä… - - + + Use &virtual files instead of downloading content immediately %1 Käytä &virtuaalitiedostoja sen sijaan, että sisältö ladataan välittömästi %1 - - + + (experimental) (kokeellinen) @@ -2896,49 +2833,49 @@ Vapaata tilaa: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows ei tue virtuaalitiedostoja levyosioiden juurihakemistoissa. Valitse alikansio. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" Synkronoi kansio "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 vapaata tilaa - + Virtual files are not available for the selected folder Virtuaalitiedostot eivät ole käytettävissä valitulle kansiolle - + Local Sync Folder Paikallinen synkronointikansio - - + + (%1) (%1) - + There isn't enough free space in the local folder! Paikallisessa kansiossa ei ole riittävästi vapaata tilaa! @@ -3008,14 +2945,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3081,7 +3010,7 @@ &Seuraava > - + Server address does not seem to be valid Palvelimen osoite ei vaikuta kelvolliselta @@ -3091,7 +3020,7 @@ Virheellinen URL - + Could not load certificate. Maybe wrong password? Varmennetta ei voitu ladata. Kenties salasana oli väärin. @@ -3189,54 +3118,54 @@ luodaan kansio Nextcloudiin: %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 @@ -3246,12 +3175,12 @@ - + Cannot 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> @@ -3259,7 +3188,7 @@ OCC::OwncloudWizard - + Add %1 account Lisää %1-tili @@ -3269,17 +3198,17 @@ %1-yhteysavustaja - + Skip folders configuration Ohita kansioiden määritykset - + Enable experimental feature? Otetaanko kokeellinen toiminto käyttöön? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3290,12 +3219,12 @@ - + Enable experimental placeholder mode - + Stay safe Pysy turvassa @@ -3303,7 +3232,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3321,17 +3250,17 @@ - + Symbolic links are not supported in syncing. - Symboliset linkit eivät ole tuettuja synkronoinnissa. + - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. @@ -3346,57 +3275,57 @@ - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Tiedoston nimi on liian pitkä. - + File/Folder is ignored because it's hidden. Tiedosto/kansio ohitetaan, koska se on piilotettu. - + Stat failed. Stat epäonnistui. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size koko @@ -3406,72 +3335,62 @@ oikeudet - - server reported no %1 - - - - - permission - - - - + file id tiedoston id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 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 - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database Virhe tietokantaa luettaessa @@ -3481,7 +3400,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3494,17 +3413,12 @@ Virhe kirjoittaessa metadataa tietokantaan - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Virhe metatietoja päivittäessä: %1 - + File is currently in use Tiedosto on tällä hetkellä käytössä @@ -3517,44 +3431,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Tiedosto on muuttunut löytymisen jälkeen - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3564,12 +3478,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3579,18 +3493,12 @@ Virhe kirjoittaessa metadataa tietokantaan - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Virhe päivittäessä metatietoja: %1 - + The file %1 is currently in use Tiedosto %1 on tällä hetkellä käytössä @@ -3598,12 +3506,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3677,12 +3585,12 @@ - + Error updating metadata: %1 Virhe metatietoja päivittäessä: %1 - + The file %1 is currently in use Tiedosto %1 on tällä hetkellä käytössä @@ -3693,12 +3601,12 @@ Virhe kirjoittaessa metadataa tietokantaan - + Failed to rename file Tiedoston uudelleennimeäminen epäonnistui - + Error setting pin state @@ -3732,12 +3640,12 @@ Virhe kirjoittaessa metadataa tietokantaan - + Error writing metadata to the database: %1 Virhe kirjoittaessa metatietoja tietokantaan: %1 - + The file %1 is currently in use Tiedosto %1 on tällä hetkellä käytössä @@ -3755,22 +3663,22 @@ HTTP-palvelin palautti väärän koodin. Odotettiin koodia 201, vastaanotettiin "%1 %2". - + Error updating metadata: %1 Virhe metatietoja päivittäessä: %1 - + The file %1 is currently in use Tiedosto %1 on tällä hetkellä käytössä - + Error setting pin state - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -3778,46 +3686,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + Failed to unlock encrypted folder. @@ -3827,12 +3727,12 @@ Virhe kirjoittaessa metadataa tietokantaan - + Error updating metadata: %1 Virhe metatietoja päivittäessä: %1 - + The file %1 is currently in use Tiedosto %1 on tällä hetkellä käytössä @@ -3840,32 +3740,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Paikallinen tiedosto poistettiin synkronoinnin aikana. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + Poll URL missing - + Unexpected return code from server (%1) Odottamaton paluukoodi palvelimelta (%1) - + Missing File ID from server - + Missing ETag from server @@ -3873,22 +3773,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3966,7 +3866,7 @@ OCC::ServerNotificationHandler - + Dismiss Hylkää @@ -4136,17 +4036,17 @@ Salasanasuojaus - + Allow editing Salli muokkaus - + View only - + Allow upload and editing Salli lähetys ja muokkaus @@ -4156,7 +4056,7 @@ Vanhenemispäivä - + File drop (upload only) Tiedostojen pudotus (vain lähetys) @@ -4166,32 +4066,32 @@ Poista jako - + Link name Linkin nimi - + Note to recipient Huomio vastaanottajalle - + Password protect Suojaa salasanalla - + Set expiration date Aseta vanhenemispäivä - + Delete link Poista linkki - + Add another link Lisää toinen linkki @@ -4201,27 +4101,27 @@ Poista jakolinkki - + Confirm Link Share Deletion Vahvista linkkijaon poistaminen - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Poista - + Cancel Peruuta - + Public link Julkinen linkki @@ -4234,12 +4134,12 @@ Jaa käyttäjien tai ryhmien kanssa… - + Search globally Hae globaalisti - + Copy link Kopioi linkki @@ -4249,22 +4149,22 @@ Ei tuloksia haulla '%1' - + No results for "%1" Ei tuloksia haulla "%1" - + Password for share required Salasana vaaditaan jakoon - + Please enter a password for your email share: - + I shared something with you Jaoin jotain kanssasi @@ -4302,42 +4202,42 @@ Vanhenee: - + Can reshare Voi uudelleenjakaa - + Note to recipient - + Set expiration date Aseta vanhenemispäivä - + Unshare Poista jako - + Can create Voi luoda - + Can change Voi muuttaa - + Can delete Voi poistaa - + Password protect Suojaa salasanalla @@ -4354,23 +4254,23 @@ OCC::SocketApi - + Context menu share - + Select new location … Valitse uusi sijainti… - + I shared something with you Jaoin jotain kanssasi - - + + Share options Jakamisen valinnat @@ -4386,73 +4286,73 @@ - + Copy private link to clipboard Kopioi yksityinen linkki leikepöydälle - + Send private link by email … Lähetä yksityinen linkki sähköpostitse… - + Resharing this file is not allowed Tämän tiedoston uudelleenjakaminen ei ole sallittu - + Resharing this folder is not allowed Tämän kansion uudelleenjakaminen ei ole sallittu - - + + Copy public link Kopioi julkinen linkki - + Copy internal link Kopioi sisäinen linkki - + Edit Muokkaa - + Open in browser Avaa selaimessa - + Resolve conflict … Selvitä virhetilanne … - + Move and rename … Siirrä ja uudelleennimeä … - + Move, rename and upload … Siirrä, uudelleennimeä ja lataa … - + Delete local changes Poista paikalliset muutokset - + Move and upload … Siirrä ja lataa … - + Delete Poista @@ -4598,12 +4498,12 @@ 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: @@ -4613,62 +4513,62 @@ - + 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 (SHA1): <tt>%1</tt> Sormenjälki (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Sormenjälki (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Sormenjälki (SHA-512): <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 @@ -4761,33 +4661,33 @@ Sisäinen virhe, numero %1. - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 Tiedostoa ei voitu päivittää: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Selvittämätön ristiriita. - + 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 - + Aborted Peruutettu @@ -4864,16 +4764,16 @@ + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + File names containing the character '%1' are not supported on this file system. Tässä tiedostojärjestelmässä ei voi käyttää tiedostojen nimessä merkkiä '%1'. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - - The file name is a reserved name on this file system. @@ -4894,7 +4794,7 @@ Tiedosto/kansi ohitetaan, koska se on piilotettu. - + Using virtual files with suffix, but suffix is not set @@ -4909,7 +4809,7 @@ - + Unable to read the blacklist from the local database @@ -4924,17 +4824,17 @@ Stat epäonnistui. + + Unable to read from the sync journal. + + + Filename encoding is not valid Tiedostonimen merkistökoodaus ei ole kelvollista - - Unable to read from the sync journal. - - - - + Cannot open the sync journal @@ -4944,22 +4844,22 @@ Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Levytila on vähissä. Lataukset, jotka pienentäisivät tilaa alle %1 ohitettiin. - + There is insufficient space available on the server for some uploads. Palvelimella on liian vähän tilaa joillekin latauksille. @@ -4977,17 +4877,17 @@ All synced! - Kaikki synkronoitu! + Some files couldn't be synced! - Joitain tiedostoja ei voitu synkronoida! + See below for errors - Katso virheet alapuolelta + @@ -4997,27 +4897,27 @@ Sync paused - Synkronointi keskeytetty + Some files could not be synced! - Joitain tiedostoja ei voitu synkronoida! + See below for warnings - Katso varoitukset alapuolelta + %1 of %2 · %3 left - %1/%2 · %3 jäljellä + %1 of %2 - %1/%2 + @@ -5028,49 +4928,49 @@ OCC::Systray - + Add account Lisää tili - + Open main dialog Avaa pääikkuna + - Pause sync Tauota synkronointi - - + + Resume sync Jatka synkronointia - + Settings Asetukset - + Exit %1 Lopeta %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5078,24 +4978,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1-työpöytäsovellus</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versio %1. Lisätietoja on saatavilla napsauttamalla <a href='%2'>tästä</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5103,22 +5003,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5126,32 +5026,32 @@ OCC::User - + Retry all uploads Yritä uudelleen kaikkia lähetyksiä - + Synced %1 Synkronoitu %1 - + You renamed %1 Nimesit uudelleen %1 - + You deleted %1 Poistit %1 - + You created %1 Loit %1 - + You changed %1 Muutit %1 @@ -5159,22 +5059,22 @@ OCC::UserModel - + 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> - + Remove connection Poista yhteys - + Cancel Peruuta @@ -5204,7 +5104,7 @@ Could not set user status. Make sure you are connected to the server. - Käyttäjän tilatietoa ei voitu asettaa. Varmista että olet yhdistettynä palvelimeen. + @@ -5215,7 +5115,7 @@ Don't clear - Älä tyhjennä + @@ -5248,61 +5148,43 @@ Less than a minute - Alle minuutti + 1 minute - 1 minuutti + %1 minutes - %1 minuuttia + %1 hours - %1 tuntia + 1 day - 1 päivä + %1 days - %1 päivää + OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5824,52 +5706,52 @@ Uusi kansio - + %n day ago %n päivä sitten%n päivä sitten - + %n days ago %n päivää sitten%n päivää sitten - + in the future tulevaisuudessa - + %n hour ago %n tunti sitten%n tunti sitten - + %n hours ago %n tuntia sitten%n tuntia sitten - + now nyt - + Less than a minute ago Alle minuutti sitten - + %n minute ago %n minuutti sitten%n minuutti sitten - + %n minutes ago %n minuuttia sitten%n minuuttia sitten - + Some time ago Jokin aika sitten @@ -5903,7 +5785,7 @@ SyncJournalDb - + Failed to connect database. Tietokantaan yhdistäminen epäonnistui. @@ -5911,9 +5793,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Etsi tiedostoja, viestejä, tapahtumia… + @@ -5921,7 +5803,7 @@ Load more results - Lataa lisää tuloksia + @@ -5937,7 +5819,7 @@ Load more results - Lataa lisää tuloksia + @@ -5948,21 +5830,11 @@ - + Switch to account Vaihda käyttäjään - - Current user status is online - Nykyinen käyttäjän tila on Online - - - - Current user status is do not disturb - Nykyinen käyttäjän tila on 'Älä häiritse' - - Account connected Tili yhdistetty @@ -5973,7 +5845,17 @@ Tiliä ei yhdistetty - + + Current user status is online + Nykyinen käyttäjän tila on Online + + + + Current user status is do not disturb + Nykyinen käyttäjän tila on 'Älä häiritse' + + + Account actions Tilin toiminnot @@ -5983,24 +5865,24 @@ Poista tili - + Set status Aseta tilatieto - - + + Log out Kirjaudu ulos - - + + Log in Kirjaudu sisään - + Remove account Poista tili @@ -6061,57 +5943,57 @@ 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 @@ -6119,7 +6001,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Tarkistussumman otsake on muodostettu väärin. @@ -6152,64 +6034,64 @@ Window - + Nextcloud desktop main dialog - + Current account Nykyinen tili - - + + Resume sync for all Jatka synkronointia - - + + Pause sync for all Tauota synkronointi - + Set user status Aseta käyttäjän tila - + Add account Lisää tili - + Add new account Lisää uusi tili - + Settings Asetukset - + Exit Poistu - + Current user avatar Käyttäjän avatar - + Current user status is online Nykyinen käyttäjän tila on Online - + Current user status is do not disturb Nykyinen käyttäjän tila on 'Älä häiritse' @@ -6219,32 +6101,32 @@ Jaa %1 - + Account switcher and settings menu Tilin valinta ja asetukset - + Connected Yhdistetty - + Disconnected Yhteys katkaistu - + Open local folder of current account Avaa nykyisen tilin paikallinen kansio - + Open Nextcloud Talk in browser Avaa Nextcloud Talk selaimessa - + More apps Lisää sovelluksia @@ -6254,7 +6136,7 @@ Sovellusvalikko - + Open %1 in browser Avaa %1 selaimeen @@ -6274,7 +6156,7 @@ Avaa jakoikkuna - + Unified search results list @@ -6285,7 +6167,7 @@ Näytä lisää toimintoja - + %1 - File activity @@ -6293,7 +6175,7 @@ main.cpp - + System Tray not available Ilmoitusaluetta ei ole saatavilla @@ -6303,7 +6185,7 @@ %1 vaatii toimivan ilmoitusalueen. Jos käytät XFCE:tä, seuraa <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">näitä ohjeita</a>. Muussa tapauksessa asenna jokin ilmoitusalueen tarjoava sovellus, kuten "trayer" ja yritä uudelleen. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6311,7 +6193,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -6694,7 +6576,7 @@ Download of end-to-end encrypted file failed - Päästä päähän -salatun tiedoston lataaminen epäonnistui + diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fr.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fr.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_fr.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_fr.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,38 +10,38 @@ ActivityItem - + Open %1 locally Ouvrir %1 localement - + Open share dialog Ouvrir la fenêtre de partage - + Share %1 Partager %1 - - + + Show more actions Afficher les autres actions View activity - Voir l'activité + ActivityList - + Activity list - Liste des activités + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Délai de connexion dépassé - + Unknown error: network reply was deleted Erreur inconnue : La réponse du réseau a été supprimée - + Server replied "%1 %2" to "%3 %4" Le serveur a répondu "%1 %2" à "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Chiffrement de bout en bout mnémotechnique - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pour protéger votre identité cryptographique, nous la chiffrons avec une mnémonique de 12 mots du dictionnaire. Veuillez les noter et les garder en sécurité. Ils seront nécessaires pour ajouter d’autres appareils à votre compte (comme votre téléphone portable ou votre ordinateur portable). @@ -305,9 +305,9 @@ - - - + + + Cancel Annuler @@ -494,52 +494,52 @@ Supprimer la synchronisation du dossier - + Disable virtual file support … Désactiver la prise en charge du fichier virtuel ... - + Enable virtual file support %1 … Activer la prise en charge du fichier virtuel %1 … - + (experimental) (expérimental) - + Folder creation failed Échec de création du dossier - + <p>Could not create local folder <i>%1</i>.</p> <p>Impossible de créer le dossier local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmer la suppression de synchronisation de dossier - + <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> - + Remove Folder Sync Connection Supprimer la synchronisation de ce dossier - + Disable virtual file support? Désactiver le support des fichiers virtuels ? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -550,37 +550,37 @@ Cette action entraînera l'interruption de toute synchronisation en cours. - + Disable support Désactiver le support - + 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 (%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. - + %1 in use %1 utilisé(s) @@ -600,88 +600,88 @@ Se connecter - + %1 as %2 %1 avec le compte %2 - + The server version %1 is unsupported! Proceed at your own risk. La version %1 du serveur n'est pas maintenue ! Vous prenez vos propres risques. - + 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 … Connexion à %1 ... - + No connection to %1 at %2. Aucune connexion au serveur %1 à l'adresse %2. - + Server configuration error: %1 at %2. Erreur de configuration serveur : %1 à %2. - + No %1 connection configured. Aucune connexion à %1 configurée - + 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 parce 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 @@ -689,47 +689,47 @@ OCC::AccountState - + Signed out Session fermée - + Disconnected Déconnecté - + Connected Connecté - + Service unavailable Service indisponible - + Maintenance mode mode maintenance - + Network error Erreur réseau - + Configuration error Erreur de configuration - + Asking Credentials informations d'identification demandées - + Unknown account state Etat du compte inconnu @@ -737,12 +737,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Les fichiers présents dans la liste d'exclusion ainsi que les liens symboliques ne sont pas synchronisés. - + For more activities please open the Activity app. Pour plus d'activités veuillez lancer l'application Activité. @@ -787,7 +787,7 @@ An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - Un paquet pkcs12 chiffré est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. + Un paquet pkcs12 encrypté est vivement recommandé vu qu'une copie sera stockée dans le fichier de configuration. @@ -803,42 +803,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Continuer va <b>supprimer ces paramètres</b>. - + Continuing will mean <b>ignoring these settings</b>. Continuer va <b>ignorer ces paramètres</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Des paramètres ont été configurés dans des versions plus récentes que ce client et utilisent des fonctionnalités non disponibles dans la version actuelle. <br><br>%1<br><br> Le fichier de configuration actuel a été sauvegardé à <i>%2</i>. - + Quit Quitter - + Continue Continuer - + 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. Please make sure the file can be accessed by your user. Une erreur s'est produite lors de l'accès au fichier de configuration situé dans %1. Assurez-vous que le fichier est accessible par votre utilisateur. - + Quit %1 Quitter %1 @@ -872,59 +872,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - Le fichier %1 ne peut être téléversé parce qu'un autre fichier avec le même nom hormis la casse existe - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Fichier supprimé (démarrer le téléversement) %1 - - - - Local file changed during syncing. It will be resumed. - Fichier local modifié pendant la synchronisation. La synchronisation sera reprise. - - - - - Local file changed during sync. - Fichier local modifié pendant la synchronisation. - - - - Error updating metadata: %1 - Erreur à la mise à jour des méta-données : %1 - - - - The file %1 is currently in use - Le fichier %1 est en cours d'utilisation - - - - The local file was removed during sync. - Le fichier local a été supprimé pendant la synchronisation. - - - - ; Restoration Failed: %1 - ; Restauration échouée : %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -932,12 +882,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Merci de saisir votre phrase secrète E2E : <br><br>Utilisateur : %2<br>Compte : %3<br> - + Enter E2E passphrase Entrez la phrase secrète E2E @@ -1103,19 +1053,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1123,8 +1060,8 @@ Données manquantes dans la réponse à la découverte du fichier sur le serveur - - + + Server error: PROPFIND reply is not XML formatted! Erreur du serveur : La réponse PROPFIND n'est pas au format XML ! @@ -1132,27 +1069,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Erreur à l’ouverture du dossier %1 - + Directory not accessible on client, permission denied Dossier non accessible au client, permission refusée - + Directory not found: %1 Dossier non trouvé : %1 - + Filename encoding is not valid L’encodage du nom de fichier n’est pas valide - + Error while reading directory %1 Erreur de lecture du dossier %1 @@ -1176,7 +1113,7 @@ - + Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur : <em>%1</em> @@ -1188,24 +1125,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> + - + Could not parse the JSON returned from the server: <br><em>%1</em> Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> - + The reply from the server did not contain all expected fields La réponse du serveur ne contient pas tous les champs attendus - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL renvoyée par le serveur ne commence pas par HTTPS alors que l'URL de connexion commence par HTTPS. La connexion ne sera pas possible car cela pourrait être un problème de sécurité. Veuillez contacter votre administrateur. @@ -1366,19 +1303,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é. @@ -1386,32 +1323,42 @@ - + 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Le dossier %1 a été créé mais il était exclu de la synchronisation auparavant. Les données qu'il contient ne seront pas synchronisées. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Le fichier %1 a été créé mais il était exclu de la synchronisation auparavant. Il ne sera pas synchronisé. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). %1 - Les modifications apportées aux dossiers synchronisés ne peuvent pas être suivies de manière fiable. + Les modifications apportées aux dossiers synchronisés n'ont pas pu être suivies de manière fiable. -Cela signifie que le client de synchronisation ne va pas téléverser immédiatement les modifications locales, mais va à la place rechercher et téléverser les modifications locales qu'occasionnellement (toutes les deux heures par défaut). +Cela signifie que le client de synchronisation peut ne pas télécharger immédiatement les modifications locales, mais uniquement rechercher les modifications locales et les télécharger à l'occasion (toutes les deux heures par défaut). -%1 +%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. + 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 restaurés. +Êtes-vous sûr de vouloir synchroniser ces actions avec 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. @@ -1473,27 +1420,7 @@ Conserver les fichiers locaux comme Conflits - - 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 restore 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. - Tous les fichiers du dossier de synchronisation '%1' ont été supprimés sur le serveur. -Ces suppressions seront synchronisées avec votre dossier local, ce qui rendra les fichiers non disponibles à moins que vous ayez les droits de les restaurer. -Si vous décidez de garder ces fichiers, ils seront resynchronisés avec le serveur si vous avez les droits pour le faire. -Si vous décidez de supprimer ces fichiers, ils ne vous seront plus accessibles à moins que vous en soyez 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. - 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 restaurés. -Êtes-vous sûr de vouloir synchroniser ces actions avec 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. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1504,7 +1431,7 @@ Si vous décidez de supprimer ces fichiers, ils ne vous seront plus accessibles à moins que vous en soyez 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. @@ -1513,17 +1440,28 @@ S'il s'agissait d'un accident et que vous choisissiez de conserver vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - + Remove All Files? Supprimer tous les fichiers ? - + Remove all files Supprimer tous les fichiers - + + 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 restore 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. + Tous les fichiers du dossier de synchronisation '%1' ont été supprimés sur le serveur. +Ces suppressions seront synchronisées avec votre dossier local, ce qui rendra les fichiers non disponibles à moins que vous ayez les droits de les restaurer. +Si vous décidez de garder ces fichiers, ils seront resynchronisés avec le serveur si vous avez les droits pour le faire. +Si vous décidez de supprimer ces fichiers, ils ne vous seront plus accessibles à moins que vous en soyez le propriétaire. + + + Keep files Conserver les fichiers @@ -1559,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Impossible de réinitialiser l'état du dossier @@ -1569,37 +1507,37 @@ 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. - + 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 @@ -1609,67 +1547,67 @@ La synchronisation a réussi avec des conflits non résolus. - + Sync finished with unresolved conflicts. Synchronisation terminée avec des conflits non résolus. - + Last Sync was successful. Synchronisation terminée avec succès - + 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 does not exist! Le chemin sélectionné n'existe pas ! - + 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 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 ! - + 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 ! @@ -1810,7 +1748,7 @@ upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - Téléversement %1/s + envoi %1/s @@ -1881,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Ajouter une synchronisation de dossier - + Add Sync Connection Ajouter la synchronisation @@ -1927,42 +1865,42 @@ 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éjà <i>%1</i> qui est un dossier parent de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Vous synchronisez déjà <i>%1</i> qui est un sous-dossier de <i>%2</i>. @@ -1970,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels au lieu de télécharger le contenu immédiatement %1 - - + + (experimental) (expérimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Vous ne pouvez pas définir la racine d'une partition Windows pour votre dossier local. Veuillez choisir un (sous)dossier de la partition. - + Virtual files are not available for the selected folder Les fichiers virtuels ne sont pas disponibles pour le dossier sélectionné @@ -2008,27 +1946,27 @@ 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. - + We received an unexpected download Content-Length. Nous avons reçu un téléchargement de Contenu-Longeur inattendu - + 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é @@ -2148,22 +2086,22 @@ Créer une archive de débogage… - + Server notifications that require attention. Les notifications du serveur requérant votre attention. - + You cannot disable autostart because system-wide autostart is enabled. Vous ne pouvez pas désactiver le démarrage automatique parce que le démarrage automatique à l'échelle du système est activé. - + Change update channel? Changer de canal de mise à jour ? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2172,32 +2110,32 @@ Notez que cela ne permet seulement de sélectionner où sont récupérées les mises à jour et qu'il n'y a pas de possibilité de rétrograder : Ainsi, le retour du canal "bêta" au canal "stable" ne peut généralement pas être fait immédiatement et implique d'attendre une version stable plus récente que la version bêta actuellement installée. - + Change update channel Changer de canal de mise à jour - + Cancel Annuler - + Create Debug Archive Création de l'archive de déboggage - + Zip Archives Archives Zip - + Debug Archive Created Archive de déboggage créée - + Debug archive is created at %1 Archive de déboggage créée à %1 @@ -2205,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Mot de passe requis - + Please enter a password for your link share: Veuillez saisir un mot de passe pour votre lien partagé : - + Sharing error Erreur de partage - + Could not retrieve or create the public link share. Error: %1 @@ -2239,7 +2177,7 @@ Reading from keychain failed with error: "%1" - La lecture à partir du trousseau a échoué avec l'erreur : "%1" + @@ -2387,7 +2325,7 @@ The file %1 could not be synced because the name contains characters which are not allowed on this system. - Le fichier %1 n'a pas pu être synchronisé parce que le nom contient des caractères qui sont interdits sur ce système. + @@ -2412,7 +2350,7 @@ Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Impossible de renommer le fichier parce qu'un fichier avec le même nom existe déjà sur le serveur. Merci de choisir un autre nom. + @@ -2545,7 +2483,7 @@ OCC::Logger - + Error Erreur @@ -2555,41 +2493,41 @@ <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> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - <nobr>Le fichier "%1"<br/>ne peut pas être ouvert en écriture.<br/><br/>Le fichier journal <b>ne peut pas</b> être sauvegardé !</nobr> + 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 en 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 Télécharger la version - + Update Failed Échec de mise à jour @@ -2601,20 +2539,20 @@ <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Une nouvelle version du Client %1 est disponible mais la mise à jour a échoué.</p><p><b>%2</b> a été téléchargé. La version installée est %3. Si vous confirmez le redémarrage et la mise à jour, votre ordinateur peut redémarrer pour terminer l'installation.</p> + - + Ask again later Demander plus tard - + Restart and update Redémarrer et mettre à jour - + Update manually Mettre à jour manuellement @@ -2725,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Erreur renvoyée par le serveur: <em>%1</em> @@ -2735,32 +2673,32 @@ Il y a eu une erreur durant l'accès au jeton de destination: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - Une erreur est survenue en accédant au "jeton" : <br><em>%1</em> + - + Empty JSON from OAuth2 redirect Vider le JSON de la redirection OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Impossible d'analyser le JSON renvoyé par le serveur : <br><em>%1</em> - + The reply from the server did not contain all expected fields La réponse du serveur ne contient 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 @@ -2827,45 +2765,45 @@ Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Impossible de télécharger la mise à jour. Merci d'ouvrir <a href='%1'>%1</a> pour télécharger la mise à jour manuellement. + - + Could not download update. Please open %1 to download the update manually. Impossible de télécharger la mise à jour. Ouvrez %1 pour télécharger manuellement la mise à jour. - + Could not check for new updates. Impossible de vérifier la présence de nouvelles mises à jour. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Un nouveau %1 est disponible. Merci d'ouvrir <a href='%2'>%2</a> pour télécharger la mise à jour. + - + New %1 is available. Please open %2 to download the update. - Un nouveau %1 est disponible. Merci d'ouvrir %2 pour télécharger la mise à jour. + - + Checking update server … Vérification 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 @@ -2893,14 +2831,14 @@ Connexion … - - + + Use &virtual files instead of downloading content immediately %1 Utiliser les fichiers virtuels plutôt que de télécharger le contenu immédiatement %1 - - + + (experimental) (expérimental) @@ -2925,49 +2863,49 @@ Espace libre : %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Les fichiers virtuels ne sont pas pris en charge pour les racines de partition Windows en tant que dossier local. Veuillez choisir un sous-dossier valide sous la lettre du lecteur. + - + %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" - + Warning: The local folder is not empty. Pick a resolution! Avertissement : le dossier local n'est pas vide. Sélectionnez une résolution. - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB espace libre %1 - + Virtual files are not available for the selected folder Les fichiers virtuels ne sont pas disponibles pour le dossier sélectionné - + Local Sync Folder Dossier de synchronisation local - - + + (%1) (%1) - + There isn't enough free space in the local folder! L'espace libre dans le dossier local est insuffisant ! @@ -3037,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3040,7 @@ &Suivant > - + Server address does not seem to be valid L'adresse du serveur ne semble pas être valide @@ -3120,7 +3050,7 @@ URL invalide - + Could not load certificate. Maybe wrong password? Impossible de charger le certificat. Vérifiez le mot de passe saisi. @@ -3160,7 +3090,7 @@ The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - La demande authentifiée au serveur a été redirigée vers "%1". L'URL est mauvaise, le serveur est mal configuré. + @@ -3218,54 +3148,54 @@ Création du dossier sur Nextcloud : %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 @@ -3275,12 +3205,12 @@ 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. - + Cannot 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 sauvegarder le dossier parce que le dossier ou un fichier qu'il contient est ouvert dans un autre programme. Merci de fermer le dossier ou le fichier et recommencer ou annuler la configuration. + - + <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> @@ -3288,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account Ajout du compte %1 @@ -3298,17 +3228,17 @@ Assistant de Connexion %1 - + Skip folders configuration Ignorer la configuration des dossiers - + Enable experimental feature? Activer la fonction expérimentale ? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3316,21 +3246,15 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - Lorsque le mode « fichiers virtuels » est activé, aucun fichier ne sera téléchargé initialement. Au lieu de cela, un petit fichier "%1" sera créé pour chaque fichier existant sur le serveur. Le contenu peut être téléchargé en exécutant ces fichiers ou en utilisant leur menu contextuel. - -Le mode fichiers virtuels est mutuellement exclusif avec synchronisation sélective. Les dossiers actuellement non sélectionnés seront convertis en dossiers en ligne uniquement et vos paramètres de synchronisation sélective seront réinitialisés. - -Le passage à ce mode annulera toute synchronisation en cours. - -Il s'agit d'un nouveau mode expérimental. Si vous décidez de l'utiliser, veuillez signaler tout problème qui surviendrait. + - + Enable experimental placeholder mode Activer la fonction expérimentale de fichiers virtuels ? - + Stay safe Restez en sécurité @@ -3338,7 +3262,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL L'URL de sondage a renvoyé une réponse JSON non valide @@ -3348,25 +3272,25 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Le fichier contient des espaces de fin et n'a pas pu être renommé, car un fichier du même nom existe déjà sur le serveur. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Le fichier contient des espaces de fin et n'a pas pu être renommé, car un fichier du même nom existe déjà localement. + - + 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 ignorés. - + 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. @@ -3381,57 +3305,57 @@ Les noms de fichiers contenant le caractère "%1" ne sont pas pris en charge par ce système de fichiers. - + File name contains at least one invalid character Le nom du fichier contient au moins un caractère interdit - + The file name is a reserved name on this file system. Le nom du fichier est un nom réservé dans le système de fichier - + Filename contains trailing spaces. Le nom du fichier finit par des espaces. - + Filename is too long. Le nom du fichier est trop long. - + File/Folder is ignored because it's hidden. Le fichier ou dossier a été ignoré car il est masqué. - + Stat failed. Stat échoué. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflit : La version du serveur a été téléchargée, la version locale renommée et non téléversée. - + The filename cannot be encoded on your file system. Le nom de fichier ne peut pas être encodé sur votre système de fichiers. - + The filename is blacklisted on the server. Le nom du fichier est sur la liste noire du serveur. - + File has extension reserved for virtual files. Le fichier a une extension réservée pour les fichiers virtuels. - + size taille @@ -3441,84 +3365,74 @@ autorisations - - server reported no %1 - le serveur a retourné "no %1" - - - - permission - permission - - - + file id ID du fichier - - Server reported no %1 - Le serveur n'a signalé aucun %1 + + server reported no %1 + - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - Conflit lors du téléversement de certains fichiers dans un dossier. Ceux conflictuels seront effacer! + - + Conflict when uploading a folder. It's going to get cleared! Conflit lors de l'envoi d'un dossier. Il va être supprimé ! - + Conflict when uploading a file. It's going to get removed! Conflit lors de l'envoi d'un fichier. Il va être supprimé ! - + 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 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 - + 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 - + Moved to invalid target, restoring Déplacé vers une cible invalide, restauration - + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Error while reading the database Erreur de lecture de la base de données Server replied with an error while reading directory '%1' : %2 - Le serveur a répondu avec une erreur au moment de lire le dossier '%1' : %2 + - + Server replied with an error while reading directory "%1" : %2 - Le serveur a répondu avec une erreur lors de la lecture du dossier "%1" : %2 + @@ -3529,17 +3443,12 @@ Erreur à l'écriture des métadonnées dans la base de données - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - + File is currently in use Le fichier est actuellement en cours d'utilisation @@ -3552,44 +3461,44 @@ Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. - + File %1 cannot be downloaded because encryption information is missing. Le fichier %1 ne peut pas être téléchargé car les informations de chiffrement sont manquantes. - - + + File has changed since discovery Le fichier a changé depuis sa découverte - - + + File %1 cannot 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 ! - + 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 local disk space below the limit Le téléchargement réduira l'espace disque libre en dessous de la limite - + 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. @@ -3599,12 +3508,12 @@ Le fichier reçu est vide bien que le serveur indique que sa taille devrait être de %1. - + The downloaded file is empty, but the server said 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 ! @@ -3614,18 +3523,12 @@ Erreur à l'écriture des métadonnées dans la base de données - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3633,12 +3536,12 @@ 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 @@ -3712,12 +3615,12 @@ Le fichier %1 ne peut pas être renommé en %2 à cause d'un conflit local de nom de fichier - + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3728,12 +3631,12 @@ Erreur à l'écriture des métadonnées dans la base de données - + Failed to rename file Échec lors du changement de nom du fichier - + Error setting pin state Erreur lors de la modification de l'état du fichier @@ -3767,12 +3670,12 @@ Erreur à l'écriture des métadonnées dans la base de données - + Error writing metadata to the database: %1 - Erreur d'écriture des métadonnées dans la base de données : %1 + - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3790,22 +3693,22 @@ 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 updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation - + Error setting pin state Erreur lors de la modification de l'état du fichier - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -3813,48 +3716,40 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - Échec d'envoi du fichier chiffré. + Échec d'envoi du fichier crypté. - + 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. - - + + Upload of %1 exceeds the quota for the folder Le téléversement de %1 amène un dépassement de quota pour le dossier - + File Removed (start upload) %1 Fichier supprimé (début du téléchargement) %1 - + 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. - + Failed to unlock encrypted folder. - Impossible de déverrouiller le dossier chiffré. + Impossible de déverrouiller le dossier crypté. @@ -3862,12 +3757,12 @@ Erreur à l'écriture des métadonnées dans la base de données - + Error updating metadata: %1 Erreur lors de la mise à jour des métadonnées : %1 - + The file %1 is currently in use Le fichier %1 est en cours d'utilisation @@ -3875,32 +3770,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + Poll URL missing URL du sondage manquante - + 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 @@ -3908,22 +3803,22 @@ OCC::PropagateUploadFileV1 - + 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). @@ -4001,7 +3896,7 @@ OCC::ServerNotificationHandler - + Dismiss Ignorer @@ -4171,17 +4066,17 @@ Protéger par mot de passe - + Allow editing Autoriser la modification - + View only Voir uniquement - + Allow upload and editing Autoriser l’envoi et la modification @@ -4191,7 +4086,7 @@ Date d'expiration - + File drop (upload only) Dépôt de fichier (envoi uniquement) @@ -4201,32 +4096,32 @@ Ne plus partager - + Link name Nom du lien - + Note to recipient Note au destinataire - + Password protect Protéger par un mot de passe - + Set expiration date Définir une date d'expiration - + Delete link Supprimer le lien - + Add another link Ajouter un autre lien @@ -4236,28 +4131,28 @@ Supprimer le lien de partage - + Confirm Link Share Deletion Confirmer la suppression du partage par lien - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Voulez-vous vraiment supprimer le partage par lien public<i>%1</i>? <p>Note: Cette action ne peut être annulée.</p> - + Delete Supprimer - + Cancel Anuler - + Public link Lien public @@ -4270,12 +4165,12 @@ Partager avec des utilisateurs ou des groupes ... - + Search globally Rechercher partout - + Copy link Copier le lien @@ -4285,22 +4180,22 @@ Aucun résultat pour '%1' - + No results for "%1" Aucun résultat pour "%1" - + Password for share required Mot de passe obligatoire pour un partage - + Please enter a password for your email share: Définissez un mot de passe pour le partage par email : - + I shared something with you J'ai partagé quelque chose avec vous @@ -4338,42 +4233,42 @@ Expire le : - + Can reshare Peut repartager - + Note to recipient Note au destinataire - + Set expiration date Définir une date d'expiration - + Unshare Ne plus partager - + Can create Peut créer - + Can change Peut modifier - + Can delete Peut supprimer - + Password protect Protéger par mot de passe @@ -4390,23 +4285,23 @@ OCC::SocketApi - + Context menu share Partage du menu contextuel - + Select new location … Sélectionnez le nouvel emplacement ... - + I shared something with you J'ai partagé quelque chose avec vous - - + + Share options Options de partage @@ -4419,76 +4314,76 @@ Activity - Activité + - + Copy private link to clipboard Copier le lien privé dans le presse-papier - + Send private link by email … Envoyer le lien privé par courriel ... - + Resharing this file is not allowed Repartager ce fichier est interdit - + Resharing this folder is not allowed Repartager ce dossier est interdit - - + + Copy public link Copier le lien public - + Copy internal link Copier le lien interne - + Edit Modifier - + Open in browser Ouvrir dans le navigateur - + Resolve conflict … Résoudre le conflit ... - + Move and rename … Déplacer et renommer... - + Move, rename and upload … Déplacer, renommer et envoyer ... - + Delete local changes Supprimer les modifications locales - + Move and upload … Déplacer et envoyer ... - + Delete Supprimer @@ -4634,77 +4529,77 @@ 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> : Additional errors: - Erreurs supplémentaires : + - + 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 (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Empreinte (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Empreinte (SHA-512): <tt>%1</tt> - + Effective Date: %1 Date de début de validité : %1 - + Expiration Date: %1 Date d'expiration : %1 - + Issuer: %1 Émetteur : %1 @@ -4797,33 +4692,33 @@ Une erreur interne numéro %1 est survenue. - + %1 (skipped due to earlier error, trying again in %2) %1 (ignoré à cause d'une précédente erreur, nouvel essai dans %2) - + Could not update file: %1 Impossible de mettre à jour le fichier : %1 - + Could not update virtual file metadata: %1 Impossible de mettre à jour les métadonnées du fichier virutel : %1 - + Unresolved conflict. conflit non résolu. - + 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 - + Aborted Annulé @@ -4900,16 +4795,16 @@ Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. + + 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. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Impossible d'accéder ou de créer une base de données locale de synchronisation. Assurez vous de disposer des droits d'écriture dans le dossier de synchronisation. - - The file name is a reserved name on this file system. Le nom du fichier est réservé sur votre système. @@ -4930,7 +4825,7 @@ Le fichier ou dossier a été ignoré car il est masqué. - + Using virtual files with suffix, but suffix is not set Utilisation de fichiers virtuels avec suffixe, mais le suffixe n'est pas défini @@ -4945,7 +4840,7 @@ Le nom de fichier ne peut pas être encodé sur votre système. - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale @@ -4960,17 +4855,17 @@ Stat échoué. + + Unable to read from the sync journal. + Impossible de lire le journal de synchronisation. + + Filename encoding is not valid L'encodage du nom de fichier n'est pas valide - - 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 @@ -4980,22 +4875,22 @@ Caractères non valides. Veuillez renommer "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - Synchronization will resume shortly. - La synchronisation reprendra sous peu. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. L'espace disque est faible : les téléchargements qui amèneraient à réduire l'espace libre en dessous de %1 ont été ignorés. - + There is insufficient space available on the server for some uploads. Il n'y a pas suffisamment d’espace disponible sur le serveur pour certains téléversements. @@ -5006,107 +4901,107 @@ Offline - Hors ligne + All synced! - Tous synchronisés! + Some files couldn't be synced! - Certains fichiers n'ont pas pu être synchronisés! + See below for errors - Voir ci-dessous pour les erreurs + Syncing - Synchronisation + Sync paused - Synchronisation mise en pause + Some files could not be synced! - Certains fichiers n'ont pas pu être synchronisés! + See below for warnings - Voir ci-dessous pour les avertissements + %1 of %2 · %3 left - %1 sur %2 · %3 restants + %1 of %2 - %1 sur 2% + Syncing file %1 of %2 - Synchronisation du fichier %1 sur %2 + OCC::Systray - + Add account Ajouter un compte - + Open main dialog Ouvrir la fenêtre principale + - Pause sync Suspendre la synchro - - + + Resume sync Relancer la synchro - + Settings Paramètres - + Exit %1 Quitter %1 - + Pause sync for all Suspendre toutes les synchros - + Resume sync for all Relancer toutes les synchros - + %1: %2 %1 : %2 @@ -5114,24 +5009,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Client de bureau %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Version %1. Pour plus d’informations, veuillez cliquer <a href='%2'>ici</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Utilise l'extension de fichiers virtuels : %1</small></p> - + <p>This release was supplied by %1</p> Cette version est fournie par %1. @@ -5139,55 +5034,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Échec de la récupération des fournisseurs. + - + Failed to fetch search providers for '%1'. Error: %2 - Échec de la récupération des fournisseurs de recherche pour '%1'. Erreur : %2 + - + Search has failed for '%2'. - La recherche de '%2' a échoué. + - + Search has failed for '%1'. Error: %2 - La recherche de '%1' a échoué. Erreur: %2 + OCC::User - + Retry all uploads Relancer tous les envois - + Synced %1 %1 a été synchronisé - + You renamed %1 Vous avez renommé %1 - + You deleted %1 Vous avez supprimé %1 - + You created %1 Vous avez créé %1 - + You changed %1 Vous avez modifié %1 @@ -5195,22 +5090,22 @@ OCC::UserModel - + Confirm Account Removal Confirmer la suppression 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 la connexion au compte <i>%1</i> ?</p><p><b>Note :</b> cette opération <b>ne supprimera aucun de vos fichiers</b> et ne supprimera pas non plus votre compte du serveur.</p> - + Remove connection Supprimer la connexion - + Cancel Annuler @@ -5220,17 +5115,17 @@ Could not fetch predefined statuses. Make sure you are connected to the server. - Impossible de récupérer les statuts prédéfinis. Assurez-vous que vous êtes connecté au serveur. + Could not fetch user status. Make sure you are connected to the server. - Impossible de récupérer le statut de l'utilisateur. Assurez-vous que vous êtes connecté au serveur. + User status feature is not supported. You will not be able to set your user status. - La fonction de statut d'utilisateur n'est pas prise en charge. Vous ne pourrez pas définir votre statut d'utilisateur. + @@ -5240,7 +5135,7 @@ Could not set user status. Make sure you are connected to the server. - Impossible de définir le statut de l'utilisateur. Vérifiez que vous êtes bien connecté au serveur. + @@ -5315,30 +5210,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 La fonctionnalité système de fichiers virtuels requiert un système de fichiers de type NTFS alors que %1 utilise %2. - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5693,7 +5570,7 @@ Sync Logo - Logo de synchronisation + @@ -5804,7 +5681,7 @@ TextLabel - Étiquette de texte + @@ -5860,52 +5737,52 @@ Nouveau dossier - + %n day ago Il y a %n jourIl y a %n jours - + %n days ago Il y a %n jourIl y a %n jours - + in the future Dans le futur - + %n hour ago Il y a %n heureIl y a %n heures - + %n hours ago Il y a %n heureIl y a %n heures - + now A l'instant - + Less than a minute ago Il y a moins d'une minute - + %n minute ago Il y a %n minuteIl y a %n minutes - + %n minutes ago Il y a %n minuteIl y a %n minutes - + Some time ago Il y a quelque temps @@ -5939,7 +5816,7 @@ SyncJournalDb - + Failed to connect database. Impossible de connecter la base de données. @@ -5947,9 +5824,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Rechercher des fichiers, des messages, des événements … + @@ -5957,7 +5834,7 @@ Load more results - Charger plus de résultats + @@ -5965,7 +5842,7 @@ Search result skeleton. - Squelette de résultat de recherche. + @@ -5973,7 +5850,7 @@ Load more results - Charger plus de résultats + @@ -5984,21 +5861,11 @@ Saisie de compte - + Switch to account Utiliser ce compte - - Current user status is online - Le statut actuel de l'utilisateur est en ligne - - - - Current user status is do not disturb - Le statut actuel de l'utilisateur est ne pas déranger - - Account connected Compte connecté @@ -6009,7 +5876,17 @@ Compte non connecté - + + Current user status is online + Le statut actuel de l'utilisateur est en ligne + + + + Current user status is do not disturb + Le statut actuel de l'utilisateur est ne pas déranger + + + Account actions Actions du compte @@ -6019,24 +5896,24 @@ Supprimer le compte - + Set status Définir le statut - - + + Log out Se déconnecter - - + + Log in Se connecter - + Remove account Supprimer le compte @@ -6097,57 +5974,57 @@ 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 @@ -6155,7 +6032,7 @@ ValidateChecksumHeader - + The checksum header is malformed. L'en-tête de la somme de contrôle est mal formé. @@ -6177,75 +6054,75 @@ The checksum header contained an unknown checksum type "%1" - L'en-tête de 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. "%1" != "%2" - Le fichier téléchargé ne correspond pas à la somme de contrôle, il sera repris. "%1" != "%2" + Window - + Nextcloud desktop main dialog Boîte de dialogue principale du bureau Nextcloud - + Current account Compte actuel - - + + Resume sync for all Relancer toutes les synchronisations - - + + Pause sync for all Suspendre toutes les synchronisations - + Set user status Définir le statut de l'utilisateur - + Add account Ajouter un compte - + Add new account Ajouter un nouveau compte - + Settings Paramètres - + Exit Quitter - + Current user avatar Avatar de l'utilisateur courant - + Current user status is online Le statut actuel de l'utilisateur est en ligne - + Current user status is do not disturb Le statut actuel de l'utilisateur est ne pas déranger @@ -6255,32 +6132,32 @@ Partager %1 - + Account switcher and settings menu Sélecteur de compte et menu des paramètres - + Connected Connecté - + Disconnected Déconnecté - + Open local folder of current account Ouvrir le dossier local de l'utilisateur courant - + Open Nextcloud Talk in browser Ouvrez Nextcloud Talk dans le navigateur - + More apps Plus d'applications @@ -6290,7 +6167,7 @@ Menu apps - + Open %1 in browser Ouvrir %1 dans le navigateur @@ -6310,9 +6187,9 @@ Ouvrir la fenêtre de partage - + Unified search results list - Liste de résultats de recherche unifiée + @@ -6321,15 +6198,15 @@ Afficher plus d'actions - + %1 - File activity - %1 - Activité de fichier + main.cpp - + System Tray not available Zone de notification non disponible @@ -6339,15 +6216,15 @@ %1 nécessite la présence d'une zone de notification système. Si vous utilisez XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application fournissant une zone de notification, telle que 'trayer', et essayez à nouveau. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 nécessite une barre d'état système fonctionnelle. Si vous utiliser XFCE, veuillez suivre <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ces instructions</a>. Sinon, installez une application de la barre d'état système telle que "trayer" et réessayez. + nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Généré à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6</small></p> @@ -6735,7 +6612,7 @@ It seems that you are trying to download a virtual file that is end-to-end encrypted. Implicitly downloading such files is not supported at the moment. To workaround this issue, go to the settings and mark the encrypted folder with "Make always available locally". - Il semble que vous essayez de télécharger un fichier virtuel chiffré de bout en bout. Le téléchargement implicite de tels fichiers n'est pas pris en charge pour le moment. Pour contourner ce problème, accédez aux paramètres et marquez le dossier chiffré avec "Rendre toujours disponible localement". + \ No newline at end of file diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_gl.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_gl.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_gl.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_gl.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Esgotouse o tempo de conexión - + Unknown error: network reply was deleted Produciuse un error descoñecido: a resposta da rede foi eliminada - + Server replied "%1 %2" to "%3 %4" O servidor repondeu «%1 %2» a «%3 %4» @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemónico do cifrado de extremo a extremo - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para protexer a súa identidade criptográfica, cifrámola cun mnemónico de 12 palabras do diccionario. Anóteas e manteñas en lugar seguro. Estas palabras serán necesarias para engadir outros dispositivos á súa cuenta (como un teléfono móvil ou un portátil). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -495,52 +495,52 @@ Retirar a conexión da sincronización do cartafol - + Disable virtual file support … Desactivar a compatibilidade con ficheiros virtuais… - + Enable virtual file support %1 … Activar a compatibilidade con ficheiros virtuais %1… - + (experimental) (experimental) - + Folder creation failed Non foi posíbel crear o cartafol - + <p>Could not create local folder <i>%1</i>.</p> <p>Non foi posíbel crear o cartafol local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar a retirada da conexión da sincronización do cartafol - + <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>Confirma que quere deixar de sincronizar o cartafol <i>%1</i>?</p><p><b>Aviso:</b> Isto <b>non</b> eliminará ningún ficheiro.</p> - + Remove Folder Sync Connection Retirar a conexión da sincronización do cartafol - + Disable virtual file support? Quere desactivar a compatibilidade con ficheiros virtuais? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Esta acción interromperá calquera sincronización que estea a executarse actualmente. - + Disable support Desactivar a compatibilidade - + 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 (%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. - + %1 in use %1 en uso @@ -603,87 +603,87 @@ Acceder - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. Este servidor da versión %1 non ten asistencia técnica! Proceda baixo a súa propia responsabilidade. - + 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. O servidor %1 neste momento está en modo de mantemento. - + Signed out from %1. Desconectado de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obtendo autorización dende o navegador. <a href='%1'>Prema aquí</a> para volver abrir o navegador. - + Connecting to %1 … Conectando con %1… - + No connection to %1 at %2. Non hai conexión con %1 en %2. - + Server configuration error: %1 at %2. Produciuse un erro de configuración do servidor: %1 en %2. - + No %1 connection configured. Non se configurou a conexión %1. - + 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>Confirma que quere retirar a conexión a conta <i>%1</i>?</p><p><b>Aviso:</b> Isto <b>non</b> eliminará ningún ficheiro.</p> - + Remove connection Retirar conexión @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Desconectado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servizo non dispoñíbel - + Maintenance mode Modo de mantemento - + Network error Produciuse un erro na rede - + Configuration error Produciuse un erro de configuración - + Asking Credentials Solicitando credenciais - + Unknown account state Estado da conta descoñecido @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Non se sincronizaran os ficheiros da lista de ignorados e as ligazóns simbólicas. - + For more activities please open the Activity app. Para máis actividades, abra a aplicación Actividade. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Continuar suporá <b>eliminar estes axustes</b>. - + Continuing will mean <b>ignoring these settings</b>. Continuar suporá <b>ignorar estes axustes</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Algúns axustes foron configuradas nas versións máis recentes deste cliente e usan funcións que non están dispoñíbeis nesta versión. <br><br>%1<br><br> Fíxose unha copia de seguridade do ficheiro de configuración actual <i>%2</i>. - + Quit Saír - + Continue Continuar - + Error accessing the configuration file Produciuse un erro ao acceder ao ficheiro de configuración - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Produciuse un erro ao acceder ao ficheiro de configuración en %1. Asegúrese de que o ficheiro é accesíbel para o seu usuario. - + Quit %1 Saír de %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Produciuse un erro ao escribir os metadatos na base de datos @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Introduza a súa frase de paso de cifrado de extremo a extremo: <br><br>Usuario: %2<br>Conta: %3<br> - + Enter E2E passphrase Introduza a frase de paso E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Á resposta de descubrimento de ficheiros do servidor fáltanlle datos. - - + + Server error: PROPFIND reply is not XML formatted! Erro do servidor: a resposta PROPFIND non está formatada en XML. @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Produciuse un erro ao abrir o directorio %1 - + Directory not accessible on client, permission denied Directorio non accesíbel no cliente, permiso denegado - + Directory not found: %1 Non se atopou o directorio: %1 - + Filename encoding is not valid O nome de ficheiro codificado non é correcto - + Error while reading directory %1 Produciuse un erro ao ler o directorio %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Erro devolto dende o servidor: <em>%1</em> @@ -1190,24 +1127,24 @@ - + 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> Non foi posíbel analizar o JSON devolto dende o servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor non contiña todos os campos agardados - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1368,41 +1305,41 @@ 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. Foi engadido un cartafol maior de %1 MB: %2. - + A folder from an external storage has been added. Foi engadido un cartafol de almacenamento externo. - + Please go in the settings to select it if you wish to download it. Vaia a axustes a seleccionalo se quere descargar isto. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Creouse o cartafol %1 mais foi excluído da sincronización con anterioridade. Os datos no seu interior non se sincronizarán. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Creouse o ficheiro %1 mais foi excluído da sincronización con anterioridade. Non se sincronizará. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Todos os ficheiros do cartafol de sincronización local «%1» foron eliminados. Estas eliminacións sincronizaranse co servidor, facendo que estes ficheiros non estean dispoñíbeis a non ser que se restauren. +Confirma que quere sincronizar estas accións co servidor? +Se fose un accidente e decide manter os seus ficheiros, volverán ser sincronizados dende o servidor. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Mantener os ficheiros locais en caso de conflito - - 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 restore 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. - Todos os ficheiros no cartafol de sincronización «%1» foron eliminados no servidor. -Estas eliminacións sincronizarse co seu cartafol de sincronización local, facendo que estes ficheiros non estean dispoñíbeis a menos que teña dereitos para restauralos. -Se decide restaurar os ficheiros, resincronizaranse co servidor se ten dereitos para facelo. -Se decide eliminar os ficheiros, non poderá dispor deles a non ser que sexa o 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. - Todos os ficheiros do cartafol de sincronización local «%1» foron eliminados. Estas eliminacións sincronizaranse co servidor, facendo que estes ficheiros non estean dispoñíbeis a non ser que se restauren. -Confirma que quere sincronizar estas accións co servidor? -Se fose un accidente e decide manter os seus ficheiros, volverán ser sincronizados dende o servidor. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1502,24 +1428,35 @@ - + 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 - + + 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 restore 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. + Todos os ficheiros no cartafol de sincronización «%1» foron eliminados no servidor. +Estas eliminacións sincronizarse co seu cartafol de sincronización local, facendo que estes ficheiros non estean dispoñíbeis a menos que teña dereitos para restauralos. +Se decide restaurar os ficheiros, resincronizaranse co servidor se ten dereitos para facelo. +Se decide eliminar os ficheiros, non poderá dispor deles a non ser que sexa o propietario. + + + Keep files Conservar os ficheiros @@ -1555,7 +1492,7 @@ OCC::FolderMan - + Could not reset folder state Non foi posíbel restabelecer o estado do cartafol @@ -1565,37 +1502,37 @@ Atopouse un diario de sincronización antigo en «%1» máis non pode ser retirado. Asegúrese de que non o está a usar ningunha aplicación. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (copia de seguridade) - + (backup %1) (copia de seguridade %1) - + Undefined State. Estado sen definir. - + Waiting to start syncing. Agardando para iniciar a sincronización. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. Estase sincronizando. @@ -1605,67 +1542,67 @@ A sincronización foi stifactoria, hai conflitos sen resolver. - + Sync finished with unresolved conflicts. - + Last Sync was successful. A última sincronización fíxose correctamente. - + Setup Error. Produciuse un 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 does not exist! A ruta seleccionada non éexiste! - + The selected path is not a folder! A ruta seleccionada non é un cartafol! - + You have no permission to write to the selected folder! Vostede non ten permiso para escribir neste cartafol! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! O cartafol local %1 xa contén un cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! O cartafol local %1 está dentro dun cartafol usado nunha conexión de sincronización de cartafoles. Escolla outro! - + There is already a sync from the server to this local folder. Please pick another local folder! Xa existe unha tarefa de sincronización entre o servidor e este cartafol. Escolla outro cartafol local! @@ -1877,12 +1814,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Engadir a conexión da sincronización do cartafol - + Add Sync Connection Engadir a conexión da sincronización @@ -1923,42 +1860,42 @@ - + 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 Produciuse un fallo ao listar un cartafol. Erro: %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 <i>%1</i>, which is a subfolder of <i>%2</i>. Xa está a sincronizar <i>%1</i>, é o subcartafol de <i>%2</i>. @@ -1966,24 +1903,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Use ficheiros virtuais no canto de descargar contido inmediatamente %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder Os ficheiros virtuais non están dispoñíbeis para o cartafol seleccionado @@ -2004,27 +1941,27 @@ 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. - + We received an unexpected download Content-Length. Recibimos unha descarga inesperada de lonxitude do contido. - + Server returned wrong content-range O servidor devolveu un intervalo de contidos estragado - + Connection Timeout Esgotouse o tempo de conexión @@ -2144,22 +2081,22 @@ Crear o arquivo de depuración… - + Server notifications that require attention. Notificacións do servidor que requiren atención. - + You cannot disable autostart because system-wide autostart is enabled. Non pode desactivar o inicio automático porque o inicio automático de todo o sistema está activado. - + Change update channel? Cambiar canle de actualización? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2168,32 +2105,32 @@ Teña en conta que isto só selecciona de que grupo se toman as actualizacións e que non hai reversións: polo tanto, volver da canle beta á canle estábel normalmente non se pode facer inmediatamente e significa agardar por unha versión estábel que sexa máis recente que a versión beta instalada actualmente. - + Change update channel Cambiar canle de actualización - + Cancel Cancelar - + Create Debug Archive Crear arquivo de depuración - + Zip Archives Arquivos Zip - + Debug Archive Created Creose o arquivo de depuración - + Debug archive is created at %1 O arquivo de depuración creouse en %1 @@ -2201,22 +2138,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required É necesario un contrasinal para compartir - + Please enter a password for your link share: Introduza un contrasinal para a súa ligazón de compartición: - + Sharing error Produciuse un erro ao compartir - + Could not retrieve or create the public link share. Error: %1 @@ -2541,7 +2478,7 @@ OCC::Logger - + Error Produciuse un erro @@ -2551,7 +2488,7 @@ <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> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2559,33 +2496,33 @@ 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 - + Update Failed Produciuse un fallo ao actualizar @@ -2600,17 +2537,17 @@ - + Ask again later Pregunte de novo máis tarde - + Restart and update Reiniciar e actualizar - + Update manually Actualizar manualmente @@ -2721,7 +2658,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Erro devolto dende o servidor: <em>%1</em> @@ -2731,32 +2668,32 @@ Produciuse un erro ao acceder ao punto final do «testemuño»: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON baleiro da redirección de OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Non foi posíbel analizar o JSON devolto dende o servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor non contiña todos os campos agardados - + <h1>Login Error</h1><p>%1</p> <h1>Produciuse un erro de acceso</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 errado</h1><p>Accedeu co usuario <em>%1</em>, mais debe acceder co usuario <em>%2</em>.<br>Peche a sesión de %3 noutra lapela, entón <a href='%4'>prema aquí</a> e acceda como o usuario %2</p> @@ -2826,12 +2763,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Non foi posíbel comprobar se hai novas actualizacións. @@ -2841,27 +2778,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 @@ -2889,14 +2826,14 @@ Conectar… - - + + Use &virtual files instead of downloading content immediately %1 Use ficheiros &virtuais no canto de descargar contido inmediatamente %1 - - + + (experimental) (experimental) @@ -2921,49 +2858,49 @@ Espazo libre: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! Advertencia: o cartafol local non está baleiro. Escolla unha resolución. - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 de espazo libre - + Virtual files are not available for the selected folder Os ficheiros virtuais non están dispoñíbeis para o cartafol seleccionado - + Local Sync Folder Sincronización do cartafol local - - + + (%1) (%1) - + There isn't enough free space in the local folder! Non hai espazo libre abondo no cartafol local! @@ -3033,14 +2970,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3106,7 +3035,7 @@ &Seguinte > - + Server address does not seem to be valid Parece que o enderezo do servidor non é válido @@ -3116,7 +3045,7 @@ URL incorrecto - + Could not load certificate. Maybe wrong password? Non foi posíbel cargar o certificado. Quizais o contrasinal é incorrecto? @@ -3214,54 +3143,54 @@ creando un cartafol no Nextcloud: %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 mor 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 @@ -3271,12 +3200,12 @@ Non é posíbel retirar e facer unha copia de seguridade 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. - + Cannot 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>O cartafol local de sincronización %1 creouse correctamente!</b></font> @@ -3284,7 +3213,7 @@ OCC::OwncloudWizard - + Add %1 account Engadir %1 conta @@ -3294,17 +3223,17 @@ Asistente de conexión %1 - + Skip folders configuration Omitir a configuración dos cartafoles - + Enable experimental feature? Activar as funcionalidades experimentais? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3321,12 +3250,12 @@ Este é un novo modo experimental. Se decide usalo, agradecémoslle que informe dos problemas que se presenten. - + Enable experimental placeholder mode Activar o modo de marcador de posición experimental - + Stay safe Permanecer seguro @@ -3334,7 +3263,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL O URL requirido devolveu unha resposta JSON incorrecta @@ -3352,17 +3281,17 @@ - + 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. Os nomes de ficheiros que rematan cun punto non son compatíbeis con este sistema de ficheiros. @@ -3377,57 +3306,57 @@ - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - + The file name is a reserved name on this file system. O nome do ficheiro é un nome reservado neste sistema de ficheiros. - + Filename contains trailing spaces. O nome do ficheiro contén espazos finais. - + Filename is too long. O nome de ficheiro é longo de máis. - + File/Folder is ignored because it's hidden. O ficheiro/cartafol ignórase por estar agochado. - + Stat failed. Produciuse un fallo na obtención de estatísticas. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflito: Versión do servidor descargada, a copia local cambiou o nome e non se cargou. - + The filename cannot be encoded on your file system. O nome do ficheiro non pode ser codificado no seu sistema de ficheiros. - + The filename is blacklisted on the server. O nome do ficheiro está na lista de bloqueo no servidor. - + File has extension reserved for virtual files. O ficheiro ten a extensión reservada para ficheiros virtuais. - + size tamaño @@ -3437,72 +3366,62 @@ permisos - - server reported no %1 - o servidor non informou de %1 - - - - permission - - - - + file id ID do ficheiro - - Server reported no %1 - + + server reported no %1 + o servidor non informou de %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista de bloqueo de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder Non se lle permite porque vostede non ten permiso para engadir subcartafoles neste cartafol - + Not allowed because you don't have permission to add files in that folder Non se lle permite porque vostede non ten permiso para engadir ficheiros neste cartafol - + 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 - + Moved to invalid target, restoring Moveuse a un destino non válido, restaurándo - + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Error while reading the database Produciuse un erro ao ler a base de datos @@ -3512,7 +3431,7 @@ O servidor respondeu cun erro ao ler o directorio «%1» : %2 - + Server replied with an error while reading directory "%1" : %2 @@ -3525,17 +3444,12 @@ Produciuse un erro ao escribir os metadatos na base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3548,44 +3462,44 @@ Non é posíbel descargar o ficheiro %1 xa que falta información do cifrado. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery O ficheiro cambiou após ser atopado - - + + File %1 cannot be downloaded because of a local file name clash! - + 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 local disk space below the limit A descarga reducirá o espazo libre local por baixo do límite - + Free space on disk is less than %1 O espazo libre no disco é inferior a %1 - + File was deleted from server O ficheiro vai ser eliminado do servidor - + The file could not be downloaded completely. Non foi posíbel descargar completamente o ficheiro. @@ -3595,12 +3509,12 @@ O ficheiro descargado está baleiro, aínda que o servidor dí que o seu tamaño debe ser de %1. - + The downloaded file is empty, but the server said 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! @@ -3610,18 +3524,12 @@ Produciuse un erro ao escribir os metadatos na base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3629,12 +3537,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Produciuse un fallo na restauración: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un ficheiro ou cartafol foi eliminado dun recurso compartido só de lectura, pero fallou a restauración: %1 @@ -3708,12 +3616,12 @@ Non é posíbel renomear o ficheiro %1 como %2 por mor dunha colisión co nome dun ficheiro local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3724,12 +3632,12 @@ Produciuse un erro ao escribir os metadatos na base de datos - + Failed to rename file - + Error setting pin state Produciuse un erro ao definir o estado do pin @@ -3763,12 +3671,12 @@ Produciuse un erro ao escribir os metadatos na base de datos - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3786,22 +3694,22 @@ O servidor devolveu código HTTP incorrecto. Agardábase 201, mais recibiuse «%1 %2». - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state Produciuse un erro ao definir o estado do pin - + Error writing metadata to the database Produciuse un erro ao escribir os metadatos na base de datos @@ -3809,46 +3717,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Produciuse un erro ao enviar un ficheiro cifrado. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Non foi posíbel enviar o ficheiro %1 xa que existe outro co mesmo nome. Difire só nas maiusculas/minúsculas - - + + Upload of %1 exceeds the quota for the folder O envío de %1 excede o límite de tamaño do cartafol - + File Removed (start upload) %1 Ficheiro eliminado (iniciar o envío) %1 - + 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. - + Failed to unlock encrypted folder. Produciuse un fallo ao desbloquear un cartafol cifrado. @@ -3858,12 +3758,12 @@ Produciuse un erro ao escribir os metadatos na base de datos - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3871,32 +3771,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing Non se atopa o URL da enquisa - + Unexpected return code from server (%1) O servidor devolveu un código non agardado (%1) - + Missing File ID from server Falta o ID do ficheiro do servidor - + Missing ETag from server Falta ETag do servidor @@ -3904,22 +3804,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Non se atopa o URL da enquisa - + 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) O servidor non recoñeceu o último bloque. (Non había unha e-tag presente) @@ -3997,7 +3897,7 @@ OCC::ServerNotificationHandler - + Dismiss Rexeitar @@ -4167,17 +4067,17 @@ Protexido con contrasinal - + Allow editing Permitir a edición - + View only - + Allow upload and editing Permitir o envío e a edición @@ -4187,7 +4087,7 @@ Data de caducidade - + File drop (upload only) Soltar ficheiro (só envíos) @@ -4197,32 +4097,32 @@ Deixar de compartir - + Link name - + Note to recipient Nota para o destinatario - + Password protect Protexido con contrasinal - + Set expiration date Definir a data de caducidade - + Delete link - + Add another link Engadir outra ligazón @@ -4232,27 +4132,27 @@ Eliminar a ligazón compartida - + Confirm Link Share Deletion Confirmar a eliminación da ligazón compartida - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Confirma que quere eliminar a ligazón pública compartida <i>%1</i>?</p><p>Nota: Esta acción non se pode desfacer.</p> - + Delete Eliminar - + Cancel Cancelar - + Public link Ligazón pública @@ -4265,12 +4165,12 @@ Compartir con usuarios ou grupos... - + Search globally Busca global - + Copy link Copiar a ligazón @@ -4280,22 +4180,22 @@ Non hai resultados para «%1» - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Compartín algo con vostede @@ -4333,42 +4233,42 @@ - + Can reshare Pode volver compartir - + Note to recipient - + Set expiration date - + Unshare Deixar de compartir - + Can create Pode crear - + Can change Pode cambiar - + Can delete Pode eliminar - + Password protect @@ -4385,23 +4285,23 @@ OCC::SocketApi - + Context menu share Compartir o menú contextual - + Select new location … Seleccionar a nova localización… - + I shared something with you Compartín algo con vostede - - + + Share options Opcións da compartición @@ -4417,73 +4317,73 @@ - + Copy private link to clipboard Copiar a ligazón privada no portapapeis - + Send private link by email … Enviar a ligazón privada por correo… - + Resharing this file is not allowed Non está permitido volver compartir este ficheiro - + Resharing this folder is not allowed Non está permitido volver compartir este cartafol - - + + Copy public link Copiar a ligazón pública - + Copy internal link Copiar a ligazón interna - + Edit Editar - + Open in browser Abrir no navegador - + Resolve conflict … Resolver conflitos… - + Move and rename … Mover e renomear… - + Move, rename and upload … Mover, renomear e enviar… - + Delete local changes Eliminar os cambios locais - + Move and upload … Mover e enviar… - + Delete Eliminar @@ -4629,12 +4529,12 @@ Confiar igualmente neste certificado - + Untrusted Certificate Certificado non fiábel - + Cannot connect securely to <i>%1</i>: Non se pode conectar de xeito seguro con <i>%1</i>: @@ -4644,62 +4544,62 @@ - + 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 (SHA1): <tt>%1</tt> Pegada dixital (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Pegada dixital (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Pegada dixital (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data de aplicación: %1 - + Expiration Date: %1 Data de caducidade: %1 - + Issuer: %1 Emisor: %1 @@ -4792,33 +4692,33 @@ Produciuse un erro interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (omitido por mor do erro anterior, tentándoo de novo en %2) - + Could not update file: %1 Non foi posíbel actualizar o ficheiro: %1 - + Could not update virtual file metadata: %1 Non foi posíbel actualizar os metadatos do ficheiro virtual: %1 - + Unresolved conflict. Conflito sen resolver. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Só %1 está dispoñíbel, necesita polo menos %2 para comezar - + Aborted Interrompido @@ -4895,16 +4795,16 @@ Os nomes de ficheiros que rematan cun punto non son compatíbeis con este sistema de ficheiros. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Non foi posíbel abrir ou crear a base de datos de sincronización local. Asegúrese de ter acceso de escritura no cartafol de sincronización. + + File names containing the character '%1' are not supported on this file system. Os nomes de ficheiros que conteñen o carácter «%1» non son compatíbeis con este sistema de ficheiros. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Non foi posíbel abrir ou crear a base de datos de sincronización local. Asegúrese de ter acceso de escritura no cartafol de sincronización. - - The file name is a reserved name on this file system. O nome do ficheiro é un nome reservado neste sistema de ficheiros. @@ -4925,7 +4825,7 @@ O ficheiro/cartafol ignórase por estar agochado. - + Using virtual files with suffix, but suffix is not set Usando ficheiros virtuais con sufixo, mais o sufixo non está definido @@ -4940,7 +4840,7 @@ O nome do ficheiro non pode ser codificado no seu sistema de ficheiros. - + Unable to read the blacklist from the local database Non foi posíbel ler a lista de bloqueo da base de datos local @@ -4955,17 +4855,17 @@ Produciuse un fallo na obtención de estatísticas. + + Unable to read from the sync journal. + Non foi posíbel ler dende o diario de sincronización. + + Filename encoding is not valid O nome de ficheiro codificado non é correcto - - Unable to read from the sync journal. - Non foi posíbel ler dende o diario de sincronización. - - - + Cannot open the sync journal Non foi posíbel abrir o diario de sincronización @@ -4975,22 +4875,22 @@ Caracteres incorrectos, déalle outro nome a «%1» + + Synchronization will resume shortly. + + + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Pouco espazo dispoñíbel no disco: As descargas que reduzan o tamaño por baixo de %1 van ser omitidas. - + There is insufficient space available on the server for some uploads. Non hai espazo libre abondo no servisor para algúns envíos. @@ -5059,49 +4959,49 @@ OCC::Systray - + Add account Engadir unha conta - + Open main dialog Abrir o diálogo principal + - Pause sync Por en pausa a sincronización - - + + Resume sync Continuar coa sincronización - + Settings Axustes - + Exit %1 Saír de %1 - + Pause sync for all Por en pausa a sincronización para todos - + Resume sync for all Continuar coa sincronización para todos - + %1: %2 %1: %2 @@ -5109,24 +5009,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Cliente de escritorio do %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versión %1. Para obter máis información prema <a href='%2'>aquí</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Esta versión foi fornecida por %1</p> @@ -5134,22 +5034,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5157,32 +5057,32 @@ OCC::User - + Retry all uploads Tentar de novo todos os envíos - + Synced %1 Sincronizou %1 - + You renamed %1 Vostede renomeou %1 - + You deleted %1 Vostede eliminou %1 - + You created %1 Vostede creou %1 - + You changed %1 Vostede cambiou %1 @@ -5190,22 +5090,22 @@ OCC::UserModel - + 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>Confirma que quere retirar a conexión a conta <i>%1</i>?</p><p><b>Aviso:</b> Isto <b>non</b> eliminará ningún ficheiro.</p> - + Remove connection Retirar conexión - + Cancel Cancelar @@ -5310,30 +5210,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 A funcionalidade do sistema de ficheiros virtual require un sistema de ficheiros NTFS, %1 está a usar %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5855,52 +5737,52 @@ Novo cartafol - + %n day ago hai %n díahai %n días - + %n days ago hai %n díahai %n días - + in the future no futuro - + %n hour ago hai %n horahai %n horas - + %n hours ago hai %n horahai %n horas - + now agora - + Less than a minute ago Hai menos dun minuto - + %n minute ago hai %n minutohai %n minutos - + %n minutes ago hai %n minutohai %n minutos - + Some time ago Hai algún tempo @@ -5934,7 +5816,7 @@ SyncJournalDb - + Failed to connect database. @@ -5942,7 +5824,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5979,21 +5861,11 @@ Entrada da conta - + Switch to account Cambiar á conta - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Conta conectada @@ -6004,7 +5876,17 @@ Conta sen conectar - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Accións da conta @@ -6014,24 +5896,24 @@ Retirar a conta - + Set status - - + + Log out Saír - - + + Log in Acceder - + Remove account Retirar a conta @@ -6092,57 +5974,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) vai %n anohai %n anos - + %n month(s) vai %n meshai %n meses - + %n day(s) vai %n díahai %n días - + %n hour(s) vai %n horahai %n horas - + %n minute(s) vai %n minutohai %n minutos - + %n second(s) vai %n segundohai %n segundos - + %1 %2 %1 %2 @@ -6150,7 +6032,7 @@ ValidateChecksumHeader - + The checksum header is malformed. A cabeceira da suma de comprobación é incorrecta. @@ -6183,64 +6065,64 @@ Window - + Nextcloud desktop main dialog Diálogo principal do escritorio Nextcloud - + Current account Conta actual - - + + Resume sync for all Continuar coa sincronización para todos - - + + Pause sync for all Por en pausa a sincronización para todos - + Set user status - + Add account Engadir unha conta - + Add new account Engadir unha conta nova - + Settings Axustes - + Exit Saír - + Current user avatar Avatar do usuario actual - + Current user status is online - + Current user status is do not disturb @@ -6250,32 +6132,32 @@ Compartir %1 - + Account switcher and settings menu Cambiador de contas e menú de configuración - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account Abrir o cartafol local da conta actual - + Open Nextcloud Talk in browser Abrir o Nextcloud Talk no navegador - + More apps Máis aplicacións @@ -6285,7 +6167,7 @@ Menú de aplicacións - + Open %1 in browser Abrir %1 nun navegador @@ -6305,7 +6187,7 @@ Abrir o diálogo de compartición - + Unified search results list @@ -6316,7 +6198,7 @@ Amosar máis accións - + %1 - File activity @@ -6324,7 +6206,7 @@ main.cpp - + System Tray not available Área de notificación non dispoñíbel @@ -6334,7 +6216,7 @@ %1 require dunha área de notificación. Se está executando XFCE, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instrucións</a>. Senón, instale unha aplicación de área de notificación como «trayer» e ténteo de novo. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6342,7 +6224,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construido dende la revisión Git <a href="%1">%2</a> en %3, %4 usando Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_he.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_he.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_he.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_he.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out הזמן שהוקצב לחיבור תם - + Unknown error: network reply was deleted שגיאה לא ידועה: תגובת הרשת נמחקה - + Server replied "%1 %2" to "%3 %4" תגובת השרת הייתה „%1 %2” אל „%3 %4” @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic תיבת זיכרון להצפנה מקצה לקצה. - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). להגנה על מזהה ההצפנה שלך, אנו מצפינים באמצעות תיבת זיכרון של 12 מילים. מומלץ לרשום אותן בצד ולשמור עליהן באיזור מוגן. ע"י המילים הללו נוכל להוסיף מכשירים נוספים לחשבונך (כגון טלפון חכם או מחשב נייד). @@ -305,9 +305,9 @@ - - - + + + Cancel ביטול @@ -495,52 +495,52 @@ הסרת חיבור סנכרון לתיקייה - + Disable virtual file support … השבתת תמיכה בקובץ וירטואלי… - + Enable virtual file support %1 … הפעלת תמיכה וירטואלית בקבצים %1… - + (experimental) (ניסיוני) - + Folder creation failed יצירת התיקייה נכשלה - + <p>Could not create local folder <i>%1</i>.</p> <p>לא ניתן ליצור תיקייה מקומית <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal אשר הסרת חיבור ל סנכרון תיקיות - + <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> - + Remove Folder Sync Connection הסר חיבור ל סנכרון תיקיות - + Disable virtual file support? להשבית תמיכה בקובץ וירטואלי? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support השבתת התמיכה - + Sync Running סנכרון מופעל - + The syncing operation is running.<br/>Do you want to terminate it? הסנכרון מופעל.<br/>האם להפסיק את פעולתו ? - + %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. ברגע זה אין כל מידע זמין על השימוש באחסון. - + %1 in use %1 בשימוש @@ -599,87 +599,87 @@ כניסה - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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. - + Server configuration error: %1 at %2. שגיאה בתצורת השרת: %1 ב־%2. - + No %1 connection configured. אין הגדרה לחיבור %1 - + 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 הסרת חיבור @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out לא מחובר לחשבון - + Disconnected מנותק - + Connected מחובר - + Service unavailable השירות אינו זמין - + Maintenance mode מצב תחזוקה - + Network error שגיאת רשת - + Configuration error שגיאת הגדרות - + Asking Credentials מבקש אישור - + Unknown account state מצב חשבון לא ידוע @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. לפעילויות נוספות נא לפתוח את יישומון הפעילויות. @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit יציאה - + Continue המשך - + Error accessing the configuration file אירעה שגיאה בגישה לקובץ ההגדרות - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. איראה שגיאה בגישה לקובץ ההגדרות ב %1. אנא וודא כי הקובץ נגיש למשתמש שלך. - + Quit %1 צא מ %1 @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database איראה שגיאה בעת כתיבת metadata ל מסד הנתונים @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> נא להקליד את הססמא להצפנה מקצה לקצה:<br><br>משתמש: %2<br>חשבון: %3<br> - + Enter E2E passphrase נא להקליד ססמת הצפנה קצה לקצה @@ -1101,19 +1051,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1121,8 +1058,8 @@ תגובת גילוי הקבצים של השרת לוקה בחסר. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1130,27 +1067,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 תיקייה לא נמצאה: %1 - + Filename encoding is not valid קידוד שם הקובץ לא תקין - + Error while reading directory %1 שגיאה בקריאת התיקייה %1 @@ -1173,7 +1110,7 @@ - + Error returned from the server: <em>%1</em> חזרה שגיאה מהשרת: <em>%1</em> @@ -1185,24 +1122,24 @@ - + 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> לא ניתן לפענח את ה־JSON שהוחזר מהשרת: <br><em>%1</em> - + The reply from the server did not contain all expected fields התגובה מהשרת לא הכילה את כל השדות הצפויים - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1363,41 +1300,41 @@ פעילות סנכרון - + 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. נא לגשת להגדרות כדי לבחור אם ברצונך להוריד אותה. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. התיקייה %1 נוצרה אך הוחרגה מהסנכרון בעבר. הנתונים שבתוכה לא יסונכרנו. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. הקובץ %1 נוצר אך הוחרג מהסנכרון בעבר. הוא לא יסונכרן. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1406,6 +1343,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1458,22 +1402,7 @@ להשאיר את הקבצים המקומיים כסותרים - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1481,24 +1410,32 @@ - + 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 להסיר את כל הקבצים - + + 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 restore 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. + + + + Keep files לשמור על הקבצים @@ -1534,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state לא ניתן לאפס את מצב התיקיים @@ -1544,37 +1481,37 @@ - + 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) (גיבוי %1) - + Undefined State. מצב בלתי מוגדר. - + Waiting to start syncing. בהמתנה להתחלת סנכרון. - + Preparing for sync. בהכנות לסנכרון. - + Sync is running. מתבצע סנכרון. @@ -1584,67 +1521,67 @@ הסנכרון לא הצליח, יש סתירות בלתי פתורות. - + Sync finished with unresolved conflicts. הסנכרון הסתיים עם סתירות בלתי פתורות. - + Last Sync was successful. הסנכרון האחרון הצליח. - + Setup Error. שגיאת הגדרה. - + User Abort. ביטול מצד המשתמש. - + Sync is paused. הסנכרון מושהה. - + %1 (Sync is paused) %1 (הסנכרון מושהה) - + No valid folder selected! לא נבחרה תיקיית תקנית! - + The selected path does not exist! הנתיב הנבחר לא קיים! - + The selected path is not a folder! הנתיב שנבחר אינו מצביע על תיקייה! - + You have no permission to write to the selected 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1856,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection הוספת חיבור סנכרון תיקיות - + Add Sync Connection הוספת חיבור סנכרון @@ -1902,42 +1839,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1945,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) (ניסיוני) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1983,27 +1920,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range השרת החזיר content-range שגוי - + Connection Timeout תם זמן החיבור @@ -2123,54 +2060,54 @@ - + Server notifications that require attention. התראות שרת שדורשות תשומת לב. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? להחליף את ערוץ העדכונים? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel החלפת ערוץ העדכונים - + Cancel ביטול - + Create Debug Archive - + Zip Archives ארכיוני Zip - + Debug Archive Created - + Debug archive is created at %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required נדרשת ססמה לשיתוף - + Please enter a password for your link share: נא למלא ססמה לשיתוף הקישור: - + Sharing error שגיאת שיתוף - + Could not retrieve or create the public link share. Error: %1 @@ -2511,7 +2448,7 @@ OCC::Logger - + Error שגיאה @@ -2521,7 +2458,7 @@ - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2529,33 +2466,33 @@ 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 לקבל עדכון - + Update Failed @@ -2570,17 +2507,17 @@ - + Ask again later לשאול שוב מאוחר יותר - + Restart and update להפעיל מחדש ולעדכן - + Update manually לעדכן ידנית @@ -2691,7 +2628,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> חזרה שגיאה מהשרת: <em>%1</em> @@ -2701,32 +2638,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON ריק מהפניית OAuth2 - + 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> @@ -2796,12 +2733,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. נא ניתן לבדוק אם יש עדכונים חדשים. @@ -2811,27 +2748,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 בדיקת עדכונים @@ -2859,14 +2796,14 @@ התחברות… - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) (ניסיוני) @@ -2891,49 +2828,49 @@ מקום פנוי: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 מקום פנוי - + Virtual files are not available for the selected folder - + Local Sync Folder תיקיית סנכרון מקומית - - + + (%1) (%1) - + There isn't enough free space in the local folder! אין מספיק שטח פנוי בתיקייה המקומית! @@ -3003,14 +2940,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3076,7 +3005,7 @@ ה&בא > - + Server address does not seem to be valid כתובת השרת כנראה שגויה @@ -3086,7 +3015,7 @@ כתובת שגויה - + Could not load certificate. Maybe wrong password? לא ניתן לטעון את האישור. אולי הססמה שגויה? @@ -3184,54 +3113,54 @@ נוצרת תיקייה ב־Nextcloud:‏ %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 ב־HTTP - + 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> - - + + 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 שינוי שם התיקייה נכשל @@ -3241,12 +3170,12 @@ לא ניתן להסיר ולגבות את התיקייה או שקובץ בה כבר פתוח בתכנית אחרת. נא לסגור את התיקייה או את הקובץ וללחוץ על ניסיון חוזר או לבטל את ההקמה. - + Cannot 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> @@ -3254,7 +3183,7 @@ OCC::OwncloudWizard - + Add %1 account הוספת חשבון %1 @@ -3264,17 +3193,17 @@ אשף החיבור אל %1 - + Skip folders configuration דילוג על הגדרות תיקיות - + Enable experimental feature? להפעיל יכולת ניסיונית? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3285,12 +3214,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3298,7 +3227,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL תגובת JSON שגויה מכתובת התשאול @@ -3316,17 +3245,17 @@ - + 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. @@ -3341,57 +3270,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. שם הקובץ מכיל רווחים עוקבים. - + Filename is too long. שם הקובץ ארוך מדי. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3401,72 +3330,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3476,7 +3395,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3489,17 +3408,12 @@ שגיאה בכתיבת נתוני העל למסד הנתונים - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3512,44 +3426,44 @@ לא ניתן להוריד את הקובץ %1 כיוון שפרטי ההצפנה חסרים. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery הקובץ השתנה מאז שהתגלה - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! לא ניתן להוריד את הקובץ %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. לא ניתן להוריד את הקובץ במלואו. @@ -3559,12 +3473,12 @@ הקובץ שהתקבל ריק למרות שהשרת הכריז שגודלו אמור להיות %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! לא ניתן לשמור את הקובץ %1 עקב סתירה עם שם קובץ מקומי! @@ -3574,18 +3488,12 @@ שגיאה בכתיבת נתוני העל למסד הנתונים - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3593,12 +3501,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; השחזור נכשל: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 קובץ או תיקייה הוסרו משיתוף לקריאה בלבד אבל השחזור נכשל: %1 @@ -3672,12 +3580,12 @@ לא ניתן לשנות את השם של %1 לשם %2 עקב סתירה עם שם קובץ מקומי - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3688,12 +3596,12 @@ שגיאה בכתיבת נתוני העל למסד הנתונים - + Failed to rename file - + Error setting pin state @@ -3727,12 +3635,12 @@ שגיאה בכתיבת נתוני העל למסד הנתונים - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3750,22 +3658,22 @@ הוחזר קוד HTTP שגוי על ידי השרת. אמור היה להיות 201 אבל התקבל „%1 %2”. - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database שגיאה בכתיבת נתוני על למסד הנתונים @@ -3773,46 +3681,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists לא ניתן להעלות את הקובץ %1 כיוון שקיים קובץ באותו השם, ההבדל הוא רק באותיות גדולות/קטנות - - + + Upload of %1 exceeds the quota for the folder ההעלאה של %1 חורגת ממכסת התיקייה - + File Removed (start upload) %1 הוקבץ הוסר (התחלת ההעלאה) %1 - + Local file changed during syncing. It will be resumed. הקובץ המקומי השתנה במהלך הסנכרון. התהליך ימשיך. - + Local file changed during sync. הקובץ המקומי השתנה במהלך הסנכרון. - + Failed to unlock encrypted folder. @@ -3822,12 +3722,12 @@ אירעה שגיאה בעת כתיבת נתוני העל למסד הנתונים - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3835,32 +3735,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. הקובץ המקומי הוסר במהלך הסנכרון. - + Local file changed during sync. הקובץ המקומי השתנה במהלך הסנכרון. - + Poll URL missing - + Unexpected return code from server (%1) קוד חזרה בלתי צפוי מהשרת (%1) - + Missing File ID from server מזהה הקובץ חסר בשרת - + Missing ETag from server ETag חסר בשרת @@ -3868,22 +3768,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3961,7 +3861,7 @@ OCC::ServerNotificationHandler - + Dismiss התעלמות @@ -4131,17 +4031,17 @@ הגנה בססמה - + Allow editing לאפשר עריכה - + View only - + Allow upload and editing לאפשר העלאה ועריכה @@ -4151,7 +4051,7 @@ מועד תפוגת תוקף - + File drop (upload only) השלכת קבצים (העלאה בלבד) @@ -4161,32 +4061,32 @@ ביטול שיתוף - + Link name - + Note to recipient מסר לנמען - + Password protect הגנה בססמה - + Set expiration date הגדרת תאריך תפוגה - + Delete link - + Add another link הוספת קישור נוסף @@ -4196,27 +4096,27 @@ מחיקת קישור שיתוף - + Confirm Link Share Deletion אישור מחיקת קישור לשיתוף - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete מחיקה - + Cancel ביטול - + Public link קישור ציבורי @@ -4229,12 +4129,12 @@ לשתף עם משתמשים או קבוצות… - + Search globally - + Copy link העתקת קישור @@ -4244,22 +4144,22 @@ אין תוצאות לחיפוש אחר ‚%1’ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you שיתפת אתך משהו @@ -4297,42 +4197,42 @@ - + Can reshare הרשאה לשיתוף מחדש - + Note to recipient - + Set expiration date - + Unshare ביטול שיתוף - + Can create הרשאה ליצירה - + Can change הרשאה לעריכה - + Can delete הרשאה למחיקה - + Password protect @@ -4349,23 +4249,23 @@ OCC::SocketApi - + Context menu share שיתוף מתפריט הקשר - + Select new location … - + I shared something with you שיתפתי אתך משהו - - + + Share options אפשרויות שיתוף @@ -4381,73 +4281,73 @@ - + Copy private link to clipboard העתקת שיעור פרטי ללוח הגזירים - + Send private link by email … שליחת קישור פרטי בדוא״ל… - + Resharing this file is not allowed אסור לשתף קובץ זה מחדש - + Resharing this folder is not allowed - - + + Copy public link העתקת קישור ציבורי - + Copy internal link העתקת קישור פנימי - + Edit עריכה - + Open in browser פתיחה בדפדפן - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete מחיקה @@ -4593,12 +4493,12 @@ לתת אמון באישור זה בכל זאת - + Untrusted Certificate אישור בלתי מהימן - + Cannot connect securely to <i>%1</i>: לא ניתן להתחבר באופן מאובטח אל <i>%1</i>: @@ -4608,62 +4508,62 @@ - + with Certificate %1 עם האישור %1 - - - + + + &lt;not specified&gt; &lt;לא צוין&gt; - - + + Organization: %1 ארגון: %1 - - + + Unit: %1 יחידה: %1 - - + + Country: %1 מדינה: %1 - + Fingerprint (SHA1): <tt>%1</tt> טביעת אצבע (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> טביעת אצבע (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> טביעת אצבע (SHA-512): <tt>%1</tt> - + Effective Date: %1 תאריך תחילת תוקף: %1 - + Expiration Date: %1 תאריך תפוגת תוקף: %1 - + Issuer: %1 הנפקה: %1 @@ -4756,33 +4656,33 @@ אירעה שגיאה פנימית מספר %1. - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. סתירה בלתי פתורה. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4859,16 +4759,16 @@ שמות קבצים המסתיימים בנקודה אינם נתמכים במערכת קבצים זו. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + File names containing the character '%1' are not supported on this file system. שמות קבצים המכילים את התו ‚%1’ אינם נתמכים במערכת קבצים זו. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - - The file name is a reserved name on this file system. שם הקובץ הוא שם שמור במערכת קבצים זו. @@ -4889,7 +4789,7 @@ הקובץ/תיקייה יזכו להתעלמות כיוון שהם נסתרים. - + Using virtual files with suffix, but suffix is not set @@ -4904,7 +4804,7 @@ לא ניתן להצפין את שם הקובץ במערכת הקבצים שלך. - + Unable to read the blacklist from the local database לא ניתן לקרוא את רשימת החסימה ממסד הנתונים המקומי @@ -4919,17 +4819,17 @@ + + Unable to read from the sync journal. + + + Filename encoding is not valid קידוד שם הקובץ שגוי - - Unable to read from the sync journal. - - - - + Cannot open the sync journal @@ -4939,22 +4839,22 @@ תווים שגויים, נא לשנות את השם של „%1” + + Synchronization will resume shortly. + + + File name contains at least one invalid character שם הקובץ מכיל אות שגויה אחת לפחות - - Synchronization will resume shortly. - - - - + 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. אין מספיק מקום זה בשרת לחלק מההורדות. @@ -5023,49 +4923,49 @@ OCC::Systray - + Add account הוספת חשבון - + Open main dialog + - Pause sync - - + + Resume sync - + Settings הגדרות - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5073,24 +4973,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 לקוח לשולחן העבודה</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>גרסה %1. למידע נוסף נא ללחוץ <a href='%2'>כאן</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>גרסה זו סופקה על ידי %1</p> @@ -5098,22 +4998,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5121,32 +5021,32 @@ OCC::User - + Retry all uploads לנסות את כל ההורדות מחדש - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5154,22 +5054,22 @@ OCC::UserModel - + 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 הסרת חיבור - + Cancel ביטול @@ -5274,30 +5174,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5819,52 +5701,52 @@ - + %n day ago אתמולשלשוםלפני %n ימיםלפני %n ימים - + %n days ago אתמולשלשוםלפני %n ימיםלפני %n ימים - + in the future בעתיד - + %n hour ago לפני שעהלפני שעתייםלפני %n שעותלפני %n שעות - + %n hours ago לפני שעהלפני שעתייםלפני %n שעותלפני %n שעות - + now עכשיו - + Less than a minute ago לפני פחות מדקה - + %n minute ago לפני דקהלפני %n דקותלפני %n דקותלפני %n דקות - + %n minutes ago לפני דקהלפני %n דקותלפני %n דקותלפני %n דקות - + Some time ago ממש לא מזמן @@ -5898,7 +5780,7 @@ SyncJournalDb - + Failed to connect database. @@ -5906,7 +5788,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5943,32 +5825,32 @@ - + Switch to account עבור אל חשבון - - Current user status is online - + + Account connected + חשבון מחובר - - Current user status is do not disturb + + Account not connected - Account connected - חשבון מחובר + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions פעולות חשבון @@ -5978,24 +5860,24 @@ - + Set status - - + + Log out יציאה - - + + Log in כניסה - + Remove account הסרת חשבון @@ -6056,57 +5938,57 @@ Utility - + %L1 GB %L1 ג״ב - + %L1 MB %L1 מ״ב - + %L1 KB %L1 ק״ב - + %L1 B %L1 ב׳ - + %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 דקות - + %n second(s) שנייה%n שניות%n שניות%n שניות - + %1 %2 %1 %2 @@ -6114,7 +5996,7 @@ ValidateChecksumHeader - + The checksum header is malformed. כותרת הבדיקה פגומה. @@ -6147,64 +6029,64 @@ Window - + Nextcloud desktop main dialog - + Current account חשבון נוכחי - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account הוספת חשבון - + Add new account - + Settings הגדרות - + Exit יציאה - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6214,32 +6096,32 @@ - + Account switcher and settings menu - + Connected מחובר - + Disconnected מנותק - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps יישומים נוספים @@ -6249,7 +6131,7 @@ - + Open %1 in browser פתיחת %1 בדפדפן @@ -6269,7 +6151,7 @@ - + Unified search results list @@ -6280,7 +6162,7 @@ - + %1 - File activity @@ -6288,7 +6170,7 @@ main.cpp - + System Tray not available מגש המערכת אינו זמין @@ -6298,7 +6180,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6306,7 +6188,7 @@ nextcloudTheme::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 ב־%3, %4 באמצעות Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_hr.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_hr.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_hr.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_hr.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,38 +10,38 @@ ActivityItem - + Open %1 locally Otvori %1 lokalno - + Open share dialog Otvori dijaloški okvir za dijeljenje - + Share %1 Dijeli %1 - - + + Show more actions Prikaži dodatne radnje View activity - Prikaži aktivnost + ActivityList - + Activity list - Popis aktivnosti + @@ -54,7 +54,7 @@ Checking for changes in "%1" - Provjera izmjena u „%1” + @@ -144,7 +144,7 @@ Could not move "%1" to "%2" - Nije moguće premjestiti „%1” u „%2” + @@ -160,7 +160,7 @@ Error removing "%1": %2 - Pogreška prilikom uklanjanja „%1”: %2 + @@ -170,7 +170,7 @@ Could not remove folder "%1" - Nije moguće ukloniti mapu „%1” + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Vrijeme sesije je isteklo - + Unknown error: network reply was deleted Nepoznata pogreška: odgovor mreže je izbrisan - + Server replied "%1 %2" to "%3 %4" Poslužitelj je odgovorio „%1 %2” na „%3 %4” @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemonika cjelovitog šifriranja - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Kako bismo zaštitili vaš kriptografski identitet, šifriramo ga s pomoću mnemonika od 12 riječi iz rječnika. Zapamtite ih i čuvajte na sigurnom. Bit će vam potrebni za dodavanje drugih uređaja na vaš račun (poput mobilnog telefona ili prijenosnog računala). @@ -305,9 +305,9 @@ - - - + + + Cancel Odustani @@ -349,7 +349,7 @@ You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are End-to-End encrypted. To get the best experience with Virtual Files and End-to-End Encryption, make sure the encrypted folder is marked with "Make always available locally". - Čini se da ste omogućili značajku virtualnih datoteka za ovu mapu. U ovom trenutku nije moguće implicitno preuzeti virtualne datoteke koje su cjelovito šifrirane. Za najbolje iskustvo korištenja virtualnih datoteka i cjelovitog šifriranja provjerite je li šifrirana mapa označena s „Učini uvijek dostupnim lokalno”. + @@ -495,52 +495,52 @@ Uklonite poveznicu za sinkronizaciju mape - + Disable virtual file support … Onemogućite podršku za virtualne datoteke... - + Enable virtual file support %1 … Omogućite podršku za virtualne datoteke %1… - + (experimental) (eksperimentalan) - + Folder creation failed Neuspješna izrada mape - + <p>Could not create local folder <i>%1</i>.</p> <p>Nije moguće stvoriti lokalnu mapu <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Potvrdi uklanjanje poveznice za sinkronizaciju mape - + <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>Želite li zaista prekinuti sinkronizaciju mape <i>%1</i>?</p><p><b>Napomena:</b> time <b>nećete</b> izbrisati datoteke.</p> - + Remove Folder Sync Connection Uklonite poveznicu za sinkronizaciju mape - + Disable virtual file support? Onemogućiti podršku za virtualne datoteke? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Ova će radnja prekinuti bilo koju trenutačnu sinkronizaciju. - + Disable support Onemogući podršku - + Sync Running Sinkronizacija u tijeku - + The syncing operation is running.<br/>Do you want to terminate it? Sinkronizacija je pokrenuta.<br/>Želite li je prekinuti? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) od %2 u upotrebi. Neke mape, uključujući mrežne ili dijeljene mape, mogu imati različita ograničenja. - + %1 of %2 in use %1 od %2 u upotrebi - + Currently there is no storage usage information available. Trenutno nema dostupnih podataka o uporabi pohrane. - + %1 in use %1 u upotrebi @@ -603,87 +603,87 @@ Prijava - + %1 as %2 %1 kao %2 - + The server version %1 is unsupported! Proceed at your own risk. Inačica poslužitelja %1 nije podržana! Nastavite na vlastitu odgovornost. - + Connected to %1. Povezano s %1. - + Server %1 is temporarily unavailable. Poslužitelj %1 privremeno nije dostupan. - + Server %1 is currently in maintenance mode. Poslužitelj %1 trenutno je u načinu održavanja. - + Signed out from %1. Odjavili ste se iz %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Dobivanje autorizacije od preglednika. <a href='%1'>Kliknite ovdje</a> za ponovno otvaranje preglednika. - + Connecting to %1 … Povezivanje s %1… - + No connection to %1 at %2. Ne postoji veza s %1 na %2. - + Server configuration error: %1 at %2. Pogreška konfiguracije poslužitelja: %1 na %2. - + No %1 connection configured. Nije konfigurirana veza %1. - + There are folders that were not synchronized because they are too big: Ove mape nisu sinkronizirane jer su prevelike: - + There are folders that were not synchronized because they are external storages: Ove mape nisu sinkronizirane jer su vanjski prostori za pohranu: - + There are folders that were not synchronized because they are too big or external storages: Ove mape nisu sinkronizirane jer su prevelike ili su vanjski prostori za pohranu: - + Confirm Account Removal Potvrdi brisanje 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>Želite li zaista ukloniti vezu s računom <i>%1</i>?</p><p><b>Napomena:</b> time <b>nećete</b> izbrisati datoteke.</p> - + Remove connection Ukloni vezu @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Odjavljen - + Disconnected Odspojen - + Connected Povezan - + Service unavailable Usluga nedostupna - + Maintenance mode Način održavanja - + Network error Pogreška mreže - + Configuration error Pogreška konfiguracije - + Asking Credentials Traženje vjerodajnica - + Unknown account state Nepoznato stanje računa @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Ne sinkroniziraju se datoteke s popisa za zanemarivanje kao ni simboličke poveznice. - + For more activities please open the Activity app. Više aktivnosti možete pronaći u aplikaciji Activity. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Nastavak znači <b>brisanje ovih postavki</b>. - + Continuing will mean <b>ignoring these settings</b>. Nastavak znači <b>zanemarivanje ovih postavki</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Neke su postavke konfigurirane u novijim inačicama ovog klijenta i upotrebljavaju značajke koje nisu raspoložive u ovoj inačici.<br><br>%1<br><br>Sigurnosna kopija trenutačne konfiguracijske datoteke već je pohranjena na <i>%2</i>. - + Quit Izađi - + Continue Nastavi - + Error accessing the configuration file Pogreška pri pristupanju konfiguracijskoj datoteci - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Došlo je do pogreške prilikom pristupanja konfiguracijskoj datoteci na %1. Provjerite može li korisnik pristupiti datoteci. - + Quit %1 Zatvori %1 @@ -855,7 +855,7 @@ Enter username and password for "%1" at %2. - Unesite korisničko ime i zaporku za „%1” na %2. + @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Pogreška pri pisanju metapodataka u bazu podataka @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Unesite zaporku za cjelovito šifriranje: <br><br>Korisnik: %2<br>Račun: %3<br> - + Enter E2E passphrase Unesite zaporku za E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Nedostaju podaci u odgovoru datoteke poslužitelja. - - + + Server error: PROPFIND reply is not XML formatted! Pogreška poslužitelja: PROPFIND odgovor nije formatiran u XML-u! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Pogreška pri otvaranju direktorija %1 - + Directory not accessible on client, permission denied Direktorij nije raspoloživ na klijentu, dopuštenje je odbijeno - + Directory not found: %1 Direktorij nije pronađen: %1 - + Filename encoding is not valid Nevažeće kodiranje naziva datoteke - + Error while reading directory %1 Pogreška pri čitanju direktorija %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Poslužitelj je vratio pogrešku: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - Došlo je do pogreške prilikom pristupanja krajnjoj točki „token”: <br><em>%1</em> + - + Could not parse the JSON returned from the server: <br><em>%1</em> Nije moguće parsirati JSON koji je vratio poslužitelj: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odgovor poslužitelja ne sadrži sva očekivana polja - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. URL vraćenog poslužitelja ne počinje s HTTPS unatoč tome što URL za prijavu počinje s HTTPS. Prijavljivanje će biti onemogućeno jer to predstavlja sigurnosni problem. Obratite se svom administratoru. @@ -1368,41 +1305,41 @@ Aktivnost sinkronizacije - + Could not read system exclude file Nije moguće pročitati datoteku izuzetka iz sustava - + A new folder larger than %1 MB has been added: %2. Dodana je nova mapa veća od %1 MB: %2. - + A folder from an external storage has been added. Dodana je mapa iz vanjskog prostora za pohranu. - + Please go in the settings to select it if you wish to download it. Idite u postavke kako biste je odabrali ako je želite preuzeti. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Mapa %1 je stvorena, ali je prethodno isključena iz sinkronizacije. Podaci unutar nje neće se sinkronizirati. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Datoteka %1 je stvorena, ali je prethodno isključena iz sinkronizacije. Neće se sinkronizirati. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Sve datoteke u vašoj lokalnoj mapi za sinkronizaciju „%1” su izbrisane. Ova će se brisanja sinkronizirati s vašim poslužiteljem, što znači da će te datoteke biti nedostupne ako ih ne vratite. +Jeste li sigurni da želite sinkronizirati te radnje s poslužiteljem? +Ako ste slučajno odabrali ovu radnju i želite zadržati svoje datoteke, ponovno će se sinkronizirati s poslužitelja. + + All files in the sync folder '%1' 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. @@ -1474,28 +1420,33 @@ Zadrži lokalne datoteke kao datoteke nepodudaranja - - All files in the sync folder '%1' folder were deleted on the server. + + 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 restore 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. - Sve datoteke u mapi za sinkronizaciju „%1” izbrisane su s poslužitelja. -Ta će se brisanja sinkronizirati s lokalnom mapom za sinkronizaciju, što znači da će takve datoteke biti nedostupne ako nemate ovlasti za vraćanje. -Ako odlučite vratiti datoteke, ponovno će se sinkronizirati s poslužiteljem ako imate potrebne ovlasti. -Ako odlučite izbrisati datoteke, one će vam biti nedostupne ako niste njihov vlasnik. + - - 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. + + 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. - Sve datoteke u vašoj lokalnoj mapi za sinkronizaciju „%1” su izbrisane. Ova će se brisanja sinkronizirati s vašim poslužiteljem, što znači da će te datoteke biti nedostupne ako ih ne vratite. -Jeste li sigurni da želite sinkronizirati te radnje s poslužiteljem? -Ako ste slučajno odabrali ovu radnju i želite zadržati svoje datoteke, ponovno će se sinkronizirati s poslužitelja. + - All files in the sync folder "%1" folder were deleted on the server. + Remove All Files? + Ukloniti sve datoteke? + + + + Remove all files + Ukloni sve datoteke + + + + 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 restore 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. @@ -1506,25 +1457,6 @@ - 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. - Sve datoteke u vašoj lokalnoj mapi za sinkronizaciju „%1” su izbrisane. Ova će se brisanja sinkronizirati s vašim poslužiteljem, što znači da će te datoteke biti nedostupne ako ih ne vratite. -Jeste li sigurni da želite sinkronizirati te radnje s poslužiteljem? -Ako ste slučajno odabrali ovu radnju i želite zadržati svoje datoteke, ponovno će se sinkronizirati s poslužitelja. - - - - Remove All Files? - Ukloniti sve datoteke? - - - - Remove all files - Ukloni sve datoteke - - - Keep files Zadrži datoteke @@ -1560,7 +1492,7 @@ OCC::FolderMan - + Could not reset folder state Stanje mape nije moguće vratiti @@ -1570,37 +1502,37 @@ Pronađen je stari sinkronizacijski dnevnik ‘%1’ ali ga nije moguće ukloniti. Provjerite koristi li ga trenutno neka druga aplikacija. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - Pronađen je stari sinkronizacijski dnevnik „%1” ali ga nije moguće ukloniti. Provjerite koristi li ga trenutno neka druga aplikacija. + - + (backup) (sigurnosna kopija) - + (backup %1) (sigurnosna kopija %1) - + Undefined State. Nedefinirano stanje. - + Waiting to start syncing. Čeka se početak sinkronizacije. - + Preparing for sync. Priprema za sinkronizaciju. - + Sync is running. Sinkronizacija je pokrenuta. @@ -1610,67 +1542,67 @@ Sinkronizacija je bila uspješna, postoje neriješena nepodudaranja. - + Sync finished with unresolved conflicts. Sinkronizacija je završena uz neriješena nepodudaranja. - + Last Sync was successful. Zadnja sinkronizacija bila je uspješna. - + Setup Error. Pogreška pri postavljanju. - + User Abort. Prekinuo korisnik. - + Sync is paused. Sinkronizacija je pauzirana. - + %1 (Sync is paused) %1 (Sinkronizacija je pauzirana) - + No valid folder selected! Nije odabrana nijedna valjana mapa! - + The selected path does not exist! Odabrani put ne postoji! - + The selected path is not a folder! Odabran put nije mapa! - + You have no permission to write to the selected folder! Nemate dopuštenje za pisanje u odabranu mapu! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Lokalna mapa %1 već sadrži mapu koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Lokalna mapa %1 već je sadržana u mapi koja se upotrebljava u poveznici za sinkronizaciju mape. Odaberite drugu mapu! - + There is already a sync from the server to this local folder. Please pick another local folder! Već postoji sinkronizacija između poslužitelja i te lokalne mape. Odaberite drugu lokalnu mapu! @@ -1760,12 +1692,12 @@ Checking for changes in remote "%1" - Provjera za promjene u udaljenom „%1” + Checking for changes in local "%1" - Provjera za promjene u lokalnom „%1” + @@ -1882,12 +1814,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Dodaj poveznicu za sinkronizaciju mape - + Add Sync Connection Dodaj poveznicu za sinkronizaciju @@ -1925,45 +1857,45 @@ Enter the name of the new folder to be created below "%1": - Unesite naziv nove mape koja će se stvoriti ispod „%1”: + - + Folder was successfully created on %1. Mapa je uspješno stvorena na %1. - + Authentication failed accessing %1 Neuspješna autentifikacija za pristup %1 - + Failed to create the folder on %1. Please check manually. Neuspješno stvaranje mape na %1. Provjerite ručno. - + Failed to list a folder. Error: %1 Neuspješno popisivanje mape. Pogreška: %1 - + Choose this to sync the entire account Odaberite ovu opciju za sinkronizaciju cijelog računa - + This folder is already being synced. Ova se mapa već sinkronizira. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Već sinkronizirate <i>%1</i>, nadređenu mapu od <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Već sinkronizirate <i>%1</i>, podmapu od <i>%2</i>. @@ -1971,24 +1903,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Upotrijebi virtualne datoteke umjesto trenutnog preuzimanja sadržaja %1 - - + + (experimental) (eksperimentalan) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtualne datoteke nisu podržane za lokalne mape koje se upotrebljavaju kao korijenske mape particije sustava Windows. Odaberite važeću podmapu ispod slova diskovne particije. - + Virtual files are not available for the selected folder Virtualne datoteke nisu raspoložive za odabranu mapu @@ -2009,27 +1941,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nijedna E-oznaka nije primljena s poslužitelja, označite proxy/pristupno računalo - + We received a different E-Tag for resuming. Retrying next time. Primljena je drugačija E-oznaka za nastavak. Ponovni pokušaj sljedeći put. - + We received an unexpected download Content-Length. Primili smo neočekivano preuzimanje Content-Length. - + Server returned wrong content-range Poslužitelj je vratio pogrešan raspon sadržaja - + Connection Timeout Istek veze @@ -2149,22 +2081,22 @@ Stvori arhivu otklanjanja pogrešaka… - + Server notifications that require attention. Obavijesti poslužitelja koje zahtijevaju pažnju. - + You cannot disable autostart because system-wide autostart is enabled. Ne možete onemogućiti automatsko pokretanje jer je omogućeno automatsko pokretanje na razini cijelog sustava. - + Change update channel? Promijeniti kanal za ažuriranje? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2105,32 @@ Imajte na umu da se ovime odabire samo kategorija iz koje dolaze nadogradnje i da nema vraćanja na stare inačice: stoga se povratak s beta kanala na stabilni kanal obično ne može odmah izvršiti, već je potrebno pričekati stabilnu inačicu koja je novija od trenutačno instalirane beta inačice. - + Change update channel Promijeni kanal za ažuriranje - + Cancel Odustani - + Create Debug Archive Stvori arhivu otklanjanja pogrešaka - + Zip Archives Zip arhive - + Debug Archive Created Arhiva otklanjanja pogrešaka je stvorena - + Debug archive is created at %1 Arhiva otklanjanja pogrešaka je stvorena na %1 @@ -2206,22 +2138,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Potrebna je zaporka za dijeljenje - + Please enter a password for your link share: Unesite zaporku svoje poveznice dijeljenja: - + Sharing error Pogreška dijeljenja - + Could not retrieve or create the public link share. Error: %1 @@ -2240,7 +2172,7 @@ Reading from keychain failed with error: "%1" - Čitanje s privjeska nije uspjelo, pogreška: „%1” + @@ -2283,7 +2215,7 @@ This entry is provided by the system at "%1" and cannot be modified in this view. - Ovaj unos osigurava sustav na „%1” i ne može se mijenjati u ovom prikazu. + @@ -2335,7 +2267,7 @@ Cannot write changes to "%1". - Nije moguće zapisati promjene u „%1”. + @@ -2358,62 +2290,62 @@ Invalid filename - Nevažeći naziv datoteke + The file could not be synced because it contains characters which are not allowed on this system. - Datoteka se nije mogla sinkronizirati jer sadrži znakove koji nisu dopušteni na ovom sustavu. + Error - Pogreška + Please enter a new name for the file: - Unesite novi naziv datoteke: + New filename - Novi naziv datoteke + Rename file - Preimenuj datoteku + The file %1 could not be synced because the name contains characters which are not allowed on this system. - Datoteka %1 se nije mogla sinkronizirati jer njen naziv sadrži znakove koji nisu dopušteni na ovom sustavu. + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > - Sljedeći znakovi nisu dopušteni na ovom sustavu: * " | & ? , ; : \ / ~ < > + You don't have the permission to rename this file. Please ask the author of the file to rename it. - Nemate dopuštenje za preimenovanje ove datoteke. Zatražite autora datoteke da je preimenuje. + Filename contains illegal characters: %1 - Naziv datoteke sadrži nedopuštene znakove: %1 + Could not rename file. Please make sure you are connected to the server. - Nije moguće preimenovati datoteku. Provjerite jeste li povezani s poslužiteljem. + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Nije moguće preimenovati datoteku jer datoteka s istim nazivom već postoji na poslužitelju. Odaberite neki drugi naziv. + @@ -2546,7 +2478,7 @@ OCC::Logger - + Error Pogreška @@ -2556,41 +2488,41 @@ <nobr>Datoteka ‘%1’<br/>se ne može otvoriti radi zapisivanja.<br/><br/>Izlaz zapisa <b>ne može</b> se spremiti!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - <nobr>Datoteka „%1”<br/>ne može se otvoriti radi zapisivanja.<br/><br/>Izlaz zapisa <b>ne može</b> se spremiti!</nobr> + OCC::NSISUpdater - + New Version Available Dostupna je nova inač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>Dostupna je nova inačica klijenta %1.</p><p><b>%2</b> je dostupan za preuzimanje. Instalirana je inačica %3.</p> - - + + Skip this version Preskoči ovu inačicu - + Skip this time Preskoči ovaj put - + Get update Dohvati ažuriranje - + Update Failed Ažuriranje nije uspjelo @@ -2602,20 +2534,20 @@ <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Raspoloživa je nova inačica klijenta %1 ali nije uspjelo ažuriranje na novu inačicu.</p><p><b>%2</b> je preuzet. Instalirana je inačica %3. Ako potvrdite ponovno pokretanje i ažuriranje, računalo će se možda isključiti i ponovno uključiti radi dovršavanja instalacije.</p> + - + Ask again later Pitajte ponovo kasnije - + Restart and update Ponovno pokreni i ažuriraj - + Update manually Ažuriraj ručno @@ -2726,7 +2658,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Poslužitelj je vratio pogrešku: <em>%1</em> @@ -2736,32 +2668,32 @@ Došlo je do pogreške prilikom pristupanja krajnjoj točki ‘token’: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Došlo je do pogreške prilikom pristupanja krajnjoj točki „token“: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Prazan JSON s OAuth2 preusmjeravanja - + Could not parse the JSON returned from the server: <br><em>%1</em> Nije moguće parsirati JSON koji je vratio poslužitelj: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odgovor poslužitelja ne sadrži sva očekivana polja - + <h1>Login Error</h1><p>%1</p> <h1>Pogreška pri prijavi</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>Pogrešan korisnik</h1><p>Prijavili ste se kao korisnik <em>%1</em>, ali morate se prijaviti kao korisnik <em>%2</em>.<br>Odjavite se iz %3 u drugoj kartici, a zatim <a href=’%4’>kliknite ovdje</a> i prijavite se kao korisnik %2</p> @@ -2788,7 +2720,7 @@ A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Sada će se instalirati novo ažuriranje za %1. Alat za ažuriranje može tražiti dodatne ovlasti tijekom postupka. Računalo će se možda isključiti i ponovno uključiti radi dovršavanja instalacije. + @@ -2828,45 +2760,45 @@ Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Nije moguće preuzeti ažuriranje. Otvorite <a href='%1'>%1</a> kako biste ručno preuzeli ažuriranje. + - + Could not download update. Please open %1 to download the update manually. Nije moguće preuzeti ažuriranje. Otvorite %1 kako biste ručno preuzeli ažuriranje. - + Could not check for new updates. Nije moguće provjeriti ima li novih ažuriranja. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Dostupan je novi %1. Otvorite <a href='%2'>%2</a> za preuzimanje ažuriranja. + - + New %1 is available. Please open %2 to download the update. Dostupan je novi %1. Otvorite %2 za preuzimanje ažuriranja. - + Checking update server … Provjera poslužitelja za ažuriranje… - + Update status is unknown: Did not check for new updates. Status ažuriranja je nepoznat: provjera ažuriranja nije izvršena. - + No updates available. Your installation is at the latest version. Nema dostupnih ažuriranja. Instalirana je najnovija inačica. - + Update Check Provjera ažuriranja @@ -2894,14 +2826,14 @@ Poveži… - - + + Use &virtual files instead of downloading content immediately %1 Upotrijebi &virtualne datoteke umjesto trenutnog preuzimanja sadržaja %1 - - + + (experimental) (eksperimentalan) @@ -2926,49 +2858,49 @@ Slobodan prostor: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtualne datoteke nisu podržane za lokalne mape koje se upotrebljavaju kao korijenske mape particije sustava Windows. Odaberite važeću podmapu ispod slova diskovne particije. - + %1 folder "%2" is synced to local folder "%3" - %1 mapa „%2” sinkronizirana je s lokalnom mapom „%3” + - + Sync the folder "%1" - Sinkroniziraj mapu „%1” + - + Warning: The local folder is not empty. Pick a resolution! Upozorenje: lokalna mapa nije prazna. Odaberite razlučivost! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 slobodnog prostora - + Virtual files are not available for the selected folder Virtualne datoteke nisu raspoložive za odabranu mapu - + Local Sync Folder Mapa za lokalnu sinkronizaciju - - + + (%1) (%1) - + There isn't enough free space in the local folder! Nema dovoljno slobodnog prostora u lokalnoj mapi! @@ -3038,14 +2970,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3111,7 +3035,7 @@ &Sljedeće > - + Server address does not seem to be valid Čini se da adresa poslužitelja nije važeća @@ -3121,7 +3045,7 @@ Neispravan URL - + Could not load certificate. Maybe wrong password? Nije moguće učitati vjerodajnicu. Možda je pogrešna zaporka? @@ -3161,7 +3085,7 @@ The authenticated request to the server was redirected to "%1". The URL is bad, the server is misconfigured. - Autorizirani zahtjev poslužitelju preusmjeren je na „%1”. URL je neispravan, poslužitelj je pogrešno konfiguriran. + @@ -3219,54 +3143,54 @@ stvaranje mape na Nextcloudu: %1 - + Remote folder %1 created successfully. Uspješno je stvorena udaljena mapa %1. - + The remote folder %1 already exists. Connecting it for syncing. Udaljena mapa %1 već postoji. Povezivanje radi sinkronizacije. + - The folder creation resulted in HTTP error code %1 Stvaranje mape rezultiralo je HTTP šifrom pogreške %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Stvaranje udaljene mape nije uspjelo jer su navedene vjerodajnice pogrešne!<br/>Vratite se i provjerite svoje vjerodajnice.</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“>Stvaranje udaljene mape nije uspjelo vjerojatno zbog pogrešnih unesenih vjerodajnica.</font><br/>Vratite se i provjerite vjerodajnice.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Stvaranje udaljene mape %1 nije uspjelo, pogreška: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Postavljena je sinkronizacijska veza od %1 do udaljenog direktorija %2. - + Successfully connected to %1! Uspješno povezivanje s %1! - + Connection to %1 could not be established. Please check again. Veza s %1 nije uspostavljena. Provjerite opet. - + Folder rename failed Preimenovanje mape nije uspjelo @@ -3276,12 +3200,12 @@ Nije moguće ukloniti i izraditi sigurnosnu kopiju mape jer je mapa ili datoteka u njoj otvorena u drugom programu. Zatvorite mapu ili datoteku i pritisnite Pokušaj ponovo ili otkažite postavljanje. - + Cannot 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. Nije moguće ukloniti i izraditi sigurnosnu kopiju mape jer je mapa ili datoteka u njoj otvorena u drugom programu. Zatvorite mapu ili datoteku i pritisnite Pokušaj ponovo ili otkažite postavljanje. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color=“green“><b>Mapa za lokalnu sinkronizaciju %1 uspješno je stvorena!</b></font> @@ -3289,7 +3213,7 @@ OCC::OwncloudWizard - + Add %1 account Dodaj %1 račun @@ -3299,17 +3223,17 @@ %1 Čarobnjak za povezivanje - + Skip folders configuration Preskoči konfiguraciju mapa - + Enable experimental feature? Omogućiti eksperimentalne značajke? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3326,12 +3250,12 @@ Ovo je novi, eksperimentalni način rada. Ako se odlučite aktivirati ga, prijavite sve probleme s kojima se susretnete. - + Enable experimental placeholder mode Omogući eksperimentalni način rada sa zamjenskim datotekama - + Stay safe Zadrži stari @@ -3339,7 +3263,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Neispravan JSON odgovor iz URL-a ankete @@ -3349,25 +3273,25 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Datoteka sadrži završne praznine i nije je moguće preimenovati jer datoteka s istim nazivom već postoji na poslužitelju. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Datoteka sadrži završne praznine i nije je moguće preimenovati jer datoteka s istim nazivom već postoji na lokalnoj pohrani. + - + Symbolic links are not supported in syncing. Simboličke poveznice nisu podržane u sinkronizaciji. - + File is listed on the ignore list. Datoteka je navedena na popisu za zanemarivanje. - + File names ending with a period are not supported on this file system. Nazivi datoteka koji završavaju točkom nisu podržani u ovom datotečnom sustavu. @@ -3379,60 +3303,60 @@ File names containing the character "%1" are not supported on this file system. - Nazivi datoteka koji sadrže znak „%1” nisu podržani u ovom datotečnom sustavu. + - + File name contains at least one invalid character Naziv datoteke sadrži barem jedan nevažeći znak - + The file name is a reserved name on this file system. Naziv datoteke je rezervirani naziv u ovom datotečnom sustavu. - + Filename contains trailing spaces. Naziv datoteke sadrži završne praznine. - + Filename is too long. Naziv datoteke je predugačak. - + File/Folder is ignored because it's hidden. Datoteka/mapa se zanemaruje jer je skrivena. - + Stat failed. Stat nije uspio. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Nepodudaranje: preuzeta inačica poslužitelja, lokalna kopija preimenovana i nije otpremljena. - + The filename cannot be encoded on your file system. Naziv datoteke ne može se kodirati u vašem datotečnom sustavu. - + The filename is blacklisted on the server. Ovaj naziv datoteke je blokiran na poslužitelju. - + File has extension reserved for virtual files. Datoteka ima nastavak koji je rezerviran za virtualne datoteke. - + size veličina @@ -3442,72 +3366,62 @@ dopuštenja - - server reported no %1 - poslužitelj javlja da nema %1 - - - - permission - dopuštenje - - - + file id id datoteke - - Server reported no %1 - Poslužitelj javlja da nema %1 + + server reported no %1 + poslužitelj javlja da nema %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Došlo je do nepodudaranja pri otpremanju nekih datoteka u mapu. Nepodudarne datoteke će biti izbrisane! - + Conflict when uploading a folder. It's going to get cleared! Došlo je do nepodudaranja pri otpremanju mape. Nepodudarne mape će biti izbrisane! - + Conflict when uploading a file. It's going to get removed! Došlo je do nepodudaranja pri otpremanju datoteke. Nepodudarna datoteka će biti uklonjena! - + Ignored because of the "choose what to sync" blacklist Zanemareno zbog crne liste „odaberi što će se sinkronizirati” - + Not allowed because you don't have permission to add subfolders to that folder Nije dopušteno jer nemate dopuštenje za dodavanje podmapa u tu mapu - + Not allowed because you don't have permission to add files in that folder Nije dopušteno jer nemate dopuštenje za dodavanje datoteka u tu mapu - + Not allowed to upload this file because it is read-only on the server, restoring Nije dopušteno otpremiti ovu datoteku jer je dostupna samo za čitanje na poslužitelju, vraćanje - + Moved to invalid target, restoring Premješteno na nevažeće odredište, vraćanje - + Not allowed to remove, restoring Nije dopušteno uklanjanje, vraćanje - + Error while reading the database Pogreška pri čitanju baze podataka @@ -3517,9 +3431,9 @@ Poslužitelj je javio pogrešku pri čitanju direktorija '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 - Poslužitelj je javio pogrešku pri čitanju direktorija „%1” : %2 + @@ -3530,17 +3444,12 @@ Pogreška pri pisanju metapodataka u bazu podataka - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Pogreška pri ažuriranju metapodataka: %1 - + File is currently in use Datoteka je trenutno u upotrebi @@ -3553,44 +3462,44 @@ Datoteka %1 ne može se preuzeti jer nedostaju informacije o šifriranju. - + File %1 cannot be downloaded because encryption information is missing. Datoteka %1 ne može se preuzeti jer nedostaju informacije o šifriranju. - - + + File has changed since discovery Datoteka se promijenila od njenog otkrića - - + + File %1 cannot be downloaded because of a local file name clash! Datoteka %1 ne može se preuzeti zbog nepodudaranja naziva lokalne datoteke! - + File %1 can not be downloaded because of a local file name clash! Datoteka %1 ne može se preuzeti zbog nepodudaranja naziva lokalne datoteke! - + The download would reduce free local disk space below the limit Preuzimanje bi smanjilo slobodni prostor na lokalnom disku ispod granice - + Free space on disk is less than %1 Slobodan prostor na disku manji je od %1 - + File was deleted from server Datoteka je izbrisana s poslužitelja - + The file could not be downloaded completely. Datoteku nije moguće u potpunosti preuzeti. @@ -3600,12 +3509,12 @@ Preuzeta datoteka je prazna, unatoč tome što je poslužitelj javio da treba iznositi %1. - + The downloaded file is empty, but the server said it should have been %1. Preuzeta datoteka je prazna, ali poslužitelj je javio da treba biti %1. - + File %1 cannot be saved because of a local file name clash! Datoteka %1 ne može se spremiti zbog nepodudaranja naziva lokalne datoteke! @@ -3615,18 +3524,12 @@ Pogreška pri pisanju metapodataka u bazu podataka - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Pogreška pri ažuriranju metapodataka: %1 - + The file %1 is currently in use Datoteka %1 je trenutno u upotrebi @@ -3634,12 +3537,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Vraćanje nije uspjelo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Datoteka ili mapa uklonjena je iz dijeljenja koje je samo za čitanje, ali vraćanje nije uspjelo: %1 @@ -3713,12 +3616,12 @@ Datoteka %1 ne može se preimenovati u %2 zbog nepodudaranja naziva lokalne datoteke - + Error updating metadata: %1 Pogreška pri ažuriranju metapodataka: %1 - + The file %1 is currently in use Datoteka %1 je trenutno u upotrebi @@ -3729,12 +3632,12 @@ Pogreška pri pisanju metapodataka u bazu podataka - + Failed to rename file Preimenovanje datoteke nije uspjelo - + Error setting pin state Pogreška pri postavljanju stanja šifre @@ -3768,12 +3671,12 @@ Pogreška pri pisanju metapodataka u bazu podataka - + Error writing metadata to the database: %1 Pogreška pri pisanju metapodataka u bazu podataka: %1 - + The file %1 is currently in use Datoteka %1 je trenutno u upotrebi @@ -3791,22 +3694,22 @@ Poslužitelj je vratio pogrešnu HTTP šifru. Očekivana je 201, ali je primljena „%1 %2”. - + Error updating metadata: %1 Pogreška pri ažuriranju metapodataka: %1 - + The file %1 is currently in use Datoteka %1 je trenutno u upotrebi - + Error setting pin state Pogreška pri postavljanju stanja šifre - + Error writing metadata to the database Pogreška pri pisanju metapodataka u bazu podataka @@ -3814,46 +3717,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Otpremanje šifrirane datoteke nije uspjelo. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Datoteka %1 ne može se otpremiti jer postoji druga datoteka s istim nazivom koja se razlikuje samo po velikom/malom slovu - - + + Upload of %1 exceeds the quota for the folder Otpremanje %1 premašuje kvotu za mapu - + File Removed (start upload) %1 Datoteka je uklonjena (početak otpremanja) %1 - + Local file changed during syncing. It will be resumed. Lokalna datoteka je izmijenjena tijekom sinkronizacije. Sinkroniziranje će se nastaviti. - + Local file changed during sync. Lokalna datoteka je izmijenjena tijekom sinkronizacije. - + Failed to unlock encrypted folder. Nije uspjelo otključavanje šifrirane mape. @@ -3863,12 +3758,12 @@ Pogreška pri pisanju metapodataka u bazu podataka - + Error updating metadata: %1 Pogreška pri ažuriranju metapodataka: %1 - + The file %1 is currently in use Datoteka %1 je trenutno u upotrebi @@ -3876,32 +3771,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Lokalna datoteka je uklonjena tijekom sinkronizacije. - + Local file changed during sync. Lokalna datoteka je izmijenjena tijekom sinkronizacije. - + Poll URL missing Nedostaje URL ankete - + Unexpected return code from server (%1) Neočekivana povratna šifra s poslužitelja (%1) - + Missing File ID from server Nedostaje ID datoteke s poslužitelja - + Missing ETag from server Nedostaje E-oznaka s poslužitelja @@ -3909,22 +3804,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Nedostaje URL ankete - + The local file was removed during sync. Lokalna datoteka je uklonjena tijekom sinkronizacije. - + Local file changed during sync. Lokalna datoteka je izmijenjena tijekom sinkronizacije. - + The server did not acknowledge the last chunk. (No e-tag was present) Poslužitelj nije potvrdio posljednji komad. (E-oznaka nije bila prisutna) @@ -4002,7 +3897,7 @@ OCC::ServerNotificationHandler - + Dismiss Zanemari @@ -4172,17 +4067,17 @@ Zaštita zaporkom - + Allow editing Dopusti uređivanje - + View only - Samo za gledanje + - + Allow upload and editing Omogući otpremanje i uređivanje @@ -4192,7 +4087,7 @@ Datum isteka - + File drop (upload only) Povlačenje datoteke (samo za otpremanje) @@ -4202,32 +4097,32 @@ Prestani dijeliti - + Link name - Naziv pozivnice + - + Note to recipient Obavijest primatelju - + Password protect Zaštita zaporkom - + Set expiration date Postavi datum isteka - + Delete link - Izbriši poveznicu + - + Add another link Dodaj drugu poveznicu @@ -4237,27 +4132,27 @@ Izbriši poveznicu dijeljenja - + Confirm Link Share Deletion Potvrdi brisanje dijeljenja poveznicom - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Želite li zaista izbrisati dijeljenje javnom poveznicom <i>%1</i>?</p><p>Napomena: ovu radnju ne možete poništiti.</p> - + Delete Izbriši - + Cancel Odustani - + Public link Javna poveznica @@ -4270,12 +4165,12 @@ Dijelite s korisnicima ili grupama... - + Search globally Pretraži globalno - + Copy link Kopiraj poveznicu @@ -4285,22 +4180,22 @@ Nema rezultata za ‘%1’ - + No results for "%1" - Nema rezultata za „%1” + - + Password for share required Potrebna je zaporka za dijeljenje - + Please enter a password for your email share: Unesite zaporku svoje e-pošte dijeljenja: - + I shared something with you Dijelim nešto s vama @@ -4338,42 +4233,42 @@ Istječe: - + Can reshare Ponovno dijeljenje moguće - + Note to recipient Obavijest primatelju - + Set expiration date Postavi datum isteka - + Unshare Prestani dijeliti - + Can create Stvaranje moguće - + Can change Mijenjanje moguće - + Can delete Brisanje moguće - + Password protect Zaštita zaporkom @@ -4390,23 +4285,23 @@ OCC::SocketApi - + Context menu share Dijeljenje kontekstnog izbornika - + Select new location … Odaberi novu lokaciju… - + I shared something with you Dijelim nešto s vama - - + + Share options Mogućnosti dijeljenja @@ -4419,76 +4314,76 @@ Activity - Aktivnost + - + Copy private link to clipboard Kopiraj privatnu poveznicu u međuspremnik - + Send private link by email … Pošalji privatnu poveznicu e-poštom… - + Resharing this file is not allowed Dijeljenje ove datoteke nije dopušteno - + Resharing this folder is not allowed Ponovno dijeljenje ove mape nije dopušteno - - + + Copy public link Kopiraj javnu poveznicu - + Copy internal link Kopiraj internu poveznicu - + Edit Uredi - + Open in browser Otvori u pregledniku - + Resolve conflict … Riješi nepodudaranje… - + Move and rename … Premjesti i preimenuj… - + Move, rename and upload … Premjesti, preimenuj i otpremi… - + Delete local changes Izbriši lokalne promjene - + Move and upload … Premjesti i otpremi… - + Delete Izbriši @@ -4634,77 +4529,77 @@ Svejedno vjeruj ovoj vjerodajnici - + Untrusted Certificate Nepouzdana vjerodajnica - + Cannot connect securely to <i>%1</i>: Nije moguće sigurno se povezati s <i>%1</i>: Additional errors: - Dodatne pogreške: + - + with Certificate %1 s vjerodajnicom %1 - - - + + + &lt;not specified&gt; &lt;nije navedeno&gt; - - + + Organization: %1 Organizacija: %1 - - + + Unit: %1 Jedinica: %1 - - + + Country: %1 Država: %1 - + Fingerprint (SHA1): <tt>%1</tt> Otisak prsta (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Otisak prsta (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Otisak prsta (SHA-512): <tt>%1</tt> - + Effective Date: %1 Datum stupanja na snagu: %1 - + Expiration Date: %1 Datum isteka: %1 - + Issuer: %1 Izdavatelj: %1 @@ -4797,33 +4692,33 @@ Došlo je do pogreške pod internim brojem %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (preskočeno zbog prethodne pogreške, pokušajte ponovno za %2) - + Could not update file: %1 Neuspješno ažuriranje datoteke: %1 - + Could not update virtual file metadata: %1 Nije uspjelo ažuriranje metapodataka virtualne datoteke: %1 - + Unresolved conflict. Neriješeno nepodudaranje. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Dostupno je samo %1, za pokretanje je potrebno najmanje %2 - + Aborted Prekinuto @@ -4900,16 +4795,16 @@ Nazivi datoteka koji završavaju točkom nisu podržani u ovom datotečnom sustavu. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Nije moguće otvoriti ili stvoriti lokalnu sinkronizacijsku bazu podataka. Provjerite imate li pristup pisanju u mapi za sinkronizaciju. + + File names containing the character '%1' are not supported on this file system. Nazivi datoteka koji sadrže znak ‘%1’ nisu podržani u ovom datotečnom sustavu. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Nije moguće otvoriti ili stvoriti lokalnu sinkronizacijsku bazu podataka. Provjerite imate li pristup pisanju u mapi za sinkronizaciju. - - The file name is a reserved name on this file system. Naziv datoteke je rezervirani naziv u ovom datotečnom sustavu. @@ -4930,7 +4825,7 @@ Datoteka/mapa se zanemaruje jer je skrivena. - + Using virtual files with suffix, but suffix is not set Upotrebljavaju se virtualne datoteke sa sufiksom, ali sufiks nije određen @@ -4945,7 +4840,7 @@ Naziv datoteke ne može se kodirati u vašem datotečnom sustavu. - + Unable to read the blacklist from the local database Nije moguće pročitati crnu listu iz lokalne baze podataka @@ -4960,17 +4855,17 @@ Stat nije uspio. + + Unable to read from the sync journal. + Nije moguće čitati iz sinkronizacijskog dnevnika. + + Filename encoding is not valid Nevažeće kodiranje naziva datoteke - - Unable to read from the sync journal. - Nije moguće čitati iz sinkronizacijskog dnevnika. - - - + Cannot open the sync journal Nije moguće otvoriti sinkronizacijski dnevnik @@ -4980,22 +4875,22 @@ Nevažeći znakovi, preimenujte „%1” + + Synchronization will resume shortly. + + + File name contains at least one invalid character Naziv datoteke sadrži barem jedan nevažeći znak - - Synchronization will resume shortly. - Sinkronizacija će se uskoro nastaviti. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Premalo prostora na disku: preskočena su preuzimanja koja bi smanjila slobodni prostor ispod %1. - + There is insufficient space available on the server for some uploads. Na nekim poslužiteljima nema dovoljno slobodnog prostora za određene otpreme. @@ -5006,107 +4901,107 @@ Offline - Izvanmrežno + All synced! - Sve je sinkronizirano! + Some files couldn't be synced! - Neke datoteke nije bilo moguće sinkronizirati! + See below for errors - Pregledajte pogreške u nastavku + Syncing - Sinkronizacija + Sync paused - Sinkronizacija je pauzirana + Some files could not be synced! - Neke datoteke nije bilo moguće sinkronizirati! + See below for warnings - Pregledajte upozorenja u nastavku + %1 of %2 · %3 left - %1 od %2 · preostalo %3 + %1 of %2 - %1 od %2 + Syncing file %1 of %2 - Sinkronizacija datoteke %1 od %2 + OCC::Systray - + Add account Dodaj račun - + Open main dialog Otvori glavni dijaloški okvir + - Pause sync Pauziraj sinkronizaciju - - + + Resume sync Nastavi sinkronizaciju - + Settings Postavke - + Exit %1 Izlaz %1 - + Pause sync for all Pauziraj sinkronizaciju za sve - + Resume sync for all Nastavi sinkronizaciju za sve - + %1: %2 %1: %2 @@ -5114,24 +5009,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Klijent za osobna računala</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Inačica %1. Za više informacija kliknite <a href=’%2’>ovdje</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Upotreba dodatka za virtualne datoteke: %1</small></p> - + <p>This release was supplied by %1</p> <p>Ovo izdanje isporučuje %1</p> @@ -5139,55 +5034,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Dohvaćanje davatelja nije uspjelo. + - + Failed to fetch search providers for '%1'. Error: %2 - Nije uspjelo dohvaćanje davatelja usluga pretraživanja za '%1'. Pogreška: %2 + - + Search has failed for '%2'. - Pretraživanje za „%2“ nije uspjelo. + - + Search has failed for '%1'. Error: %2 - Pretraživanje za „%1” nije uspjelo. Pogreška: %2 + OCC::User - + Retry all uploads Ponovno pokreni sve otpreme - + Synced %1 Sinkronizirano %1 - + You renamed %1 Preimenovali ste %1 - + You deleted %1 Izbrisali ste %1 - + You created %1 Stvorili ste %1 - + You changed %1 Promijenili ste %1 @@ -5195,22 +5090,22 @@ OCC::UserModel - + Confirm Account Removal Potvrdi brisanje 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>Želite li zaista ukloniti vezu s računom <i>%1</i>?</p><p><b>Napomena:</b> time <b>nećete</b> izbrisati datoteke.</p> - + Remove connection Ukloni vezu - + Cancel Odustani @@ -5220,125 +5115,107 @@ Could not fetch predefined statuses. Make sure you are connected to the server. - Nije moguće dohvatiti unaprijed definirane statuse. Provjerite jeste li povezani s poslužiteljem. + Could not fetch user status. Make sure you are connected to the server. - Nije moguće dohvatiti status korisnika. Provjerite jeste li povezani s poslužiteljem. + User status feature is not supported. You will not be able to set your user status. - Nije podržana značajka statusa korisnika. Nećete moći postaviti status korisnika. + Emojis feature is not supported. Some user status functionality may not work. - Nije podržana značajka emojija. Neke funkcije statusa korisnika možda neće raditi. + Could not set user status. Make sure you are connected to the server. - Nije moguće postaviti status korisnika. Provjerite jeste li povezani s poslužiteljem. + Could not clear user status message. Make sure you are connected to the server. - Nije moguće izbrisati poruku o statusu korisnika. Provjerite jeste li povezani s poslužiteljem. + Don't clear - Ne briši + 30 minutes - 30 minuta + 1 hour - 1 sat + 4 hours - 4 sata + Today - Danas + This week - Ovaj tjedan + Less than a minute - Prije manje od minute + 1 minute - 1 minuta + %1 minutes - %1 minuta + %1 hours - %1 sati + 1 day - 1 dan + %1 days - %1 dana + OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Značajka virtualnog datotečnog sustava zahtijeva datotečni sustav NTFS, %1 upotrebljava %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5544,7 +5421,7 @@ Checking for changes in remote "%1" - Provjera za promjene u udaljenom „%1” + @@ -5554,7 +5431,7 @@ Checking for changes in local "%1" - Provjera za promjene u lokalnom „%1” + @@ -5860,52 +5737,52 @@ Nova mapa - + %n day ago Prije %n danaPrije %n danaPrije %n dana - + %n days ago Prije %n danaPrije %n danaPrije %n dana - + in the future u budućnosti - + %n hour ago Prije %n sataPrije %n sataPrije %n sata - + %n hours ago Prije %n satiPrije %n satiPrije %n sati - + now sada - + Less than a minute ago Prije manje od minute - + %n minute ago Prije %n minutePrije %n minutePrije %n minute - + %n minutes ago Prije %n minutaPrije %n minutaPrije %n minuta - + Some time ago Prije nekog vremena @@ -5939,7 +5816,7 @@ SyncJournalDb - + Failed to connect database. Povezivanje baze podataka nije uspjelo. @@ -5947,9 +5824,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Traži datoteke, poruke, događaje… + @@ -5957,7 +5834,7 @@ Load more results - Učitaj više rezultata + @@ -5965,7 +5842,7 @@ Search result skeleton. - Kostur rezultata pretraživanja. + @@ -5973,7 +5850,7 @@ Load more results - Učitaj više rezultata + @@ -5984,21 +5861,11 @@ Unos računa - + Switch to account Prebaci na račun - - Current user status is online - Trenutni status korisnika je „na mreži“ - - - - Current user status is do not disturb - Trenutni status korisnika je „ne ometaj“ - - Account connected Račun povezan @@ -6009,7 +5876,17 @@ Račun nije povezan - + + Current user status is online + Trenutni status korisnika je „na mreži“ + + + + Current user status is do not disturb + Trenutni status korisnika je „ne ometaj“ + + + Account actions Radnje računa @@ -6019,24 +5896,24 @@ Izbriši račun - + Set status - Postavi status + - - + + Log out Odjava - - + + Log in Prijava - + Remove account Izbriši račun @@ -6046,108 +5923,108 @@ Online status - Status na mreži + Online - Na mreži + Away - Odsutan + Do not disturb - Ne ometaj + Invisible - Nevidljiv + Status message - Poruka statusa + What is your status? - Koji je vaš status? + Clear status message after - Izbriši poruku statusa nakon + Clear status message - Izbriši poruku statusa + Set status message - Postavi poruku statusa + Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n godine/godina%n godine/godina%n godine/godina - + %n month(s) %n mjeseca/mjeseci%n mjeseca/mjeseci%n mjeseca/mjeseci - + %n day(s) %n dan/dana%n dan/dana%n dan/dana - + %n hour(s) %n sat/sati%n sat/sati%n sat/sati - + %n minute(s) %n minute/minuta%n minute/minuta%n minute/minuta - + %n second(s) %n sekunde/sekundi%n sekunde/sekundi%n sekunde/sekundi - + %1 %2 %1 %2 @@ -6155,7 +6032,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Zaglavlje kontrolnog zbroja pogrešno je oblikovano. @@ -6177,75 +6054,75 @@ The checksum header contained an unknown checksum type "%1" - Zaglavlje kontrolnog zbroja sadrži nepoznatu vrstu kontrolnog zbroja „%1” + The downloaded file does not match the checksum, it will be resumed. "%1" != "%2" - Preuzeta se datoteka ne podudara s kontrolnim zbrojem, nastavit će se. „%1” != „%2” + Window - + Nextcloud desktop main dialog Glavni dijaloški okvir Nextclouda - + Current account Trenutni račun - - + + Resume sync for all Nastavi sinkronizaciju za sve - - + + Pause sync for all Pauziraj sinkronizaciju za sve - + Set user status - Postavi status korisnika + - + Add account Dodaj račun - + Add new account Dodaj novi račun - + Settings Postavke - + Exit Izlaz - + Current user avatar Avatar trenutnog korisnika - + Current user status is online Trenutni status korisnika je „na mreži“ - + Current user status is do not disturb Trenutni status korisnika je „ne ometaj“ @@ -6255,32 +6132,32 @@ Dijeli %1 - + Account switcher and settings menu Izmjenjivač računa i izbornik postavki - + Connected Povezan - + Disconnected Odspojen - + Open local folder of current account Otvori lokalnu mapu trenutnog računa - + Open Nextcloud Talk in browser Otvori Nextcloud Talk u pregledniku - + More apps Više aplikacija @@ -6290,7 +6167,7 @@ Izbornik aplikacija - + Open %1 in browser Otvori %1 u pregledniku @@ -6310,9 +6187,9 @@ Otvori dijaloški okvir za dijeljenje - + Unified search results list - Objedinjen popis rezultata pretraživanja + @@ -6321,15 +6198,15 @@ Prikaži dodatne radnje - + %1 - File activity - %1 – aktivnost datoteke + main.cpp - + System Tray not available Ladica sustava nije dostupna @@ -6339,7 +6216,7 @@ %1 je tražen na radnoj ladici sustava. Ako upotrebljavate XFCE, slijedite <a href=“http://docs.xfce.org/xfce/xfce4-panel/systray“>ove upute</a>. U suprotnom instalirajte aplikaciju ladice sustava kao što je „trayer” i pokušajte ponovno. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 je tražen na radnoj ladici sustava. Ako upotrebljavate XFCE, slijedite <a href=“http://docs.xfce.org/xfce/xfce4-panel/systray“>ove upute</a>. U suprotnom instalirajte aplikaciju ladice sustava kao što je „trayer” i pokušajte ponovno. @@ -6347,7 +6224,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Izrađeno iz revizije Gita <a href="%1“>%2</a>na %3, %4 s pomoću Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_hu.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_hu.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_hu.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_hu.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally %1 megnyitása helyben - + Open share dialog Megosztási párbeszédpanel megnyitása - + Share %1 %1 megosztása - - + + Show more actions További műveletek megjelenítése @@ -39,9 +39,9 @@ ActivityList - + Activity list - Tevékenységlista + Tevékenység lista @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out A kapcsolat időtúllépés miatt megszakadt - + Unknown error: network reply was deleted Ismeretlen hiba: hálózati válasz törölve - + Server replied "%1 %2" to "%3 %4" Kiszolgáló válasza: „%1 %2” erre: „%3 %4” @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Végpontok közötti titkosítás mnemonikus kódja - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). A kriptográfiai személyazonossága megvédéséhez, egy 12 szótári szóból álló mnemonikus kóddal titkosítjuk. Jegyezze meg ezeket, és tartsa azokat biztonságban. Szüksége lesz rájuk, ha egy új eszközt akar hozzáadni a fiókjához (például a mobiltelefonját vagy a laptopját). @@ -305,9 +305,9 @@ - - - + + + Cancel Mégse @@ -495,52 +495,52 @@ Mappa szinkronizálási kapcsolatának eltávolítása - + Disable virtual file support … A virtuális fájl támogatásának letiltása… - + Enable virtual file support %1 … A(z) %1 virtuális fájl támogatás engedélyezése… - + (experimental) (kísérleti) - + Folder creation failed Mappa létrehozása sikertelen - + <p>Could not create local folder <i>%1</i>.</p> <p>A helyi mappa nem hozható létre: <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Mappa szinkronizációs kapcsolatának eltávolításának megerősíté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 leállítja a(z) <i>%1</i> mappa szinkronizálását?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove Folder Sync Connection Mappa szinkronizálási kapcsolatának eltávolítása - + Disable virtual file support? Letiltja a virtuális fájlok támogatását? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Ez a művelet megszakítja a jelenleg futó szinkronizálást. - + Disable support Támogatás letiltása - + Sync Running A szinkronizálás fut - + The syncing operation is running.<br/>Do you want to terminate it? A szinkronizálás folyamatban van. <br/>Megszakítja? - + %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 mappa – 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őek el a tárhelyhasználati információk. - + %1 in use %1 használatban @@ -603,87 +603,87 @@ Bejelentkezés - + %1 as %2 %1 mint %2 - + The server version %1 is unsupported! Proceed at your own risk. A(z) %1 kiszolgálóverzió nem támogatott. Folyatás csak saját felelősségre. - + Connected to %1. Kapcsolódva ehhez: %1. - + Server %1 is temporarily unavailable. A(z) %1 kiszolgáló jelenleg nem érhető el. - + Server %1 is currently in maintenance mode. A(z) %1 kiszolgáló jelenleg karbantartási módban van. - + Signed out from %1. Kijelentkezve innen: %1. - + 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 … Kapcsolódás ehhez: %1… - + No connection to %1 at %2. Nincs kapcsolat ehhez: %1, itt: %2. - + Server configuration error: %1 at %2. Kiszolgáló konfigurációs hiba: %1, itt: %2. - + No %1 connection configured. Nincs %1 kapcsolat beállítva. - + There are folders that were not synchronized because they are too big: Az alábbi mappák nem lettek szinkronizálva, mert túl nagyok: - + There are folders that were not synchronized because they are external storages: Az alábbi mappák nem lettek szinkronizálva, mert külső tárolók: - + There are folders that were not synchronized because they are too big or external storages: Az alábbi mappák nem lettek szinkronizálva, mert túl nagyok, vagy külső tárolók: - + 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 a(z) <i>%1</i> fiókkal?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove connection Kapcsolat eltávolítása @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Kijelentkezve - + Disconnected Kapcsolat bontva - + Connected Kapcsolódva - + Service unavailable A szolgáltatás nem érhető el - + Maintenance mode Karbantartási üzemmód - + Network error Hálózati hiba - + Configuration error Beállítási hiba - + Asking Credentials Hitelesítési adatok kérése - + Unknown account state Ismeretlen fiókállapot @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. A mellőzési listából származó fájlok, valamint a szimbolikus linkek nincsenek szinkronizálva. - + For more activities please open the Activity app. További tevékenységekhez nyissa meg a Tevékenységek alkalmazást. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. A folytatás azt jelenti, hogy <b>törli ezeket a beállításokat</b>. - + Continuing will mean <b>ignoring these settings</b>. A folytatás azt jelenti, hogy <b>figyelmen kívül hagyja ezeket a beállításokat</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Néhány beállítást a kliens újabb verzióiban konfiguráltak, és olyan funkciókat használnak, amelyek ebben a verzióban nem érhetők el. <br> <br>%1<br><br>Az aktuális konfigurációs fájlról már készült biztonsági másolat: <i>%2</i>. - + Quit Kilépés - + Continue Folytatás - + Error accessing the configuration file Hiba a konfigurációs fájl elérésekor - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Hiba történt a következő konfigurációs fájl elérésekor: %1. Győződjön meg róla, hogy a fájlt eléri a felhasználója. - + Quit %1 %1 kilépés @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - A(z) %1 fájl nem tölthető fel, mert létezik egy fájl ugyanezzel a névvel, úgy hogy csak kis- és nagybetűkben tér el. - - - - - File %1 has invalid modified time. Do not upload to the server. - A(z) %1 fájl módosítási ideje érvénytelen. Ne töltse fel a kiszolgálóra. - - - - File Removed (start upload) %1 - Fájl eltávolítva (feltöltés indítása) %1 - - - - Local file changed during syncing. It will be resumed. - A helyi fájl megváltozott a szinkronizálás során. Folytatva lesz. - - - - - Local file changed during sync. - A helyi fájl megváltozott szinkronizálás közben. - - - - Error updating metadata: %1 - Hiba a metaadatok frissítésekor: %1 - - - - The file %1 is currently in use - A(z) %1 fájl épp használatban van - - - - The local file was removed during sync. - A helyi fájl el lett távolítva szinkronizálás közben. - - - - ; Restoration Failed: %1 - ; Sikertelen helyreállítás: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Hiba a metaadatok adatbázisba írásakor @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Adja meg a végpontok közötti titkosítási jelmondatát:<br><br>Felhasználó: %2<br>Fiók: %3<br> - + Enter E2E passphrase Adja meg az E2E jelmondatot @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ A kiszolgáló fájlkutatási válaszából adatok hiányoznak. - - + + Server error: PROPFIND reply is not XML formatted! Kiszolgálóhiba: A PROPFIND válasz nem XML formátumú! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Hiba történt a(z) %1 könyvtár megnyitásakor - + Directory not accessible on client, permission denied A könyvtár nem érhető el a kliensen, az engedély megtagadva - + Directory not found: %1 A könyvtár nem található: %1 - + Filename encoding is not valid A fájlnév kódolása érvénytelen - + Error while reading directory %1 Hiba történt a(z) %1 könyvtár olvasása során @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> A kiszolgáló hibát adott vissza: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Hiba történt a „token” végpont elérésekor: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> A kiszolgálótól visszakapott JSON nem dolgozható fel: <br><em>%1</em> - + The reply from the server did not contain all expected fields A kiszolgáló válasza nem tartalmazta az összes várt mezőt - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. A visszaadott kiszolgáló URL nem HTTPS-sel kezdődik, pedig a bejelentkezési URL HTTPS-sel kezdődött. A bejelentkezés nem lesz lehetséges, mert biztonsági problémát jelenthet. Lépjen kapcsolatba a rendszergazdával. @@ -1368,41 +1305,41 @@ Szinkronizálási tevékenység - + Could not read system exclude file Nem lehetett beolvasni a rendszer kizárási fájlját - + A new folder larger than %1 MB has been added: %2. Egy %1 MB méretet meghaladó mappa lett hozzáadva: %2. - + A folder from an external storage has been added. Egy külső tárolóból származó mappa lett hozzáadva. - + Please go in the settings to select it if you wish to download it. A beállításoknál válassza ki, ha le szeretné tölteni. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. A(z) %1 mappa létre lett hozva, de előzőleg ki lett hagyva a szinkronizálásból. A benne lévő adatok nem lesznek szinkronizálva. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. A(z) %1 fájl létre lett hozva, de előzőleg ki lett hagyva a szinkronizálásból. Nem lesz szinkronizálva. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + A(z) „%1” helyi szinkronizálási mappában található összes fájl törölve lett. Ezek a törlések szinkronizálva lesznek a kiszolgálóval, így ezek nem lesznek elérhetők, amíg vissza nem állítják őket. +Biztos, hogy szinkronizálni akarja ezeket a változásokat a kiszolgálóval? +Ha ez véletlen volt, és úgy dönt, hogy megtartja ezeket a fájlokat, akkor újra szinkronizálva lesznek a kiszolgálóról. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Helyi fájlok megtartása ütközésként - - 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 restore 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. - A(z) „%1” szinkronizálási mappában lévő összes fájl törlésre került a kiszolgálóról. -Ezek a törlések szinkronizálva lesznek a helyi szinkronizálási mappával, így, hacsak nincs joga a helyreállításhoz, akkor ezek a fájlok nem lesznek elérhetők. -Ha úgy dönt, hogy helyreállítja a fájlokat, akkor azokat újra lesznek szinkronizálva a kiszolgálóval, ha erre jogosult. -Ha úgy dönt, hogy törli a fájlokat, akkor azok nem lesznek elérhetők Önnek, hacsak nem Ön a tulajdonos. - - - - 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. - A(z) „%1” helyi szinkronizálási mappában található összes fájl törölve lett. Ezek a törlések szinkronizálva lesznek a kiszolgálóval, így ezek nem lesznek elérhetők, amíg vissza nem állítják őket. -Biztos, hogy szinkronizálni akarja ezeket a változásokat a kiszolgálóval? -Ha ez véletlen volt, és úgy dönt, hogy megtartja ezeket a fájlokat, akkor újra szinkronizálva lesznek a kiszolgálóról. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Ha úgy dönt, hogy törli ezeket a fájlokat, akkor többé nem fogja azokat elérni, hacsak nem Ön a tulajdonos. - + 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. @@ -1514,17 +1440,27 @@ Ha ez véletlen volt, és úgy dönt, hogy megtartja ezeket a fájlokat, akkor újra letöltésre kerülnek a kiszolgálóról. - + Remove All Files? Eltávolítja az összes fájlt? - + Remove all files Összes fájl eltávolítása - + + 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 restore 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. + A(z) '%1' mappában lévő összes fájl törlésre került a szerverről. Ezeket a törléseket szinkronizáljuk a helyi szinkronizálási mappával, így, hacsak nincs joga a visszaállításra, ezek a fájlok nem lesznek elérhetők. +Ha úgy dönt, hogy visszaállítja a fájlokat, akkor azokat újra szinkronizálja a szerverrel, ha erre jogosult. +Ha úgy dönt, hogy törli a fájlokat, akkor azok nem lesznek elérhetők Önnek, hacsak nem Ön a tulajdonos. + + + Keep files Fájlok megtartása @@ -1560,7 +1496,7 @@ OCC::FolderMan - + Could not reset folder state A mappa állapotát nem lehet visszállítani @@ -1570,37 +1506,37 @@ Egy régi szinkronizálási naplófájl található: „%1”, de az nem törölhető. Győződjön meg róla, hogy jelenleg egy alkalmazás sem használja. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Egy régi szinkronizálási naplófájl található: „%1”, de az nem törölhető. Győződjön meg róla, hogy jelenleg egy alkalmazás sem használja. - + (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 a szinkronizáláshoz. - + Sync is running. A szinkronizálás fut. @@ -1610,67 +1546,67 @@ A szinkronizálás sikeres, feloldatlan ütközések vannak. - + Sync finished with unresolved conflicts. A szinkronizálás befejeződött, feloldatlan ütközések vannak. - + Last Sync was successful. A legutolsó szinkronizálás sikeres volt. - + Setup Error. Beállítási 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 mappa kiválasztva! - + The selected path does not exist! A kiválasztott útvonal nem létezik! - + The selected path is not a folder! A kiválasztott elérési út nem mappa! - + You have no permission to write to the selected folder! Nincs joga a kiválasztott mappa írásához! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! A(z) %1 helyi mappa már tartalmaz olyan mappát, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! A(z) %1 helyi mappa már egy olyan mappában van, amely mappa szinkronizálási kapcsolathoz használt. Válasszon egy másikat. - + There is already a sync from the server to this local folder. Please pick another local folder! Már van egy szinkronizálási mappa a kiszolgálóról ebben a helyi mappában. Válasszon egy másik mappát. @@ -1882,12 +1818,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Mappa szinkronizálási kapcsolat hozzáadása - + Add Sync Connection Szinkronizálási kapcsolat hozzáadása @@ -1928,42 +1864,42 @@ Adja meg a(z) „%1” alatt létrehozandó új mappa nevét: - + Folder was successfully created on %1. A mappa sikeresen létrehozva itt: %1. - + Authentication failed accessing %1 A hitelesítés sikertelen a(z) %1 elérésekor - + Failed to create the folder on %1. Please check manually. A mappa létrehozása sikertelen itt: 1. Ellenőrizze kézzel. - + Failed to list a folder. Error: %1 Egy mappa listázása meghiúsult. Hiba: %1 - + Choose this to sync the entire account Válassza ezt a teljes fiókja szinkronizálásához - + 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>. Már szinkronizál a(z) <i>%1</i> mappával, amely a(z) <i>%2</i> szülőmappája. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Már szinkronizálja a(z) <i>%1</i> mappát, amely a(z) <i>%2</i> almappája. @@ -1971,26 +1907,26 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - Virtuális fájlok használata a tartalom azonnali letöltése helyett %1 + Használjon virtuális fájlokat a tartalom azonnali letöltése helyett %1 - - + + (experimental) (kísérleti) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. A virtuális fájlok nem támogatottak a windowsos partíciók gyökerében helyi mappaként. Válasszon érvényes almappát a meghajtó betűjele alatt. - + Virtual files are not available for the selected folder - A virtuális fájlok nem érhetők el a kiválasztott mappához + Virtuális fájlok nem érhetők el a kiválasztott mappához @@ -2009,27 +1945,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nem érkezett E-Tag a kiszolgálótól, ellenőrizze a proxyt/átjárót - + We received a different E-Tag for resuming. Retrying next time. A folytatáskor különböző E-Tag érkezett. Újrapróbálkozás legközelebb. - + We received an unexpected download Content-Length. - Váratlan letöltési „Content-Length” fejléc fogadva. + Helytelen letöltött tartalomhosszúságot kaptunk. - + Server returned wrong content-range A kiszolgáló hibás tartalomtartományt adott vissza - + Connection Timeout Kapcsolati időtúllépés @@ -2149,79 +2085,79 @@ Hibakeresési archívum létrehozása… - + Server notifications that require attention. Kiszolgálóértesítések, melyek a figyelmét kérik. - + You cannot disable autostart because system-wide autostart is enabled. - Az automatikus indítást nem tilthatja le, mert az egész rendszerre kiterjedő automatikus indítás engedélyezett. + Az automatikus indítást nem tilthatja le, mert az egész rendszerre kiterjedő automatikus indítás engedélyezve van. - + Change update channel? Módosítja a frissítési csatornát? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - A frissítési csatorna határozza meg, hogy mely kliensfrissítéseket kínálják fel a telepítéshez. A „stabil” csatorna csak megbízhatónak tekintett frissítéseket tartalmaz, míg a „béta” csatorna verziói tartalmazhatnak újabb funkciókat és hibajavításokat, de még nem tesztelték őket alaposan. + A frissítési csatorna határozza meg, hogy mely kliensfrissítéseket kínálják fel a telepítéshez. A "stabil" csatorna csak megbízhatónak tekintett frissítéseket tartalmaz, míg a "béta" csatorna verziói tartalmazhatnak újabb funkciókat és hibajavításokat, de még nem tesztelték őket alaposan. -Ne feledje, hogy ez csak azt választja ki, hogy a frissítések milyen készletből származnak, és hogy régebbi verzióra nem lehet visszaállni: tehát a béta csatornáról a stabil csatornára való visszatérés általában nem azonnali, vagyis várni kell egy stabil verzióra, amely újabb, mint a jelenleg telepített béta változat. +Ne feledje, hogy ez csak azt választja ki, hogy a frissítések milyen készletből származnak, és hogy nem lehetséges downgrade-elni: tehát a béta csatornáról a stabil csatornára való visszatérés általában nem azonnali, vagyis várni kell egy stabil verzióra, amely újabb, mint a jelenleg telepített béta változat. - + Change update channel Frissítési csatorna módosítása - + Cancel - Mégse + Mégsem - + Create Debug Archive Hibakeresési archívum létrehozása - + Zip Archives Zip archívumok - + Debug Archive Created Hibakeresési archívum létrehozva - + Debug archive is created at %1 - A hibakeresési archívum itt lett létrehozva: %1 + A hibakeresési archívum a(z) %1 címen jön létre OCC::GetOrCreatePublicLinkShare - + Password for share required A megosztáshoz jelszó szükséges - + Please enter a password for your link share: Adjon meg egy jelszót a megosztási hivatkozásához: - + Sharing error Megosztási hiba - + Could not retrieve or create the public link share. Error: %1 @@ -2457,21 +2393,21 @@ The client can write debug logs to a temporary folder. These logs are very helpful for diagnosing problems. Since log files can get large, the client will start a new one for each sync run and compress older ones. It will also delete log files after a couple of hours to avoid consuming too much disk space. If enabled, logs will be written to %1 - A kliens hibakeresési naplókat írhat egy ideiglenes mappába. Ezek a naplók nagyon hasznosak a problémák diagnosztizálásában. -Mivel a naplófájlok nagyok lehetnek, ezért a kliens minden szinkronizálási futtatáshoz újat indít és tömöríti a régebbi fájlokat. Néhány nap elteltével törli a naplófájlokat, hogy ne foglaljon túl sok lemezterület. -Ha engedélyezve van, akkor a naplók a(z) %1 könyvtárba kerülnek. + Az ügyfél írhat hibakeresési naplókat egy ideiglenes mappába. Ezek a naplók nagyon hasznosak a problémák diagnosztizálásában. +Mivel a naplófájlok nagyok lehetnek, az ügyfél minden szinkronizálási futtatáshoz újat indít és tömöríti a régebbi fájlokat. Néhány nap elteltével törli a naplófájlokat, hogy ne foglaljon túl sok lemezterület. +Ha engedélyezve van, akkor a naplókat a(z) %1 könyvtárba kerülnek. Enable logging to temporary folder - Ideiglenes mappába történő naplózás engedélyezése + Az ideiglenes mappába történő naplózás engedélyezése This setting persists across client restarts. Note that using any logging command line options will override this setting. - Ez a beállítás a kliens újraindításakor is megmarad. -Ne feledje, hogy a naplózás parancssori kapcsolóinak használata felülbírálja ezt a beállítást. + Ez a beállítás az ügyfél újraindításakor is fennmarad. +Ne feledje, hogy a naplózás parancssori opcióinak használata felülbírálja ezt a beállítást. @@ -2547,7 +2483,7 @@ OCC::Logger - + Error Hiba @@ -2557,7 +2493,7 @@ <nobr>A(z) „%1” fájlt<br/>nem lehet írásra megnyitni.<br/><br/>A naplózás kimenete <b>nem</b> menthető!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>A(z) „%1” fájlt<br/>nem lehet írásra megnyitni.<br/><br/>A naplózás kimenete <b>nem</b> menthető!</nobr> @@ -2565,40 +2501,40 @@ 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>A(z) %1 kliens új verziója érhető el.</p><p>A(z) <b>%2</b> letölthető. A telepített verzió: %3.</p> - - + + Skip this version Verzió kihagyása - + Skip this time Kihagyás ez alkalommal - + Get update Frissítés beszerzése - + Update Failed Frissítés sikertelen <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3.</p> - <p> A %1 kliens új verziója érhető el, de a frissítési folyamat sikertelen volt.</p><p><b>%2</b> lett letöltve. A telepített verzió: %3.</p> + <p> A(z) %1 ügyfél új verziója elérhető, de a frissítési folyamat sikertelen volt.</p><p><b>%2</b> letöltve. A telepített verzió: %3.</p> @@ -2606,17 +2542,17 @@ <p> A(z) %1 ügyfél új verziója elérhető, de a frissítési folyamat sikertelen volt.</p><b>%2</b> letöltve. A telepített verzió: %3. Ha megerősíti az újraindítást és a frissítést, akkor a számítógép újraindul a telepítés befejezéséhez.<p> - + Ask again later - Rákérdezés később + Kérdezzen rá később - + Restart and update Újraindítás és frissítés - + Update manually Kézi frissítés @@ -2727,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> A kiszolgáló hibát adott vissza: <em>%1</em> @@ -2737,32 +2673,32 @@ Hiba történt a „token” végpont elérésekor: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Hiba történt a „token” végpont elérésekor: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Üres JSON az OAuth2 átirányításból - + Could not parse the JSON returned from the server: <br><em>%1</em> A kiszolgálótól visszakapott JSON nem dolgozható fel: <br><em>%1</em> - + The reply from the server did not contain all expected fields A kiszolgáló válasza nem tartalmazta az összes várt mezőt - + <h1>Login Error</h1><p>%1</p> <h1>Bejelentkezési hiba</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>Hibás felhasználó</h1><p>A(z) <em>%1</em> felhasználóval jelentkezett be, de a(z) <em>%2</em> felhasználóval kell belépnie.<br>Jelentkezzen ki ebből egy másik lapon: %3, majd <a href='%4'>kattintson ide</a>, és jelentkezzen be, mint %2</p> @@ -2813,12 +2749,12 @@ Downloading %1. Please wait … - %1 letöltése. Kis türelmet… + %1 letöltése. Kérjük várjon … %1 available. Restart application to start the update. - %1 elérhető. A frissítés elindításához indítsa újra az alkalmazást. + % 1 elérhető. A frissítés elindításához indítsa újra az alkalmazást. @@ -2831,12 +2767,12 @@ Nem lehetett letölteni a frissítést. Nyissa meg a <a href='%1'>%1ot</a> frissítés kézi letöltéséhez. - + Could not download update. Please open %1 to download the update manually. Nem lehetett letölteni a frissítést. Kattintson <a href='%1'>ide</a> a frissítés kézi letöltéséhez. - + Could not check for new updates. A frissítések nem ellenőrizhatőek. @@ -2846,27 +2782,27 @@ Új %1 érhető el. A frissítés letöltéséhez nyissa meg a <a href='%2'>%2ot</a>. - + New %1 is available. Please open %2 to download the update. - Új %1 elérhető. A frissítés letöltéséhez nyissa meg ezt: %2 + Új %1 elérhető. A frissítés letöltéséhez kattintson ide: %2 - + Checking update server … Frissítési kiszolgáló 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. Nem érhető el frissítés. Az Ön telepítése a legfrissebb verziót használja. - + Update Check Frissítés ellenőrzése @@ -2886,7 +2822,7 @@ Connect - Kapcsolódás + Csatlakozás @@ -2894,14 +2830,14 @@ Csatlakozás ... - - + + Use &virtual files instead of downloading content immediately %1 - &Virtuális fájlok használata a tartalom azonnali letöltése helyett %1 + Használjon &virtuális fájlokat a tartalom azonnali letöltése helyett %1 - - + + (experimental) (kísérleti) @@ -2926,49 +2862,49 @@ Szabad terület: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. A virtuális fájlok nem támogatottak a windowsos partíciók gyökerében helyi mappaként. Válasszon érvényes almappát a meghajtó betűjele alatt. - + %1 folder "%2" is synced to local folder "%3" A(z) „%2” %1 mappa szinkronizálva van a(z) „%3” helyi mappába - + Sync the folder "%1" A(z) „%1” mappa szinkronizálása - + Warning: The local folder is not empty. Pick a resolution! Figyelem: A helyi mappa nem üres. Válasszon egy megoldást! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 szabad hely - + Virtual files are not available for the selected folder - A virtuális fájlok nem érhetők el a kiválasztott mappához + Virtuális fájlok nem érhetők el a kiválasztott mappához - + Local Sync Folder Helyi szinkronizálási mappa - - + + (%1) (%1) - + There isn't enough free space in the local folder! Nincs elég szabad hely a helyi mappában. @@ -3038,14 +2974,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3076,7 +3004,7 @@ The link to your %1 web interface when you open it in the browser. %1 will be replaced with the application name - A %1 webes felületére mutató hivatkozás, amikor megnyitja a böngészőben. + A %1 webes felületre mutató link, amikor megnyitja a böngészőben. @@ -3091,7 +3019,7 @@ This is the link to your %1 web interface when you open it in the browser.<br/>It looks like https://cloud.example.com or https://example.com/cloud - Ez a hivatkozás a %1 webes felületére, amikor a böngészőben megnyitja. <br/> Úgy néz ki, mint a https://cloud.example.com vagy a https://example.com/cloud + Ez a link a(z) %1 webes felületére, amikor a böngészőben megnyitja. <br/> Úgy néz ki, mint https://cloud.example.com vagy https://example.com/cloud @@ -3111,7 +3039,7 @@ &Következő > - + Server address does not seem to be valid Úgy tűnik, hogy a kiszolgáló címe nem érvényes @@ -3121,7 +3049,7 @@ Érvénytelen URL - + Could not load certificate. Maybe wrong password? A tanúsítvány nem tölthető be. Lehet, hogy hibás a jelszó? @@ -3219,54 +3147,54 @@ mappa létrehozása a Nextcloudon: %1 - + Remote folder %1 created successfully. A(z) %1 távoli mappa sikeresen létrehozva. - + The remote folder %1 already exists. Connecting it for syncing. A(z) %1 távoli mappa már létezik. Kapcsolódás a szinkronizáláshoz. + - The folder creation resulted in HTTP error code %1 A könyvtár létrehozása HTTP %1 hibakódot eredményezett - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A távoli mappa létrehozása meghiúsult, mert a megadott hitelesítő adatok hibásak.<br/>Lépjen vissza, és ellenőrizze az adatait.</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 azért, mert hibás hitelesítési adatokat adott meg.</font><br/>Lépjen vissza, és ellenőrizze az adatait.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A távoli %1 mappa létrehozása meghiúsult, hibaüzenet: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A szinkronizálási kapcsolat a(z) %1 és a(z) %2 távoli mappa között létrejött. - + Successfully connected to %1! Sikeresen kapcsolódva ehhez: %1! - + Connection to %1 could not be established. Please check again. A kapcsolat a(z) %1 kiszolgálóval nem hozható létre. Ellenőrizze újra. - + Folder rename failed A mappa átnevezése nem sikerült @@ -3276,12 +3204,12 @@ Nem távolíthatja el és készíthet biztonsági másolatot egy mappáról, mert a mappa, vagy egy benne lévő fájl meg van nyitva egy másik programban. Zárja be a mappát vagy fájlt, és nyomja meg az újrapróbálkozást, vagy szakítsa meg a beállítást. - + Cannot 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. Nem távolíthatja el és készíthet biztonsági másolatot egy mappáról, mert a mappa, vagy egy benne lévő fájl meg van nyitva egy másik programban. Zárja be a mappát vagy fájlt, és nyomja meg az újrapróbálkozást, vagy szakítsa meg a beállítást. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>A(z) %1 helyi szinkronizációs mappa sikeresen létrehozva.</b></font> @@ -3289,9 +3217,9 @@ OCC::OwncloudWizard - + Add %1 account - %1-fiók hozzáadása + %1 fiók hozzáadása @@ -3299,17 +3227,17 @@ %1 kapcsolódási varázsló - + Skip folders configuration Mappák konfigurációjának kihagyása - + Enable experimental feature? Engedélyezi a kísérleti funkciót? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3317,21 +3245,21 @@ Switching to this mode will abort any currently running synchronization. This is a new, experimental mode. If you decide to use it, please report any issues that come up. - Ha a „virtuális fájl” mód engedélyezve van, akkor kezdetben egyetlen fájl sem kerül letöltésre. Ehelyett egy apró „%1” fájl jön létre a kiszolgálón létező összes fájlhoz. A tartalmuk a fájlok futtatásával vagy a helyi menü használatával tölthető el. + Ha a "virtuális fájl" mód engedélyezve van, akkor eredetileg egyetlen fájl sem kerül letöltésre. Ehelyett egy apró "%1" fájl jön létre a szerveren létező minden fájlhoz. A tartalom letölthető a fájlok futtatásával vagy a helyi menü használatával. -A virtuális fájl mód és a szelektív szinkronizálás kölcsönösen kizárják egymást. A jelenleg ki nem kijelölt mappák csak online mappák lesznek, és a szelektív szinkronizálási beállítások visszaállnak alapállapotba. +A virtuális fájl mód és a szelektív szinkronizálás kölcsönösen kizárja egymást. Az aktuálisan ki nem kijelölt mappák csak online mappák lesznek, és a szelektív szinkronizálási beállítások visszaállnak alapállapotba. Erre az üzemmódra váltás megszakítja a jelenleg futó szinkronizálást. -Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, akkor jelezze nekünk a felmerülő problémákat. +Ez egy új, kísérleti mód. Ha úgy dönt, hogy használja, kérjük, jelezze a felmerülő problémákat. - + Enable experimental placeholder mode - Kísérleti helykitöltő mód engedélyezése + Engedélyezze a kísérleti helyőrző módot - + Stay safe Maradjon biztonságban @@ -3339,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Érvénytelen JSON válasz a lekérdezési URL-től @@ -3349,32 +3277,32 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - A fájl záró szóközöket tartalmaz, és nem lehetett átnevezni, mert egy azonos nevű fájl már létezik a kiszolgálón. + A fájl záró szóközöket tartalmaz, és nem lehetett átnevezni, mert egy azonos nevű fájl már létezik a szerveren. File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - A fájl záró szóközöket tartalmaz, és nem lehetett átnevezni, mert egy azonos nevű helyi fájl már létezik. + A fájl záró szóközöket tartalmaz, és nem lehetett átnevezni, mert egy azonos nevű fájl már létezik a helyi számítógépen. - + Symbolic links are not supported in syncing. - A szimbolikus linkek nem támogatottak a szinkronizálás során. + A szimbolikus hivatkozások nem támogatottak a szinkronizálás során. - + File is listed on the ignore list. A fájl a mellőzési listán szerepel. - + File names ending with a period are not supported on this file system. - A pontokkal végződő fájlneveket ez a fájlrendszer nem támogatja. + Pontokkal végződő fájlneveket ez a fájlrendszer nem támogat. File names containing the character '%1' are not supported on this file system. - A(z) „%1” karaktert tartalmazó fájlnevek nem támogatottak ezen a fájlrendszeren. + A(z) '%1' karaktert tartalmazó fájlnevek nem támogatottak ebben a fájlrendszerben. @@ -3382,144 +3310,134 @@ A(z) „%1” karaktert tartalmazó fájlnevek nem támogatottak ezen a fájlrendszeren. - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz - + The file name is a reserved name on this file system. A fájlnév egy fenntartott név ezen a fájlrendszeren. - + Filename contains trailing spaces. A fájlnév záró szóközt tartalmaz. - + Filename is too long. A fájlnév túl hosszú. - + File/Folder is ignored because it's hidden. - A fájl/mappa figyelmen kívül hagyva, mert rejtett. + A fájlt / mappát figyelmen kívül hagyva, mivel rejtett. - + Stat failed. - Az elem kizárás vagy hiba miatt kihagyva. + Stat nem sikerült. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - Ütközés: A kiszolgáló verziója letöltve, a helyi példány átnevezve és nem lett feltöltve. + Konfliktus: A kiszolgáló verziója letöltve, a helyi példány átnevezve és nincs feltöltve. - + The filename cannot be encoded on your file system. - A fájlnév nem kódolható a fájlrendszeren. + A fájlnév nem kódolható a fájlrendszerben. - + The filename is blacklisted on the server. - A fájlnév feketelistára került a kiszolgálón. + A fájlnév feketelistára került a szerveren. - + File has extension reserved for virtual files. - A fájlnak virtuális fájlok számára fenntartott kiterjesztése van. + A fájl kiterjesztése virtuális fájlokra van fenntartva. - + size méret permissions - jogosultságok + engedélyek - - server reported no %1 - kiszolgáló jelentése: hiányzó %1 - - - - permission - jogosultság - - - + file id - fájlazonosító + fájl azonosítója - - Server reported no %1 - Kiszolgáló jelentése: hiányzó %1 + + server reported no %1 + szerver nem jelentett %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Ütközés a fájlok mappába feltöltésekor. Az ütköző fájlok törölve lesznek! - + Conflict when uploading a folder. It's going to get cleared! Ütközés a mappa feltöltésekor. Törölve lesz! - + Conflict when uploading a file. It's going to get removed! Ütközés a fájl feltöltésekor. Törölve lesz! - + Ignored because of the "choose what to sync" blacklist - A „válassza ki a szinkronizálni kívánt elemeket” feketelista miatt figyelmen kívül hagyva + A "válassza ki a szinkronizálni kívánt elemeket" feketelista miatt figyelmen kívül hagyva - + Not allowed because you don't have permission to add subfolders to that folder Nem engedélyezett, mert nincs engedélye almappák hozzáadásához az adott a mappához - + Not allowed because you don't have permission to add files in that folder Nem engedélyezett, mert nincs engedélye fájlok hozzáadására az adott mappában - + Not allowed to upload this file because it is read-only on the server, restoring - Ezt a fájlt nem lehet feltölteni, mert csak olvasható a kiszolgálón, helyreállítás + Nem lehet ezt a fájlt feltölteni, mert csak olvasható a szerveren, visszaállítva - + Moved to invalid target, restoring - Érvénytelen célba mozgatás, helyreállítás + Érvénytelen célba mozgatás, visszaállítás - + Not allowed to remove, restoring Az eltávolítás nem engedélyezett, helyreállítás - + Error while reading the database - Hiba történt az adatbázis olvasása során + Hiba történt az adatbázis olvasása közben Server replied with an error while reading directory '%1' : %2 - A kiszolgáló a következő hibával válaszolt a(z) „%1” könyvtár olvasása során: %2 + A kiszolgáló a következő hibával válaszolt a(z) '%1' könyvtár olvasása közben: % 2 - + Server replied with an error while reading directory "%1" : %2 - A kiszolgáló a következő hibával válaszolt a(z) „%1” könyvtár olvasása során: %2 + A kiszolgáló a következő hibával válaszolt a(z) „%1” könyvtár olvasása során: % 2 @@ -3530,17 +3448,12 @@ Hiba a metaadatok adatbázisba írásakor - - Error updating metadata due to invalid modified time - Hiba a metaadatok frissítésekor, mert a módosítás ideje érvénytelen - - - + Error updating metadata: %1 Hiba a metaadatok frissítésekor: %1 - + File is currently in use A fájl jelenleg használatban van @@ -3553,44 +3466,44 @@ A(z) %1 fájl nem tölthető le, mert hiányoznak a titkosítási információk. - + File %1 cannot be downloaded because encryption information is missing. A(z) %1 fájl nem tölthető le, mert hiányoznak a titkosítási információk. - - + + File has changed since discovery A fájl változott a felfedezése óta - - + + File %1 cannot be downloaded because of a local file name clash! A(z) %1 fájl nem tölthető le, mert ütközik egy helyi fájl nevével. - + File %1 can not be downloaded because of a local file name clash! A(z) %1 fájl nem tölthető le, mert ütközik egy helyi fájl nevével. - + The download would reduce free local disk space below the limit A letöltés a korlát alá csökkentené a szabad helyi tárterületet - + Free space on disk is less than %1 A lemezen lévő szabad hely kevesebb mint %1 - + File was deleted from server A fájl törlésre került a kiszolgálóról - + The file could not be downloaded completely. A fájl nem tölthető le teljesen. @@ -3600,12 +3513,12 @@ A letöltött fájl üres, annak ellenére, hogy a kiszolgáló szerint %1 méretű kellene legyen. - + The downloaded file is empty, but the server said it should have been %1. A letöltött fájl üres, de a kiszolgáló szerint %1 méretűnek kellene lennie. - + File %1 cannot be saved because of a local file name clash! A(z) %1 fájl nem menthető, mert ütközik egy helyi fájl nevével. @@ -3615,31 +3528,25 @@ Hiba a metaadatok adatbázisba írásakor - - - File %1 has invalid modified time reported by server. Do not save it. - A(z) %1 fájl módosítási ideje a kiszolgáló szerint érvénytelen. Ne mentse el. - - - + Error updating metadata: %1 Hiba a metaadatok frissítésekor: %1 - + The file %1 is currently in use - A(z) %1 fájl épp használatban van + A %1 fájl épp használatban van OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Sikertelen helyreállítás: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 A fájl vagy mappa egy csak olvasható megosztásról lett törölve, de a helyreállítás meghiúsult: %1 @@ -3713,14 +3620,14 @@ A(z) %1 fájl egy helyi fájl névütközése miatt nem nevezhető ár erre: %2, - + Error updating metadata: %1 Hiba a metaadatok frissítésekor: %1 - + The file %1 is currently in use - A(z) %1 fájl épp használatban van + A %1 fájl épp használatban van @@ -3729,12 +3636,12 @@ Hiba a metaadatok adatbázisba írásakor - + Failed to rename file A fájl átnevezése sikertelen - + Error setting pin state Hiba a tű állapotának beállításakor @@ -3752,7 +3659,7 @@ Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - A kiszolgáló helytelen HTTP-kódot adott vissza. 204-et várt, de az érték "%1 %2" volt. + A kiszolgáló helytelen HTTP-kódot adott vissza. 204-re várt, de az érték "%1 %2" volt. @@ -3768,14 +3675,14 @@ Hiba a metaadatok adatbázisba írásakor - + Error writing metadata to the database: %1 Hiba a metaadatok adatbázisba írásakor: %1 - + The file %1 is currently in use - A(z) %1 fájl épp használatban van + A %1 fájl épp használatban van @@ -3783,7 +3690,7 @@ Could not rename %1 to %2, error: %3 - A(z) %1 nem nevezhető át erre: %2, hiba: %3 + A(z) %1, nem nevezhető át erre: %2, hiba: %3 @@ -3791,22 +3698,22 @@ A kiszolgáló hibás HTTP kódot adott vissza. 201-es kód várt, de ez érkezett: „%1 %2”. - + Error updating metadata: %1 Hiba a metaadatok frissítésekor: %1 - + The file %1 is currently in use A(z) %1 fájl jelenleg használatban van - + Error setting pin state Hiba a tű állapotának beállításakor - + Error writing metadata to the database Hiba a metaadatok adatbázisba írásakor @@ -3814,48 +3721,40 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - A(z) %1 fájl módosítási ideje érvénytelen. Ne töltse fel a kiszolgálóra. - - - + Failed to upload encrypted file. Nem sikerült feltölteni a titkosított fájlt. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists A(z) %1 fájl nem tölthető fel, mert létezik egy fájl ugyanezzel a névvel, úgy hogy csak kis- és nagybetűkben tér el. - - + + Upload of %1 exceeds the quota for the folder A(z) %1 feltöltése túllépi a mappa kvótáját - + File Removed (start upload) %1 Fájl eltávolítva (feltöltés indítása) %1 - + Local file changed during syncing. It will be resumed. A helyi fájl megváltozott a szinkronizálás során. Folytatva lesz. - + Local file changed during sync. A helyi fájl megváltozott szinkronizáció közben. - + Failed to unlock encrypted folder. - Nem sikerült feloldani a titkosított mappát. + Nem sikerült a titkosított mappa feloldása. @@ -3863,45 +3762,45 @@ Hiba a metaadatok adatbázisba írásakor - + Error updating metadata: %1 Hiba a metaadatok frissítésekor: %1 - + The file %1 is currently in use - A(z) %1 fájl épp használatban van + A %1 fájl épp használatban van OCC::PropagateUploadFileNG - + The local file was removed during sync. A helyi fájl el lett távolítva szinkronizálás közben. - + Local file changed during sync. A helyi fájl megváltozott szinkronizálás közben. - + Poll URL missing Hiányzik a szavazás URL-je - + Unexpected return code from server (%1) Nem várt visszatérési érték a kiszolgálótól (%1) - + Missing File ID from server Hiányzik a fájlazonosító a kiszolgálóról - + Missing ETag from server Hiányzik az ETag a kiszolgálóról @@ -3909,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing A lekérdezési URL hiányzik - + 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. A helyi fájl megváltozott szinkronizálás alatt. - + The server did not acknowledge the last chunk. (No e-tag was present) A kiszolgáló nem ismerte el az utolsó darabot. (Nem volt jelen e-tag) @@ -4002,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss Elutasítás @@ -4172,17 +4071,17 @@ Jelszavas védelem - + Allow editing Szerkesztés engedélyezése - + View only Csak megtekintés - + Allow upload and editing Feltöltés és szerkesztés engedélyezése @@ -4192,7 +4091,7 @@ Lejárati idő - + File drop (upload only) Fájl ejtés (csak feltöltés) @@ -4202,32 +4101,32 @@ Megosztás visszavonása - + Link name Hivatkozás neve - + Note to recipient Jegyzet a címzettnek - + Password protect - Jelszavas védelem + Jelszóvédelem - + Set expiration date Lejárati idő beállítása - + Delete link Hivatkozás törlése - + Add another link Egyéb hivatkozás hozzáadása @@ -4237,27 +4136,27 @@ Megosztási hivatkozás törlése - + Confirm Link Share Deletion Megosztási hivatkozás törlésének megerősítése - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Tényleg törölni szeretné a(z) <i>%1</i> nyilvános megosztási hivatkozást?</p><p>Megjegyzés: Ez nem vonható vissza.</p> - + Delete Törlés - + Cancel Mégse - + Public link Nyilvános hivatkozás @@ -4270,12 +4169,12 @@ Megosztás felhasználókkal vagy csoportokkal … - + Search globally - Keresés globálisan + Keresés mindenben - + Copy link Hivatkozás másolása @@ -4285,22 +4184,22 @@ Nincs találat erre: „%1” - + No results for "%1" Nincs találat erre: „%1” - + Password for share required A megosztáshoz jelszó szükséges - + Please enter a password for your email share: Adjon meg egy jelszót a levélmegosztáshoz: - + I shared something with you Megosztottam Önnel valamit @@ -4338,42 +4237,42 @@ Lejárat: - + Can reshare Újra megosztható - + Note to recipient Jegyzet a címzettnek - + Set expiration date Lejárati idő beállítása - + Unshare Megosztás visszavonása - + Can create Létrehozható - + Can change Módosítható - + Can delete Törölhető - + Password protect Jelszavas védelem @@ -4390,23 +4289,23 @@ OCC::SocketApi - + Context menu share Megosztás a helyi menüből - + Select new location … - Új hely kiválasztása… + Új hely kiválasztása … - + I shared something with you Megosztottam Önnel valamit - - + + Share options Megosztási beállítások @@ -4422,73 +4321,73 @@ Tevékenység - + Copy private link to clipboard Személyes hivatkozás másolása a vágólapra - + Send private link by email … Személyes hivatkozás küldése e-mailben… - + Resharing this file is not allowed Ezt a fájlt nem lehet újra megosztani - + Resharing this folder is not allowed - A mappa továbbosztása nem megengedett + A mappa újramegosztása nem megengedett - - + + Copy public link Nyilvános hivatkozás másolása - + Copy internal link Belső hivatkozás másolása - + Edit Szerkesztés - + Open in browser Megnyitás böngészőben - + Resolve conflict … - Konfliktus feloldása… + Konfliktus feloldása … - + Move and rename … - Áthelyezés és átnevezés… + Áthelyezés és átnevezés … - + Move, rename and upload … - Áthelyezés, átnevezés és feltöltés… + Áthelyezés, átnevezés és feltöltés … - + Delete local changes Helyi módosítások törlése - + Move and upload … - Áthelyezés és feltöltés… + Áthelyezés és feltöltés … - + Delete Törlés @@ -4634,77 +4533,77 @@ 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 kapcsolódni ide: <i>%1</i>: Additional errors: - További hibák: + - + 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 (SHA1): <tt>%1</tt> Ellenőrzőkód (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Ujjlenyomat (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Ujjlenyomat (SHA-512): <tt>%1</tt> - + Effective Date: %1 Érvényességi dátum: %1 - + Expiration Date: %1 Lejárati dátum: %1 - + Issuer: %1 Kibocsátó: %1 @@ -4797,33 +4696,33 @@ Belső hiba történt (hibaszám: %1). - + %1 (skipped due to earlier error, trying again in %2) %1 (egy korábbi hiba miatt kihagyva, újrapróbálkozás %s múlva) - + Could not update file: %1 Nem sikerült frissíteni a fájlt: %1 - + Could not update virtual file metadata: %1 Nem sikerült frissíteni a virtuális fájl metaadatait: %1 - + Unresolved conflict. Nem feloldott ütközés. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Csak %1 érhető el, de legalább %2 kell az indításhoz - + Aborted Megszakítva @@ -4900,16 +4799,16 @@ A ponttal végződő fájlnevek nem támogatottak ezen a fájlrendszeren. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + A helyi szinkronizálási adatbázis nem nyitható meg, vagy nem hozható létre. Győződjön meg róla, hogy rendelkezik-e írási joggal a szinkronizálási mappán. + + File names containing the character '%1' are not supported on this file system. A(z) „%1” karaktert tartalmazó fájlnevek nem támogatottak ezen a fájlrendszeren. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - A helyi szinkronizálási adatbázis nem nyitható meg, vagy nem hozható létre. Győződjön meg róla, hogy rendelkezik-e írási joggal a szinkronizálási mappán. - - The file name is a reserved name on this file system. A fájlnév a rendszer számára fenntartott ezen a fájlrendszeren. @@ -4930,7 +4829,7 @@ A fájl/mappa kihagyása, mert rejtett. - + Using virtual files with suffix, but suffix is not set Virtuális fájlok használata utótaggal, de az utótag nincs beállítva @@ -4945,7 +4844,7 @@ A fájlnevet nem lehet kódolni a fájlrendszerén. - + Unable to read the blacklist from the local database Nem lehet kiolvasni a tiltólistát a helyi adatbázisból @@ -4960,17 +4859,17 @@ Statisztika sikertelen. + + Unable to read from the sync journal. + Nem lehet olvasni a szinkronizálási naplóból. + + Filename encoding is not valid A fájlnév kódolása érvénytelen - - Unable to read from the sync journal. - Nem lehet olvasni a szinkronizálási naplóból. - - - + Cannot open the sync journal A szinkronizálási napló nem nyitható meg @@ -4980,22 +4879,22 @@ Érvénytelen karakterek, nevezze át: „%1” + + Synchronization will resume shortly. + A szinkronizálás rövidesen folytatódik. + + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz - - Synchronization will resume shortly. - A szinkronizálás rövidesen folytatódik. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Túl kevés a tárterület: A letöltések, melyek %1 alá csökkentették volna a szabad tárhelyet, kihagyásra kerültek. - + There is insufficient space available on the server for some uploads. Egyes feltöltésekhez nincs elég hely a kiszolgálón. @@ -5023,7 +4922,7 @@ See below for errors - A hibákat lásd lent + Hibákat lásd lent @@ -5038,75 +4937,75 @@ Some files could not be synced! - Néhány fájlt nem lehet szinkronizálni. + See below for warnings - A figyelmeztetéseket lásd lent + Hibákat lásd lent %1 of %2 · %3 left - %1 / %2 · %3 van hátra + %1 a %2-ból/ből · %3 van vissza %1 of %2 - %1 / %2 + %1 a %2-ból/ből Syncing file %1 of %2 - %1 / %2 fájl szinkronizálása + OCC::Systray - + Add account Fiók hozzáadása - + Open main dialog Főablak megnyitása + - Pause sync Szinkronizálás felfüggesztése - - + + Resume sync Szinkronizálás folytatása - + Settings Beállítások - + Exit %1 - Kilépés a %1ból + Kilépés %1 - + Pause sync for all Szinkronizálás szüneteltetése mindenkinek - + Resume sync for all Szinkronizálás folytatása mindenkinek - + %1: %2 %1: %2 @@ -5114,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 asztali kliens</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Verzió: %1. További információkért kattintson <a href='%2'>ide</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Virtuális fájlok bővítmény használata: %1</small></p> - + <p>This release was supplied by %1</p> <p>Ezt a kiadást a %1 biztosította</p> @@ -5139,55 +5038,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - A szolgáltatók lekérése sikertelen + - + Failed to fetch search providers for '%1'. Error: %2 - A(z) „%1” keresésszolgáltatóinak lekérése sikertelen. Hiba: %2 + - + Search has failed for '%2'. - A keresés a következőre sikertelen: „%2”. + - + Search has failed for '%1'. Error: %2 - A keresés a következőre sikertelen: „%1”. Hiba: %2 + OCC::User - + Retry all uploads Összes feltöltés újrapróbálása - + Synced %1 %1 szinkronizálva - + You renamed %1 Átnevezte a következőt: %1 - + You deleted %1 Törölte: %1 - + You created %1 Létrehozta: %1 - + You changed %1 Megváltoztatta: %1 @@ -5195,22 +5094,22 @@ OCC::UserModel - + 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>Biztos, hogy eltávolítja a kapcsolatot a(z) <i>%1</i> fiókkal?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove connection Kapcsolat eltávolítása - + Cancel Mégse @@ -5315,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 A virtuális fájlrendszer szolgáltatáshoz NTFS fájlrendszerre van szükség, a(z) %1 a következőt használja: %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Hiba a metaadatok frissítésekor, mert a módosítás ideje érvénytelen - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Hiba a metaadatok frissítésekor, mert a módosítás ideje érvénytelen - - - OCC::WebEnginePage @@ -5839,7 +5720,7 @@ Sign up with a provider - Regisztráció egy szolgáltatóval + Iratkozzon fel egy szolgáltatóhoz @@ -5860,52 +5741,52 @@ Új mappa - + %n day ago %n napja%n napja - + %n days ago %n napja%n napja - + in the future a jövőben - + %n hour ago %n órája%n órája - + %n hours ago %n órája%n órája - + now most - + Less than a minute ago Kevesebb mint egy perce - + %n minute ago %n perce%n perce - + %n minutes ago %n perce%n perce - + Some time ago Néhány perccel ezelőtt @@ -5939,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. Az adatbázishoz való kapcsolódás sikertelen. @@ -5947,9 +5828,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Fájlok, üzenetek, események keresése… + @@ -5957,7 +5838,7 @@ Load more results - További találatok betöltése + @@ -5965,7 +5846,7 @@ Search result skeleton. - Keresési találatok vázlata. + @@ -5973,7 +5854,7 @@ Load more results - További találatok betöltése + @@ -5984,21 +5865,11 @@ Fiókbejegyzés - + Switch to account Váltás fiókra - - Current user status is online - Jelenlegi felhasználói állapot: online - - - - Current user status is do not disturb - Jelenlegi felhasználói állapot: ne zavarjanak - - Account connected Fiók csatlakoztatva @@ -6009,7 +5880,17 @@ A fiók nincs összekapcsolva - + + Current user status is online + Jelenlegi felhasználói állapot: online + + + + Current user status is do not disturb + Jelenlegi felhasználói állapot: ne zavarjanak + + + Account actions Fiókműveletek @@ -6019,24 +5900,24 @@ Fiók törlése - + Set status Állapot beállítása - - + + Log out Kijelentkezés - - + + Log in Bejelentkezés - + Remove account Fiók eltávolítása @@ -6097,57 +5978,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 kB - + %L1 B %L1 B - + %n year(s) %n év%n év - + %n month(s) %n hónap%n hónap - + %n day(s) %n nap%n nap - + %n hour(s) %n óra%n óra - + %n minute(s) %n perc%n perc - + %n second(s) %n másodperc%n másodperc - + %1 %2 %1 %2 @@ -6155,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Az ellenőrzőösszeg fejléc rosszul formázott. @@ -6188,64 +6069,64 @@ Window - + Nextcloud desktop main dialog A Nextcloud asztali alkalmazás főablaka - + Current account Jelenlegi fiók - - + + Resume sync for all Szinkronizálás folytatása mindenkinek - - + + Pause sync for all Szinkronizálás szüneteltetése mindenkinek - + Set user status Felhasználó állapotának beállítása - + Add account Fiók hozzáadása - + Add new account Új fiók hozzáadása - + Settings Beállítások - + Exit Kilépés - + Current user avatar Jelenlegi felhasználói profilkép - + Current user status is online Jelenlegi felhasználói állapot: online - + Current user status is do not disturb Jelenlegi felhasználói állapot: ne zavarjanak @@ -6255,32 +6136,32 @@ %1 megosztása - + Account switcher and settings menu Fiókváltó és beállítások menü - + Connected Kapcsolódva - + Disconnected Kapcsolat bontva - + Open local folder of current account A jelenlegi fiók helyi mappájának megnyitása - + Open Nextcloud Talk in browser A Nextcloud Beszélgetés alkalmazás megnyitása böngészőben - + More apps További alkalmazások @@ -6290,7 +6171,7 @@ Alkalmazások menü - + Open %1 in browser A(z) %1 megnyitása böngészőben @@ -6310,9 +6191,9 @@ Megosztási párbeszédpanel megnyitása - + Unified search results list - Egyesített keresési találatlista + @@ -6321,15 +6202,15 @@ További műveletek megjelenítése - + %1 - File activity - %1 – Fájl tevékenység + %1 - Fájl tevékenység main.cpp - + System Tray not available Nem érhető el értesítési terület @@ -6339,7 +6220,7 @@ A(z) %1 használatához szükséges egy értesíési terület. Ha XFCE-t használ, akkor kövesse <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ezt az útmutatót</a>. Egyébként, telepítsen egy értesítési terület alkalmazást – mint például a „trayer” – és próbálja újra. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. A(z) %1 használatához működő értesítési területre van szükség. Ha XFCE-t használ, akkor kövesse <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ezt az útmutatót</a>. Egyébként, telepítsen egy értesítési terület alkalmazást – mint például a „trayer” – és próbálja újra. @@ -6347,7 +6228,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Összeállítva a(z) <a href="%1">%2</a> Git verzióból, ekkor: %3, %4, Qt %5 (%6) használatával</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_id.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_id.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_id.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_id.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Koneksi terputus - + Unknown error: network reply was deleted Galat tidak diketahui: balasan jaringan telah dihapus - + Server replied "%1 %2" to "%3 %4" Server membalas "%1 %2" ke "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Enkripsi mnemonic end to end - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Untuk melindungi Identitas Kriptografi Anda, kami mengenkripsinya dengan sebuah mnemonic dari 12 kamus kata. Mohon untuk dicatat dan amankan. Enkripsi ini akan dibutuhkan untuk menambah perangkat lainnya ke akun Anda (seperti ponsel Anda atau laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Batal @@ -494,52 +494,52 @@ Hapus koneksi sinkronisasi folder - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Pembuatan Folder gagal - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Konfirmasi Penghapusan Koneksi Sinkronisasi Folder - + <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> Apakah Anda ingin menghentikan sinkronisasi folder <i>%1</i>?</p><p><b> Catatan:</b> Aksi ini tidak akan menghapus berkas apapun.</p> - + Remove Folder Sync Connection Hapus Koneksi Sinkronisasi Folder - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Sinkronisasi berlangsung - + The syncing operation is running.<br/>Do you want to terminate it? Operasi sinkronisasi sedang berjalan. <br/>Apakah Anda ingin membatalkannya? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) dari %2 sedang digunakan. Beberapa folder, termasuk jaringan yang terpasang atau folder yang telah dibagikan, kemungkinan mempunyai beberapa keterbatasan. - + %1 of %2 in use %1 dari %2 sedang digunakan - + Currently there is no storage usage information available. Saat ini tidak ada informasi penggunaan ruang yang tersedia. - + %1 in use %1 digunakan @@ -598,87 +598,87 @@ Log masuk - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Tersambung ke %1. - + Server %1 is temporarily unavailable. Peladen %1 sementara tidak tersedia. - + Server %1 is currently in maintenance mode. Peladen %1 sementara dalam moda pemeliharaan. - + Signed out from %1. Log keluar dari %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Mendapatkan autorisasi dari browser. <a href='%1'>Klik disini</a> untuk membuka ulang browser. - + Connecting to %1 … - + No connection to %1 at %2. Tidak ada koneksi ke %1 di %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. Tidak ada koneksi %1 yang dikonfigurasi. - + There are folders that were not synchronized because they are too big: Terdapat folder tidak tersinkronisasi karena terlalu besar: - + There are folders that were not synchronized because they are external storages: Terdapat folder tidak tersinkronisasi karena penyimpanan eksternal: - + There are folders that were not synchronized because they are too big or external storages: Terdapat folder tidak tersinkronisasi karena terlalu besar atau penyimpanan ekternal: - + Confirm Account Removal Konfirmasi pemutusan akun - + <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> Apakah Anda ingin menghapus koneksi untuk akun <i> %1</i>?</p> <p><b> Catatan: </b> Aksi ini tidak akan menghapus berkas apapun.</p> - + Remove connection Hapus koneksi @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Log keluar - + Disconnected Terputus - + Connected Tersambung - + Service unavailable Layanan tidak tersedia - + Maintenance mode Mode perbaikan - + Network error Kesalahan jaringan - + Configuration error Kesalahan konfigurasi - + Asking Credentials Menanyakan Kredensial - + Unknown account state Kondisi akun tidak diketahui @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Galat saat mengakses berkas konfigurasi - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Terdapat kesalahan saat mengakses berkas konfigurasi pada %1. Mohon untuk memastikan berkas dapat diakses oleh pengguna Anda. - + Quit %1 Keluar dari %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Kesalahan saat menulis metadata ke database @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Mohon untuk memasukkan kata sandi (passphrase) enkripsi end to end Anda: <br><br>Pengguna: %2<br>Akun: %3<br> - + Enter E2E passphrase Masukkan kata sandi (passphrase) E2E @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ Ada data yang hilang di berkas server deteksi balasan. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Aktivitas Sinkronisasi - + Could not read system exclude file Tidak dapat membaca berkas sistem yang dikecualikan - + A new folder larger than %1 MB has been added: %2. Sebuah folder baru lebih dari %1 MB telah ditambahkan: %2. - + A folder from an external storage has been added. Sebuah folder dari luar ruang penyimpanan telah ditambahkan. - + Please go in the settings to select it if you wish to download it. Mohon untuk ke pengaturan untuk memilihnya jika Anda ingin mengunduhnya. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Folder %1 telah dibuat namun dikecualikan dari sinkronisasi sebelumnya. Data yang ada di dalamnya tidak akan disinkronisasi. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Berkas %1 telah dibuat namun dikecualikan dari sinkronisasi sebelumnya. Data yang ada di dalamnya tidak akan disinkronisasi. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1407,6 +1344,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1461,22 +1405,7 @@ Buat Berkas Lokal sebagai Konflik - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1484,24 +1413,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1537,7 +1474,7 @@ OCC::FolderMan - + Could not reset folder state Tidak dapat mereset keadaan folder @@ -1547,37 +1484,37 @@ Sebuah jurnal sinkronisasi lama '%1' telah ditemukan, namun tidak dapat menghapusnya. Mohon untuk memastikan bahwa tida ada aplikasi yang sedang menggunakannya. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (cadangan) - + (backup %1) (cadangkan %1) - + Undefined State. Kondisi Yang Tidak Ditentukan - + Waiting to start syncing. Menunggu untuk memulai sinkronisasi. - + Preparing for sync. Persiapan untuk sinkronisasi. - + Sync is running. Sinkronisasi sedang berjalan. @@ -1587,67 +1524,67 @@ Sinkronisasi berhasi, konflik belum diselesaikan. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Sinkronisasi terakhir sukses. - + Setup Error. Kesalahan Persiapan. - + User Abort. Pengguna Batalkan. - + Sync is paused. Sinkronisasi dijeda. - + %1 (Sync is paused) %1 (Sinkronisasi dijeda) - + No valid folder selected! Tidak ada folder yang valid dipilih! - + The selected path does not exist! - + The selected path is not a folder! Jalur yang dipilih bukanlah sebuah folder! - + You have no permission to write to the selected folder! Anda tidak memiliki ijin untuk menulis ke folder yang dipilih! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Folder lokal %1 sudah terdapat sebuah folder yang digunakan di dalam sebuah koneksi sinkronisasi folder. Mohon pilih yang lainnya! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Folder lokal %1 sudah terdapat sebuah folder yang digunakan di dalam sebuah koneksi sinkronisasi folder. Mohon pilih yang lainnya! - + There is already a sync from the server to this local folder. Please pick another local folder! Sudah ada sinkronisasi dari server ke folder lokal ini. Mohon pilih folder lokal lainnya! @@ -1859,12 +1796,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Tambah Koneksi Sinkronisasi Folder - + Add Sync Connection Tambah Koneksi Sinkronisasi @@ -1905,42 +1842,42 @@ - + Folder was successfully created on %1. Folder telah sukses dibuat di %1. - + Authentication failed accessing %1 Autentikasi gagal saat mengakses %1 - + Failed to create the folder on %1. Please check manually. Gagal untuk membuat folder baru di %1. Mohon cek secara manual. - + Failed to list a folder. Error: %1 Gagal untuk mengurutkan daftar folder. Galat: %1 - + Choose this to sync the entire account Pilih ini untuk mensinkronisasi ke seluruh akun - + This folder is already being synced. Folder ini telah disinkronisasi. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Anda sudah mensinkronisasi <i>%1</i>, yang mana termasuk dalam folder <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1948,24 +1885,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1986,27 +1923,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Tidak ada E-Tag yang diterima dari server, cek Proksi/Gerbang - + We received a different E-Tag for resuming. Retrying next time. Kami menerima sebuah E-Tag yang berbeda untuk dilanjutkan. Mencoba lain waktu. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Server kembali dengan jarak-konten yang salah - + Connection Timeout Waktu Koneksi Habis @@ -2126,54 +2063,54 @@ - + Server notifications that require attention. Notifikasi server yang memerlukan perhatian. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2181,22 +2118,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Gagal berbagi - + Could not retrieve or create the public link share. Error: %1 @@ -2515,7 +2452,7 @@ OCC::Logger - + Error Galat @@ -2525,7 +2462,7 @@ <nobr>Berkas '%1'<br/>tidak dapat dibuka untuk ditulis.<br/><br/>Keluaran log <b>tidak</b>dapat disimpan!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2533,33 +2470,33 @@ OCC::NSISUpdater - + New Version Available Versi Terbaru Tersedia - + <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>Versi terbaru telah tersedia untuk Klien %1.</p><p><b>%2</b>telah tersedia untuk diunduh. Versi saat ini yang telah dipasang %3.</p> - - + + Skip this version Lewati versi ini - + Skip this time Lewati saat ini - + Get update Dapatkan pembaruan - + Update Failed @@ -2574,17 +2511,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2695,7 +2632,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Galat terjadi dari server: <em>%1</em> @@ -2705,32 +2642,32 @@ Terdapat galat saat mengakses endpoint 'token': <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Tidak dapat mengurai JSON yang didapat dari server: <br><em>%1</em> - + The reply from the server did not contain all expected fields Balasan dari server tidak terdapat semua bidang yang diekspektasi - + <h1>Login Error</h1><p>%1</p> <h1>Gagal Masuk</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>Pengguna salah</h1><p>Anda telah masuk dengan pengguna<em>%1</em>, namun harus masuk dengan pengguna <em>%2</em>. <br>Mohon untuk keluar dari %3 di tab lainnya, kemudian <a href='%4'>klik disini</a> dan masuk kembali sebagai pengguna %2</p> @@ -2800,12 +2737,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Tidak dapat mengecek pembaruan baru. @@ -2815,27 +2752,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + Update status is unknown: Did not check for new updates. Status pembaruan tidak diketahui: Tidak mengecek untuk pembaruan baru. - + No updates available. Your installation is at the latest version. Tidak ada pembaruan tersedia. Instalasi Anda sudah paling mutakhir. - + Update Check Pembaruan Dicek @@ -2863,14 +2800,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2895,49 +2832,49 @@ Ruang bebas: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Folder Sinkronisasi Lokal - - + + (%1) (%1) - + There isn't enough free space in the local folder! Tidak ada ruang bebas yang cukup di folder lokal! @@ -3007,14 +2944,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3079,7 +3008,7 @@ &Lanjut> - + Server address does not seem to be valid @@ -3089,7 +3018,7 @@ URL tidak valid - + Could not load certificate. Maybe wrong password? Tidak dapat memuat sertifikat. Mungkin salah kata sandi? @@ -3187,54 +3116,54 @@ Membuat folder di Nextcloud: %1 - + Remote folder %1 created successfully. Folder remote %1 sukses dibuat. - + The remote folder %1 already exists. Connecting it for syncing. Folder remote %1 sudah ada. Menghubungkan untuk sinkronisasi. + - 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 @@ -3244,12 +3173,12 @@ - + Cannot 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> @@ -3257,7 +3186,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3267,17 +3196,17 @@ - + Skip folders configuration - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3288,12 +3217,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3301,7 +3230,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3319,17 +3248,17 @@ - + 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. @@ -3344,57 +3273,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3404,72 +3333,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3479,7 +3398,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3492,17 +3411,12 @@ - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3515,44 +3429,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3562,12 +3476,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3577,18 +3491,12 @@ - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3596,12 +3504,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3675,12 +3583,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3691,12 +3599,12 @@ - + Failed to rename file - + Error setting pin state @@ -3730,12 +3638,12 @@ - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3753,22 +3661,22 @@ - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database @@ -3776,46 +3684,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3825,12 +3725,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3838,32 +3738,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. - + Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3871,22 +3771,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3964,7 +3864,7 @@ OCC::ServerNotificationHandler - + Dismiss @@ -4134,17 +4034,17 @@ - + Allow editing Izinkan penyuntingan - + View only - + Allow upload and editing Izinkan pengunggahan dan penyuntingan @@ -4154,7 +4054,7 @@ - + File drop (upload only) Berkas jatuh (hanya unggah) @@ -4164,32 +4064,32 @@ - + Link name - + Note to recipient Catatan untuk penerima - + Password protect Lindungi dengan kata sandi - + Set expiration date Atur tanggal kedaluwarsa - + Delete link - + Add another link Tambah tautan lain @@ -4199,27 +4099,27 @@ Hapus tautan berbagi - + Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete - + Cancel - + Public link @@ -4232,12 +4132,12 @@ - + Search globally - + Copy link @@ -4247,22 +4147,22 @@ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you @@ -4300,42 +4200,42 @@ - + Can reshare Dapat membagikan - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4352,23 +4252,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you - - + + Share options @@ -4384,73 +4284,73 @@ - + Copy private link to clipboard - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link Salin tautan publik - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Hapus @@ -4594,12 +4494,12 @@ - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: @@ -4609,62 +4509,62 @@ - + with Certificate %1 - - - + + + &lt;not specified&gt; - - + + Organization: %1 - - + + Unit: %1 - - + + Country: %1 - + Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 - + Expiration Date: %1 - + Issuer: %1 @@ -4757,33 +4657,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4860,13 +4760,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4890,7 +4790,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4905,7 +4805,7 @@ - + Unable to read the blacklist from the local database @@ -4920,17 +4820,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal @@ -4940,22 +4840,22 @@ - - File name contains at least one invalid character + + Synchronization will resume shortly. - - Synchronization will resume shortly. + + File name contains at least one invalid character - + 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. @@ -5024,49 +4924,49 @@ OCC::Systray - + Add account Tambah akun - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Setelan - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 @@ -5074,24 +4974,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5099,22 +4999,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5122,32 +5022,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5155,22 +5055,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5275,30 +5175,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5820,52 +5702,52 @@ - + %n day ago - + %n days ago - + in the future - + %n hour ago - + %n hours ago - + now - + Less than a minute ago - + %n minute ago - + %n minutes ago - + Some time ago @@ -5899,7 +5781,7 @@ SyncJournalDb - + Failed to connect database. @@ -5907,7 +5789,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5944,32 +5826,32 @@ - + Switch to account - - Current user status is online - + + Account connected + Akun terhubung - - Current user status is do not disturb + + Account not connected - Account connected - Akun terhubung + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5979,24 +5861,24 @@ - + Set status - - + + Log out Log keluar - - + + Log in Log masuk - + Remove account Hapus akun @@ -6057,57 +5939,57 @@ Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 @@ -6115,7 +5997,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6148,64 +6030,64 @@ Window - + Nextcloud desktop main dialog - + Current account Akun sekarang - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Tambah akun - + Add new account - + Settings Setelan - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6215,32 +6097,32 @@ - + Account switcher and settings menu - + Connected Tersambung - + Disconnected Terputus - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Aplikasi lainnya @@ -6250,7 +6132,7 @@ - + Open %1 in browser @@ -6270,7 +6152,7 @@ - + Unified search results list @@ -6281,7 +6163,7 @@ - + %1 - File activity @@ -6289,7 +6171,7 @@ main.cpp - + System Tray not available @@ -6299,7 +6181,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6307,7 +6189,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_is.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_is.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_is.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_is.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tenging féll á tíma - + Unknown error: network reply was deleted Óþekkt villa: svari netkerfis var eytt - + Server replied "%1 %2" to "%3 %4" Þjónn svaraði "%1 %2" til "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -306,9 +306,9 @@ - - - + + + Cancel Hætta við @@ -495,53 +495,53 @@ Fjarlægja samstillingartengingu möppu - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Gerð möppu mistókst - + <p>Could not create local folder <i>%1</i>.</p> <p>Gat ekki búið til staðværa möppu <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Staðfesta fjarlægingu á samstillingartengingu möppu - + <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>Viltu í alvörunni hætta að samstilla möppuna <i>%1</i>?</p><p><b>Athugið:</b> Þetta mun <b>ekki</b> eyða neinum skrám.</p> - + Remove Folder Sync Connection Fjarlægja samstillingartengingu möppu - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -550,38 +550,38 @@ - + Disable support - + Sync Running Samstilling er keyrandi - + The syncing operation is running.<br/>Do you want to terminate it? Aðgerðin sem samstillir er í gangi.<br/>Viltu stöðva hana? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) af %2 í notkun. Sumar möppur, þar með taldar netmöppur tengdar í skráakerfið eða sameignarmöppur, gætu verið með önnur takmörk. - + %1 of %2 in use %1 af %2 í notkun - + Currently there is no storage usage information available. Það eru engar upplýsingar um gagnamagn fáanlegar í augnablikinu. - + %1 in use %1 í notkun @@ -602,89 +602,89 @@ Skrá inn - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Tengdur við %1. - + Server %1 is temporarily unavailable. Þjónninn %1 er ekki tiltækur í augnablikinu. - + Server %1 is currently in maintenance mode. Þjónninn %1 er í viðhaldsham. - + Signed out from %1. Skráður út af %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1 … Tengist við %1 … - + No connection to %1 at %2. Engin tenging við %1 á %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. Engin %1 tenging skilgreind. - + There are folders that were not synchronized because they are too big: Það eru möppur sem ekki eru samstilltar því þær eru of stórar: - + There are folders that were not synchronized because they are external storages: Það eru möppur sem ekki eru samstilltar því þær ytri eru gagnageymslur: - + There are folders that were not synchronized because they are too big or external storages: Það eru möppur sem ekki eru samstilltar því þær eru of stórar eða eru ytri gagnageymslur: - + Confirm Account Removal Staðfesta fjarlægingu aðgangs - + <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>Viltu í alvörunni fjarlægja tenginguna við aðganginn <i>%1</i>?</p><p><b>Athugið:</b> Þetta mun <b>ekki</b> eyða neinum skrám.</p> - + Remove connection Fjarlægja tengingu @@ -692,47 +692,47 @@ OCC::AccountState - + Signed out Skráð/ur út - + Disconnected Aftengt - + Connected Tengt - + Service unavailable Þjónusta ekki tiltæk - + Maintenance mode Viðhaldshamur - + Network error Villa í netkerfi - + Configuration error Villa í stillingum - + Asking Credentials Spyr um auðkenni - + Unknown account state Óþekkt staða notandaaðgangs @@ -740,12 +740,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -806,42 +806,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Villa við að nálgast stillingaskrána - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Það kom upp villa við að nálgast stillingaskrána á %1. Gakktu úr skugga um að notandinn hafi heimild til að vinna með skrána. - + Quit %1 Hætta í %1 @@ -875,59 +875,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Villa við ritun lýsigagna í gagnagrunninn @@ -935,12 +885,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Settu inn lykilorð fyrir enda-í-enda dulritun:<br><br>Notandi: %2<br>Aðgangur: %3<br> - + Enter E2E passphrase Settu inn EíE-lykilorð @@ -1104,19 +1054,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1124,8 +1061,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1133,27 +1070,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1176,7 +1113,7 @@ - + Error returned from the server: <em>%1</em> Villumelding kom frá þjóninum: <em>%1</em> @@ -1188,24 +1125,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1368,41 +1305,41 @@ Virkni samstillingar - + Could not read system exclude file Gat ekki lesið kerfisútilokunarskrána - + A new folder larger than %1 MB has been added: %2. Nýrri möppu stærri en %1 MB var bætt við: %2. - + A folder from an external storage has been added. Möppu úr ytri gagnageymslu var bætt við. - + Please go in the settings to select it if you wish to download it. Farðu í stillingarnar til að velja hana ef þú vilt sækja hana. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1411,6 +1348,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1463,22 +1407,7 @@ Halda skrám á tölvunni við árekstra - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1486,24 +1415,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1539,7 +1476,7 @@ OCC::FolderMan - + Could not reset folder state Gat ekki núllstillt stöðu á möppu @@ -1550,37 +1487,37 @@ Vertu viss um að ekkert annað forrit sé ekki að nota hana. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (öryggisafrit) - + (backup %1) (öryggisafrita %1) - + Undefined State. Óskilgreind staða. - + Waiting to start syncing. Bíð eftir að samstilling ræsist. - + Preparing for sync. Undirbý samstillingu. - + Sync is running. Samstilling er keyrandi. @@ -1590,67 +1527,67 @@ Samstilling tókst, óleystir árekstrar - + Sync finished with unresolved conflicts. - + Last Sync was successful. Síðasta samstilling tókst. - + Setup Error. Villa í uppsetningu. - + User Abort. Notandi hætti við. - + Sync is paused. Samstilling er í bið. - + %1 (Sync is paused) %1 (samstilling er í bið) - + No valid folder selected! Engin gild mappa valin! - + The selected path does not exist! - + The selected path is not a folder! Valin slóð er ekki mappa! - + You have no permission to write to the selected folder! Þú hefur ekki réttindi til að skrifa í valda möppu! - + 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1862,12 +1799,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Bæta við samstillingartengingu möppu - + Add Sync Connection Bæta við samstillingartengingu @@ -1908,42 +1845,42 @@ - + Folder was successfully created on %1. Það tókst að búa til staðværu möppuna á %1. - + Authentication failed accessing %1 Auðkenning tókst ekki fyrir aðgang að %1 - + Failed to create the folder on %1. Please check manually. Gat ekki búið til möppuna á %1. Athugaðu málið. - + Failed to list a folder. Error: %1 Gat ekki fengið skráalista úr möppu. Villa: %1 - + Choose this to sync the entire account Veldu þetta til að samstilla allan aðganginn - + This folder is already being synced. Þessa möppu er nú þegar verið að samstilla. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Þú ert nú þegar að samstilla <i>%1</i>, sem er yfirmappa <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1951,24 +1888,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1989,27 +1926,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout Tenging féll á tíma @@ -2129,54 +2066,54 @@ - + Server notifications that require attention. Tilkynningar frá þjóni sem krefjast athugunar. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2184,22 +2121,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Krafist er lykilorðs fyrir sameign - + Please enter a password for your link share: - + Sharing error Villa við deilingu - + Could not retrieve or create the public link share. Error: %1 @@ -2515,7 +2452,7 @@ OCC::Logger - + Error Villa @@ -2525,7 +2462,7 @@ - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2533,34 +2470,34 @@ OCC::NSISUpdater - + New Version Available Ný útgáfa tiltæk - + <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>Ný útgáfa %1 forritsins er tiltæk.</p><p><b>%2</b> er tiltæk til niðurhals. Uppsetta útgáfan er %3.</p> - - + + Skip this version Sleppa þessari útgáfu - + Skip this time Sleppa núna - + Get update Ná í uppfærslu - + Update Failed @@ -2575,17 +2512,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2696,7 +2633,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Villumelding kom frá þjóninum: <em>%1</em> @@ -2706,32 +2643,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Villa í innskráningu</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> @@ -2800,12 +2737,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Gat ekki athugað með nýjar uppfærslur. @@ -2815,27 +2752,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … Athuga með uppfærsluþjón … - + Update status is unknown: Did not check for new updates. Staða á uppfærslum er óþekkt: athugaði ekki með nýjar uppfærslur. - + No updates available. Your installation is at the latest version. Engar uppfærslur tiltækar. Uppsetningin þín er af nýjustu gerð. - + Update Check Athuga með uppfærslu @@ -2863,14 +2800,14 @@ Tengjast … - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2896,49 +2833,49 @@ Laust pláss: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Staðvær samstillingarmappa - - + + (%1) (%1) - + There isn't enough free space in the local folder! Það er ekki nægilegt laust pláss eftir í staðværu möppunni! @@ -3008,14 +2945,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3082,7 +3011,7 @@ &Næsta > - + Server address does not seem to be valid @@ -3092,7 +3021,7 @@ Ógild slóð - + Could not load certificate. Maybe wrong password? Gat ekki hlaðið inn skilríki. Kannski rangt lykilorð? @@ -3191,54 +3120,54 @@ bý til möppu á Nextcloud: %1 - + Remote folder %1 created successfully. Það tókst að búa til fjartengdu möppuna %1. - + 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! Tenging við %1 tókst! - + Connection to %1 could not be established. Please check again. Ekki tókst að koma á tengingu við %1. Prófaðu aftur. - + Folder rename failed Endurnefning möppu mistókst @@ -3248,12 +3177,12 @@ - + Cannot 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>Það tókst að búa til staðværu möppuna %1!</b></font> @@ -3261,7 +3190,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3271,17 +3200,17 @@ %1 tengingaleiðarvísir - + Skip folders configuration Sleppa uppsetningu á möppum - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3292,12 +3221,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3305,7 +3234,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3323,17 +3252,17 @@ - + 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. @@ -3348,57 +3277,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3408,72 +3337,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3483,7 +3402,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3496,17 +3415,12 @@ Villa við ritun lýsigagna í gagnagrunninn - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3519,44 +3433,44 @@ Ekki var hægt að sækja %1 skrána því dulritunarupplýsingar vantar. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Skráin hefur breyst síðan hún fannst - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 Laust pláss á diski er minna en %1 - + File was deleted from server Skrá var eytt af þjóninum - + The file could not be downloaded completely. Ekki var hægt að sækja skrána að fullu. @@ -3566,12 +3480,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3581,18 +3495,12 @@ Villa við ritun lýsigagna í gagnagrunninn - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3600,12 +3508,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Endurheimt mistókst: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3679,12 +3587,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3695,12 +3603,12 @@ Villa við ritun lýsigagna í gagnagrunninn - + Failed to rename file - + Error setting pin state @@ -3734,12 +3642,12 @@ Villa við ritun lýsigagna í gagnagrunninn - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3757,22 +3665,22 @@ Fékk rangan HTTP-kóða frá þjóni. Átti von á 201, en fékk "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Villa við ritun lýsigagna í gagnagrunninn @@ -3780,46 +3688,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder Innsending á %1 fer fram úr kvótanum fyrir möppuna - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. Staðværu skránni var breytt við samstillingu. Henni verður haldið áfram. - + Local file changed during sync. Staðværu skránni var breytt við samstillingu. - + Failed to unlock encrypted folder. @@ -3829,12 +3729,12 @@ Villa við ritun lýsigagna í gagnagrunninn - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3842,32 +3742,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Staðværa skráin var fjarlægð við samstillingu. - + Local file changed during sync. Staðværu skránni var breytt við samstillingu. - + Poll URL missing - + Unexpected return code from server (%1) Óvæntur svarkóði frá þjóni (%1) - + Missing File ID from server - + Missing ETag from server @@ -3875,22 +3775,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Slóð á skoðanakönnun vantar - + The local file was removed during sync. Staðværa skráin var fjarlægð við samstillingu. - + Local file changed during sync. Staðværu skránni var breytt við samstillingu. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -3968,7 +3868,7 @@ OCC::ServerNotificationHandler - + Dismiss Hafna @@ -4138,17 +4038,17 @@ Verja með lykilorði - + Allow editing Leyfa breytingar - + View only - + Allow upload and editing Leyfa innsendingu og breytingar @@ -4158,7 +4058,7 @@ Gildir til - + File drop (upload only) Slepping skráa (einungis innsending) @@ -4168,32 +4068,32 @@ Hætta deilingu - + Link name - + Note to recipient Minnispunktur til viðtakanda - + Password protect Verja með lykilorði - + Set expiration date Setja gildistíma - + Delete link - + Add another link Bæta við öðrum tengli @@ -4203,28 +4103,28 @@ Eyða tengli á sameign - + Confirm Link Share Deletion Staðfestu eyðingu tengils á sameign - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ertu viss um að þú viljir eyða opinbera tenglinum á sameignina <i>%1</i>?< /p><p>Athugaðu: Þessi aðgerð er óafturkræf.</p> - + Delete Eyða - + Cancel Hætta við - + Public link Opinber tengill @@ -4237,12 +4137,12 @@ Deila með notendum eða hópum ... - + Search globally - + Copy link Afrita tengil @@ -4252,22 +4152,22 @@ Engar niðurstöður fyrir '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Ég deildi einhverju með þér @@ -4305,42 +4205,42 @@ - + Can reshare Getur endurdeilt - + Note to recipient - + Set expiration date - + Unshare Hætta deilingu - + Can create Getur búið til - + Can change Getur breytt - + Can delete Getur eytt - + Password protect @@ -4357,23 +4257,23 @@ OCC::SocketApi - + Context menu share Deila í samhengisvalmynd - + Select new location … - + I shared something with you Ég deildi einhverju með þér - - + + Share options Valkostir sameigna @@ -4389,73 +4289,73 @@ - + Copy private link to clipboard Afrita einkatengil á klippispjald - + Send private link by email … Senda einkatengil með tölvupósti … - + Resharing this file is not allowed Endurdeiling þessarar skráar er ekki leyfð - + Resharing this folder is not allowed - - + + Copy public link Afrita opinberan tengil - + Copy internal link Afrita innri tengil - + Edit Breyta - + Open in browser Opna í vafra - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Eyða @@ -4601,12 +4501,12 @@ Treysta samt áreiðanleika þessa skilríkis - + Untrusted Certificate Vantreyst skilríki - + Cannot connect securely to <i>%1</i>: Get ekki tengst á öruggan hátt við <i>%1</i>: @@ -4616,62 +4516,62 @@ - + with Certificate %1 með skilríki %1 - - - + + + &lt;not specified&gt; &lt;ótilgreint&gt; - - + + Organization: %1 Stofnun/Fyrirtæki/Félag (O): %1 - - + + Unit: %1 Eining: %1 - - + + Country: %1 Land: %1 - + Fingerprint (SHA1): <tt>%1</tt> Fingrafar (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingrafar (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingrafar (SHA-512): <tt>%1</tt> - + Effective Date: %1 Virkt þann: %1 - + Expiration Date: %1 Gildir til dags: %1 - + Issuer: %1 Útgefandi: %1 @@ -4764,33 +4664,33 @@ Innri villa númer %1 kom upp. - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Óleystur árekstur. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Einungis %1 eru tiltæk, þarf a.m.k. %2 til að ræsa - + Aborted @@ -4867,16 +4767,16 @@ Skráarheiti sem enda á punkti eru ekki nothæf á þessu skráakerfi. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Mistókst að opna eða búa til atvikaskrána. Gakktu úr skugga um að þú hafir les- og skrifheimildir í staðværu samstillingarmöppunni á tölvunni. + + File names containing the character '%1' are not supported on this file system. Skráarheiti sem innihalda stafinn '%1' eru ekki nothæf á þessu skráakerfi. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Mistókst að opna eða búa til atvikaskrána. Gakktu úr skugga um að þú hafir les- og skrifheimildir í staðværu samstillingarmöppunni á tölvunni. - - The file name is a reserved name on this file system. Skráarheitið er frátekið fyrir annað í þessu skráakerfi. @@ -4897,7 +4797,7 @@ Skrá/mappa er hunsuð vegna þess að hún er falin. - + Using virtual files with suffix, but suffix is not set @@ -4912,7 +4812,7 @@ Ekki er hægt að finna rétta stafatöflu fyrir skráarheitið í skráakerfinu þínu. - + Unable to read the blacklist from the local database @@ -4927,17 +4827,17 @@ Mistókst að keyra stat. + + Unable to read from the sync journal. + Tekst ekki að lesa úr atvikaskrá samstillingar. + + Filename encoding is not valid Stafatafla skráarheitis er ekki gild - - Unable to read from the sync journal. - Tekst ekki að lesa úr atvikaskrá samstillingar. - - - + Cannot open the sync journal Tekst ekki að opna atvikaskrá samstillingar @@ -4947,22 +4847,22 @@ Ógildir stafir, endurnefndu "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Skráarheitið inniheldur að minnsta kosti einn ógildan staf - - Synchronization will resume shortly. - - - - + 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. @@ -5031,49 +4931,49 @@ OCC::Systray - + Add account Bæta við notandaaðgangi - + Open main dialog Opna aðalglugga + - Pause sync - - + + Resume sync - + Settings Stillingar - + Exit %1 Loka %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5081,24 +4981,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 skjáborðsforrit</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Þessi útgáfa var gefin út af %1</p> @@ -5106,22 +5006,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5129,32 +5029,32 @@ OCC::User - + Retry all uploads Prófa aftur allar innsendingar - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5162,23 +5062,23 @@ OCC::UserModel - + Confirm Account Removal Staðfesta fjarlægingu aðgangs - + <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>Viltu í alvörunni fjarlægja tenginguna við aðganginn <i>%1</i>?</p><p><b>Athugið:</b> Þetta mun <b>ekki</b> eyða neinum skrám.</p> - + Remove connection Fjarlægja tengingu - + Cancel Hætta við @@ -5283,30 +5183,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5828,52 +5710,52 @@ - + %n day ago fyrir %n degi síðanfyrir %n dögum síðan - + %n days ago fyrir %n degi síðanfyrir %n dögum síðan - + in the future í framtíðinni - + %n hour ago fyrir %n klukkustund síðanfyrir %n klukkustundum síðan - + %n hours ago fyrir %n klukkustund síðanfyrir %n klukkustundum síðan - + now núna - + Less than a minute ago Minna en mínútu síðan - + %n minute ago fyrir %n mínútu síðanfyrir %n mínútum síðan - + %n minutes ago fyrir %n mínútu síðanfyrir %n mínútum síðan - + Some time ago Fyrir nokkru síðan @@ -5907,7 +5789,7 @@ SyncJournalDb - + Failed to connect database. @@ -5915,7 +5797,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5952,32 +5834,32 @@ - + Switch to account Skipta í notandaaðgang - - Current user status is online - + + Account connected + Aðgangur er tengdur - - Current user status is do not disturb + + Account not connected - Account connected - Aðgangur er tengdur + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions Aðgerðir fyrir aðgang @@ -5987,24 +5869,24 @@ Fjarlægja aðgang - + Set status - - + + Log out Skrá út - - + + Log in Skrá inn - + Remove account Fjarlægja reikning @@ -6065,57 +5947,57 @@ 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ánuðir%n mánuðir - + %n day(s) %n dagur%n dagar - + %n hour(s) %n klukkustund%n klukkustundir - + %n minute(s) %n mínúta%n mínútur - + %n second(s) %n sekúndur%n sekúndur - + %1 %2 %1 %2 @@ -6123,7 +6005,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6156,64 +6038,64 @@ Window - + Nextcloud desktop main dialog - + Current account Núverandi notandaaðgangur - - + + Resume sync for all Halda samstillingu áfram fyrir allt - - + + Pause sync for all Gera hlé á samstillingu fyrir allt - + Set user status - + Add account Bæta við notandaaðgangi - + Add new account - + Settings Stillingar - + Exit Fara út - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6223,32 +6105,32 @@ - + Account switcher and settings menu - + Connected Tengt - + Disconnected Aftengt - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Fleiri forrit @@ -6258,7 +6140,7 @@ - + Open %1 in browser Opna %1 í vafra @@ -6278,7 +6160,7 @@ Opna deilingarglugga - + Unified search results list @@ -6289,7 +6171,7 @@ - + %1 - File activity @@ -6297,7 +6179,7 @@ main.cpp - + System Tray not available Kerfisbakki ekki tiltækur @@ -6310,7 +6192,7 @@ borð við 'trayer' og reyna síðan aftur. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6318,7 +6200,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Byggt með Git revision <a href="%1">%2</a> á %3, %4 með Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_it.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_it.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_it.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_it.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Apri %1 localmente - + Open share dialog Apri finestra di condivisione - + Share %1 Condividi %1 - - + + Show more actions Mostra altre azioni @@ -39,7 +39,7 @@ ActivityList - + Activity list Lista attività @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Connessione scaduta - + Unknown error: network reply was deleted Errore sconosciuto: la risposta di rete è stata eliminata - + Server replied "%1 %2" to "%3 %4" Il server ha risposto "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Codice mnemonico per cifratura End to End - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Per proteggere la tua identità crittografica, la cifriamo con un codice mnemonico di 12 parole di dizionario. Annotale e tienile al sicuro. Saranno necessarie per aggiungere altri dispositivi al tuo account (come il tuo smartphone o il portatile). @@ -305,9 +305,9 @@ - - - + + + Cancel Annulla @@ -495,52 +495,52 @@ Rimuovi connessione di sincronizzazione cartelle - + Disable virtual file support … Disabilita il supporto dei file virtuali… - + Enable virtual file support %1 … Abilita supporto dei file virtuali %1… - + (experimental) (sperimentale) - + Folder creation failed Creazione della cartella non riuscita - + <p>Could not create local folder <i>%1</i>.</p> <p>Impossibile creare la cartella locale <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Conferma rimozione connessione di sincronizzazione cartelle - + <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> - + Remove Folder Sync Connection Rimuovi connessione di sincronizzazione cartelle - + Disable virtual file support? Vuoi disabilitare il supporto dei file virtuali? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Questa azione interromperà qualsiasi sincronizzazione attualmente in esecuzione. - + Disable support Disabilita supporto - + 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 (%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. - + %1 in use %1 in uso @@ -603,87 +603,87 @@ Accedi - + %1 as %2 %1 come %2 - + The server version %1 is unsupported! Proceed at your own risk. La versione %1 del server 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. Il Server %1 è attualmente in manutenzione - + Signed out from %1. Disconnesso da %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Ottenimento dell'autorizzazione dal browser. <a href='%1'>Fai clic qui</a> per aprire nuovamente il browser. - + Connecting to %1 … Connessione a %1… - + No connection to %1 at %2. Nessuna connessione a %1 su %2. - + Server configuration error: %1 at %2. Errore di configurazione del server: %1 in %2. - + No %1 connection configured. Nessuna connessione di %1 configurata. - + 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 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Disconnesso - + Disconnected Disconnesso - + Connected Connesso - + Service unavailable Servizio non disponibile - + Maintenance mode Modalità Manutenzione - + Network error Errore di rete - + Configuration error Errore di configurazione - + Asking Credentials Richiesta credenziali - + Unknown account state Stato dell'account sconosciuto @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. I file dell'elenco da ignorare e i collegamenti simbolici non sono sincronizzati. - + For more activities please open the Activity app. Per altre attività, apri l'applicazione Attività. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Continuare significa <b>eliminare queste impostazioni</b>. - + Continuing will mean <b>ignoring these settings</b>. Continuare significa <b>ignorare queste impostazioni</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Alcune impostazioni sono state configurate nelle versioni più recenti di questo client e utilizzano funzionalità che non sono disponibili in questa versione.<br><br>%1<br><br>Il file di configurazione attuale è già stato sottoposto a backup su <i>%2</i>. - + Quit Esci - + Continue Continua - + Error accessing the configuration file Errore accedendo al file di configurazione - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Si è verificato un errore durante l'accesso al file di configurazione su %1. Assicurati che il file sia accessibile dal tuo utente. - + Quit %1 Esci da %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - 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 %1 has invalid modified time. Do not upload to the server. - Il file %1 ha un orario di modifica non valido. Non inviarlo sul server. - - - - File Removed (start upload) %1 - File rimosso (avvio caricamento) %1 - - - - Local file changed during syncing. It will be resumed. - File locale modificato durante la sincronizzazione. Verrà ricaricato. - - - - - Local file changed during sync. - File locale modificato durante la sincronizzazione. - - - - Error updating metadata: %1 - Errore di aggiornamento dei metadati: %1 - - - - The file %1 is currently in use - Il file %1 è attualmente in uso - - - - The local file was removed during sync. - Il file locale è stato rimosso durante la sincronizzazione. - - - - ; Restoration Failed: %1 - ; Ripristino fallito: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Digita la tua frase segreta di cifratura end-to-end: <br><br>Utente: %2<br>Account: %3<br> - + Enter E2E passphrase Digita la frase segreta E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - Errore nell'annullamento della cancellazione di un file - - - - Error while canceling delete of %1 - Errore nell'annullamento della cancellazione di %1 - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ La risposta del rilevamento file del server è dati mancanti. - - + + Server error: PROPFIND reply is not XML formatted! Errore del server: la risposta PROPFIND non è in formato XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Errore durante l'apertura della cartella %1 - + Directory not accessible on client, permission denied Cartella non accessibile sul client, permesso negato - + Directory not found: %1 Cartella non trovata: %1 - + Filename encoding is not valid La codifica del nome del file non è valida - + Error while reading directory %1 Errore durante la lettura della cartella %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Errore restituito dal server: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Si è verificato un errore durante l'accesso al terminatore dei "token": <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Impossibile elaborare il JSON restituito dal server: <br><em>%1</em> - + The reply from the server did not contain all expected fields La risposta dal server non conteneva tutti i campi attesi - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. L'URL del server ritornato non inizia con HTTPS sebbene l'URL di accesso fosse iniziato con HTTPS. L'accesso non sarà possibile perchè può essere un rischio di sicurezza. Contatta il tuo amministratore. @@ -1368,19 +1305,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. @@ -1388,22 +1325,22 @@ - + Please go in the settings to select it if you wish to download it. Vai nelle impostazioni e selezionala se vuoi scaricarla. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. La cartella %1 è stata creata, ma è stata esclusa dalla sincronizzazione in precedenza. I dati al suo interno non saranno sincronizzati. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Il file %1 è stato creato, ma è stato escluso dalla sincronizzazione in precedenza. Non sarà sincronizzato. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1416,6 +1353,15 @@ %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. + Tutti i file nella cartella locale di sincronizzazione '%1' sono stati eliminati. Queste eliminazioni saranno sincronizzate con il tuo server, rendendo tali file indisponibili, a meno di un ripristino. +Sei sicuro di voler sincronizzare queste azioni con il server? +Se è stato un errore e decidi di tenere i file, saranno sincronizzati nuovamente dal server. + + All files in the sync folder '%1' 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. @@ -1475,27 +1421,7 @@ Mantieni i file locali come conflitto - - 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 restore 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. - Tutti i file nella cartella di sincronizzazione '%1' sono stati eliminati sul server. -Queste eliminazioni saranno sincronizzate con la tua cartella locale, rendendo tali file indisponibili, a meno che tu abbia il permesso per ripristinarli. -Se decidi di ripristinare i file, essi saranno sincronizzati nuovamente con il server, se hai i diritti per farlo. -Se decidi di eliminare i file, non saranno più disponibili, a meno che tu sia il proprietario. - - - - 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. - Tutti i file nella cartella locale di sincronizzazione '%1' sono stati eliminati. Queste eliminazioni saranno sincronizzate con il tuo server, rendendo tali file indisponibili, a meno di un ripristino. -Sei sicuro di voler sincronizzare queste azioni con il server? -Se è stato un errore e decidi di tenere i file, saranno sincronizzati nuovamente dal server. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1506,7 +1432,7 @@ Se decidi di eliminare i file, non saranno più disponibili, a meno che tu sia il proprietario. - + 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. @@ -1515,17 +1441,28 @@ Se è stato un errore e decidi di tenere i file, saranno sincronizzati nuovamente dal server. - + Remove All Files? Vuoi rimuovere tutti i file? - + Remove all files Rimuovi tutti i file - + + 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 restore 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. + Tutti i file nella cartella di sincronizzazione '%1' sono stati eliminati sul server. +Queste eliminazioni saranno sincronizzate con la tua cartella locale, rendendo tali file indisponibili, a meno che tu abbia il permesso per ripristinarli. +Se decidi di ripristinare i file, essi saranno sincronizzati nuovamente con il server, se hai i diritti per farlo. +Se decidi di eliminare i file, non saranno più disponibili, a meno che tu sia il proprietario. + + + Keep files Mantieni i file @@ -1561,7 +1498,7 @@ OCC::FolderMan - + Could not reset folder state Impossibile ripristinare lo stato della cartella @@ -1571,37 +1508,37 @@ È stato trovato un vecchio registro di sincronizzazione '%1', ma non può essere rimosso. Assicurati che nessuna applicazione lo stia utilizzando. - + 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. @@ -1611,67 +1548,67 @@ Sincronizzazione avvenuta, conflitti non risolti. - + Sync finished with unresolved conflicts. Sincronizzazione terminata con conflitti non risolti. - + Last Sync was successful. L'ultima sincronizzazione è stata completata correttamente. - + 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 does not exist! Il percorso selezionato non esiste! - + 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 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! - + 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! @@ -1883,12 +1820,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Aggiungi connessioni di sincronizzazione cartelle - + Add Sync Connection Aggiungi connessione di sincronizzazione @@ -1929,42 +1866,42 @@ 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Stai già sincronizzando <i>%1</i>, che è una sottocartella di <i>%2</i>. @@ -1972,24 +1909,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Usa file virtuali invece di scaricare immediatamente il contenuto %1 - - + + (experimental) (sperimentale) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. I file virtuali non sono supportati per le radici delle partizioni di Windows come cartelle locali. Scegli una sottocartella valida sotto la lettera del disco. - + Virtual files are not available for the selected folder I file virtuali non sono abilitati per la cartella selezionata @@ -2010,27 +1947,27 @@ 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. - + We received an unexpected download Content-Length. Abbiamo ricevuto un Content-Length inatteso dello scaricamento. - + Server returned wrong content-range Il server ha restituito un content-range errato - + Connection Timeout Connessione scaduta @@ -2150,54 +2087,54 @@ Crea archivio di debug… - + Server notifications that require attention. Notifiche del server che richiedono attenzione. - + You cannot disable autostart because system-wide autostart is enabled. Non puoi disabilitare l'avvio automatico poiché è abilitato l'avvio automatico a livello di sistema. - + Change update channel? Vuoi cambiare il canale di aggiornamento? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. Il canale di aggiornamento determina quali aggiornamenti del client saranno offerti per l'installazione. Il canale "stabile" contiene solo aggiornamenti considerati affidabili, mentre le versioni nel canale "beta" possono contenere nuove funzionalità e correzioni di bug, ma non sono state ancora provate a fondo. Nota che questo seleziona solo da quale pool vengono prelevati gli aggiornamenti e che non ci sono downgrade: per cui tornare dal canale beta al canale stabile di solito non può essere fatto immediatamente e significa aspettare una versione stabile che sia più recente della versione beta attualmente installata. - + Change update channel Cambia il canale di aggiornamento - + Cancel Annulla - + Create Debug Archive Crea archivio di debug - + Zip Archives Archivi zip - + Debug Archive Created Archivio di debug creato - + Debug archive is created at %1 L'archivio di debug è stato creato in %1 @@ -2205,22 +2142,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Password per condivisione richiesta - + Please enter a password for your link share: Digita una password per il tuo collegamento di condivisione: - + Sharing error Errore di condivisione - + Could not retrieve or create the public link share. Error: %1 @@ -2543,7 +2480,7 @@ OCC::Logger - + Error Errore @@ -2553,7 +2490,7 @@ <nobr>Il file '%1'<br/>non può essere aperto in scrittura.<br/><br/>Il risultato del log <b>non</b> può essere salvato!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</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> @@ -2561,33 +2498,33 @@ 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 - + Update Failed Aggiornamento non riuscito @@ -2602,17 +2539,17 @@ <p>Una nuova versione del client %1 è disponibile, ma il processo di aggiornamento non è riuscito.</p><p><b>%2</b> è stato scaricato. La versione installata è la %3. Se confermi di riavviare ed aggiornare, il computer potrebbe riavviarsi per completare l'installazione.</p> - + Ask again later Chiedi ancora più tardi - + Restart and update Riavvia e aggiorna - + Update manually Aggiorna manualmente @@ -2723,7 +2660,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Messaggio di errore dal server: <em>%1</em> @@ -2733,32 +2670,32 @@ Si è verificato un errore durante l'accesso al terminatore dei 'token': <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Si è verificato un errore durante l'accesso al terminatore dei "token": <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON vuoto dal reindirizzamento OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Impossibile elaborare il JSON restituito dal server: <br><em>%1</em> - + The reply from the server did not contain all expected fields La risposta dal server non contiene tutti i campi attesi - + <h1>Login Error</h1><p>%1</p> <h1>Errore di accesso</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>Utente errato</h1><p>Hai effettuato l'accesso con l'utente <em>%1</em>, ma devi accedere con l'utente <em>%2</em>.<br>Chiudi la sessione di %3 in un'altra scheda, poi <a href='%4'>fai clic qui</a>qui e accedi con l'utente %2</p> @@ -2827,12 +2764,12 @@ Impossibile scaricare l'aggiornamento. Apri <a href='%1'>%1</a> per scaricare l'aggiornamento a mano. - + Could not download update. Please open %1 to download the update manually. Impossibile scaricare l'aggiornamento. Apri %1 per scaricare l'aggiornamento manualmente. - + Could not check for new updates. Impossibile verificare la presenza di nuovi aggiornamenti. @@ -2842,27 +2779,27 @@ Un nuovo %1 è disponibile. Apri <a href='%2'>%2</a> per scaricare l'aggiornamento. - + New %1 is available. Please open %2 to download the update. Il nuovo %1 è disponibile. Apri %2 per scaricare l'aggiornamento. - + 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 @@ -2890,14 +2827,14 @@ Connetti… - - + + Use &virtual files instead of downloading content immediately %1 Usa i file &virtuali invece di scaricare immediatamente il contenuto %1 - - + + (experimental) (sperimentale) @@ -2922,49 +2859,49 @@ Spazio libero: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. I file virtuali non sono supportati per le radici delle partizioni di Windows come cartelle locali. Scegli una sottocartella valida sotto la lettera del disco. - + %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" - + Warning: The local folder is not empty. Pick a resolution! Attenzione: la cartella locale non è vuota. Scegli una soluzione! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB Spazio libero di %1 - + Virtual files are not available for the selected folder I file virtuali non sono disponibili per la cartella selezionata - + Local Sync Folder Cartella locale di sincronizzazione - - + + (%1) (%1) - + There isn't enough free space in the local folder! Non c'è spazio libero sufficiente nella cartella locale! @@ -3034,14 +2971,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3107,7 +3036,7 @@ Ava&nti > - + Server address does not seem to be valid L'indirizzo del server non sembra essere valido @@ -3117,7 +3046,7 @@ URL non valido - + Could not load certificate. Maybe wrong password? Impossibile caricare il certificato. Forse la password è errata? @@ -3215,54 +3144,54 @@ creazione cartella su Nextcloud: %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 @@ -3272,12 +3201,12 @@ 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. - + Cannot 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 copiare la cartella poiché la cartella o un file contenuto in essa è aperto 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> @@ -3285,7 +3214,7 @@ OCC::OwncloudWizard - + Add %1 account Aggiungi account %1 @@ -3295,17 +3224,17 @@ Procedura guidata di connessione di %1 - + Skip folders configuration Salta la configurazione delle cartelle - + Enable experimental feature? Vuoi abilitare la funzionalità sperimentale? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3316,12 +3245,12 @@ Quando la modalità "file virtuali" è abilitata, nessun file sarà scaricato inizialmente. Sarà invece creato un piccolo file "%1" per ogni file esistente sul server. I contenuti possono essere scaricati eseguendo questi file o utilizzando il loro menu contestuale. La modalità dei file virtuali si esclude a vicenda con la sincronizzazione selettiva. Le cartelle attualmente non selezionate saranno tradotte in cartelle solo in linea e le impostazioni di sincronizzazione selettiva saranno ripristinate. Il passaggio a questa modalità interromperà qualsiasi sincronizzazione attualmente in esecuzione. Questa è una nuova modalità sperimentale. Se decidi di utilizzarlo, segnala eventuali problemi che si presentano. - + Enable experimental placeholder mode Attiva la modalità segnaposto sperimentale - + Stay safe Rimani al sicuro @@ -3329,7 +3258,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Risposta JSON non valida dall'URL di richiesta @@ -3347,17 +3276,17 @@ Il fie contiene spazi finali e non può essere rinominato, perchè esiste già un file con lo stesso nome in locale. - + Symbolic links are not supported in syncing. I collegamenti simbolici non sono supportati dalla sincronizzazione. - + File is listed on the ignore list. Il file è presente nell'elenco degli 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. @@ -3372,57 +3301,57 @@ I nomi del file che contengono il carattere "%1" non sono supportati su questo file system. - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - + 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. - + File/Folder is ignored because it's hidden. Il file/cartella è ignorato poiché è nascosto. - + Stat failed. Stat non riuscita. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflitto: versione del server scaricata, copia locale rinominata e non caricata. - + The filename cannot be encoded on your file system. Il nome del file non può essere codificato sul tuo file system. - + The filename is blacklisted on the server. Il nome del file è nella lista nera sul server. - + File has extension reserved for virtual files. Il file ha l'estensione riservata ai file virtuali. - + size dimensione @@ -3432,72 +3361,62 @@ permessi - - server reported no %1 - il server non ha restituito alcun %1 - - - - permission - permesso - - - + file id ID del file - - Server reported no %1 - Il server non ha restituito alcun %1 + + server reported no %1 + il server non ha restituito alcun %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Conflitto durante l'invio di alcuni file in una cartella. I file in conflitto verranno eliminati! - + Conflict when uploading a folder. It's going to get cleared! Conflitto durante l'invio di una cartella. Verrà svuotata! - + Conflict when uploading a file. It's going to get removed! Conflitto durante l'invio di un file. Verrà rimosso! - + 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 perché non sei autorizzato ad aggiungere sottocartelle a quella cartella - + Not allowed because you don't have permission to add files in that folder Non ti è consentito perché non hai i permessi per aggiungere file in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Non ti è permesso caricare questo file perché hai l'accesso in sola lettura sul server, ripristino - + Moved to invalid target, restoring Spostato su una destinazione non valida, ripristino - + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Error while reading the database Errore durante la lettura del database @@ -3507,7 +3426,7 @@ Il server ha risposto con un errore durante la lettura della cartella '% 1' : %2 - + Server replied with an error while reading directory "%1" : %2 Il server ha risposto con un errore durante la lettura della cartella "%1" : %2 @@ -3520,17 +3439,12 @@ Errore durante la scrittura dei metadati nel database - - Error updating metadata due to invalid modified time - Errore di aggiornamento dei metadati a causa dell'orario di modifica non valido - - - + Error updating metadata: %1 Errore di invio dei metadati: %1 - + File is currently in use Il file è attualmente in uso @@ -3543,44 +3457,44 @@ Il file %1 non può essere scaricato per la mancanza di informazioni di cifratura. - + File %1 cannot be downloaded because encryption information is missing. Il file %1 non può essere scaricato per la mancanza di informazioni di crittografia. - - + + File has changed since discovery Il file è stato modificato dal suo rilevamento - - + + File %1 cannot be downloaded because of a local file name clash! Il file %1 non può essere scaricato per un conflitto con il nome di un file locale! - + 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 local disk space below the limit Lo scaricamento ridurrà lo spazio disco libero locale sotto il limite - + 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. @@ -3590,12 +3504,12 @@ Il file scaricato è vuoto nonostante il server indicasse una dimensione di %1. - + The downloaded file is empty, but the server said it should have been %1. Il file scaricato è vuoto, ma il server ha indicato 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. @@ -3605,18 +3519,12 @@ Errore durante la scrittura dei metadati nel database - - - File %1 has invalid modified time reported by server. Do not save it. - Il file %1 ha un orario di modifica non valido segnalato dal server. Non salvarlo. - - - + Error updating metadata: %1 Errore di invio dei metadati: %1 - + The file %1 is currently in use Il file %1 è attualmente in uso @@ -3624,12 +3532,12 @@ 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 @@ -3703,12 +3611,12 @@ Il file %1 non può essere rinominato in %2 a causa di un conflitto con il nome di un file locale - + Error updating metadata: %1 Errore di invio dei metadati: %1 - + The file %1 is currently in use Il file %1 è attualmente in uso @@ -3719,12 +3627,12 @@ Errore durante la scrittura dei metadati nel database - + Failed to rename file Rinominazione file non riuscita - + Error setting pin state Errore durante l'impostazione dello stato del PIN @@ -3758,12 +3666,12 @@ Errore durante la scrittura dei metadati nel database - + Error writing metadata to the database: %1 Errore durante la scrittura dei metadati nel database: %1 - + The file %1 is currently in use Il file %1 è attualmente in uso @@ -3781,22 +3689,22 @@ Codice HTTP errato restituito dal server. Atteso 201, ma ricevuto "%1 %2". - + Error updating metadata: %1 Errore di invio dei metadati: %1 - + The file %1 is currently in use Il file %1 è attualmente in uso - + Error setting pin state Errore durante l'impostazione dello stato del PIN - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -3804,46 +3712,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - Il file %1 ha un orario di modifica non valido. Non inviarlo sul server. - - - + Failed to upload encrypted file. Caricamento del file cifrato non riuscito. - + 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 - - + + Upload of %1 exceeds the quota for the folder Il caricamento di %1 supera la quota per la cartella - + File Removed (start upload) %1 File rimosso (avvio caricamento) %1 - + 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. - + Failed to unlock encrypted folder. Sblocco della cartella cifrata non riuscito. @@ -3853,12 +3753,12 @@ Errore durante la scrittura dei metadati nel database - + Error updating metadata: %1 Errore di invio dei metadati: %1 - + The file %1 is currently in use Il file %1 è attualmente in uso @@ -3866,32 +3766,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing URL del sondaggio mancante  - + 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 @@ -3899,22 +3799,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3992,7 +3892,7 @@ OCC::ServerNotificationHandler - + Dismiss Annulla @@ -4162,17 +4062,17 @@ Proteggi con password - + Allow editing Consenti la modifica - + View only Solo in lettura - + Allow upload and editing Consenti caricamento e modifica @@ -4182,7 +4082,7 @@ Data di scadenza - + File drop (upload only) Rilascio file (solo caricamento) @@ -4192,32 +4092,32 @@ Rimuovi condivisione - + Link name Nome collegamento - + Note to recipient Nota al destinatario - + Password protect Protetta da password - + Set expiration date Imposta data di scadenza - + Delete link Elimina collegamento - + Add another link Aggiungi un altro collegamento @@ -4227,27 +4127,27 @@ Elimina collegamento di condivisione - + Confirm Link Share Deletion Conferma eliminazione collegamento di condivisione - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Vuoi davvero eliminare la condivisione del collegamento pubblico <i>%1</i>?</p><p>Nota: questa azione non può essere annullata.</p> - + Delete Elimina - + Cancel Annulla - + Public link Collegamento pubblico @@ -4260,12 +4160,12 @@ Condividi con utenti o gruppi... - + Search globally Cerca globalmente - + Copy link Copia collegamento @@ -4275,22 +4175,22 @@ Nessun risultato per '%1' - + No results for "%1" Nessun risultato per "%1" - + Password for share required Richiesta password per condivisione - + Please enter a password for your email share: Digita una password per la condivisione dell'email: - + I shared something with you Ho condiviso qualcosa con te @@ -4328,42 +4228,42 @@ Scade: - + Can reshare Può ri-condividere - + Note to recipient Nota al destinatario - + Set expiration date Imposta data di scadenza - + Unshare Rimuovi condivisione - + Can create Può creare - + Can change Può cambiare - + Can delete Può eliminare - + Password protect Protezione con password @@ -4380,23 +4280,23 @@ OCC::SocketApi - + Context menu share Condivisione da menu contestuale - + Select new location … Seleziona nuova posizione… - + I shared something with you Ho condiviso qualcosa con te - - + + Share options Opzioni di condivisione @@ -4412,73 +4312,73 @@ Attività - + Copy private link to clipboard Copia link privato negli appunti - + Send private link by email … Invia collegamento privato tramite email… - + Resharing this file is not allowed La ri-condivisione di questo file non è consentita - + Resharing this folder is not allowed La ri-condivisione di questa cartella non è consentita - - + + Copy public link Copia collegamento pubblico - + Copy internal link Copia collegamento interno - + Edit Modifica - + Open in browser Apri nel browser - + Resolve conflict … Risolvi conflitto… - + Move and rename … Sposta e rinomina… - + Move, rename and upload … Sposta, rinomina e carica… - + Delete local changes Elimina modifiche locali - + Move and upload … Sposta e carica… - + Delete Elimina @@ -4624,77 +4524,77 @@ 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>: Additional errors: - Errori aggiuntivi: + - + 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 (SHA1): <tt>%1</tt> Impronta digitale (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Impronta digitale (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Impronta digitale (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data effettiva: %1 - + Expiration Date: %1 Data di scadenza: %1 - + Issuer: %1 Emittente: %1 @@ -4787,33 +4687,33 @@ SI è verificato un errore interno numero %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (saltato a causa di un errore precedente, nuovo tentativo in %2) - + Could not update file: %1 Impossibile aggiornare il file: %1 - + Could not update virtual file metadata: %1 Impossibile aggiornare i metadati dei file virtuali: %1 - + Unresolved conflict. Conflitto non risolto - + 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 - + Aborted Interrotto @@ -4890,16 +4790,16 @@ I nomi del file che terminano con un punto non sono supportati su questo file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Impossibile aprire o creare il database locale di sincronizzazione. Assicurati di avere accesso in scrittura alla cartella di sincronizzazione. + + 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. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Impossibile aprire o creare il database locale di sincronizzazione. Assicurati di avere accesso in scrittura alla cartella di sincronizzazione. - - The file name is a reserved name on this file system. Il nome del file è un nome riservato su questo file system. @@ -4920,7 +4820,7 @@ Il file/cartella è ignorato poiché è nascosto. - + Using virtual files with suffix, but suffix is not set Utilizzo di file virtuali con suffisso, ma il suffisso non è impostato @@ -4935,7 +4835,7 @@ Il nome del file non può essere codificato sul tuo file system. - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale @@ -4950,17 +4850,17 @@ Stat non riuscita. + + Unable to read from the sync journal. + Impossibile leggere dal registro di sincronizzazione. + + Filename encoding is not valid La codifica del nome del file non è valida - - Unable to read from the sync journal. - Impossibile leggere dal registro di sincronizzazione. - - - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione @@ -4970,22 +4870,22 @@ Caratteri non validi, rinomina "%1" + + Synchronization will resume shortly. + La sincronizzazione riprenderà a breve. + + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - Synchronization will resume shortly. - La sincronizzazione riprenderà a breve. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Lo spazio su disco è basso: gli scaricamenti che potrebbero ridurre lo spazio libero sotto %1 saranno saltati. - + There is insufficient space available on the server for some uploads. Spazio disponibile insufficiente sul server per alcuni caricamenti. @@ -5054,49 +4954,49 @@ OCC::Systray - + Add account Aggiungi account - + Open main dialog Apri finestra principale + - Pause sync Sospendi la sincronizzazione - - + + Resume sync Riprendi la sincronizzazione - + Settings Impostazioni - + Exit %1 Esci da %1 - + Pause sync for all Sospendi la sincronizzazione per tutto - + Resume sync for all Riprendi la sincronizzazione per tutto - + %1: %2 %1: %2 @@ -5104,24 +5004,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Client desktop di %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versione %1. Per ulteriori informazioni, fai clic <a href='%2'>qui</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Usato il plugin dei file virtuali: %1</small></p> - + <p>This release was supplied by %1</p> <p>Questa versione è stata fornita da %1</p> @@ -5129,22 +5029,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Recupero dei fornitori non riuscito. - + Failed to fetch search providers for '%1'. Error: %2 Recupero dei fornitori di ricerca per '%1'. Errore: %2 - + Search has failed for '%2'. Ricerca di '%2' fallita. - + Search has failed for '%1'. Error: %2 Ricerca di '%1' fallita. Errore: %2 @@ -5152,32 +5052,32 @@ OCC::User - + Retry all uploads Riprova tutti i caricamenti - + Synced %1 %1 sincronizzato - + You renamed %1 Hai rinominato %1 - + You deleted %1 Hai eliminato %1 - + You created %1 Hai creato %1 - + You changed %1 Hai modificato %1 @@ -5185,22 +5085,22 @@ OCC::UserModel - + 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 rimuovere la connessione all'account <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + Remove connection Rimuovi connessione - + Cancel Annulla @@ -5305,30 +5205,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 La funzionalità di filesystem virtuale richiede un file system NTFS, %1 sta utilizzando %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Errore di aggiornamento dei metadati a causa dell'orario di modifica non valido - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Errore di aggiornamento dei metadati a causa dell'orario di modifica non valido - - - OCC::WebEnginePage @@ -5850,52 +5732,52 @@ Nuova cartella - + %n day ago %n giorno fa%n giorno fa - + %n days ago %n giorni fa%n giorni fa - + in the future nel futuro - + %n hour ago %n ora fa%n ora fa - + %n hours ago %n ore fa%n ore fa - + now adesso - + Less than a minute ago Meno di un minuto fa - + %n minute ago %n minuto fa%n minuto fa - + %n minutes ago %n minuti fa%n minuti fa - + Some time ago Tempo fa @@ -5929,7 +5811,7 @@ SyncJournalDb - + Failed to connect database. Connessione al database non riuscita. @@ -5937,7 +5819,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … Cerca file, messaggi, eventi … @@ -5974,21 +5856,11 @@ Inserimento account - + Switch to account Cambia account - - Current user status is online - Lo stato attuale dell'utente è in linea - - - - Current user status is do not disturb - Lo stato attuale dell'utente è non disturbare - - Account connected Account connesso @@ -5999,7 +5871,17 @@ Account non connesso - + + Current user status is online + Lo stato attuale dell'utente è in linea + + + + Current user status is do not disturb + Lo stato attuale dell'utente è non disturbare + + + Account actions Azioni account @@ -6009,24 +5891,24 @@ Rimuovi account - + Set status Imposta stato - - + + Log out Esci - - + + Log in Accedi - + Remove account Rimuovi account @@ -6087,57 +5969,57 @@ 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 @@ -6145,7 +6027,7 @@ ValidateChecksumHeader - + The checksum header is malformed. L'intestazione del codice di controllo non è valida. @@ -6178,64 +6060,64 @@ Window - + Nextcloud desktop main dialog Finestra principale di Nextcloud desktop - + Current account Account attuale - - + + Resume sync for all Riprendi la sincronizzazione per tutto - - + + Pause sync for all Sospendi la sincronizzazione per tutto - + Set user status Imposta lo stato utente - + Add account Aggiungi account - + Add new account Aggiungi nuovo account - + Settings Impostazioni - + Exit Esci - + Current user avatar Avatar dell'utente attuale - + Current user status is online Lo stato attuale dell'utente è in linea - + Current user status is do not disturb Lo stato attuale dell'utente è non disturbare @@ -6245,32 +6127,32 @@ Condividi %1 - + Account switcher and settings menu Selettore account e menu impostazioni - + Connected Connesso - + Disconnected Disconnesso - + Open local folder of current account Apri cartella locale dell'account attuale - + Open Nextcloud Talk in browser Apri Nextcloud Talk nel browser - + More apps Altre applicazioni @@ -6280,7 +6162,7 @@ Menu Applicazioni - + Open %1 in browser Apri %1 nel browser @@ -6300,7 +6182,7 @@ Apri finestra di condivisione - + Unified search results list Lista unificata dei risultati di ricerca @@ -6311,7 +6193,7 @@ Mostra altre azioni - + %1 - File activity %1 - Attività file @@ -6319,7 +6201,7 @@ main.cpp - + System Tray not available Il vassoio di sistema non è disponibile @@ -6329,7 +6211,7 @@ %1 richiede un vassoio di sistema. Se stai usando XFCE, segui <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">queste istruzioni</a>. Altrimenti, installa un'applicazione vassoio di sistema come 'trayer' e riprova. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 richiede un vassoio di sistema. Se stai usando XFCE, segui <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">queste istruzioni</a>. Altrimenti, installa un'applicazione vassoio di sistema come "trayer" e riprova. @@ -6337,7 +6219,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ja.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ja.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ja.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ja.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally ローカルで %1 を開く - + Open share dialog 共有ダイアログを開く - + Share %1 %1 を共有 - - + + Show more actions その他の操作を表示 @@ -39,7 +39,7 @@ ActivityList - + Activity list アクティビティリスト @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out 接続タイムアウト - + Unknown error: network reply was deleted 不明なエラー: ネットワーク応答が削除されました - + Server replied "%1 %2" to "%3 %4" サーバーは "%1 %2"を "%3 %4"に応答しました @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic エンドツーエンド暗号化ニーモニック - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). あなたの暗号鍵の安全性を確保するために、12の単語からなるニーモニックであなたの暗号鍵を暗号化します。この12の単語は、あなたの別のデバイス(携帯端末やコンピュータなど)にこのアカウントを追加する際に必要になりますので、安全に保管してください。 @@ -305,9 +305,9 @@ - - - + + + Cancel キャンセル @@ -495,52 +495,52 @@ 同期フォルダー接続を削除 - + Disable virtual file support … 仮想ファイルを無効にする… - + Enable virtual file support %1 … 仮想ファイルを有効にする %1… - + (experimental) (試験的) - + Folder creation failed フォルダーの作成に失敗しました - + <p>Could not create local folder <i>%1</i>.</p> <p>ローカルフォルダー <i>%1</i> を作成できません。</p> - + Confirm Folder Sync Connection Removal 同期フォルダー接続の削除を確認 - + <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> - + Remove Folder Sync Connection 同期フォルダー接続を削除 - + Disable virtual file support? 仮想ファイルを無効にしますか? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ この操作を行うと、現在実行中の同期が中止されます。 - + Disable support サポートを無効化 - + Sync Running 同期を実行中 - + The syncing operation is running.<br/>Do you want to terminate it? 同期作業を実行中です。<br/>終了しますか? - + %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. 現在、利用できるストレージ利用状況はありません。 - + %1 in use %1 を使用中 @@ -603,87 +603,87 @@ ログイン - + %1 as %2 %1 に %2 - + The server version %1 is 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. %2 の %1 への接続がありません。 - + Server configuration error: %1 at %2. サーバー設定エラー: %2 の %1 - + No %1 connection configured. %1 の接続は設定されていません。 - + 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 接続削除 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out サインアウト - + Disconnected 切断しました - + Connected 接続しました - + Service unavailable サービスが利用できません - + Maintenance mode メンテナンスモード - + Network error ネットワークエラー - + Configuration error 設定エラー - + Asking Credentials 証明書を要求 - + Unknown account state 不明なアカウント状態 @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. シンボリックリンクと同様に無視されるファイルは同期されません。 - + For more activities please open the Activity app. その他のアクティビティについては、アクティビティアプリを開いてください。 @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. 続行すると、<b>これらの設定を削除</b>するようになります。 - + Continuing will mean <b>ignoring these settings</b>. 続行すると、<b>これらの設定を無視</b>するようになります。 - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. 一部の設定は、このクライアントのより新しいバージョンで構成されており、このバージョンでは使用できない機能を使用しています。<br><br>%1<br><br>現在の構成ファイルは、<i>%2</i> に既にバックアップされています。 - + Quit 終了 - + Continue 続ける - + Error accessing the configuration file 設定ファイルのアクセスでエラーが発生しました - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. %1の設定ファイルのアクセス中にエラーが発生しました。 ユーザーがファイルにアクセスできることを確認してください。 - + Quit %1 %1 を終了 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> エンドツーエンドの暗号化パスフレーズを入力してください:<br> <br>ユーザー:%2<br>アカウント:%3<br> - + Enter E2E passphrase E2Eパスフレーズを入力 @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ サーバーファイルの検出応答にデータがありません。 - - + + Server error: PROPFIND reply is not XML formatted! サーバーエラーが発生しました。PROPFIND応答がXML形式ではありません! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 %1 ディレクトリを開くときにエラーが発生しました - + Directory not accessible on client, permission denied クライアントがディレクトリにアクセスできません、リクエストが拒否されました - + Directory not found: %1 ディレクトリが存在しません: %1 - + Filename encoding is not valid ファイル名のエンコードが正しくありません - + Error while reading directory %1 %1 ディレクトリの読み込み中にエラーが発生しました @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> サーバーからエラーが返されました: <em>%1</em> @@ -1190,24 +1127,24 @@ - + 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 サーバーからの返答は期待した項目を含んでいません - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. ログインURLはHTTPSで始まっているにもかかわらず、返されたサーバーURLがHTTPSではありません。セキュリティ上の問題がある可能性があるため、ログインできません。管理者に連絡してください。 @@ -1368,41 +1305,41 @@ 同期アクティビティ - + 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. このフォルダーをダウンロードするには設定画面で選択してください。 - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. フォルダー %1 は作成されましたが、以前に同期から除外されました。 中のデータは同期されません。 - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. ファイル %1 は作成されましたが、以前に同期から除外されました。 このファイルは同期されません。 - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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'内のすべてのファイルが削除されました。この削除はサーバーに同期され、復元されない限りそのファイルは使用できなくなります。 +このアクションをサーバーと同期してもよろしいですか? +これが操作ミスであり、ファイルを維持することにした場合、ファイルはサーバーから再同期されます。 + + All files in the sync folder '%1' 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. @@ -1472,27 +1418,7 @@ コンフリクト時にローカルファイルを保持 - - 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 restore 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'内のすべてのファイルが削除されました。この削除はサーバーに同期され、復元されない限りそのファイルは使用できなくなります。 -このアクションをサーバーと同期してもよろしいですか? -これが操作ミスであり、ファイルを維持することにした場合、ファイルはサーバーから再同期されます。 - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1503,7 +1429,7 @@ ファイルを削除することにした場合、所有者でない限り、ファイルは利用できなくなります。 - + 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. @@ -1512,17 +1438,28 @@ これが操作ミスであり、ファイルを維持することにした場合、ファイルはサーバーから再同期されます。 - + Remove All Files? すべてのファイルを削除しますか? - + Remove all files すべてのファイルを削除 - + + 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 restore 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'フォルダー内のすべてのファイルがサーバー上で削除されました。 +これらの削除はローカル同期フォルダーと同期され、復元する権限がない限り、ファイルは使用できなくなります。 +ファイルを復元したい場合、権限があればサーバーと再同期されます。 +ファイルを削除することにした場合、所有者でない限り、ファイルは利用できなくなります。 + + + Keep files ファイルを保持 @@ -1558,7 +1495,7 @@ OCC::FolderMan - + Could not reset folder state フォルダーの状態をリセットできませんでした @@ -1568,37 +1505,37 @@ 古い同期ジャーナル '%1' が見つかりましたが、削除できませんでした。それを現在使用しているアプリケーションが存在しないか確認してください。 - + 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. 同期を実行中です。 @@ -1608,67 +1545,67 @@ 同期は成功し、解決されなかった競合です。 - + Sync finished with unresolved conflicts. 未解決のコンフリクトがある状態で同期が終了しました。 - + Last Sync was successful. 最後の同期は成功しました。 - + Setup Error. 設定エラー。 - + User Abort. ユーザーによる中止。 - + Sync is paused. 同期を一時停止しました。 - + %1 (Sync is paused) %1 (同期を一時停止) - + No valid folder selected! 有効なフォルダーが選択されていません! - + The selected path does not exist! 選択されたパスは存在していません! - + The selected path is not a folder! 指定のパスは、フォルダーではありません! - + You have no permission to write to the selected 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 には同期フォルダーとして利用されているフォルダーがあります。他のフォルダーを選択してください。 - + There is already a sync from the server to this local folder. Please pick another local folder! すでに同期されたフォルダーがあります。別のフォルダーを選択してください! @@ -1881,12 +1818,12 @@ OCC::FolderWizard - + Add Folder Sync Connection 同期フォルダーを追加 - + Add Sync Connection 同期接続を追加 @@ -1927,42 +1864,42 @@ "%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 <i>%1</i>, which is a subfolder of <i>%2</i>. <i>%2 </i>のサブフォルダーである<i>%1 </i>を既に同期しています。 @@ -1970,24 +1907,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 すぐにファイルを同期してダウンロードする代わりに仮想ファイルを利用する %1 - - + + (experimental) (試験的) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. 仮想ファイルは、ローカルフォルダーのWindowsルートパーティションではサポートされていません。ドライブレターの下の有効なサブフォルダを選択してください。 - + Virtual files are not available for the selected folder 選択したフォルダーで仮想ファイルが使用できません @@ -2008,27 +1945,27 @@ 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を受信しました。次回リトライします。 - + We received an unexpected download Content-Length. ダウンロードのContent-Lengthが期待値と違います - + Server returned wrong content-range サーバーが間違ったcontent-rangeを返しました - + Connection Timeout 接続タイムアウト @@ -2148,22 +2085,22 @@ デバッグアーカイブを作成... - + Server notifications that require attention. 注意が必要なサーバー通知。 - + You cannot disable autostart because system-wide autostart is enabled. システム全体の自動起動が有効になっているため、自動起動を無効にすることはできません。 - + Change update channel? 更新チャネルを変更しますか? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2172,32 +2109,32 @@ これはアップデートをどちらのチャネルからダウンロードするのかを決めるだけで、パッケージをダウングレードすることはできないことに注意してください。その為、ベータ版から安定版へ変更しても、通常はすぐに古いパッケージに戻されるわけではありません。現在インストールされているベータ版よりも新しい安定版が出るまで待つ必要があります。 - + Change update channel 更新チャネルを変更 - + Cancel キャンセル - + Create Debug Archive デバッグアーカイブを作成 - + Zip Archives Zipアーカイブ - + Debug Archive Created デバッグアーカイブを作成しました - + Debug archive is created at %1 %1 にデバッグアーカイブを作成しました @@ -2205,22 +2142,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required 共有用のパスワードが必要です - + Please enter a password for your link share: リンク共有のパスワードを入力してください。 - + Sharing error 共有エラー - + Could not retrieve or create the public link share. Error: %1 @@ -2543,7 +2480,7 @@ OCC::Logger - + Error エラー @@ -2553,7 +2490,7 @@ <nobr>ファイル '%1'<br/>を書き込み用で開けませんでした。<br/><br/>ログ出力を<b>保存できません</b>でした!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>ファイル "%1"<br/>を書き込み用で開けませんでした。<br/><br/>ログ出力を<b>保存できません</b>でした!</nobr> @@ -2561,33 +2498,33 @@ 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 アップデートを取得 - + Update Failed アップデートに失敗しました @@ -2602,17 +2539,17 @@ <p>クライアントの新しいバージョン%1 が利用可能ですが、更新に失敗しました。</p><p><b>%2</b> がダウンロードされています。インストールされているバージョンは %3 です。アップデートをチェックしてください。インストールを完了させるには再起動が必要な場合があります。</p> - + Ask again later 後ほど再試行してください。 - + Restart and update 再起動してアップデート - + Update manually 手動で更新する @@ -2723,7 +2660,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> サーバーから返されたエラー: <em>%1</em> @@ -2733,32 +2670,32 @@ トークン'エンドポイントにアクセス中にエラーが発生しました: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> "トークン"のエンドポイントへアクセス中にエラーが発生しました: <br><em>%1</em> - + Empty JSON from OAuth2 redirect OAuth2のリダイレクトのJSONが空 - + 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>としてログインしてください。 @@ -2827,12 +2764,12 @@ アップデートをダウンロードできませんでした。手動でアップデートするには、<a href='%1'>%1</a> をクリックしてください。 - + Could not download update. Please open %1 to download the update manually. アップデートをダウンロードできませんでした。更新を手動でダウンロードするには、%1 を開いてください。 - + Could not check for new updates. アップデートを確認できませんでした。 @@ -2842,27 +2779,27 @@ 新しい %1 が利用可能です。アップデートをダウンロードするには、<a href='%2'>%2</a>をクリックしてください。 - + New %1 is available. Please open %2 to download the update. 新しい %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 アップデートを確認 @@ -2890,14 +2827,14 @@ 接続… - - + + Use &virtual files instead of downloading content immediately %1 コンテンツをすぐにダウンロードする代わりに &仮想ファイルを使用する %1 - - + + (experimental) (試験的) @@ -2922,49 +2859,49 @@ 空き容量: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. 仮想ファイルは、ローカルフォルダーのWindowsルートパーティションではサポートされていません。ドライブレターの下の有効なサブフォルダを選択してください。 - + %1 folder "%2" is synced to local folder "%3" %1 のフォルダー "%2" はローカルフォルダー "%3" と同期しています - + Sync the folder "%1" "%1" フォルダーを同期 - + Warning: The local folder is not empty. Pick a resolution! 警告: ローカルフォルダーは空ではありません。対処法を選択してください! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB 空き容量 %1 - + Virtual files are not available for the selected folder 選択したフォルダーで仮想ファイルが使用できません - + Local Sync Folder ローカル同期フォルダー - - + + (%1) (%1) - + There isn't enough free space in the local folder! ローカルフォルダーに十分な空き容量がありません。 @@ -3034,14 +2971,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3107,7 +3036,7 @@ 次(&N) > - + Server address does not seem to be valid サーバーアドレスは有効なさそうです @@ -3117,7 +3046,7 @@ 無効なURL - + Could not load certificate. Maybe wrong password? 証明書を読み込めませんでした。 パスワードが間違っていますか? @@ -3215,54 +3144,54 @@ Nextcloud上にフォルダーを作成中:%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 フォルダー名の変更に失敗しました。 @@ -3272,12 +3201,12 @@ フォルダーまたはその中にあるファイルが他のプログラムで開かれているため、フォルダーの削除やバックアップができません。フォルダーまたはファイルを閉じてから再試行するか、セットアップをキャンセルしてください。 - + Cannot 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> @@ -3285,7 +3214,7 @@ OCC::OwncloudWizard - + Add %1 account アカウント「%1」 を追加 @@ -3295,17 +3224,17 @@ %1 接続ウィザード - + Skip folders configuration フォルダー設定をスキップ - + Enable experimental feature? 試験的な機能を有効化しますか? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3322,12 +3251,12 @@ これは新しい機能で、実験モードです。使用していて問題があったら報告をお願いします。 - + Enable experimental placeholder mode 試験的なプレースホルダーモードを有効にする - + Stay safe セキュリティーを確保 @@ -3335,7 +3264,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL 不正なJSONがポーリングURLから返りました @@ -3353,17 +3282,17 @@ ファイルに末尾のスペースが含まれていますが、同じ名前のファイルが既にローカルに存在するため、名前を変更できませんでした。 - + 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. ピリオドで終わるファイル名はこのファイルシステムでサポートされていません。 @@ -3378,57 +3307,57 @@ ファイル名に含まれる文字 "%1" はこのファイルシステムでサポートされていません。 - + File name contains at least one invalid character ファイル名は少なくとも1つ以上の無効な文字を含んでいます - + The file name is a reserved name on this file system. ファイル名はファイルシステムに予約されています。 - + Filename contains trailing spaces. ファイル名末尾にスペースが含まれます。 - + Filename is too long. ファイル名は長すぎます。 - + File/Folder is ignored because it's hidden. 隠しファイル/フォルダーのため無視されました - + Stat failed. 情報取得エラー - + Conflict: Server version downloaded, local copy renamed and not uploaded. コンフリクト: サーバーのバージョンがダウンロードされて、ローカルのコピーはファイル名を変更しアップロードしません。 - + The filename cannot be encoded on your file system. あなたのファイルシステムでファイル名をエンコードできません。 - + The filename is blacklisted on the server. このファイル名はサーバーにブロックされました。 - + File has extension reserved for virtual files. ファイルの拡張子は仮想ファイル用に予約されています。 - + size サイズ @@ -3438,72 +3367,62 @@ 権限 - - server reported no %1 - サーバーから no %1 と通知がありました - - - - permission - - - - + file id ファイルID - - Server reported no %1 - + + server reported no %1 + サーバーから no %1 と通知がありました - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! 一部のファイルをフォルダにアップロードするときに競合が発生しました。これらの競合はクリアされます! - + Conflict when uploading a folder. It's going to get cleared! フォルダをアップロードするときに競合したので、クリアされます! - + Conflict when uploading a file. It's going to get removed! フォルダをアップロードするときに競合したので、削除されます! - + 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 because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバー上で読み取り専用のため、ファイルをアップロードできません。 - + Moved to invalid target, restoring 無効なターゲットに移動し、復元しました - + Not allowed to remove, restoring 削除、復元は許可されていません - + Error while reading the database データベースを読み込み中にエラーが発生しました @@ -3513,7 +3432,7 @@ サーバーがディレクトリ '%1' の読み取り中にエラーで応答しました: %2 - + Server replied with an error while reading directory "%1" : %2 サーバーでディレクトリ "%1" を読み取り中にエラーになりました: %2 @@ -3526,17 +3445,12 @@ メタデータのデータベースへの書き込みに失敗 - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 メタデータの更新中にエラーが発生しました:%1 - + File is currently in use ファイルは現在使用中です @@ -3549,44 +3463,44 @@ 暗号化情報がないため、ファイル%1をダウンロードできません。 - + File %1 cannot be downloaded because encryption information is missing. 暗号化情報がないため、ファイル%1をダウンロードできません。 - - + + File has changed since discovery ファイルは発見以降に変更されました - - + + File %1 cannot be downloaded because of a local file name clash! ローカルファイル名が競合しているため、ファイル %1 をダウンロードできませんでした - + File %1 can not be downloaded because of a local file name clash! ファイル %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. このファイルのダウンロードは完了しませんでした @@ -3596,12 +3510,12 @@ サーバーが通知しているファイルは %1 であるべきですが、ダウンロードファイルは空でした。 - + The downloaded file is empty, but the server said it should have been %1. ダウンロードしたファイルは空ですが、サーバでは %1 であるはずです。 - + File %1 cannot be saved because of a local file name clash! %1 はローカルファイル名が衝突しているため保存できません! @@ -3611,18 +3525,12 @@ メタデータのデータベースへの書き込みに失敗 - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 メタデータの更新中にエラーが発生しました:%1 - + The file %1 is currently in use ファイル %1 は現在使用中です @@ -3630,12 +3538,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 復元に失敗: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ファイルまたはフォルダーが読み込み専用の共有から削除されましたが、復元に失敗しました: %1 @@ -3709,12 +3617,12 @@ ファイル %1 はローカルファイル名が衝突しているため %2 に名前を変更できません - + Error updating metadata: %1 メタデータの更新中にエラーが発生しました:%1 - + The file %1 is currently in use ファイル %1 は現在使用中です @@ -3725,12 +3633,12 @@ メタデータのデータベースへの書き込みに失敗 - + Failed to rename file ファイル名を変更できませんでした - + Error setting pin state お気に入りに設定エラー @@ -3764,12 +3672,12 @@ メタデータのデータベースへの書き込みに失敗 - + Error writing metadata to the database: %1 メタデータのデータベースへの書き込みに失敗: %1 - + The file %1 is currently in use ファイル %1 は現在使用中です @@ -3787,22 +3695,22 @@ 誤ったHTTPコードがサーバーから返されました。201のはずが、"%1 %2"が返りました。 - + Error updating metadata: %1 メタデータの更新中にエラーが発生しました:%1 - + The file %1 is currently in use ファイル %1 は現在使用中です - + Error setting pin state お気に入りに設定エラー - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -3810,46 +3718,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. 暗号化されたファイルをアップロードできませんでした。 - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists ファイル %1 は、大文字と小文字の区別が違う同じ名前のファイルが存在するためアップロードできません - - + + Upload of %1 exceeds the quota for the folder %1 をアップロードするとフォルダーのクオータを超えます - + File Removed (start upload) %1 ファイルが削除されました(アップロード開始)%1 - + Local file changed during syncing. It will be resumed. ローカルファイルが同期中に変更されました。再開されます。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + Failed to unlock encrypted folder. 暗号化されたフォルダーの解除に失敗しました。 @@ -3859,12 +3759,12 @@ メタデータのデータベースへの書き込みに失敗 - + Error updating metadata: %1 メタデータの更新中にエラーが発生しました:%1 - + The file %1 is currently in use ファイル %1 は現在使用中です @@ -3872,32 +3772,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. ローカルファイルを同期中に削除します。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + Poll URL missing ポーリングURLがありません - + Unexpected return code from server (%1) サーバー (%1) からの予期しない戻りコード - + Missing File ID from server サーバーからファイルIDの戻りがありません - + Missing ETag from server サーバーからETagの戻りがありません @@ -3905,22 +3805,22 @@ OCC::PropagateUploadFileV1 - + 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 が存在しませんでした) @@ -3998,7 +3898,7 @@ OCC::ServerNotificationHandler - + Dismiss 閉じる @@ -4168,17 +4068,17 @@ パスワード保護 - + Allow editing 編集を許可 - + View only 表示のみ - + Allow upload and editing アップロードと編集を許可 @@ -4188,7 +4088,7 @@ 有効期限 - + File drop (upload only) ファイルドロップ(アップロードのみ) @@ -4198,32 +4098,32 @@ 共有解除 - + Link name リンク名 - + Note to recipient 受取人への注意 - + Password protect パスワード保護 - + Set expiration date 有効期限を設定 - + Delete link リンクを削除 - + Add another link 別のリンクを追加 @@ -4233,27 +4133,27 @@ 共有リンクを削除 - + Confirm Link Share Deletion リンク共有の削除を確認する - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>本当にこの公開リンク共有<i>%1</i>を削除しますか?</p><p>注:この操作を元に戻すことはできません。</p> - + Delete 削除 - + Cancel キャンセル - + Public link 公開リンク @@ -4266,12 +4166,12 @@ ユーザーやグループとの共有 ... - + Search globally 全体で検索 - + Copy link リンクをコピー @@ -4281,22 +4181,22 @@ '%1' は見つかりませんでした - + No results for "%1" "%1" は見つかりませんでした - + Password for share required 共有用のパスワードが必要です - + Please enter a password for your email share: メール共有のパスワードを入力してください: - + I shared something with you 私はあなたと何かを共有しました @@ -4334,42 +4234,42 @@ 有効期限: - + Can reshare 再共有可能 - + Note to recipient 受信者へのメモ - + Set expiration date 有効期限を設定 - + Unshare 共有解除 - + Can create 作成可能 - + Can change 変更可能 - + Can delete 削除可能 - + Password protect パスワード保護 @@ -4386,23 +4286,23 @@ OCC::SocketApi - + Context menu share コンテキストメニューの共有 - + Select new location … 新しい場所の選択... - + I shared something with you 私はあなたと何かを共有しました - - + + Share options 共有オプション @@ -4418,73 +4318,73 @@ アクティビティ - + Copy private link to clipboard プライベートリンクをクリップボードにコピーする - + Send private link by email … メールでプライベートリンクを送信… - + Resharing this file is not allowed このファイルの再共有は許可されていません - + Resharing this folder is not allowed このフォルダーの再共有は許可されていません - - + + Copy public link 公開リンクのコピー - + Copy internal link 内部リンクをコピー - + Edit 編集 - + Open in browser ブラウザーで開く - + Resolve conflict … 競合を解決する… - + Move and rename … 移動して名前を変更… - + Move, rename and upload … 移動、名前の変更、アップロード… - + Delete local changes ローカルの変更を削除する - + Move and upload … 移動してアップロード… - + Delete 削除 @@ -4630,12 +4530,12 @@ この証明書を信用する - + Untrusted Certificate 信頼できない証明書 - + Cannot connect securely to <i>%1</i>: <i>%1</i> にセキュアに接続できません: @@ -4645,62 +4545,62 @@ - + with Certificate %1 証明書 %1 - - - + + + &lt;not specified&gt; &lt;指定されていません&gt; - - + + Organization: %1 組織名: %1 - - + + Unit: %1 部門名: %1 - - + + Country: %1 国: %1 - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256):<tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>% 1</tt> - + Effective Date: %1 発効日: %1 - + Expiration Date: %1 有効期限: %1 - + Issuer: %1 発行者: %1 @@ -4793,33 +4693,33 @@ 内部エラー番号 %1 が発生しました。 - + %1 (skipped due to earlier error, trying again in %2) %1(前のエラーのためにスキップされ、%2で再試行) - + Could not update file: %1 ファイルをアップデートできません: %1 - + Could not update virtual file metadata: %1 仮想ファイルのメタデータを更新できませんでした: %1 - + Unresolved conflict. 未解決の競合。 - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Aborted 中断しました @@ -4896,16 +4796,16 @@ 末尾にピリオドを使うファイル名はサポートされていません + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + ローカル同期データベースを開いたり作成できません。 同期フォルダーに書き込み権限があることを確認してください。 + + File names containing the character '%1' are not supported on this file system. ファイル名に使用できない文字列が含まれています: '%1' - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - ローカル同期データベースを開いたり作成できません。 同期フォルダーに書き込み権限があることを確認してください。 - - The file name is a reserved name on this file system. ファイル名はこのファイルシステムで予約されている名前です。 @@ -4926,7 +4826,7 @@ 隠しファイル/フォルダーのため無視されました - + Using virtual files with suffix, but suffix is not set サフィックス付きの仮想ファイルを使用していますが、サフィックスが設定されていません @@ -4941,7 +4841,7 @@ ファイルシステムでファイル名をエンコードすることはできません。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません @@ -4956,17 +4856,17 @@ 情報取得エラー + + Unable to read from the sync journal. + 同期ジャーナルから読み込みできません + + Filename encoding is not valid ファイル名のエンコーディングが無効です。 - - Unable to read from the sync journal. - 同期ジャーナルから読み込みできません - - - + Cannot open the sync journal 同期ジャーナルを開くことができません @@ -4976,22 +4876,22 @@ 無効な文字です、"%1" を変更してください。 + + Synchronization will resume shortly. + + + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - Synchronization will resume shortly. - - - - + 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. いくつかのアップロードのために、サーバーに十分なスペースがありません。 @@ -5060,49 +4960,49 @@ OCC::Systray - + Add account アカウントを追加 - + Open main dialog メインダイアログを開く + - Pause sync 同期を一時停止 - - + + Resume sync 同期を再開 - + Settings 設定 - + Exit %1 %1 を終了 - + Pause sync for all 全ての同期を一時停止 - + Resume sync for all すべての同期を再開 - + %1: %2 %1: %2 @@ -5110,24 +5010,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 デスクトップクライアント</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>バージョン %1. 詳細な情報は<a href='%2'>ここ</a>をクリックしてください。</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>仮想ファイルシステムプラグインを利用:%1</small></p> - + <p>This release was supplied by %1</p> <p>このリリースは%1によって提供されました</p> @@ -5135,22 +5035,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5158,32 +5058,32 @@ OCC::User - + Retry all uploads すべてのアップロードを再試行 - + Synced %1 %1 を同期しました - + You renamed %1 %1 の名前を変更しました - + You deleted %1 %1 を削除しました - + You created %1 %1 を作成しました - + You changed %1 %1 を変更しました @@ -5191,22 +5091,22 @@ OCC::UserModel - + 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 接続を外す - + Cancel 取消 @@ -5311,30 +5211,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 ヴァーチャルファイルシステム機能にはNTFSファイルシステムが必要です。%1 は %2 を使用しています。 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5856,52 +5738,52 @@ 新しいフォルダー - + %n day ago %n 日前 - + %n days ago %n 日前 - + in the future 今後 - + %n hour ago %n 時間前 - + %n hours ago %n 時間前 - + now - + Less than a minute ago 1分以内 - + %n minute ago %n 分前 - + %n minutes ago %n 分前 - + Some time ago 数分前 @@ -5935,7 +5817,7 @@ SyncJournalDb - + Failed to connect database. データベースに接続できません @@ -5943,7 +5825,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5980,21 +5862,11 @@ アカウント登録 - + Switch to account アカウントに変更 - - Current user status is online - 現在のユーザーステータスはオンラインです - - - - Current user status is do not disturb - 現在のユーザーステータスは取り込み中です - - Account connected アカウント接続済 @@ -6005,7 +5877,17 @@ アカウントは接続していません - + + Current user status is online + 現在のユーザーステータスはオンラインです + + + + Current user status is do not disturb + 現在のユーザーステータスは取り込み中です + + + Account actions アカウント操作 @@ -6015,24 +5897,24 @@ アカウントを削除 - + Set status ステータスを設定 - - + + Log out ログアウト - - + + Log in ログイン - + Remove account アカウント削除 @@ -6093,57 +5975,57 @@ 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 @@ -6151,7 +6033,7 @@ ValidateChecksumHeader - + The checksum header is malformed. チェックサムヘッダーの形式が正しくありません。 @@ -6184,64 +6066,64 @@ Window - + Nextcloud desktop main dialog Nextcloudデスクトップのメインダイアログ - + Current account 現在のアカウント - - + + Resume sync for all 全ての同期を再開 - - + + Pause sync for all 全ての同期を一時停止 - + Set user status ステータスを設定 - + Add account アカウントを追加 - + Add new account 新しいアカウントを追加 - + Settings 設定 - + Exit 終了 - + Current user avatar 現在のユーザーアバター - + Current user status is online 現在のユーザーステータスはオンラインです - + Current user status is do not disturb 現在のユーザーステータスは取り込み中です @@ -6251,32 +6133,32 @@ 「%1」を共有 - + Account switcher and settings menu アカウントスイッチャーと設定メニュー - + Connected 接続しました - + Disconnected 切断しました - + Open local folder of current account 現在のアカウントのローカルフォルダーを開く - + Open Nextcloud Talk in browser Nextcloud Talk をブラウザーで開く - + More apps その他のアプリ @@ -6286,7 +6168,7 @@ アプリメニュー - + Open %1 in browser %1をブラウザーで開く @@ -6306,7 +6188,7 @@ 共有ダイアログを開く - + Unified search results list @@ -6317,7 +6199,7 @@ その他のアクションを表示 - + %1 - File activity %1 - ファイルアクティビティ @@ -6325,7 +6207,7 @@ main.cpp - + System Tray not available システムトレイ利用不可 @@ -6335,7 +6217,7 @@ %1は動作しているシステムトレイで必要とします。XFCEを動作させている場合、<a href="http://docs.xfce.org/xfce/xfce4-panel/systray">これらのインストラクション</a>を追ってください。でなければ、「トレイヤー」のようなシステムトレイアプリケーションをインストールして、再度お試しください。 - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 は動作しているシステムトレイで必要です。XFCEを動作させている場合、<a href="http://docs.xfce.org/xfce/xfce4-panel/systray">以下の操作方法</a>に従ってください。そうでなければ、「trayer」のようなシステムトレイアプリケーションをインストールして、再度お試しください。 @@ -6343,7 +6225,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ko.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ko.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ko.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ko.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out 연결 시간 초과됨 - + Unknown error: network reply was deleted 알 수 없는 오류: 네트워크 응답 객체가 삭제됨 - + Server replied "%1 %2" to "%3 %4" 서버에서 "%3 %4"에 "%1 %2"(으)로 응답함 @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic 종단간 암호화 연상 기호 - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). 암호화 신원을 보호하기 위해 12개의 사전 단어를 사용하여 암호화합니다. 이 내용을 기록하고 안전하게 보관하십시오. 휴대 전화 나 노트북과 같은 다른 기기를 계정에 추가해야합니다. @@ -305,9 +305,9 @@ - - - + + + Cancel 취소 @@ -495,52 +495,52 @@ 동기화 폴더 연결 삭제 - + Disable virtual file support … 가상 파일 지원 비활성화 - + Enable virtual file support %1 … 가상 파일 지원 %1 활성화 - + (experimental) (실험적) - + Folder creation failed 폴더 생성 실패 - + <p>Could not create local folder <i>%1</i>.</p> <p>로컬 폴더를 만들 수 없음 <i>%1</i>. - + Confirm Folder Sync Connection Removal 동기화 폴더 연결 삭제 확인 - + <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> - + Remove Folder Sync Connection 동기화 폴더 연결 삭제 - + Disable virtual file support? 가상 파일 지원을 비활성화합니까? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ 이 동작은 진행중인 동기화를 모두 취소합니다. - + Disable support 지원 비활성화 - + Sync Running 동기화 - + The syncing operation is running.<br/>Do you want to terminate it? 동기화가 진행중입니다.<br/>종료하시겠습니까? - + %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. 현재 사용 가능한 저장소 사용량 정보가 없습니다. - + %1 in use %1 사용중 @@ -603,87 +603,87 @@ 로그인 - + %1 as %2 - + The server version %1 is 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에 연결이 없습니다. - + Server configuration error: %1 at %2. 서버 설정 오류: %2에 있는 %1 - + No %1 connection configured. %1 연결이 설정되지 않았습니다. - + 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 연결 삭제 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out 로그아웃 - + Disconnected 연결 해제됨 - + Connected 연결됨 - + Service unavailable 서비스 사용할 수 없음 - + Maintenance mode 유지 보수 모드 - + Network error 네트워크 오류 - + Configuration error 설정 오류 - + Asking Credentials 자격 증명 요청 - + Unknown account state 알 수 없는 사용자 상태 @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. 무시 목록의 파일과 심볼릭 링크는 동기화되지 않습니다. - + For more activities please open the Activity app. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. 계속 진행할 경우 <b>본 설정이 삭제됩니다</b>. - + Continuing will mean <b>ignoring these settings</b>. 계속 진행할 경우 <b>본 설정이 무시됩니다</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. 일부 항목은 더 높은 버전에서 설정되었으며 이 버전에서 사용 가능하지 않는 기능을 이용합니다. <br><br>%1<br><br> 현재 설정은 <i>%2</i>에 백업되었습니다. - + Quit 끝내기 - + Continue 계속 - + Error accessing the configuration file 설정 파일 액세스 오류 - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. 설정 파일%1을 액세스하는 중 오류가 발생했습니다. 사용자가 파일에 액세스 할 수 있는지 확인하십시오. - + Quit %1 %1 끝내기 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> 종단간의 암호화 암구호를 입력하십시오: <br><br>사용자: %2<br>계정: %3<br> - + Enter E2E passphrase E2E 암구호 입력 @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ 서버 파일 감지 응답에 데이터가 없습니다. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 디렉토리 %1를 여는 중 오류 발생 - + Directory not accessible on client, permission denied 디렉토리 접근 불가, 권한이 없음 - + Directory not found: %1 디렉토리를 찾을 수 없음: &1 - + Filename encoding is not valid 파일 이름 인코딩이 올바르지 않습니다. - + Error while reading directory %1 디렉토리 %1를 읽는 중 오류 발생 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> 서버에서 오류가 반환되었습니다: <em>%1</em> @@ -1190,24 +1127,24 @@ - + 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> 서버에서 반환된 JSON을 구문 분석 할 수 없습니다: <br><em>%1</em> - + The reply from the server did not contain all expected fields 서버의 응답에 모든 예상 필드가 포함되지 않았습니다. - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1368,41 +1305,41 @@ 동기화 활동 - + 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. 다운로드하려면 설정으로 이동하여 선택하십시오. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. %1 폴더가 생성되었으나 이전에 동기화에서 제외되었습니다. 그 안의 데이터는 동기화되지 않습니다. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. %1 파일이 생성되었으나 이전에 동기화에서 제외되었습니다. 동기화되지 않습니다. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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'의 모든 파일이 삭제되었습니다. 이 삭제는 서버와 동기화되므로 해당 파일을 복원하지 않는 한 사용할 수 없습니다. +이 동작을 서버와 동기화하시겠습니까? +이 동작이 우연이고 파일을 유지하고자 할 경우, 서버로부터 재동기화 될 것입니다. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ 로컬 파일을 충돌 상태로 유지 - - 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 restore 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'의 모든 파일이 삭제되었습니다. 이 삭제는 서버와 동기화되므로 해당 파일을 복원하지 않는 한 사용할 수 없습니다. -이 동작을 서버와 동기화하시겠습니까? -이 동작이 우연이고 파일을 유지하고자 할 경우, 서버로부터 재동기화 될 것입니다. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1502,24 +1428,35 @@ - + 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 모두 삭제 - + + 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 restore 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'의 모든 파일이 서버에서 삭제되었습니다. +이러한 삭제는 로컬 동기화 폴더와 동기화되므로 복원할 권한이 없으면 해당 파일을 사용할 수 없습니다. +파일을 복원하기로 결정한 경우, 파일을 복원할 수 있는 권한이 있으면 파일이 서버와 다시 동기화됩니다. +파일을 삭제하기로 결정한 경우 소유자가 아닌 한 해당 파일을 사용할 수 없습니다. + + + Keep files 파일 유지 @@ -1555,7 +1492,7 @@ OCC::FolderMan - + Could not reset folder state 폴더 상태를 초기화할 수 없습니다. @@ -1565,37 +1502,37 @@ 오래된 동기화 저널 '%1'을 찾았지만 제거 할 수 없습니다. 현재 사용중인 응용 프로그램이 없는지 확인하십시오. - + 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) (백업 %1) - + Undefined State. 정의되지 않은 상태 - + Waiting to start syncing. 동기화 시작을 기다리는 중 - + Preparing for sync. 동기화 준비 중 - + Sync is running. 동기화 진행 중 @@ -1605,67 +1542,67 @@ 동기화 성공, 해결되지 않은 충돌 - + Sync finished with unresolved conflicts. 동기화 성공. 해결되지 않은 충돌이 있습니다. - + Last Sync was successful. 최근 동기화에 성공 - + Setup Error. 설치 오류 - + User Abort. 사용자 중단 - + Sync is paused. 동기화 일시 정지됨 - + %1 (Sync is paused) %1 (동기화 일시 정지됨) - + No valid folder selected! 올바른 폴더가 선택되지 않았습니다! - + The selected path does not exist! 선택한 경로가 존재하지 않습니다! - + The selected path is not a folder! 선택된 경로는 폴더가 아닙니다! - + You have no permission to write to the selected 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에 폴더 동기화 연결에 사용된 폴더에 이미 포함되어 있습니다. 다른 폴더를 선택해주세요! - + There is already a sync from the server to this local folder. Please pick another local folder! 서버에서 이 로컬 폴더로의 동기화가 이미 있습니다. 다른 로컬 폴더를 선택하십시오! @@ -1877,12 +1814,12 @@ OCC::FolderWizard - + Add Folder Sync Connection 동기화 폴더 연결 추가 - + Add Sync Connection 동기화 연결 추가 @@ -1923,42 +1860,42 @@ - + 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>%2</i>의 상위 폴더 인 <i>%1</i>을 동기화하고 있습니다. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. 이미 <i>%2</i>의 하위 폴더인 <i>%1</i>을 동기화하고 있습니다. @@ -1966,25 +1903,25 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 내용을 즉시 다운로드 하는 대신 가상 파일을 사용 %1 - - + + (experimental) (실험적) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. 가상 파일은 윈도우 파티션 루트에 로컬 폴더로 지원되지 않습니다. 드라이브 문자가 지정된 유효한 하위 폴더를 선택하십시오. - + Virtual files are not available for the selected folder 가상 파일을 선택한 폴더에서 사용 가능하지 않음 @@ -2005,27 +1942,27 @@ 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를 받았습니다. 다음에 재시도하십시오. - + We received an unexpected download Content-Length. - + Server returned wrong content-range 서버가 잘못된 내용 범위를 반환했습니다. - + Connection Timeout 연결 시간 만료 @@ -2145,22 +2082,22 @@ 디버그 아카이브 만들기 ... - + Server notifications that require attention. 주의가 필요한 서버 알림 - + You cannot disable autostart because system-wide autostart is enabled. 시스템 단위 자동 시작이 활성화되어 있으므로 자동 시작을 비활성화할 수 없습니다. - + Change update channel? 업데이트 채널을 바꾸시겠습니까? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2169,32 +2106,32 @@ 채널 선택은 무엇으로 업그레이드를 할 지 결정하며 다운그레이드는 없습니다. 따라서, 베타 체널에서 안정화 채널로 변경할 경우 대개 버전을 즉시 변경할 수 없으며 현재 설치된 베타 버전보다 더 최신인 안정화 버전이 출시될 때 까지 기다려야 합니다. - + Change update channel 업데이트 채널 변경 - + Cancel 취소 - + Create Debug Archive 디버그 아카이브 만들기 - + Zip Archives 아카이브 압축 - + Debug Archive Created 디버그 아카이브가 생성됨 - + Debug archive is created at %1 디버그 아카이브가 %1에 생성됨 @@ -2202,22 +2139,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required 공유를 위한 암호가 필요함 - + Please enter a password for your link share: 내 링크 공유를 위한 암호를 입력하십시오: - + Sharing error 오류 공유 - + Could not retrieve or create the public link share. Error: %1 @@ -2542,7 +2479,7 @@ OCC::Logger - + Error 오류 @@ -2552,7 +2489,7 @@ 쓰기 위해 <nobr>파일 '%1'<br/>을 열 수 없습니다.<br/><br/>로그 출력이 <b>저장되지 않습니다!</b></nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2560,33 +2497,33 @@ 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 업데이트 하기 - + Update Failed 업데이트 실패 @@ -2601,17 +2538,17 @@ - + Ask again later 다음에 다시 요청하십시오 - + Restart and update 재시작 및 업데이트 - + Update manually 수동으로 업데이트 @@ -2722,7 +2659,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> 서버로부터 오류가 반환되었습니다: <em>%1</em> @@ -2733,33 +2670,33 @@   - + There was an error accessing the "token" endpoint: <br><em>%1</em> '토큰' 종단점에 액세스하는 중 오류가 발생했습니다: <br><em>%1</em>   - + Empty JSON from OAuth2 redirect - + 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 사용자로 로그인하십시오. @@ -2829,12 +2766,12 @@ - + Could not download update. Please open %1 to download the update manually. 업데이트를 다운로드할 수 없습니다. %1을 열어 수동으로 다운로드 및 업데이트를 하십시오. - + Could not check for new updates. 새 업데이트를 확인할 수 없습니다. @@ -2844,27 +2781,27 @@ - + New %1 is available. Please open %2 to download the update. 새 %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 업데이트 확인 @@ -2892,14 +2829,14 @@ 연결 중... - - + + Use &virtual files instead of downloading content immediately %1 컨텐츠를 즉시 다운로드 하는 대신 &가상 파일을 사용하십시오 %1 - - + + (experimental) (실험적) @@ -2924,50 +2861,50 @@ 남은 공간: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. 가상 파일은 윈도우 파티션 루트에 로컬 폴더로 지원되지 않습니다. 드라이브 문자가 지정된 유효한 하위 폴더를 선택하십시오. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! 경고: 로컬 폴더가 비어있지 않습니다. 해결 방법을 선택하십시오! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 남은 공간 - + Virtual files are not available for the selected folder 가상 파일을 선택한 폴더에서 사용할 수 없음 - + Local Sync Folder 로컬 동기화 폴더 - - + + (%1) (%1) - + There isn't enough free space in the local folder! 로컬 폴더에 공간이 부족합니다! @@ -3037,14 +2974,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3039,7 @@ 다음> - + Server address does not seem to be valid 서버 주소가 유효하지 않은 것 같습니다. @@ -3120,7 +3049,7 @@ 잘못된 URL - + Could not load certificate. Maybe wrong password? 인증서를 가져오지 못했습니다. 암호가 잘못되었을 수 있습니다. @@ -3218,54 +3147,54 @@ Nextcloud에 폴더 생성 중: %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 폴더 이름을 바꿀 수 없음 @@ -3275,12 +3204,12 @@ 폴더 나 폴더의 파일이 다른 프로그램에서 열려있어 폴더를 제거하고 백업 할 수 없습니다. 폴더 혹은 파일을 닫고 다시 시도하거나 설정을 취소하십시오. - + Cannot 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> @@ -3288,7 +3217,7 @@ OCC::OwncloudWizard - + Add %1 account %1 계정 추가 @@ -3298,17 +3227,17 @@ %1 Connection Wizard - + Skip folders configuration 폴더 설정 건너뛰기 - + Enable experimental feature? 실험적 기능을 활성화합니까? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ 본 기능은 새롭고 실험적인 모드입니다. 사용을 결정했다면, 발생하는 문제들을 보고해주십시오. - + Enable experimental placeholder mode 실험적인 placeholder 모드 활성화 - + Stay safe 안전하게 머무르기 @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL 설문 조사 URL로 부터 유효하지 않은 JSON 응답 @@ -3356,17 +3285,17 @@ - + 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. 마침표로 끝나는 파일 이름은 이 파일 시스템에서 지원되지 않습니다. @@ -3381,57 +3310,57 @@ - + File name contains at least one invalid character 파일 이름에 잘못된 글자가 한 자 이상 있음 - + The file name is a reserved name on this file system. 해당 파일 이름은 이 파일 시스템에서 예약된 이름입니다. - + Filename contains trailing spaces. 파일 이름 뒤에 공백이 있습니다. - + Filename is too long. 파일 이름이 너무 깁니다. - + File/Folder is ignored because it's hidden. 파일/폴더가 숨겨져 있으므로 무시됩니다. - + Stat failed. 스탯 실패 - + Conflict: Server version downloaded, local copy renamed and not uploaded. 충돌: 서버 버전이 다운로드되었으며 로컬 사본의 이름이 바뀌었고 업로드되지 않았습니다. - + The filename cannot be encoded on your file system. 내 파일 시스템에서 파일 이름을 인코딩 할 수 없습니다. - + The filename is blacklisted on the server. 파일 이름이 서버 블랙리스트에 있습니다. - + File has extension reserved for virtual files. 파일이 가상 파일에 예약된 확장자를 가짐 - + size 크기 @@ -3441,72 +3370,62 @@ 권한 - - server reported no %1 - 서버가 %1이(가) 없다고(아니라고) 보고함 - - - - permission - - - - + file id 파일 id - - Server reported no %1 - + + server reported no %1 + 서버가 %1이(가) 없다고(아니라고) 보고함 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder 해당 폴더에 파일을 추가 할 권한이 없으므로 허용되지 않습니다. - + Not allowed to upload this file because it is read-only on the server, restoring 이 파일은 서버에서 읽기 전용이므로 업로드 할 수 없습니다. 복구 - + Moved to invalid target, restoring 유효하지 않은 목적지로 옮겨짐, 복구 - + Not allowed to remove, restoring 삭제가 허용되지 않음, 복구 - + Error while reading the database 데이터베이스를 읽는 중 오류 발생 @@ -3516,7 +3435,7 @@ 서버가 디렉토리 '%1'을(를) 읽는 중 오류에 대응함: %2 - + Server replied with an error while reading directory "%1" : %2 @@ -3529,17 +3448,12 @@ 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3552,44 +3466,44 @@ 암호화 정보가 없어서 %1 파일을 다운로드 할 수 없습니다. - + File %1 cannot be downloaded because encryption information is missing. 암호화 정보가 없어서 %1 파일을 다운로드 할 수 없습니다. - - + + File has changed since discovery 발견 이후 파일이 변경되었습니다. - - + + File %1 cannot be downloaded because of a local file name clash! 로컬 파일 이름 충돌로 인해 %1 파일을 다운로드 할 수 없습니다! - + File %1 can not be downloaded because of a local file name clash! 로컬 파일 이름 충돌로 인해 %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. 파일을 완전히 다운로드 할 수 없습니다. @@ -3599,12 +3513,12 @@ 서버가 %1이어야한다고 안내 했음에도 불구하고 다운로드한 파일이 비어 있습니다. - + The downloaded file is empty, but the server said it should have been %1. 서버는 %1였으나 다운로드한 파일이 비어 있음. - + File %1 cannot be saved because of a local file name clash! 로컬 파일 이름 충돌로 인해 %1 파일을 저장할 수 없습니다! @@ -3614,18 +3528,12 @@ 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3633,12 +3541,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 복원 실패: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 파일 또는 폴더가 읽기 전용 공유에서 제거되었지만 복원에 실패했습니다: %1 @@ -3712,12 +3620,12 @@ 로컬 파일 이름 충돌로 인해 파일 %1의 이름을 %2로 바꿀 수 없습니다. - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3728,12 +3636,12 @@ 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. - + Failed to rename file - + Error setting pin state @@ -3767,12 +3675,12 @@ 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3790,22 +3698,22 @@ 서버에서 잘못된 HTTP 코드를 반환했습니다. 201가 받아지는 대신 "1 %2"을 받았습니다. - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. 암호화된 파일 업로드 실패 - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists 경우에 따라 다른 이름을 가진 다른 파일이 존재하므로 %1 파일을 업로드 할 수 없습니다. - - + + Upload of %1 exceeds the quota for the folder %1의 업로드가 폴더의 할당량을 초과합니다. - + File Removed (start upload) %1 파일 삭제됨 (업로드 시작) %1 - + Local file changed during syncing. It will be resumed. 동기화 중 로컬 파일이 변경되었습니다. 곧 재개됩니다. - + Local file changed during sync. 동기화 중 로컬 파일이 변경되었습니다. - + Failed to unlock encrypted folder. 암호화된 폴더 해제 실패 @@ -3862,12 +3762,12 @@ 데이터베이스에 메타데이터를 쓰는 중 오류가 발생했습니다. - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. 동기화 중 로컬 파일이 삭제되었습니다. - + Local file changed during sync. 동기화 중 로컬 파일이 변경되었습니다. - + Poll URL missing - + Unexpected return code from server (%1) 서버에서 예기지 않은 코드가 반환됨 (%1) - + Missing File ID from server 서버에서 파일 ID 누락 - + Missing ETag from server 서버에서 ETag 누락 @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + 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 태그 없음) @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss 무시 @@ -4171,17 +4071,17 @@ 암호 보호 - + Allow editing Allow editing - + View only - + Allow upload and editing Allow upload and editing @@ -4191,7 +4091,7 @@ 만료 날짜 - + File drop (upload only) File drop (upload only) @@ -4201,32 +4101,32 @@ 공유 해제 - + Link name - + Note to recipient 받는 사람 메모 - + Password protect 암호 보호 - + Set expiration date 만료기한 설정 - + Delete link - + Add another link 다른 링크 추가 @@ -4236,27 +4136,27 @@ 공유 링크 삭제 - + Confirm Link Share Deletion 링크 공유 삭제 확인 - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>공개 링크 공유 <i>%1</i>를 정말로 삭제 하시겠습니까?</p><p>메모: 이 작업은 되돌릴 수 없습니다.</p> - + Delete 삭제 - + Cancel 취소 - + Public link 공개 링크 @@ -4269,12 +4169,12 @@ 사용자 또는 그룹과 공유: ... - + Search globally 전역 검색 - + Copy link 링크 복사 @@ -4284,22 +4184,22 @@ '%1'에 대한 결과 없음 - + No results for "%1" - + Password for share required 공유를 위한 암호가 필요함 - + Please enter a password for your email share: 내 이메일 공유를 위한 암호 입력: - + I shared something with you 당신과 공유합니다. @@ -4337,42 +4237,42 @@ 만료: - + Can reshare 재공유 가능 - + Note to recipient 받는 사람에게 메모 - + Set expiration date 만료기한 설정 - + Unshare 공유 해제 - + Can create 생성 가능 - + Can change 변경 가능 - + Can delete 삭제 가능 - + Password protect 암호 보호 @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share 컨텍스트 메뉴 공유 - + Select new location … 새 위치 선택 ... - + I shared something with you 당신과 공유합니다. - - + + Share options 공유 옵션 @@ -4421,73 +4321,73 @@ - + Copy private link to clipboard 클립보드로 개인 링크 주소 복사 - + Send private link by email … 이메일로 개인 링크 보내기 ... - + Resharing this file is not allowed 이 파일을 다시 공유할 수 없습니다. - + Resharing this folder is not allowed 이 폴더를 다시 공유할 수 없습니다. - - + + Copy public link 공개 링크 복사 - + Copy internal link 내부 링크 복사 - + Edit 편집 - + Open in browser 브라우저에서 열기 - + Resolve conflict … 문제 해결 ... - + Move and rename … 이동 및 이름 변경 ... - + Move, rename and upload … 이동, 이름 변경 및 업로드 ... - + Delete local changes 로컬 변경 사항 삭제 - + Move and upload … 이동 및 업로드 ... - + Delete 삭제 @@ -4633,12 +4533,12 @@ 어쨌든 이 인증서를 신뢰하십시오. - + Untrusted Certificate 신뢰할 수 없는 인증서 - + Cannot connect securely to <i>%1</i>: <i>%1</i>에 안전하게 연결할 수 없습니다: @@ -4648,62 +4548,62 @@ - + with Certificate %1 인증서 %1 - - - + + + &lt;not specified&gt; &lt;지정되지 않음&gt; - - + + Organization: %1 조직: %1 - - + + Unit: %1 단위: %1 - - + + Country: %1 국가: %1 - + Fingerprint (SHA1): <tt>%1</tt> 지문 (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> 지문 (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> 지문 (SHA-512): <tt>%1</tt> - + Effective Date: %1 유효 날짜: %1 - + Expiration Date: %1 만료 날짜: %1 - + Issuer: %1 발급자: %1 @@ -4796,33 +4696,33 @@ 내부 오류 %1가 발생했습니다. - + %1 (skipped due to earlier error, trying again in %2) %1 (이전 오류로 인해 스킵되었으며 %2에서 다시 시도) - + Could not update file: %1 파일을 업데이트할 수 없음: %1 - + Could not update virtual file metadata: %1 가상 파일 메타데이터를 업데이트할 수 없음: %1 - + Unresolved conflict. 해결되지 않은 충돌 - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 만 사용할 수 있습니다. 시작하려면 %2 이상이 필요합니다 - + Aborted 중단됨 @@ -4899,16 +4799,16 @@ 마침표로 끝나는 파일 이름은 이 파일 시스템에서 지원되지 않습니다. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + 로컬 동기화 데이터베이스를 열거나 만들 수 없습니다. 동기화 폴더에 대한 쓰기 권한이 있는지 확인하십시오. + + File names containing the character '%1' are not supported on this file system. '%1'을 포함하는 파일 이름은 이 파일 시스템에서 지원되지 않습니다. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - 로컬 동기화 데이터베이스를 열거나 만들 수 없습니다. 동기화 폴더에 대한 쓰기 권한이 있는지 확인하십시오. - - The file name is a reserved name on this file system. 해당 파일 이름은 이 파일 시스템에서 예약된 이름입니다. @@ -4929,7 +4829,7 @@ 파일/폴더가 숨겨져 있으므로 무시됩니다. - + Using virtual files with suffix, but suffix is not set 가상 파일에 접미사를 사용 중이나, 접미사가 설정되지 않음 @@ -4944,7 +4844,7 @@ 파일 시스템에서 파일 이름을 인코딩 할 수 없습니다. - + Unable to read the blacklist from the local database 로컬 데이터베이스에서 블랙리스트를 읽을 수 없습니다. @@ -4959,17 +4859,17 @@ 스탯 실패 + + Unable to read from the sync journal. + 동기화 저널에서 읽을 수 없습니다. + + Filename encoding is not valid 파일 이름 인코딩이 올바르지 않습니다. - - Unable to read from the sync journal. - 동기화 저널에서 읽을 수 없습니다. - - - + Cannot open the sync journal 동기화 저널을 열 수 없습니다. @@ -4979,22 +4879,22 @@ 잘못된 문자입니다. "%1"의 이름을 바꾸십시오. + + Synchronization will resume shortly. + + + File name contains at least one invalid character 파일 이름에 유효하지 않은 문자가 하나 이상 있습니다. - - Synchronization will resume shortly. - - - - + 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. 일부 업로드를 위해 서버에 사용 가능한 공간이 부족합니다. @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account 계정 추가 - + Open main dialog + - Pause sync 동기화 일시 정지 - - + + Resume sync 동기화 재개 - + Settings 설정 - + Exit %1 %1 끝내기 - + Pause sync for all 전체 동기화 일시 정지 - + Resume sync for all 전체 동기화 재개 - + %1: %2 %1: %2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 데스크톱 클라이언트</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>버전 %1. 더 많은 정보를 보려면 <a href='%2'>여기</a>를 클릭하세요.</p> - + <p><small>Using virtual files plugin: %1</small></p> <small><p>가상 파일 플러그인 사용: %1</small></p> - + <p>This release was supplied by %1</p> <p>이 릴리스는 %1에 의해 제공되었습니다.</p> @@ -5138,22 +5038,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5161,32 +5061,32 @@ OCC::User - + Retry all uploads 모든 업로드 다시 시도 - + Synced %1 동기화됨 %1 - + You renamed %1 내가 %1을(를) 이름 변경함 - + You deleted %1 내가 %1을(를) 삭제함 - + You created %1 내가 %1을(를) 생성함 - + You changed %1 내가 %1을(를) 변경함 @@ -5194,22 +5094,22 @@ OCC::UserModel - + 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 연결 삭제 - + Cancel 취소 @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 가상 파일시스템 기능은 NTFS 파일 시스템이 요구됩니다. %1은(는) %2을(를) 사용중 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ 새 폴더 - + %n day ago %n일 전 - + %n days ago %n일 전 - + in the future 앞으로 - + %n hour ago %n시간 전 - + %n hours ago %n시간 전 - + now 현재 - + Less than a minute ago 1분 미만 전 - + %n minute ago %n분 전 - + %n minutes ago %n분 전 - + Some time ago 몇분 전 @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. @@ -5946,7 +5828,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5983,21 +5865,11 @@ 계정 목록 - + Switch to account 계정으로 전환 - - Current user status is online - 현재 사용자 상태가 오프라인임 - - - - Current user status is do not disturb - 현재 사용자 상태가 방해 금지임 - - Account connected 계정 연결됨 @@ -6008,7 +5880,17 @@ 계정이 연결되지 않음 - + + Current user status is online + 현재 사용자 상태가 오프라인임 + + + + Current user status is do not disturb + 현재 사용자 상태가 방해 금지임 + + + Account actions 계정 동작 @@ -6018,24 +5900,24 @@ 계정 삭제 - + Set status - - + + Log out 로그아웃 - - + + Log in 로그인 - + Remove account 계정 삭제 @@ -6096,57 +5978,57 @@ Utility - + %L1 GB %L1GB - + %L1 MB %L1MB - + %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 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. 체크섬 헤더가 잘못되었습니다. @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog - + Current account 현재 계정 - - + + Resume sync for all 전체 동기화 재개 - - + + Pause sync for all 전체 동기화 일시 정지 - + Set user status - + Add account 계정 추가 - + Add new account 새 계정 추가 - + Settings 설정 - + Exit 끝내기 - + Current user avatar 현재 사용자 아바타 - + Current user status is online 현재 사용자 상태가 접속 중임 - + Current user status is do not disturb 현재 사용자 상태가 방해 금지임 @@ -6254,32 +6136,32 @@ %1 공유 - + Account switcher and settings menu - + Connected 연결됨 - + Disconnected 연결이 끊어졌습니다. - + Open local folder of current account 현재 계정의 로컬 폴더 열기 - + Open Nextcloud Talk in browser 브라우저에서 Nextcloud Talk 열기 - + More apps 더 많은 앱 @@ -6289,7 +6171,7 @@ 앱 메뉴 - + Open %1 in browser 브라우저에서 %1 열기 @@ -6309,7 +6191,7 @@ - + Unified search results list @@ -6320,7 +6202,7 @@ 더 많은 활동 보기 - + %1 - File activity @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available 시스템 트레이를 사용할 수 없음 @@ -6338,7 +6220,7 @@ 작업 트레이에 % 1이 필요합니다. XFCE를 실행중인 경우 <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">다음 지침</a>을 따르십시오. 그렇지 않으면 '트레이어'와 같은 시스템 트레이 응용 프로그램을 설치하고 다시 시도하십시오. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. 작업 트레이에 % 1이 필요합니다. XFCE를 실행중인 경우 <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">다음 지침</a>을 따르십시오. 그렇지 않으면 '트레이어'와 같은 시스템 트레이 응용 프로그램을 설치하고 다시 시도하십시오. @@ -6346,7 +6228,7 @@ nextcloudTheme::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>에서 Qt %5, %6을 사용하여 %3, %4의 빌드</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_lt_LT.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_lt_LT.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_lt_LT.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_lt_LT.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Pasibaigė ryšiui skirtas laikas - + Unknown error: network reply was deleted Nežinoma klaida: tinklo atsakymas buvo ištrintas - + Server replied "%1 %2" to "%3 %4" Serveris atsakė "%1 %2" į "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Šifravimo mnemonika - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Norėdami apsaugoti Jūsų kriptografinę tapatybę, mes ją užšifruojame 12 žodžių mnemonika. Įsiminkite ir saugokite žodžius. Jie bus reikalingi, jei norėsite prie savo paskyros pridėti kitus įrenginius (pvz., mobilųjį telefoną ar nešiojamąjį kompiuterį). @@ -305,9 +305,9 @@ - - - + + + Cancel Atsisakyti @@ -494,52 +494,52 @@ Pašalinti aplankų sinchronizavimo ryšį - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Aplanko sukūrimas nepavyko - + <p>Could not create local folder <i>%1</i>.</p> <p>Nepavyko sukurti vietinio aplanko <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Patvirtinti aplankų sinchronizavimo ryšio pašalinimą - + <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>Ar tikrai norite sustabdyti failų sinchronizavimą <i>%1</i>? </p><p><b>Pastaba:</b> Failai <b>nebus</b> ištrinti.</p> - + Remove Folder Sync Connection Pašalinti aplankų sinchronizavimo ryšį - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Vyksta sinchronizavimas - + The syncing operation is running.<br/>Do you want to terminate it? Vyksta sinchronizavimo operacija.<br/>Ar norite ją nutraukti? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) iš %2 yra naudojami. Kai kuriuose aplankuose gali būti naudojami skirtingi apribojimai. - + %1 of %2 in use %1 iš %2 yra naudojami - + Currently there is no storage usage information available. Šiuo metu nėra informacijos apie saugyklos panaudojimą. - + %1 in use %1 naudojama @@ -598,87 +598,87 @@ Prisijungti - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Prisijungta prie %1. - + Server %1 is temporarily unavailable. Serveris %1 yra laikinai neprieinamas. - + Server %1 is currently in maintenance mode. Šiuo metu serveris %1 yra techninės priežiūros veiksenoje. - + Signed out from %1. Atsijungta iš %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Autorizuojama vykdoma per naršyklę.<a href='%1'>Paspauskite čia</a>, jei norite iš naujo atidaryti naršyklę. - + Connecting to %1 … Jungiamasi prie %1… - + No connection to %1 at %2. %2 neturi ryšio su %1. - + Server configuration error: %1 at %2. Serverio konfigūracijos klaida: %1 ties %2. - + No %1 connection configured. Nesukonfigūruota %1 sujungimų. - + There are folders that were not synchronized because they are too big: Yra aplankų, kurie nebuvo sinchronizuoti dėl to, kad buvo per dideli: - + There are folders that were not synchronized because they are external storages: Aplankai, kurie nebuvo sinchronizuoti, kadangi jie yra išorinės saugyklos: - + There are folders that were not synchronized because they are too big or external storages: Yra aplankų, kurie nebuvo sinchronizuoti dėl to, kad buvo per dideli arba yra išorinės saugyklos: - + Confirm Account Removal Patvirtinti paskyros pašalinimą - + <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>Ar tikrai norite pašalinti ryšį su paskyra <i>%1</i>?</p><p><b> Pastaba:</b> Failai <b>nebus</b> ištrinti.</p> - + Remove connection Šalinti ryšį @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Atsijungta - + Disconnected Atjungta - + Connected Prijungta - + Service unavailable Paslauga nepasiekiama - + Maintenance mode Techninės priežiūros veiksena - + Network error Tinklo klaida - + Configuration error Konfigūracijos klaida - + Asking Credentials Klausiama prisijungimo duomenų - + Unknown account state Nežinoma paskyros būsena @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. Jei norite matyti daugiau veiklos, atidarykite programą Veikla. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit Išeiti - + Continue Tęsti - + Error accessing the configuration file Klaida gaunant prieigą prie konfigūracijos failo - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Įvyko klaida, nepavyko pasiekti konfigūracijos failo, esančio% 1. Įsitikinkite, kad Jūs turite teisę pasiekti šį failą. - + Quit %1 Išjungti %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Klaida rašant metaduomenis į duomenų bazę @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Įveskite savo ištisinio šifravimo slaptafrazę:<br><br>Naudotojas: %2<br>Paskyra: %3<br> - + Enter E2E passphrase Įveskite E2E slaptą frazę @@ -1100,19 +1050,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1120,8 +1057,8 @@ Serverio failo aptikimo atsakyme trūksta duomenų. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1129,27 +1066,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 Katalogas nerastas: %1 - + Filename encoding is not valid - + Error while reading directory %1 Klaida skaitant katalogą %1 @@ -1172,7 +1109,7 @@ - + Error returned from the server: <em>%1</em> Iš serverio grąžinta klaida: <em>%1</em> @@ -1184,24 +1121,24 @@ - + 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> Nepavyko išanalizuoti serverio grąžinto JSON: <br><em> %1 </em> - + The reply from the server did not contain all expected fields Atsakyme iš serverio nebuvo visų tikėtinų laukų - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1362,40 +1299,40 @@ Sinchronizavimo veikla - + Could not read system exclude file Nepavyko perskaityti sistemos išskyrimo failo - + A new folder larger than %1 MB has been added: %2. Buvo pridėtas naujas, didesnis nei %1 MB, aplankas: %2. - + A folder from an external storage has been added. Buvo pridėtas aplankas iš išorinė saugyklos. - + Please go in the settings to select it if you wish to download it. Jei norite parsisiųsti, eikite į nustatymus. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Aplankas %1 buvo sukurtas, tačiau anksčiau išskirtas iš sinchronizavimo. Aplanke esantys duomenys nebus sinchronizuoti. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Failas %1 buvo sukurtas, tačiau anksčiau išskirtas iš sinchronizavimo. Failas nebus sinchronizuotas. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1406,6 +1343,13 @@ Tai reiškia, kad sinchronizacijos klientas gali iš karto neįkelti lokalių pakeitimų, o tik juos nuskaityti. Įkėlimas bus atliekamas tam tikrais laiko tarpais (pagal numatytuosius nustatymus kas dvi valandas). + + 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. + + + All files in the sync folder '%1' 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. @@ -1464,22 +1408,7 @@ Laikyti vietinius failus kaip konfliktinius - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1487,24 +1416,32 @@ - + 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? Šalinti visus failus? - + Remove all files Šalinti visus failus - + + 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 restore 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. + + + + Keep files Palikti failus @@ -1540,7 +1477,7 @@ OCC::FolderMan - + Could not reset folder state Nepavyko atstatyti aplanko būsenos @@ -1550,37 +1487,37 @@ Senas sinchronizavimo žurnalas '% 1' buvo surastas, tačiau jo nepavyko pašalinti. Įsitikinkite, kad šiuo metu jo nenaudoja jokia programa. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (atsarginė kopija) - + (backup %1) (atsarginė kopija %1) - + Undefined State. Neapibrėžta būsena. - + Waiting to start syncing. Laukiama pradėti sinchronizavimą. - + Preparing for sync. Ruošiamasi sinchronizavimui. - + Sync is running. Vyksta sinchronizacija @@ -1590,67 +1527,67 @@ Sinchronizacija sėkmingai pavyko. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Paskutinis sinchronizavimas buvo sėkmingas. - + Setup Error. Sąrankos klaida. - + User Abort. Naudotojo atšaukimas - + Sync is paused. Sinchronizavimas yra pristabdytas. - + %1 (Sync is paused) %1 (Sinchronizavimas pristabdytas) - + No valid folder selected! Nepasirinktas galiojantis failas! - + The selected path does not exist! Pasirinkto kelio nėra! - + The selected path is not a folder! Pasirinktas kelias nėra aplankas! - + You have no permission to write to the selected folder! Jūs neturite leidimų rašyti į pasirinktą aplanką! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Vietiniame aplanke %1 jau yra aplankas, kuris naudojamas aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Vietinis aplankas %1 jau yra aplanke, naudojamame aplanko sinchronizavimo ryšyje. Prašome pasirinkti kitą! - + There is already a sync from the server to this local folder. Please pick another local folder! Šis lokalus aplankas jau turi sinchronizaciją su serveriu. Pasirinkite kitą aplanką. @@ -1864,12 +1801,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Pridėti aplanko sinchronizavimo ryšį - + Add Sync Connection Pridėti sinchronizavimo ryšį @@ -1910,42 +1847,42 @@ - + Folder was successfully created on %1. Aplankas buvo sėkmingai sukurtas % 1. - + Authentication failed accessing %1 Nepavyko tapatumo nustatymas pasiekiant %1 - + Failed to create the folder on %1. Please check manually. Nepavyko sukurti aplanko ant %1. Prašome patikrinkite. - + Failed to list a folder. Error: %1 Nepavyko įkelti katalogo. Klaida:% 1 - + Choose this to sync the entire account Pasirinkite, jei norite sinchronizuoti šią paskyrą - + This folder is already being synced. Šis aplankas jau yra sinchronizuojamas. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Jūs jau sinchronizuojate <i>%1</i>, kuris yra tėvinis <i>%2</i> katalogas. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1953,24 +1890,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1991,27 +1928,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Iš serverio negauta „E-Tag“ žymė, patikrinkite įgaliotąjį serverį/tinklų sietuvą. - + We received a different E-Tag for resuming. Retrying next time. Mes gavome kitą „E-Tag“ atnaujinimui. Pakrtosime kitą kartą. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Serveris grąžino neteisingą turinio rėžį - + Connection Timeout Pasibaigė ryšiui skirtas laikas @@ -2131,54 +2068,54 @@ Sukurti derinimo archyvą… - + Server notifications that require attention. Serverio perspėjimai, reikalaujantys imtis veiksmų. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? Keisti atnaujinimų kanalą? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel Keisti atnaujinimų kanalą - + Cancel Atsisakyti - + Create Debug Archive Sukurti derinimo archyvą - + Zip Archives Zip archyvai - + Debug Archive Created Derinimo archyvas sukurtas - + Debug archive is created at %1 Derinimo archyvas sukurtas ties %1 @@ -2186,22 +2123,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Reikalingas bendrinimosi slaptažodis - + Please enter a password for your link share: Prašome įveskite slaptažodį bendrinamai nuorodai: - + Sharing error Bendrinimo klaida - + Could not retrieve or create the public link share. Error: %1 @@ -2523,7 +2460,7 @@ OCC::Logger - + Error Klaida @@ -2533,7 +2470,7 @@ <nobr>Failas '%1'<br/>negali būti atidarytas rašymui.<br/><br/>Įvykių žurnalo išvestis <b>negali</b>būti išsaugota!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2541,33 +2478,33 @@ OCC::NSISUpdater - + New Version Available Yra prieinama nauja versija - + <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>Galima nauja „%1“ kliento versija.</p><p>Galite atsisiųsti <b>%2</b>. Šiuo metu įdiegta versija yra %3.</p> - - + + Skip this version Praleisti šią versiją - + Skip this time Praleisti šį kartą - + Get update Gauti naujinimą - + Update Failed Atnaujinimas nepavyko @@ -2582,17 +2519,17 @@ - + Ask again later Vėliau klausti dar kartą - + Restart and update Paleisti iš naujo ir atnaujinti - + Update manually Atnaujinti rankiniu būdu @@ -2703,7 +2640,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Serveris gražino klaidą:<em>%1</em> @@ -2713,32 +2650,32 @@ Įvyko klaida prieigoje prie "token" galutinio taško:<br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Nepavyko išanalizuoti serverio grąžinto JSON: <br><em> %1 </em> - + The reply from the server did not contain all expected fields Atsakyme iš serverio nebuvo visų tikėtinų laukų - + <h1>Login Error</h1><p>%1</p> <h1>Prisijungimo klaida</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>Netinkamas naudotojas</h1><p>Jūs prisijungėte kaip naudotojas<em>%1</em>, bet turite būti prisijungęs kaip <em>%2</em> naudotojas. <br> Prašome, atsijunkite nuo %3, tada <a href='%4'>paspauskite čia</a> ir prisijunkite kaip %2 naudotojas </p> @@ -2808,12 +2745,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Nepavyko patikrinti ar yra atnaujinimų. @@ -2823,27 +2760,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … Tikrinamas atnaujinimų serveris… - + Update status is unknown: Did not check for new updates. Naujinimo būsena nežinoma. Neieškojote naujos versijos. - + No updates available. Your installation is at the latest version. Nėra atnaujinimų. Jūs šiuo metu naudojatės naujausia versija. - + Update Check Atnaujinimų tikrinimas @@ -2871,14 +2808,14 @@ Prisijungti… - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2903,49 +2840,49 @@ Laisva vieta: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Sinchronizavimo aplankas kompiuteryje - - + + (%1) (%1) - + There isn't enough free space in the local folder! Vietiniame aplanke nepakanka laisvos vietos! @@ -3015,14 +2952,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3088,7 +3017,7 @@ &Kitas > - + Server address does not seem to be valid @@ -3098,7 +3027,7 @@ Neteisingas URL - + Could not load certificate. Maybe wrong password? Nepavyko įkelti liudijimo. Galbūt, neteisingas slaptažodis? @@ -3196,54 +3125,54 @@ kuriamas aplankas Nextcloud: %1 - + Remote folder %1 created successfully. Nuotolinis aplankas %1 sėkmingai sukurtas. - + The remote folder %1 already exists. Connecting it for syncing. Serverio aplankas %1 jau yra. Prisijunkite jį sinchronizavimui. + - The folder creation resulted in HTTP error code %1 Aplanko sukūrimas sąlygojo HTTP klaidos kodą %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Nepavyko sukurti aplanko serveryje dėl neteisingų prisijungimo duomenų! <br/>Grįžkite ir įsitinkite, kad prisijungimo duomenys teisingai.</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">Nepavyko sukurti aplanko serveryje dėl neteisingų prisijungimo duomenų.</font><br/>Grįžkite ir įsitinkite, kad prisijungimo duomenys teisingai.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Nepavyko sukurti aplanko %1 serveryje, klaida <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Sinchronizavimo ryšys su %1 su nuotoliniu katalogu %2 buvo nustatytas. - + Successfully connected to %1! Sėkmingai prisijungta prie %1! - + Connection to %1 could not be established. Please check again. Susijungti su %1 nepavyko. Pabandykite dar kartą. - + Folder rename failed Nepavyko pervadinti aplanką @@ -3253,12 +3182,12 @@ Nepavyko pašalinti arba padaryti atsarginės aplanko ar failo kopijos, nes jie atidaryti kitoje programoje. Prašome užverti aplanką ir failą, ir bandyti diegti dar kartą. - + Cannot 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>Sinchronizavimo aplankas %1 kompiuteryje buvo sėkmingai sukurtas! </b></font> @@ -3266,7 +3195,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3276,17 +3205,17 @@ %1 ryšio vediklis - + Skip folders configuration Praleisti aplankų konfigūravimą - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3297,12 +3226,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3310,7 +3239,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Neteisingas JSON iš apklausų URL adreso @@ -3328,17 +3257,17 @@ - + 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. @@ -3353,57 +3282,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. Failo pavadinime yra galinių tarpų. - + Filename is too long. Failo pavadinimas yra per ilgas. - + File/Folder is ignored because it's hidden. Failo/Aplanko nepaisoma, nes jis yra paslėptas. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size dydis @@ -3413,72 +3342,62 @@ leidimai - - server reported no %1 - - - - - permission - - - - + file id failo id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database Klaida skaitant duomenų bazę @@ -3488,7 +3407,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3501,17 +3420,12 @@ Klaida rašant metaduomenis į duomenų bazę - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3524,44 +3438,44 @@ Failo %1 atsisiųsti nepavyko, nes trūksta šifravimo informacijos. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Aptikus failą, jis buvo pakeistas - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Failo %1 nepavyko atsisiųsti dėl kompiuterio failo nesuderinamumo! - + The download would reduce free local disk space below the limit Atsisiuntimas sumažins laisvos vietos diske žemiau leistinos ribos - + Free space on disk is less than %1 Laisvos vietos diske yra mažiau nei %1 - + File was deleted from server Failas buvo ištrintas iš serverio - + The file could not be downloaded completely. Nepavyko pilnai atsisiųsti failo. @@ -3571,12 +3485,12 @@ Atsisiųstas failas yra tuščias nepaisant to, kad serveris paskelbė, jog failas turėjo būti %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Failo %1 nepavyko išsaugoti dėl kompiuterio failo nesuderinamumo! @@ -3586,18 +3500,12 @@ Klaida rašant metaduomenis į duomenų bazę - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3605,12 +3513,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Atkūrimas nepavyko: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Failas ar aplankas buvo pašalintas iš tik skaitymui skirtos bendros vietos, atstatymas nepavyko: %1 @@ -3684,12 +3592,12 @@ Failo %1 nepavyko pervadinti į %2 dėl kompiuterio failo nesuderinamumo - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3700,12 +3608,12 @@ Klaida rašant metaduomenis į duomenų bazę - + Failed to rename file - + Error setting pin state @@ -3739,12 +3647,12 @@ Klaida rašant metaduomenis į duomenų bazę - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3762,22 +3670,22 @@ Serveris grąžino neteisingą HTTP kodą. Tikimasi 201, gauta "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Klaida rašant metaduomenis į duomenų bazę @@ -3785,46 +3693,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Failo %1 įkelti nepavyko, nes yra kitas failas, besiskiriantis didžiosiomis ir mažosiomis raidėmis - - + + Upload of %1 exceeds the quota for the folder %1 įkėlimui reikalinga vieta viršija aplankui skirtą kvotą - + File Removed (start upload) %1 Failas pašalintas (pradėkite įkėlimas) %1 - + Local file changed during syncing. It will be resumed. Failas kompiuteryje sinchronizavimo metu buvo pakeistas. Bus tęsiama. - + Local file changed during sync. Failas kompiuteryje sinchronizavimo metu buvo pakeistas. - + Failed to unlock encrypted folder. @@ -3834,12 +3734,12 @@ Klaida rašant metaduomenis į duomenų bazę - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3847,32 +3747,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Vietinis failas sinchronizavimo metu buvo pašalintas. - + Local file changed during sync. Failas kompiuteryje sinchronizavimo metu buvo pakeistas. - + Poll URL missing - + Unexpected return code from server (%1) Nežinomas atsakymo kodas iš serverio (%1) - + Missing File ID from server Nėra File ID iš serverio - + Missing ETag from server Nėra ETag iš serverio @@ -3880,22 +3780,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Nėra apklausos URL adreso - + The local file was removed during sync. Vietinis failas sinchronizavimo metu buvo pašalintas. - + Local file changed during sync. Failas kompiuteryje sinchronizavimo metu buvo pakeistas. - + The server did not acknowledge the last chunk. (No e-tag was present) Serveris nepatvirtino paskutinio segmento. (Nėra e-tag) @@ -3973,7 +3873,7 @@ OCC::ServerNotificationHandler - + Dismiss Atmesti @@ -4143,17 +4043,17 @@ Apsaugota slaptažodžiu - + Allow editing Leisti redaguoti - + View only - + Allow upload and editing Leisti įkelti ir redaguoti @@ -4163,7 +4063,7 @@ Galiojimo pabaigos data - + File drop (upload only) Failų įmetimas (tik įkėlimas) @@ -4173,32 +4073,32 @@ Nustoti bendrinti - + Link name - + Note to recipient Pastaba gavėjui - + Password protect Apsaugoti slaptažodžiu - + Set expiration date Nustatyti galiojimo pabaigos datą - + Delete link - + Add another link Pridėti dar vieną nuorodą @@ -4208,27 +4108,27 @@ Ištrinti bendrinimo nuorodą - + Confirm Link Share Deletion Patvirtinkite dalinimosi nuorodos trynimą - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ar tikrai norite ištrinti viešąją bendrinimo nuorodą <i>%1</i>?</p><p>Pastaba: Šio veiksmo negalima bus atšaukti.</p> - + Delete Ištrinti - + Cancel Atsisakyti - + Public link Viešoji nuoroda @@ -4241,12 +4141,12 @@ Bendrinti su naudotojais ar grupėmis ... - + Search globally - + Copy link Kopijuoti nuorodą @@ -4256,22 +4156,22 @@ „%1“ negrąžino jokių rezultatų - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Aš pradėjau kai ką bendrinti su jumis @@ -4309,42 +4209,42 @@ - + Can reshare Gali pakartotinai bendrinti - + Note to recipient - + Set expiration date - + Unshare Nustoti bendrinti - + Can create Gali kurti - + Can change Gali keisti - + Can delete Gali trinti - + Password protect @@ -4361,23 +4261,23 @@ OCC::SocketApi - + Context menu share Kontekstinio meniu pasidalinimas - + Select new location … - + I shared something with you Aš pradėjau kai ką bendrinti su jumis - - + + Share options Bendrinimo parinktys @@ -4393,73 +4293,73 @@ - + Copy private link to clipboard Kopijuoti privačią nuorodą į mainų sritį - + Send private link by email … Siųsti privačią nuorodą el. paštu… - + Resharing this file is not allowed Pakartotinai dalintis failu negalima - + Resharing this folder is not allowed - - + + Copy public link Kopijuoti viešąją nuorodą - + Copy internal link Kopijuoti vidinę nuorodą - + Edit Taisyti - + Open in browser Atverti naršyklėje - + Resolve conflict … - + Move and rename … Perkelti ir pervadinti… - + Move, rename and upload … - + Delete local changes Ištrinti vietinius pakeitimus - + Move and upload … - + Delete Ištrinti @@ -4605,12 +4505,12 @@ Vis tiek pasitikėti šiuo liudijimu - + Untrusted Certificate Nepatikimas liudijimas - + Cannot connect securely to <i>%1</i>: Nepavyksta saugiai prisijungti prie <i>%1</i>: @@ -4620,62 +4520,62 @@ - + with Certificate %1 su liudijimu %1 - - - + + + &lt;not specified&gt; &lt;nenurodyta&gt; - - + + Organization: %1 Organizacija: %1 - - + + Unit: %1 Vienetas: %1 - - + + Country: %1 Šalis: %1 - + Fingerprint (SHA1): <tt>%1</tt> Kontrolinis kodas (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Kontrolinis kodas (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Kontrolinis kodas (SHA-512): <tt>%1</tt> - + Effective Date: %1 Įsigalioja nuo: %1 - + Expiration Date: %1 Galioja iki: %1 - + Issuer: %1 Leidėjas: %! @@ -4768,33 +4668,33 @@ Įvyko vidinė klaida %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (praleista dėl ankstesnės klaidos, dar kartą bus bandoma po %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Neišspręstas konfliktas. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Leidžiami tik %1, būtina bent %2, kad galėtumėte pradėti - + Aborted @@ -4871,16 +4771,16 @@ Failo pavadinimai, kurie baigiasi tašku šioje failų sistemoje nepalaikomi. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Nepavyko atverti ar sukurti sinchronizavimo duomenų bazės kompiuteryje. Įsitikinkite, kad į sinchronizavimo aplanką galite rašyti. + + File names containing the character '%1' are not supported on this file system. Failo pavadinime esantis simbolis „%1“ nepalaikomas šioje failų sistemoje. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Nepavyko atverti ar sukurti sinchronizavimo duomenų bazės kompiuteryje. Įsitikinkite, kad į sinchronizavimo aplanką galite rašyti. - - The file name is a reserved name on this file system. Šis failo pavadinimas šioje failų sistemoje yra rezervuotas. @@ -4901,7 +4801,7 @@ Failo/Aplanko yra nepaisoma, nes jis yra paslėptas. - + Using virtual files with suffix, but suffix is not set @@ -4916,7 +4816,7 @@ Failo pavadinimas negali būti užkoduotas jūsų failų sistemoje. - + Unable to read the blacklist from the local database Nepavyko perskaityti juodojo sąrašo iš duomenų bazės kompiuteryje @@ -4931,17 +4831,17 @@ Statistika nesėkminga. + + Unable to read from the sync journal. + Nepavyko perskaityti sinchronizavimo žurnalo. + + Filename encoding is not valid Failo kodavimas neteisingas - - Unable to read from the sync journal. - Nepavyko perskaityti sinchronizavimo žurnalo. - - - + Cannot open the sync journal Nepavyksta atverti sinchronizavimo žurnalo @@ -4951,22 +4851,22 @@ Neteisingi simboliai, pervadinkite "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Failo pavadinime yra bent vienas neleistinas simbolis - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Mažai vietos diske: atsisiuntimai, kurie sumažintų vietą iki %1 buvo praleisti. - + There is insufficient space available on the server for some uploads. Kai kuriems įkėlimams serveryje neužteks vietos. @@ -5035,49 +4935,49 @@ OCC::Systray - + Add account Pridėti paskyrą - + Open main dialog Atverti pagrindinį dialogą + - Pause sync Pristabdyti sinchronizavimą - - + + Resume sync Pratęsti sinchronizavimą - + Settings Nustatymai - + Exit %1 Išeiti iš %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5085,24 +4985,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 darbalaukio kliento programa</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versija %1. Išsamesnei informacijai, spustelėkite <a href='%2'>čia</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Šį išleidimą pateikė %1</p> @@ -5110,22 +5010,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5133,32 +5033,32 @@ OCC::User - + Retry all uploads Pakartoti visus įkėlimus - + Synced %1 Sinchronizuota %1 - + You renamed %1 Jūs pervadinote %1 - + You deleted %1 Jūs ištrynėte %1 - + You created %1 Jūs sukūrėte %1 - + You changed %1 Jūs pakeitėte %1 @@ -5166,22 +5066,22 @@ OCC::UserModel - + Confirm Account Removal Patvirtinti paskyros šalinimą - + <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>Ar tikrai norite pašalinti ryšį su paskyra <i>%1</i>?</p><p><b>Pastaba:</b> Tai <b>neištrins</b> jokių failų.</p> - + Remove connection Šalinti ryšį - + Cancel Atsisakyti @@ -5286,30 +5186,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5831,52 +5713,52 @@ - + %n day ago prieš %n dienąprieš %n dienasprieš %n dienųprieš %n dienų - + %n days ago prieš %n dienąprieš %n dienasprieš %n dienųprieš %n dienų - + in the future ateityje - + %n hour ago prieš %n valandąprieš %n valandasprieš %n valandųprieš %n valandų - + %n hours ago prieš %n valandąprieš %n valandasprieš %n valandųprieš %n valandų - + now dabar - + Less than a minute ago Mažiau nei prieš minutę - + %n minute ago prieš %n minutęprieš %n minutesprieš %n minučiųprieš %n minučių - + %n minutes ago prieš %n minutęprieš %n minutesprieš %n minučiųprieš %n minučių - + Some time ago Kažkada anksčiau @@ -5910,7 +5792,7 @@ SyncJournalDb - + Failed to connect database. @@ -5918,7 +5800,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5955,21 +5837,11 @@ Paskyros įrašas - + Switch to account Prisijungti prie paskyros - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Paskyra prijungta @@ -5980,7 +5852,17 @@ Paskyra neprijungta - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Veiksmai su paskyra @@ -5990,24 +5872,24 @@ Šalinti paskyrą - + Set status - - + + Log out Atsijungti - - + + Log in Prisijungti - + Remove account Šalinti paskyrą @@ -6068,57 +5950,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n metai%n metai%n metų%n metų - + %n month(s) %n mėnuo%n mėnesiai%n mėnesių%n mėnesių - + %n day(s) %n diena%n dienos%n dienų%n dienų - + %n hour(s) %n valanda%n valandos%n valandų%n valandų - + %n minute(s) %n minutė%n minutės%n minučių%n minučių - + %n second(s) %n sekundė%n sekundės%n sekundžių%n sekundžių - + %1 %2 %1 %2 @@ -6126,7 +6008,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Kontrolinės sumos antraštė yra netaisyklinga. @@ -6159,64 +6041,64 @@ Window - + Nextcloud desktop main dialog - + Current account Dabartinė paskyra - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Pridėti paskyrą - + Add new account Pridėti naują paskyrą - + Settings Nustatymai - + Exit Išeiti - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6226,32 +6108,32 @@ Bendrinti %1 - + Account switcher and settings menu Paskyrų perjungiklis ir nustatymų meniu - + Connected Prijungta - + Disconnected Atjungta - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Daugiau programėlių @@ -6261,7 +6143,7 @@ Programėlių meniu - + Open %1 in browser Atverti %1 naršyklėje @@ -6281,7 +6163,7 @@ Atverti bendrinimo dialogą - + Unified search results list @@ -6292,7 +6174,7 @@ Rodyti daugiau veiksmų - + %1 - File activity @@ -6300,7 +6182,7 @@ main.cpp - + System Tray not available Sistemos dėklas neprieinamas @@ -6310,7 +6192,7 @@ %1 reikalauja veikiančio sistemos dėklo. Jei naudojate XFCE, sekite <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">šias instrukcijas</a>. Priešingu atveju, įsidiekite sistemos dėklo programą, tokią kaip "trayer", ir bandykite dar kartą. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6318,7 +6200,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Pagaminta pagal Git redakciją <a href="%1">%2</a>išleistą %3, %4 naudojant Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_lv.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_lv.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_lv.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_lv.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Savienojuma noliedze - + Unknown error: network reply was deleted Nezināma kļūda: tīkla atbilde tika izdzēsta - + Server replied "%1 %2" to "%3 %4" Serveris atbildēja "%1 %2" uz "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic No gala līdz galam šifrēšanas mnemonika - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Atcelt @@ -494,52 +494,52 @@ Noņemt mapes sinhronizācijas savienojumu - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Mapes izveide neizdevās - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Noņemt mapes sinhronizācijas savienojuma noņemšanai - + <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>Vai tiešām vēlaties apturēt mapes <i>%1</i> sinhronizēšanu?</p><p><b>Piezīme:</b> Tas <b>neveiks</b> nekādu datņu dzēšanu.</p> - + Remove Folder Sync Connection Noņemt mapes sinhronizācijas savienojumu - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Notiek Sinhronizācija - + The syncing operation is running.<br/>Do you want to terminate it? Pašlaik notiek sinhronizācijas operācija.<br/>Vai to izbeigt? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) no %2 izmantots. Dažas mapes, tajā skaitā montētas no tīkla vai koplietotas, var saturēt dažādus ierobežojumus. - + %1 of %2 in use %1 no %2 izmantots - + Currently there is no storage usage information available. Pašlaik nav pieejama diska vietas informācija. - + %1 in use %1 tiek lietots @@ -598,87 +598,87 @@ Pieteikties - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Savienots ar %1. - + Server %1 is temporarily unavailable. Serveris %1 ir īslaicīgi nepiejams. - + Server %1 is currently in maintenance mode. Serveris %1 pašlaik ir uzturēšanas režīmā - + Signed out from %1. Izrakstījies no %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Saņemam pilnvaru no pārlūka. <a href='%1'>Noklikšķini šeit</a>lai atkārtoti atvērtu pārlūku. - + Connecting to %1 … - + No connection to %1 at %2. Nav savienojuma ar %1 pie %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. Nav %1 savienojums konfigurēts. - + There are folders that were not synchronized because they are too big: Šīs mapes netika sinhronizētas, jo tās ir pārāk lielas: - + There are folders that were not synchronized because they are external storages: Šīs mapes netika sinhronizētas, jo tās atrodas ārējās krātuvēs: - + There are folders that were not synchronized because they are too big or external storages: Šīs mapes netika sinhronizētas, jo tās ir pārāk lielas, vai atrodas ārējās krātuvēs: - + Confirm Account Removal Apstiprini Konta noņemšanai - + <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>Vai tiešām vēlaties noņemt savienojumu kontam <i>%1</i>?</p><p><b>Piezīme:</b> Tas <b>neveiks</b> nekādu datņu dzēšanu.</p> - + Remove connection Noņemt savienojumu @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Izrakstījies - + Disconnected Atvienojies - + Connected Savienojies - + Service unavailable Serviss nav pieejams - + Maintenance mode Uzturēšanas režīms - + Network error Tīkla kļūda - + Configuration error Konfigurācijas kļūda - + Asking Credentials Pieprasa atkreditāciju - + Unknown account state Nezināms konta stāvoklis @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Kļūda piekļūstot konfigurācijas datnei - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Notika kļūda piekļūstot konfigurācijas datnei %1. Lūdzu pārliecinieties, ka datne ir pieejama no jūsu konta. - + Quit %1 Iziet %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Kļūda rakstot metadatus datubāzē @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Lūdzu ievadiet jūsu end to end šifrēšanas paroli:<br><br>Lietotājs: %2<br>Konts: %3<br> - + Enter E2E passphrase Ievadiet E2E paroli @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ Servera datņu atklāšanas atbildei nav datu. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ Sinhronizācijas darbība - + Could not read system exclude file Nevarēja nolasīt sistēmas izņēmumu datni. - + A new folder larger than %1 MB has been added: %2. Jauna mape lielāka par %1 MB ir tikusi pievienota: %2. - + A folder from an external storage has been added. Mape no ārējās krātuves ir tikusi pievienota. - + Please go in the settings to select it if you wish to download it. Lūdzu ieej iestatījumos un izvēlies to, ja tu to gribi lejupielādēt. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1455,22 +1399,7 @@ Saglabāt lokālās datnes kā konfliktu - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1478,24 +1407,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1531,7 +1468,7 @@ OCC::FolderMan - + Could not reset folder state Nevarēja atiestatīt mapju statusu @@ -1541,37 +1478,37 @@ - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (dublējums) - + (backup %1) (dublējums %1) - + Undefined State. - + Waiting to start syncing. - + Preparing for sync. Sagatavojas sinhronizācijai. - + Sync is running. Notiek sinhronizācija. @@ -1581,67 +1518,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. Pēdējā sinhronizācija bija izdevusies. - + Setup Error. Uzstādījumu kļūda. - + User Abort. - + Sync is paused. Sinhronizācija ir apturēta. - + %1 (Sync is paused) %1 (Sinhronizācija ir apturēta) - + No valid folder selected! Nav izvēlēta derīga mape! - + The selected path does not exist! - + The selected path is not a folder! Atlasītais ceļš nav mape! - + You have no permission to write to the selected folder! Tev nav rakstīšanas piekļuves izvēlētai mapei! - + 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1853,12 +1790,12 @@ OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1899,42 +1836,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1942,24 +1879,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1980,27 +1917,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout @@ -2120,54 +2057,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2175,22 +2112,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error - + Could not retrieve or create the public link share. Error: %1 @@ -2506,7 +2443,7 @@ OCC::Logger - + Error Kļūda @@ -2516,7 +2453,7 @@ Datni '%1'<br/>nevar atvērt rakstīšanai.<br/><br/>Žurnāla izvads var būt<b>nesaglabāts</b> !</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2524,33 +2461,33 @@ 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 - + Update Failed @@ -2565,17 +2502,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2686,7 +2623,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> @@ -2696,32 +2633,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Pieteikšanās kļūda</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>Nepareizs lietotājs</h1><p>Jūs pieteicāties ar lietotāju <em>%1</em>, taču jāpiesakās ar lietotāju <em>%2</em>.<br>Lūdzu atsakieties no %3 citā cilnē, tad <a href='%4'>spied šeit</a> un piesakies kā lietotājs %2</p> @@ -2790,12 +2727,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. @@ -2805,27 +2742,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 @@ -2853,14 +2790,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2885,49 +2822,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder - - + + (%1) - + There isn't enough free space in the local folder! @@ -2997,14 +2934,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3069,7 +2998,7 @@ - + Server address does not seem to be valid @@ -3079,7 +3008,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3177,54 +3106,54 @@ - + 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 @@ -3234,12 +3163,12 @@ - + Cannot 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> @@ -3247,7 +3176,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3257,17 +3186,17 @@ - + Skip folders configuration - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3278,12 +3207,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3291,7 +3220,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3309,17 +3238,17 @@ - + 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. @@ -3334,57 +3263,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3394,72 +3323,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3469,7 +3388,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3482,17 +3401,12 @@ - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3505,44 +3419,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3552,12 +3466,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3567,18 +3481,12 @@ - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3586,12 +3494,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3665,12 +3573,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3681,12 +3589,12 @@ - + Failed to rename file - + Error setting pin state @@ -3720,12 +3628,12 @@ - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3743,22 +3651,22 @@ - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database @@ -3766,46 +3674,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3815,12 +3715,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3828,32 +3728,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. - + Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3861,22 +3761,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3954,7 +3854,7 @@ OCC::ServerNotificationHandler - + Dismiss @@ -4124,17 +4024,17 @@ Aizsargāts ar paroli - + Allow editing Atļaut rediģēšanu - + View only - + Allow upload and editing Atļaut augšupielādi un rediģēšanu @@ -4144,7 +4044,7 @@ - + File drop (upload only) Datņu mešana (tikai augšupielādei) @@ -4154,32 +4054,32 @@ Atcelt koplietošanu - + Link name - + Note to recipient - + Password protect Aizsargāt ar paroli - + Set expiration date Uzstādīt beigu termiņu - + Delete link - + Add another link Pievienot citu saiti @@ -4189,27 +4089,27 @@ - + Confirm Link Share Deletion Apstiprināt koplietošanas saites dzēšanu - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Dzēst - + Cancel Atcelt - + Public link @@ -4222,12 +4122,12 @@ - + Search globally - + Copy link @@ -4237,22 +4137,22 @@ - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you @@ -4290,42 +4190,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4342,23 +4242,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you - - + + Share options @@ -4374,73 +4274,73 @@ - + Copy private link to clipboard Kopēt privāto saiti starpliktuvē - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit Rediģēt - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Dzēst @@ -4584,12 +4484,12 @@ - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: @@ -4599,62 +4499,62 @@ - + with Certificate %1 - - - + + + &lt;not specified&gt; - - + + Organization: %1 - - + + Unit: %1 - - + + Country: %1 - + Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 - + Expiration Date: %1 - + Issuer: %1 @@ -4747,33 +4647,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4850,13 +4750,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4880,7 +4780,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4895,7 +4795,7 @@ - + Unable to read the blacklist from the local database @@ -4910,17 +4810,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal Nevar atvērt sinhronizācijas žurnālu @@ -4930,22 +4830,22 @@ - - File name contains at least one invalid character + + Synchronization will resume shortly. - - Synchronization will resume shortly. + + File name contains at least one invalid character - + 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. @@ -5014,49 +4914,49 @@ OCC::Systray - + Add account Pievienot kontu - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Iestatījumi - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5064,24 +4964,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Šo izlaidumu piegādāja %1</p> @@ -5089,22 +4989,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5112,32 +5012,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5145,22 +5045,22 @@ OCC::UserModel - + 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 - + Cancel Atcelt @@ -5265,30 +5165,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5810,52 +5692,52 @@ - + %n day ago %n dienu atpakaļ%n dienu atpakaļ%n dienu atpakaļ - + %n days ago %n dienas atpakaļ%n dienas atpakaļ%n dienas atpakaļ - + in the future nākotnē - + %n hour ago %n stundu atpakaļ%n stundu atpakaļ%n stundu atpakaļ - + %n hours ago %n stundas atpakaļ%n stundas atpakaļ%n stundas atpakaļ - + now šobrīd - + Less than a minute ago Mazāk kā minūti atpakaļ - + %n minute ago %n minūti atpakaļ%n minūti atpakaļ%n minūti atpakaļ - + %n minutes ago %n minūtes atpakaļ%n minūtes atpakaļ%n minūtes atpakaļ - + Some time ago Kādu laiku atpakaļ @@ -5889,7 +5771,7 @@ SyncJournalDb - + Failed to connect database. @@ -5897,7 +5779,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5934,32 +5816,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions Konta darbības @@ -5969,24 +5851,24 @@ - + Set status - - + + Log out Iziet - - + + Log in Pieteikties - + Remove account Noņemt kontu @@ -6047,57 +5929,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n gads(i)%n gads(i)%n gads(i) - + %n month(s) %n mēnesis(ši)%n mēnesis(ši)%n mēnesis(ši) - + %n day(s) %n diena(s)%n diena(s)%n diena(s) - + %n hour(s) %n stunda(s)%n stunda(s)%n stunda(s) - + %n minute(s) %n minūte(s)%n minūte(s)%n minūte(s) - + %n second(s) %n sekunde(s)%n sekunde(s)%n sekunde(s) - + %1 %2 %1 %2 @@ -6105,7 +5987,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Kontrolsummas galvene ir nepareiza. @@ -6138,64 +6020,64 @@ Window - + Nextcloud desktop main dialog - + Current account Pašreizējais konts - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Pievienot kontu - + Add new account - + Settings Iestatījumi - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6205,32 +6087,32 @@ - + Account switcher and settings menu - + Connected Savienojies - + Disconnected Atvienojies - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Vairāk lietotnes @@ -6240,7 +6122,7 @@ - + Open %1 in browser Atvērt %1 pārlūkā @@ -6260,7 +6142,7 @@ - + Unified search results list @@ -6271,7 +6153,7 @@ - + %1 - File activity @@ -6279,7 +6161,7 @@ main.cpp - + System Tray not available Sistēmas tekne nav pieejama @@ -6289,7 +6171,7 @@ %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as 'trayer' and try again. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6297,7 +6179,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Būvēta no Git revīzijas <a href="%1">%2</a> uz %3, %4 izmantojot Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_mk.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_mk.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_mk.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_mk.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Истече времето за поврзување - + Unknown error: network reply was deleted Непозната грешка: одговорот од мрежата е избришан - + Server replied "%1 %2" to "%3 %4" Серверот одговори "%1 %2" до "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Откажи @@ -494,52 +494,52 @@ Отстрани папка од синхронизација - + Disable virtual file support … Оневозможи поддршка за виртуални датотеки ... - + Enable virtual file support %1 … Овозможи поддршка за виртуални датотеки ... - + (experimental) (експериментално) - + Folder creation failed Неуспешно креирање на папка - + <p>Could not create local folder <i>%1</i>.</p> <p>Неможе да се креира локална папка <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Потврди отстранување на папка за синхронизација - + <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> - + Remove Folder Sync Connection Отстрани папка од синхронизација - + Disable virtual file support? Дали сакате да ја оневозможите поддршката за виртуални датотеки? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support Оневозможи поддршка - + Sync Running Синхронизацијата е стартувана - + The syncing operation is running.<br/>Do you want to terminate it? Синхронизацијата е стартувана.<br/>Дали сакате да ја прекинете? - + %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. Моментално нема информации за искористениот простор. - + %1 in use Искористено %1 @@ -598,87 +598,87 @@ Најава - + %1 as %2 - + The server version %1 is 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. - + Server configuration error: %1 at %2. Грешка во конфигурацијата на серверот: %1 во %2. - + No %1 connection configured. Нема конфигурирано %1 врска. - + 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 Отстрани врска @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Одјавен - + Disconnected Исклучен - + Connected Поврзан - + Service unavailable Сервисот е недостапен - + Maintenance mode Мод за одржување - + Network error Грешка во мрежата - + Configuration error Грешка во конфигурацијата - + Asking Credentials Побарување на акредитиви - + Unknown account state Сметка со непознат статус @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. За повеќе активности отворете ја апликацијата со активности. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Продолжување би значело <b>бришење на ова подесување</b>. - + Continuing will mean <b>ignoring these settings</b>. Продолжување би значело <b>игнорирање на ова подесување</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit Излези - + Continue Продолжи - + Error accessing the configuration file Грешка при пристапот до конфигурациската датотека - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Настана грешка при пристапувањето до конфигурациската датотека на %1. Бидете сигурни дека вашата сметка може да пристапи до конфигурациската датотека. - + Quit %1 Излези %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Грешка при запишување на метаподатоци во базата со податоци @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1100,19 +1050,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1120,8 +1057,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1129,27 +1066,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Грешка при отварање на папката %1 - + Directory not accessible on client, permission denied Папката не е достапна за клиентот, забранет пристап - + Directory not found: %1 Папката не е пронајдена: %1 - + Filename encoding is not valid - + Error while reading directory %1 Грешка при читање на папката %1 @@ -1172,7 +1109,7 @@ - + Error returned from the server: <em>%1</em> Грешка испратена од серверот: <em>%1</em> @@ -1184,24 +1121,24 @@ - + 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 Одговорот од серверот не ги содржи сите очекувани полиња - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1362,41 +1299,41 @@ Активности од синхронизација - + 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. Одете во параметрите и изберете ја ако сакате да ја преземете. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Папката %1 е креирана но предходно беше исклучена од синхронизација. Податоците во неа нема да бидат синхронизирани. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Датотеката %1 е креирана но предходно беше исклучена од синхронизација. Таа нема да биде синхронизирана. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1405,6 +1342,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1457,22 +1401,7 @@ Зачувај ги локалните датотеки како конфликтни - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1480,24 +1409,32 @@ - + 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 Отстрани ги сите датотеки - + + 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 restore 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. + + + + Keep files Задржи ги датотеките @@ -1533,7 +1470,7 @@ OCC::FolderMan - + Could not reset folder state @@ -1543,37 +1480,37 @@ - + 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) (backup %1) - + Undefined State. Недефинирана состојба. - + Waiting to start syncing. Чекање за почеток на синхронизација. - + Preparing for sync. Подготовка за синхронизација. - + Sync is running. Синхронизацијата е стартувана. @@ -1583,67 +1520,67 @@ Синхронизацијата е успешна, нерешени конфликти. - + Sync finished with unresolved conflicts. Синхронизацијата заврши во нерешени конфликти. - + Last Sync was successful. Последната синхронизација е успешна. - + Setup Error. - + User Abort. Откажано од корисник. - + Sync is paused. Синхронизацијата е паузирана. - + %1 (Sync is paused) %1 (Синхронизацијата е паузирана) - + No valid folder selected! Не е избрана папка! - + The selected path does not exist! Избраната патека не постои! - + The selected path is not a folder! Избраната патека не е папка! - + You have no permission to write to the selected 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 веќе е во папка која се синхронизира. Изберете друга папка! - + There is already a sync from the server to this local folder. Please pick another local folder! Веќе постои синхронизација од серверот до оваа локална папка. Изберете друга локална папка! @@ -1855,12 +1792,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Додади папка за синхронизација - + Add Sync Connection Додади синхронизација @@ -1901,42 +1838,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Веќе ја имате синхронизирана <i>%1</i>, која се наоѓа во папката <i>%2</i>. @@ -1944,24 +1881,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) (експериментално) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder Не се достапни виртуелни датотеки за избраната папка @@ -1982,27 +1919,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout Времето за поврзување истече @@ -2122,22 +2059,22 @@ Креирај Debug архива ... - + Server notifications that require attention. Известувања од серверот за кој е потребно внимание. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? Промена на каналот за ажурирање? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2145,32 +2082,32 @@ Имајте во предвид дека ова само избира врзии што ќе се преземат од базенот и дека нема враќање назад: Значи, враќањето од бета-каналот до стабилниот канал обично не може да се направи веднаш и треба да се чека стабилна верзија која е понова од тековно инсталираната бета-верзија. - + Change update channel Промена на каналот за ажурирање - + Cancel Откажи - + Create Debug Archive Креирај Debug архива - + Zip Archives Zip Архиви - + Debug Archive Created Креирана Debug архива - + Debug archive is created at %1 Debug архива креирана на %1 @@ -2178,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Потребна е лозинка за споделувањето - + Please enter a password for your link share: Внесете лозинка за да линкот кој го споделувате: - + Sharing error Грешка при споделување - + Could not retrieve or create the public link share. Error: %1 @@ -2513,7 +2450,7 @@ OCC::Logger - + Error Грешка @@ -2523,7 +2460,7 @@ - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2531,33 +2468,33 @@ 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 Превземи ажурирање - + Update Failed Неуспешно ажурирање @@ -2572,17 +2509,17 @@ - + Ask again later Прашај ме покасно - + Restart and update Рестартирај и ажурирај - + Update manually Рачно ажурирање @@ -2693,7 +2630,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Грешка испратена од серверот: <em>%1</em> @@ -2703,32 +2640,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Грешка при најавување</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> @@ -2798,12 +2735,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Неможе да се провери за ажурирање. @@ -2813,27 +2750,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 Проверка за ажурирање @@ -2861,14 +2798,14 @@ Поврзи … - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) (експериментално) @@ -2893,49 +2830,49 @@ Слободен простор: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 слободен простор - + Virtual files are not available for the selected folder Не се достапни виртуелни датотеки за избраната папка - + Local Sync Folder Локална синхронизирана папка - - + + (%1) (%1) - + There isn't enough free space in the local folder! Нема доволно простор во локалната папка! @@ -3005,14 +2942,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3078,7 +3007,7 @@ &Следно > - + Server address does not seem to be valid @@ -3088,7 +3017,7 @@ Невалидна URL - + Could not load certificate. Maybe wrong password? Неможе да се вчита сертификатот. Можеби погрешна лозинка? @@ -3186,54 +3115,54 @@ Креирање папка: %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. - + Successfully connected to %1! Успешно поврзување со %1! - + Connection to %1 could not be established. Please check again. Врската со %1 неможе да се воспостави. Пробајте покасно. - + Folder rename failed Неуспешно преименување на папка @@ -3243,12 +3172,12 @@ - + Cannot 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> @@ -3256,7 +3185,7 @@ OCC::OwncloudWizard - + Add %1 account Додади %1 сметка @@ -3266,17 +3195,17 @@ %1 параматри за поврзување - + Skip folders configuration Прескокни конфигурација на папки - + Enable experimental feature? Овозможи експерименталена можност? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3287,12 +3216,12 @@ - + Enable experimental placeholder mode - + Stay safe Бидете безбедени @@ -3300,7 +3229,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3318,17 +3247,17 @@ - + 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. @@ -3343,57 +3272,57 @@ - + File name contains at least one invalid character Името на датотеката соджи невалиден карактер - + The file name is a reserved name on this file system. Ова име на датотека е резервирано име на системот. - + Filename contains trailing spaces. - + Filename is too long. Името на датотеката е премногу долго. - + File/Folder is ignored because it's hidden. Датотека/Папка е игнорирана бидејќи е сокриена. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Конфликт: Верзијата од серверот е преземена, локалната верзија е преименувана и не е прикачена на серверот. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. Името на датотеката е на црна листа на серверот. - + File has extension reserved for virtual files. - + size големина @@ -3403,72 +3332,62 @@ дозволи - - server reported no %1 - - - - - permission - - - - + file id id на датотека - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder Не е дозволено бидејќи немате дозвола да додавате датотеки во оваа папка - + Not allowed to upload this file because it is read-only on the server, restoring Не е дозволено да ја прикачите оваа датотека бидејќи е само за читање на серверот, враќање - + Moved to invalid target, restoring - + Not allowed to remove, restoring Не е дозволено бришење, враќање - + Error while reading the database Грешка при вчитување на податоци од датабазата @@ -3478,7 +3397,7 @@ Серверот одговори со грешка при читање на папката '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 @@ -3491,17 +3410,12 @@ Грешка при запишување на метаподатоци во базата со податоци - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3514,44 +3428,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3561,12 +3475,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3576,18 +3490,12 @@ Грешка при запишување на метаподатоци во базата со податоци - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3595,12 +3503,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3674,12 +3582,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3690,12 +3598,12 @@ Грешка при запишување на метаподатоци во базата со податоци - + Failed to rename file - + Error setting pin state @@ -3729,12 +3637,12 @@ Грешка при запишување на метаподатоци во базата со податоци - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3752,22 +3660,22 @@ Серверот одговори со погрешен HTTP код. Очевуван одговор 201, но серверот одговори со "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Грешка при запишување на метаподатоци во базата со податоци @@ -3775,46 +3683,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 Избришана датотека (започнува прикачување) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Локална датотека е променета додека траеше синхронизацијата. - + Failed to unlock encrypted folder. @@ -3824,12 +3724,12 @@ Грешка при запишување на метаподатоци во базата со податоци - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3837,32 +3737,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Локална датотека е избришана додека траеше синхронизацијата. - + Local file changed during sync. Локална датотека е променета додека траеше синхронизацијата. - + Poll URL missing - + Unexpected return code from server (%1) Неочекуван повратен код од серверот (%1) - + Missing File ID from server Недостасува ID на датотека од серверот - + Missing ETag from server Недостасува ETag од серверот @@ -3870,22 +3770,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3963,7 +3863,7 @@ OCC::ServerNotificationHandler - + Dismiss Отфрли @@ -4133,17 +4033,17 @@ Заштити со лозинка - + Allow editing Овозможи уредување - + View only - + Allow upload and editing Дозволи прикачување и уредување @@ -4153,7 +4053,7 @@ Рок на траење - + File drop (upload only) Испуши датотека (само за прикачување) @@ -4163,32 +4063,32 @@ Не споделувај - + Link name - + Note to recipient Белешка до примачот - + Password protect Заштити со лозинка - + Set expiration date Постави рок на траење - + Delete link - + Add another link Додади линк @@ -4198,27 +4098,27 @@ Избриши го линкот за споделување - + Confirm Link Share Deletion Потврди бришење на линк за споделување - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Дали сте сигурни дека сакате да го отстраните јавниот линк за споделување <i>%1</i>?</p><p>Забелешка: Оваа акција неможе да се врати.</p> - + Delete Избриши - + Cancel Откажи - + Public link Јавен линк @@ -4231,12 +4131,12 @@ Сподели со корисници или групи ... - + Search globally Пребарај глобално - + Copy link Копирај линк @@ -4246,22 +4146,22 @@ Нема резултати за '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Споделив нешто со вас @@ -4299,42 +4199,42 @@ - + Can reshare Може да се пресподели - + Note to recipient - + Set expiration date - + Unshare Не споделувај - + Can create Може да креира - + Can change Може да се промени - + Can delete Може да брише - + Password protect @@ -4351,23 +4251,23 @@ OCC::SocketApi - + Context menu share - + Select new location … Избери нова локација ... - + I shared something with you Споделив нешто со вас - - + + Share options Опции за споделување @@ -4383,73 +4283,73 @@ - + Copy private link to clipboard Копирај приватен линк во клипборд - + Send private link by email … Испрати приватен линк преку е-пошта ... - + Resharing this file is not allowed Повторно споделување на оваа датотека не е дозволено - + Resharing this folder is not allowed Повторно споделување на оваа папка не е дозволено - - + + Copy public link Копирај јавен линк - + Copy internal link Копирај внатрешен линк - + Edit Уреди - + Open in browser Отвори во прелистувач - + Resolve conflict … Реши конфликт ... - + Move and rename … Премести и преименувај ... - + Move, rename and upload … Премести, преименувај и прикачи ... - + Delete local changes Избриши ги локалните измени - + Move and upload … Премести и прикачи ... - + Delete Избриши @@ -4595,12 +4495,12 @@ Девери му се на овој сертификат - + Untrusted Certificate Недоверлив сертификат - + Cannot connect securely to <i>%1</i>: Неможе да се обезбеди безбедна врска до <i>%1</i>: @@ -4610,62 +4510,62 @@ - + with Certificate %1 со сертификат %1 - - - + + + &lt;not specified&gt; &lt;не е наведено&gt; - - + + Organization: %1 Организација: %1 - - + + Unit: %1 Единица: %1 - - + + Country: %1 Држава: %1 - + Fingerprint (SHA1): <tt>%1</tt> Отпечатоци (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Отпечатоци (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Отпечатоци (SHA-512): <tt>%1</tt> - + Effective Date: %1 Ефективен датум: %1 - + Expiration Date: %1 Датум на истекување: %1 - + Issuer: %1 Издавач: %1 @@ -4758,33 +4658,33 @@ Настана внатрешна грешка број %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (прескокнато поради предходна грешка, повторен обид за %2) - + Could not update file: %1 Неможе да се ажурира датотеката: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Неразрешен конфликт. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Достапно е %1, потребно е %2 за почеток - + Aborted Откажано @@ -4861,16 +4761,16 @@ Имиња на датотеки кој завршуваат со карактер за разделување не се поддржани на овој систем. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + File names containing the character '%1' are not supported on this file system. Имиња на датотеки кој го содржат карактерот '%1' не се поддржани на овој систем. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - - The file name is a reserved name on this file system. Ова име на датотека е резервирано име на системот. @@ -4891,7 +4791,7 @@ Датотека/Папка е игнорирана бидејќи е сокриена. - + Using virtual files with suffix, but suffix is not set @@ -4906,7 +4806,7 @@ - + Unable to read the blacklist from the local database @@ -4921,17 +4821,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal @@ -4941,22 +4841,22 @@ Невалидни карактери, ве молиме преименувајте "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Името на датотеката соджи невалиден карактер - - Synchronization will resume shortly. - - - - + 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. @@ -5025,49 +4925,49 @@ OCC::Systray - + Add account Додади сметка - + Open main dialog Отвори во прозорец + - Pause sync Паузирај синхронизација - - + + Resume sync Продолжи синхронизација - + Settings Параметри - + Exit %1 Излез %1 - + Pause sync for all Паузирај ја синхронизацијата за сите - + Resume sync for all Продолжи ја синхронизацијата за сите - + %1: %2 %1: %2 @@ -5075,24 +4975,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Клиент за компјутер</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Верзија %1. За повеќе информации кликнете <a href='%2'>тука</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Ова издание е обезбедено од %1</p> @@ -5100,22 +5000,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5123,32 +5023,32 @@ OCC::User - + Retry all uploads Повтори ги сите прикачувања - + Synced %1 Синхронизирано %1 - + You renamed %1 Преименувавте %1 - + You deleted %1 Избришавте %1 - + You created %1 Креиравте %1 - + You changed %1 Изменивте %1 @@ -5156,22 +5056,22 @@ OCC::UserModel - + 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 Отстрани врска - + Cancel Откажи @@ -5276,30 +5176,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5821,52 +5703,52 @@ Нова папка - + %n day ago пред 1 денпред %n дена - + %n days ago пред 1 денпред %n дена - + in the future во иднина - + %n hour ago пред 1 часпред %n часа - + %n hours ago пред 1 часпред %n часа - + now сега - + Less than a minute ago Пред една минута - + %n minute ago пред 1 минутапред %n минути - + %n minutes ago пред една минутапред %n минути - + Some time ago Пред некое време @@ -5900,7 +5782,7 @@ SyncJournalDb - + Failed to connect database. @@ -5908,7 +5790,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5945,21 +5827,11 @@ - + Switch to account Промени сметка - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Сметката е поврзана @@ -5970,7 +5842,17 @@ Сметката не е поврзана - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions @@ -5980,24 +5862,24 @@ Отстрани сметка - + Set status - - + + Log out Одјава - - + + Log in Најава - + Remove account Отстрани сметка @@ -6058,57 +5940,57 @@ 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) 1 минута%n минути - + %n second(s) %n секунда%n секунди - + %1 %2 %1 %2 @@ -6116,7 +5998,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6149,64 +6031,64 @@ Window - + Nextcloud desktop main dialog - + Current account Моментална сметка - - + + Resume sync for all Продолжи ја синхронизацијата за сите - - + + Pause sync for all Паузирај ја синхронизацијата за сите - + Set user status - + Add account Додади сметка - + Add new account Додади нова сметка - + Settings Параметри - + Exit Излез - + Current user avatar Аватар на оваа сметка - + Current user status is online - + Current user status is do not disturb @@ -6216,32 +6098,32 @@ Сподели %1 - + Account switcher and settings menu - + Connected Поврзан - + Disconnected Исклучен - + Open local folder of current account Отвори ја локалната папка на оваа сметка - + Open Nextcloud Talk in browser Отвори разговор во прелистувач - + More apps Повеќе апликации @@ -6251,7 +6133,7 @@ Мени со апликации - + Open %1 in browser Отвори %1 во прелистувач @@ -6271,7 +6153,7 @@ - + Unified search results list @@ -6282,7 +6164,7 @@ Прикажи повеќе акции - + %1 - File activity @@ -6290,7 +6172,7 @@ main.cpp - + System Tray not available @@ -6300,7 +6182,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6308,7 +6190,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_nb_NO.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_nb_NO.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_nb_NO.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_nb_NO.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,47 +1,47 @@ - + ActivityActionButton Activity action button - Aktivitetsaksjoner + ActivityItem - + Open %1 locally - Åpne %1 lokalt + - + Open share dialog - Åpne delingsdialog + - + Share %1 - Del %1 + - - + + Show more actions - Vis flere handlinger + View activity - Vis aktivitet + ActivityList - + Activity list - Aktivitetsliste + @@ -54,7 +54,7 @@ Checking for changes in "%1" - Ser etter endringer i "%1" + @@ -144,7 +144,7 @@ Could not move "%1" to "%2" - Kan ikke flytte "%1" til "%2" + @@ -160,17 +160,17 @@ Error removing "%1": %2 - Feil ved fjerning av "%1": %2 + Error removing '%1': %2 - Feil ved fjerning av "%1": %2 + Could not remove folder "%1" - Kan ikke slette katalog "%1" + @@ -198,7 +198,7 @@ Logo - Logo + @@ -208,7 +208,7 @@ Switch to your browser to connect your account - Bytt til nettleseren din for å koble til kontoen din + @@ -226,7 +226,7 @@ &Choose … - &Velg + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Forbindelsen fikk tidsavbrudd - + 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" @@ -275,25 +275,25 @@ Wrong HTTP code returned by server. Expected 204, but received "%1 %2". - Feil HTTP-kode returnert av serveren. Forventet 204, men mottok "%1 %2". + "%1 Failed to unlock encrypted folder %2". - "%1 feilet med å låse opp kryptert katalog %2". + OCC::AccountManager - + End to end encryption mnemonic Ende-til-ende -kryptering mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). - For å beskytte din kryptografiske identitet, krypterer vi den med en mnemonic med 12 ordbok ord. Vennligst noter disse ned og oppbevar dem trygt. De vil være nødvendige for å legge til andre enheter på kontoen din (som mobiltelefonen eller den bærbare datamaskinen). + @@ -305,9 +305,9 @@ - - - + + + Cancel Avbryt @@ -344,22 +344,22 @@ End-to-End Encryption with Virtual Files - Ende-til-ende-kryptering med virtuelle filer + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are End-to-End encrypted. To get the best experience with Virtual Files and End-to-End Encryption, make sure the encrypted folder is marked with "Make always available locally". - Du ser ut til å ha funksjonen virtuelle filer aktivert på denne mappen. For øyeblikket er det ikke mulig å implisitt laste ned virtuelle filer som er ende-til-ende-kryptert. For å få den beste opplevelsen med virtuelle filer og ende-til-ende-kryptering, sørg for at den krypterte mappen er merket med "Gjør alltid tilgjengelig lokalt". + Don't encrypt folder - Ikke krypter katalog + Encrypt folder - Krypter katalog + @@ -370,7 +370,7 @@ Display mnemonic - Vis mnemonic + @@ -416,24 +416,23 @@ You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are End-to-End encrypted. To get the best experience with Virtual Files and End-to-End Encryption, make sure the encrypted folder is marked with "Make always available locally". - Du ser ut til å ha funksjonen virtuelle filer aktivert på denne mappen. For øyeblikket er det ikke mulig å implisitt laste ned virtuelle filer som er ende-til-ende-kryptert. For å få den beste opplevelsen med virtuelle filer og ende-til-ende-kryptering, sørg for at den krypterte mappen er merket med "Gjør alltid tilgjengelig lokalt". + You cannot encrypt a folder with contents, please remove the files. Wait for the new sync, then encrypt it. - Du kan ikke kryptere en mappe med innhold, vennligst fjern filene. -Vent på den nye synkroniseringen, og krypter den deretter. + Encryption failed - Kryptering feilet. + Could not encrypt folder because the folder does not exist anymore - Kunne ikke kryptere mappen fordi mappen ikke eksisterer lengre + @@ -456,13 +455,13 @@ Create new folder - Ny katalog + Availability - Tilgjengelighet + @@ -495,95 +494,91 @@ Fjern tilkobling for synkronisering av mappe - + Disable virtual file support … - Deaktiver støtte for virtuelle filer + - + Enable virtual file support %1 … - Aktiver støtte for virtuelle filer %1 … + - + (experimental) - (eksperimentell) + - + Folder creation failed Oppretting av mappe feilet - + <p>Could not create local folder <i>%1</i>.</p> - <p>Kunne ikke opprette lokal katalog <i>%1</i>.</p> + - + Confirm Folder Sync Connection Removal Bekreft fjerning av tilkobling for synkronisering av mappe - + <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> - + Remove Folder Sync Connection Fjern tilkobling for mappe-synkronisering - + Disable virtual file support? - Deaktiver støtte for virtuelle filer? + - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. This action will abort any currently running synchronization. - Denne handlingen vil deaktivere støtte for virtuelle filer. Som en konsekvens vil innholdet i mapper som for øyeblikket er merket som "bare tilgjengelig på nettet" bli lastet ned. - -Den eneste fordelen med å deaktivere støtte for virtuelle filer er at den selektive synkroniseringsfunksjonen blir tilgjengelig igjen. - -Denne handlingen vil avbryte enhver synkronisering som kjører. + - + Disable support - Deaktiver support + - + Sync Running Synkroniserer... - + The syncing operation is running.<br/>Do you want to terminate it? Synkronisering kjører.<br/>Vil du avbryte den? - + %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. - + %1 in use %1 i bruk @@ -603,87 +598,87 @@ Logg inn - + %1 as %2 - %1 som %2 + - + The server version %1 is unsupported! Proceed at your own risk. Tjenerversjon %1 er utdatert og ikke støttet! 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. - Innhenting av autorisasjon fra nettleseren. <a href='%1'>Klikk her</a> for å åpne nettleseren på nytt.  + - + Connecting to %1 … - Kobler til %1 … + - + No connection to %1 at %2. Ingen tilkobling til %1 på %2. - + Server configuration error: %1 at %2. - Server konfigurasjons-feil: %1 ved %2. + - + No %1 connection configured. Ingen %1-forbindelse konfigurert. - + 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 @@ -691,47 +686,47 @@ OCC::AccountState - + Signed out Logget ut - + Disconnected Frakoblet - + Connected Tilkoblet - + Service unavailable Tjeneste utilgjengelig - + Maintenance mode Vedlikeholdsmodus - + Network error Nettverksfeil - + Configuration error Konfigurasjonsfeil - + Asking Credentials - Spør etter legitimasjon + - + Unknown account state Ukjent kontotilstand @@ -739,19 +734,19 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - Filer fra ignoreringslisten så vel som symbolske lenker synkroniseres ikke. + - + For more activities please open the Activity app. - For flere aktiviteter, åpne Aktivitetsappen. + Files from the ignore list as well as symbolic links are not synced. This includes: - Filer fra ignorer liste og symbolske lenker blir ikke synkronisert. Dette inkluderer: + @@ -769,7 +764,7 @@ Certificate & Key (pkcs12): - Sertifikat & nøkkel (pkcs12): + @@ -779,7 +774,7 @@ Browse … - Bla... + @@ -789,7 +784,7 @@ An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - En kryptert pkcs12 pakke er sterkt anbefalt for å lagre en kopi i konfigurasjons fil. + @@ -805,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - Å fortsette betyr <b>slette disse innstillingene</b>. + - + Continuing will mean <b>ignoring these settings</b>. - Å fortsette betyr <b>ignorere disse innstillingene</b>. + - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - Enkelte innstillinger er konfigurert i nyere versjon av denne klienten og bruker funksjoner som ikke er tilgjengelig i denne versjonen.<br><br>%1<br><br>Konfigurasjonsfil er allerede sikkerhetskopiert til <i>%2</i>. + - + Quit Avslutt - + Continue Fortsett - + Error accessing the configuration file Feil ved lesing av konfigurasjonsfil - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 Avslutt %1 @@ -855,7 +850,7 @@ Enter username and password for "%1" at %2. - Oppgi brukernavn og passord for "%1" ved %2. + @@ -874,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Fil fjernet (start opplasting) %1 - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - Lokal fil er endret samtidig med synkronisering. - - - - Error updating metadata: %1 - Feil ved oppdatering av metadata: %1 - - - - The file %1 is currently in use - Filen %1 er i bruk - - - - The local file was removed during sync. -  Lokal fil er slettet samtidig med synkronisering. - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -934,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -965,7 +910,7 @@ Local version - Lokal versjon + @@ -983,12 +928,12 @@ 0 byte - 0 byte + <a href="%1">Open local version</a> - <a href="%1">Åpne lokal versjon</a> + @@ -998,38 +943,38 @@ <a href="%1">Open server version</a> - <a href="%1">Åpne server versjon</a> + Keep selected version - Behold valgt versjon + Open local version - Åpne lokal versjon + Open server version - Åpne server versjon + Keep both versions - Behold begge versjoner + Keep local version - Behold lokal versjon + Keep server version - Behold server versjon + @@ -1047,7 +992,7 @@ Confirm deletion - Bekreft sletting + @@ -1081,7 +1026,7 @@ Timeout - Tidsavbrudd + @@ -1105,19 +1050,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1057,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1134,27 +1066,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - Katalog ikke funnet: %1 + - + Filename encoding is not valid - Filnavn koding er ikke gyldig + - + Error while reading directory %1 Kunne ikke lese katalogen %1 @@ -1177,9 +1109,9 @@ - + Error returned from the server: <em>%1</em> - Feil i retur fra server: <em>%1</em> + @@ -1189,24 +1121,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1367,40 +1299,40 @@ 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1409,6 +1341,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1463,22 +1402,7 @@ Behold lokale filer som konflikt - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1486,24 +1410,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1539,7 +1471,7 @@ OCC::FolderMan - + Could not reset folder state Klarte ikke å tilbakestille mappetilstand @@ -1549,37 +1481,37 @@ En gammel synkroniseringsjournal '%1' ble funnet men kunne ikke fjernes. Pass på at ingen applikasjoner bruker den. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (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. @@ -1589,67 +1521,67 @@ Synkronisering var vellykket, men det finnes uløste konflikter. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Siste synkronisering var vellykket. - + 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 does not exist! - + 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 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! - + 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! @@ -1861,12 +1793,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Legg til mappe-synkronisering - + Add Sync Connection Legg til tilkobling for synkronisering @@ -1907,42 +1839,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1950,24 +1882,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1988,27 +1920,27 @@ 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. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Serveren returnerte feil content-range - + Connection Timeout Tidsavbrudd ved tilkobling @@ -2128,54 +2060,54 @@ - + Server notifications that require attention. Servervarsler som krever oppmerksomhet. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2183,22 +2115,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Delingsfeil - + Could not retrieve or create the public link share. Error: %1 @@ -2516,7 +2448,7 @@ OCC::Logger - + Error Feil @@ -2526,7 +2458,7 @@ <nobr>Fil '%1'<br/>kan ikke åpnes for skriving.<br/><br/>Loggen kan <b>ikke</b> lagres!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2534,33 +2466,33 @@ 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 - + Update Failed @@ -2575,17 +2507,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2620,7 +2552,7 @@ Proxy server requires authentication - Proxy-server krever autentisering + Proxy-serveren krever pålogging @@ -2670,7 +2602,7 @@ Hostname of proxy server - Vertsnavn på proxy-server + Servernavnet til proxy-serveren @@ -2696,7 +2628,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> @@ -2706,32 +2638,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Innloggingsfeil</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> @@ -2801,12 +2733,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Klarte ikke å se etter nye oppdateringer. @@ -2816,27 +2748,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update 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 @@ -2864,14 +2796,14 @@ Koble til … - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2896,49 +2828,49 @@ Ledig plass: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Lokal synkroniseringsmappe - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3008,14 +2940,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3080,7 +3004,7 @@ &Neste > - + Server address does not seem to be valid @@ -3090,7 +3014,7 @@ Ugyldig addresse - + Could not load certificate. Maybe wrong password? Sertifikatet kunne ikke lastes. Kanskje feil passord? @@ -3188,54 +3112,54 @@ oppretter mappe på Nextcloud: %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 @@ -3245,12 +3169,12 @@ 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. - + Cannot 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>Oppretting av lokal synkroniseringsmappe %1 vellykket!</b></font> @@ -3258,7 +3182,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3268,17 +3192,17 @@ %1 Veiviser for tilkobling - + Skip folders configuration Hopp over mappekonfigurasjon - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3289,12 +3213,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3302,7 +3226,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Ugyldig JSON-svar fra forespørsels-URL @@ -3320,17 +3244,17 @@ - + 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. @@ -3345,57 +3269,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3405,72 +3329,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3480,7 +3394,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3493,17 +3407,12 @@ Feil ved skriving av metadata til databasen - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3516,44 +3425,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Filen er endret siden den ble oppdaget - - + + File %1 cannot be downloaded because of a local file name clash! - + 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 local disk space below the limit Nedlastingen ville redusert ledig lokal diskplass til under grensen - + 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. @@ -3563,12 +3472,12 @@ - + The downloaded file is empty, but the server said it should have been %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. @@ -3578,18 +3487,12 @@ Feil ved skriving av metadata til databasen - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3597,12 +3500,12 @@ 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 @@ -3676,12 +3579,12 @@ Fil %1 kan ikke omdøpes til %2 på grunn av lokalt sammenfall av filnavn - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3692,12 +3595,12 @@ Feil ved skriving av metadata til databasen - + Failed to rename file - + Error setting pin state @@ -3731,12 +3634,12 @@ Feil ved skriving av metadata til databasen - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3754,22 +3657,22 @@ Feil HTTP-kode returnert fra server. Ventet 201, men mottok "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -3777,46 +3680,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + 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. - - + + Upload of %1 exceeds the quota for the folder Opplastingen av %1 overstiger kvoten for mappen - + File Removed (start upload) %1 Fil fjernet (start opplasting) %1 - + 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. - + Failed to unlock encrypted folder. @@ -3826,12 +3721,12 @@ Feil ved skriving av metadata til databasen - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3839,32 +3734,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Den lokale filen ble fjernet under synkronisering. - + Local file changed during sync. Lokal fil endret under synkronisering. - + Poll URL missing - + 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 @@ -3872,22 +3767,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3912,7 +3807,7 @@ The proxy server needs a username and password. - Proxy-server trenger brukernavn og passord. + Proxy-serveren trenger et brukernavn og et passord. @@ -3965,7 +3860,7 @@ OCC::ServerNotificationHandler - + Dismiss Forkast @@ -4135,17 +4030,17 @@ Passordbeskytt - + Allow editing Tillat redigering - + View only - + Allow upload and editing Tillatt opplasting og redigering @@ -4155,7 +4050,7 @@ Utløpsdato - + File drop (upload only) Filkasse (kun opplasting) @@ -4165,32 +4060,32 @@ Opphev deling - + Link name - + Note to recipient Melding til mottaker - + Password protect Passordbeskyttelse - + Set expiration date Sett utløpsdato - + Delete link - + Add another link Legg til en ny lenke @@ -4200,27 +4095,27 @@ Slett lenke til deling - + Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Slett - + Cancel Avbryt - + Public link Offentlig lenke @@ -4233,12 +4128,12 @@ - + Search globally - + Copy link Kopier lenke @@ -4248,22 +4143,22 @@ Ingen resultater for '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Jeg delte noe med deg @@ -4301,42 +4196,42 @@ - + Can reshare Kan dele videre - + Note to recipient - + Set expiration date - + Unshare Avslutt deling - + Can create kan opprette - + Can change Kan endre - + Can delete Kan slette - + Password protect @@ -4353,23 +4248,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Jeg delte noe med deg - - + + Share options Alternativer for deling @@ -4385,73 +4280,73 @@ - + Copy private link to clipboard Kopier privat lenke til utklippstavlen - + Send private link by email … - + Resharing this file is not allowed Videre deling av denne filen er ikke tillatt - + Resharing this folder is not allowed - - + + Copy public link Kopier offentlig lenke - + Copy internal link Kopier intern lenke - + Edit Rediger - + Open in browser Åpne i nettleser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Slett @@ -4597,12 +4492,12 @@ 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>: @@ -4612,62 +4507,62 @@ - + 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 (SHA1): <tt>%1</tt> Fingeravtrykk (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Gyldig fra dato: %1 - + Expiration Date: %1 Utløpsdato: %1 - + Issuer: %1 Utsteder: %1 @@ -4760,33 +4655,33 @@ En intern feil nummer %1 oppstod. - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Uløst konflikt - + 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 - + Aborted @@ -4863,16 +4758,16 @@ Filnavn som slutter med punktum er ikke tillatt på dette filsystemet + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + File names containing the character '%1' are not supported on this file system. Filnavn som inneholder '%1' er ikke tillatt på dette filsystemet - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - - The file name is a reserved name on this file system. Filnavnet er et reservert navn på dette filsystemet. @@ -4893,7 +4788,7 @@ Filen/mappen ignoreres fordi den er skjult. - + Using virtual files with suffix, but suffix is not set @@ -4908,7 +4803,7 @@ - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen @@ -4923,17 +4818,17 @@ Stat feilet. + + Unable to read from the sync journal. + Kan ikke lese fra synkroniseringsjournalen + + Filename encoding is not valid Filnavn-koding er ikke gyldig - - Unable to read from the sync journal. - Kan ikke lese fra synkroniseringsjournalen - - - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen @@ -4943,22 +4838,22 @@ Ugyldige tegn, gi et annet navn til "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - Synchronization will resume shortly. - - - - + 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. @@ -5027,49 +4922,49 @@ OCC::Systray - + Add account Legg til en konto - + Open main dialog - Åpne hovedvindu + + - Pause sync - - + + Resume sync - + Settings Innstillinger - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5077,24 +4972,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5102,22 +4997,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5125,32 +5020,32 @@ OCC::User - + Retry all uploads Prøv alle opplastinger igjen - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5158,22 +5053,22 @@ OCC::UserModel - + 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> - + Remove connection Fjern tilkobling - + Cancel Avbryt @@ -5278,30 +5173,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5823,52 +5700,52 @@ - + %n day ago %n dag siden%n dag siden - + %n days ago %n dager siden%n dager siden - + in the future fram i tid - + %n hour ago %n time siden%n time siden - + %n hours ago %n dager siden%n dager siden - + now - + Less than a minute ago For mindre enn et minutt siden - + %n minute ago %n minutt siden%n minutt siden - + %n minutes ago %n minutter siden%n minutter siden - + Some time ago For en stund siden @@ -5902,7 +5779,7 @@ SyncJournalDb - + Failed to connect database. @@ -5910,7 +5787,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5947,32 +5824,32 @@ - + Switch to account Bytt til konto - - Current user status is online - + + Account connected + Konto er koblet - - Current user status is do not disturb + + Account not connected - Account connected - Konto er koblet + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions Kontoaktiviteter @@ -5982,24 +5859,24 @@ - + Set status - - + + Log out Logg ut - - + + Log in Logg inn - + Remove account Fjern konto @@ -6060,57 +5937,57 @@ 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 @@ -6118,7 +5995,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6151,64 +6028,64 @@ Window - + Nextcloud desktop main dialog - + Current account Nåværende konto - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Legg til en konto - + Add new account - + Settings Innstillinger - + Exit Avslutt - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6218,32 +6095,32 @@ - + Account switcher and settings menu - + Connected Tilkoblet - + Disconnected Frakoblet - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Flere apper @@ -6253,7 +6130,7 @@ - + Open %1 in browser Åpne %1 i nettleser @@ -6273,7 +6150,7 @@ - + Unified search results list @@ -6284,7 +6161,7 @@ - + %1 - File activity @@ -6292,7 +6169,7 @@ main.cpp - + System Tray not available System Tray er ikke tilgjengelig @@ -6302,7 +6179,7 @@ %1 trenger et fungerende 'system tray'. Hvis du kjører XFCE, følg <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">disse instruksene</a>. I andre tilfeller, installer en 'system tray'-applikasjon som f.eks. 'trayer' og prøv igjen. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6310,7 +6187,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> @@ -6670,22 +6547,22 @@ Away - Borte + Do not disturb - Ikke forstyrr + Offline - Avkoblet + Online - Påkoblet + diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_nl.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_nl.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_nl.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_nl.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally %1 lokaal openen - + Open share dialog Open het dialoogvenster voor delen - + Share %1 Deel %1 - - + + Show more actions Toon meer acties @@ -39,7 +39,7 @@ ActivityList - + Activity list Activiteitlijst @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out De verbindingstijd is verstreken - + Unknown error: network reply was deleted Onbekende fout: netwerkantwoord verwijderd - + Server replied "%1 %2" to "%3 %4" Server antwoordde "%1 %2" naar "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Geheugensteun voor end-to-endversleuteling - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Om je cryptografische identiteit te beschermen, versleutelen we die met een geheugensteun van 12 woordenboekwoorden. Schrijf deze op en bewaar ze op een veilige plek. Ze zijn nodig om nieuwe apparaten aan je account toe te voegen (zoals je smartphone of laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Annuleren @@ -494,52 +494,52 @@ Verwijder verbinding voor mapsynchronisatie - + Disable virtual file support … Ondersteuning voor virtuele bestanden uitschakelen... - + Enable virtual file support %1 … Virtuele bestandsondersteuning inschakelen %1... - + (experimental) (experimenteel) - + Folder creation failed Map maken mislukt - + <p>Could not create local folder <i>%1</i>.</p> <p>Kon lokale map <i>%1</i> niet maken.</p> - + Confirm Folder Sync Connection Removal Bevestig het verwijderen van de verbinding voor mapsynchronisatie - + <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 je zeker dat je het synchroniseren van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> - + Remove Folder Sync Connection Verwijder verbinding voor mapsynchronisatie - + Disable virtual file support? Ondersteuning voor virtuele bestanden uitschakelen? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -552,37 +552,37 @@ Dit zal alle synchronisaties, die op dit moment bezig zijn, afbreken. - + Disable support Ondersteuning uitschakelen - + Sync Running Bezig met synchroniseren - + The syncing operation is running.<br/>Do you want to terminate it? Bezig met synchroniseren.<br/>Wil je stoppen met synchroniseren? - + %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. - + %1 in use %1 in gebruik @@ -602,87 +602,87 @@ Meld je aan - + %1 as %2 %1 als %2 - + The server version %1 is unsupported! Proceed at your own risk. De serverversie %1 wordt niet 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. Server %1 momenteel in onderhoudsmodus. - + Signed out from %1. Uitgelogd van %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Autorisatie van de browser wordt verkregen. <a href='%1'>Klik hier</a> om de browser te heropenen. - + Connecting to %1 … Verbinden met %1 ... - + No connection to %1 at %2. Geen verbinding met %1 op %2. - + Server configuration error: %1 at %2. Serverconfiguratiefout: %1 op %2. - + No %1 connection configured. Geen %1 connectie geconfigureerd. - + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd zijn, omdat ze te groot zijn: - + There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd zijn, 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 zijn, 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>Wil je de verbinding met het account <i>%1</i> echt verbreken?</p><p><b>Let op:</b> Hierdoor worden <b>geen</b> bestanden verwijderd.</p> - + Remove connection Verbinding verwijderen @@ -690,47 +690,47 @@ OCC::AccountState - + Signed out Afgemeld - + Disconnected Niet verbonden - + Connected Verbonden - + Service unavailable Dienst niet beschikbaar - + Maintenance mode Onderhoudsmodus - + Network error Netwerkfout - + Configuration error Configuratiefout - + Asking Credentials Vragen naar inloggegevens - + Unknown account state Onbekende account-status @@ -738,12 +738,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Bestanden op de negeerlijst en symbolische links worden niet gesynchroniseerd. - + For more activities please open the Activity app. Voor meer activiteiten open de Activiteit app. @@ -804,42 +804,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Doorgaan betekent <b>verwijderen van deze instellingen</b>. - + Continuing will mean <b>ignoring these settings</b>. Doorgaan betekent <b>negeren van deze instellingen</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Sommige instellingen zijn geconfigureerd in nieuwere versies van deze client en maken gebruik van functies die niet beschikbaar zijn in deze versie.<br><br>%1<br><br> Van het huidige configuratiebestand is al een back-up gemaakt op <i>%2</i>. - + Quit Stoppen - + Continue Doorgaan - + Error accessing the configuration file Fout bij benaderen configuratiebestand - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Fout bij het benaderen van het configuratiebestand op %1. Zorg ervoor dat het bestand door je gebruiker kan worden benaderd, - + Quit %1 Afsluiten %1 @@ -854,7 +854,7 @@ Enter username and password for "%1" at %2. - Geef gebruikersnaam en wachtwoord op voor "%1" bij %2. + @@ -873,59 +873,9 @@ - OCC::BulkPropagatorJob - - - 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 bestaat, al verschillen hoofd/kleine letters - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Bestand verwijderd (start upload) %1 - - - - Local file changed during syncing. It will be resumed. - Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. - - - - - Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. - - - - Error updating metadata: %1 - Fout bij bijwerken metadata: %1 - - - - The file %1 is currently in use - Bestand %1 is al in gebruik - - - - The local file was removed during sync. - Het lokale bestand werd verwijderd tijdens sync. - - - - ; Restoration Failed: %1 - ; Herstellen mislukt: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -933,12 +883,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Voer je begin-tot-eind crypto wachtwoordzin in: <br><br>Gebruiker: %2<br>Account: %3<br> - + Enter E2E passphrase Invoeren E2E wachtwoordzin @@ -1104,19 +1054,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1124,8 +1061,8 @@ In de reactie van de bestandenontdekker van de server ontbreken gegevens. - - + + Server error: PROPFIND reply is not XML formatted! Serverfout: PROPFIND-antwoord heeft geen XML-opmaak! @@ -1133,27 +1070,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Fout bij het openen van map %1 - + Directory not accessible on client, permission denied - Map niet toegankelijk op client, toegang geweigerd + Map niet toegankelijk op client, toestemming geweigerd - + Directory not found: %1 Map niet gevonden: %1 - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + Error while reading directory %1 Fout tijdens lezen van map %1 @@ -1177,7 +1114,7 @@ - + Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> @@ -1189,24 +1126,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Kon de van de server ontvangen JSON niet verklaren: <br><em>%1</em> - + The reply from the server did not contain all expected fields Het antwoord van de server bevatte niet alle verwachte velden - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. De geretourneerde server-URL begint niet met HTTPS, ondanks dat de inlog-URL is begonnen met HTTPS. Inloggen is niet mogelijk omdat dit een beveiligingsprobleem kan zijn. Neem contact op met je beheerder. @@ -1339,7 +1276,7 @@ %1 has a sync conflict. Please check the conflict file! - %1 heeft een sync conflict. Controleer het conflictbestand! + %1 heeft een sync conflict. Controleer het conflict bestand! @@ -1367,41 +1304,41 @@ 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Map %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Bestanden erin worden niet gesynchroniseerd. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Bestand %1 is gecreëerd, maar eerder uitgesloten van synchronisatie. Het wordt niet gesynchroniseerd. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1414,6 +1351,14 @@ %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. + Alle bestanden in je lokale syncmap '%1' werden verwijderd. Deze verwijderingen worden gesynchroniseerd naar je server, waardoor de bestanden niet beschikbaar zijn, tenzij ze worden teruggezet. Weet je zeker dat je deze acties wilt synchroniseren met de server? +Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. + + All files in the sync folder '%1' 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. @@ -1473,55 +1418,43 @@ Behoud lokale bestanden als conflict - - 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 restore 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 bestanden in de syncmap '%1' map werden verwijderd van de server. -Deze verwijderingen worden gesynchroniseerd naar je lokale syncmap, waardoor deze bestanden niet meer beschikbaar zijn, tenzij je het recht hebt om ze te herstellen. -Als je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server als je die autorisatie hebt. -Als je de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij je 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. - Alle bestanden in je lokale syncmap '%1' werden verwijderd. Deze verwijderingen worden gesynchroniseerd naar je server, waardoor de bestanden niet beschikbaar zijn, tenzij ze worden teruggezet. Weet je zeker dat je deze acties wilt synchroniseren met de server? -Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - - - + 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 restore 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 bestanden in de syncmap"'%1" map werden verwijderd van de server. -Deze verwijderingen worden gesynchroniseerd naar je lokale syncmap, waardoor deze bestanden niet meer beschikbaar zijn, tenzij je het recht hebt om ze te herstellen. -Als je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server als je die autorisatie hebt. -Als je de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij je 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. - Alle bestanden in je lokale syncmap "%1" werden verwijderd. Deze verwijderingen worden gesynchroniseerd naar je server, waardoor de bestanden niet beschikbaar zijn, tenzij ze worden teruggezet. Weet je zeker dat je deze acties wilt synchroniseren met de server? -Als dit een ongelukje was en je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. + - + Remove All Files? Alle bestanden verwijderen? - + Remove all files Alle bestanden verwijderen - + + 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 restore 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 bestanden in de syncmap '%1' map werden verwijderd van de server. +Deze verwijderingen worden gesynchroniseerd naar je lokale syncmap, waardoor deze bestanden niet meer beschikbaar zijn, tenzij je het recht hebt om ze te herstellen. +Als je de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server als je die autorisatie hebt. +Als je de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij je de eigenaar bent. + + + Keep files Bestanden bewaren @@ -1551,13 +1484,13 @@ Could not create a folder! Check your write permissions. - Kon map niet aanmaken! Controleer je schrijfmachtiging. + Kon map niet aanmaken! Controleer je schrijfrechten. OCC::FolderMan - + Could not reset folder state Kan de beginstaat van de map niet terugzetten @@ -1567,37 +1500,37 @@ Een oud synchronisatieverslag '%1' is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. - + 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. @@ -1607,67 +1540,67 @@ Synchronisatie geslaagd, niet opgeloste conflicten. - + Sync finished with unresolved conflicts. Synchronisatie beëindigd met niet opgeloste conflicten. - + Last Sync was successful. Laatste synchronisatie was geslaagd. - + 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 does not exist! Het geselecteerde pad bestaat niet! - + 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 machtiging om te schrijven naar de geselecteerde map! + U heeft geen permissie om te schrijven naar de geselecteerde 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! - + 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! @@ -1758,12 +1691,12 @@ Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + Checking for changes in local "%1" - Controleren op wijzigingen in lokale "%1" + @@ -1880,12 +1813,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Toevoegen mapsync verbinding - + Add Sync Connection Toevoegen Sync verbinding @@ -1923,45 +1856,45 @@ 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 je 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 <i>%1</i>, which is a subfolder of <i>%2</i>. Je synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. @@ -1969,24 +1902,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Gebruik virtuele bestanden in plaats van de content direct te downloaden %1 - - + + (experimental) (experimenteel) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - + Virtual files are not available for the selected folder Virtuele bestanden zijn niet beschikbaar voor de geselecteerde map @@ -2007,27 +1940,27 @@ 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. - + We received an unexpected download Content-Length. We ontvingen een onverwachte download Content-Lengte. - + Server returned wrong content-range Server retourneerde verkeerde content-bandbreedte - + Connection Timeout Verbindingstime-out @@ -2147,22 +2080,22 @@ Debugarchief maken ... - + Server notifications that require attention. Servermeldingen die aandacht nodig hebben. - + You cannot disable autostart because system-wide autostart is enabled. Je kunt autostart niet uitschakelen omdat systeem-brede autostart is ingeschakeld. - + Change update channel? Wijzigen bijwerkkanaal? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2171,32 +2104,32 @@ Merk op dat dit alleen selecteert van welke pool upgrades worden overgenomen en dat er geen downgrades zijn: teruggaan van het betakanaal naar het stabiele kanaal kan meestal niet onmiddellijk worden gedaan en dat betekent wachten op een stabiele versie die nieuwer is dan de momenteel geïnstalleerde betaversie. - + Change update channel Wijzigen bijwerkkanaal - + Cancel Annuleren - + Create Debug Archive Debugarchief maken - + Zip Archives Zip Archieven - + Debug Archive Created Debug Archief Aangemaakt - + Debug archive is created at %1 Debugarchief is gemaakt op %1 @@ -2204,22 +2137,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Wachtwoord voor deellink vereist - + Please enter a password for your link share: Voer het wachtwoord in voor je deellink: - + Sharing error Fout bij delen - + Could not retrieve or create the public link share. Error: %1 @@ -2242,7 +2175,7 @@ Reading from keychain failed with error: "%1" - Het lezen van de sleutelketen is mislukt met fout: "%1" + @@ -2285,7 +2218,7 @@ This entry is provided by the system at "%1" and cannot be modified in this view. - Dit gegeven is door het systeem vastgelegd op "%1" en kan niet worden aangepast in deze weergave. + @@ -2337,7 +2270,7 @@ Cannot write changes to "%1". - Kan geen wijzigingen wegschrijven naar "%1". + @@ -2365,7 +2298,7 @@ The file could not be synced because it contains characters which are not allowed on this system. - Dit bestand kon niet worden gesynchroniseerd omdat het symbolen bevat die niet toegestaan zijn op dit systeem. + @@ -2375,7 +2308,7 @@ Please enter a new name for the file: - Voer alsjeblieft een nieuwe naam voor dit bestand in: + @@ -2548,7 +2481,7 @@ OCC::Logger - + Error Fout @@ -2558,41 +2491,41 @@ <nobr>Bestand '%1'<br/>kan niet worden geopend voor schrijven.<br/><br/>De logging output kan <b>niet</b> worden weggeschreven!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> - <nobr>Bestand "%1"<br/>kan niet voor schrijven worden geopend.<br/><br/>De log output kan <b>niet</b> opgeslagen worden!</nobr> + 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 - + Update Failed Bijwerken mislukt @@ -2604,20 +2537,20 @@ <p>A new version of the %1 Client is available but the updating process failed.</p><p><b>%2</b> has been downloaded. The installed version is %3. If you confirm restart and update, your computer may reboot to complete the installation.</p> - <p>Een nieuwe versie van de %1 Client is beschikbaar, maar het updateproces is mislukt.</p><p><b>%2</b> is gedownload. De geïnstalleerde versie is %3. Als je herstarten en updaten bevestigd, kan je computer opnieuw opgestart worden om de installatie te voltooien.</p> + - + Ask again later Vraag later nogmaals - + Restart and update Herstarten en bijwerken - + Update manually Handmatig bijwerken @@ -2728,7 +2661,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Fout gemeld door de server: <em>%1</em> @@ -2738,32 +2671,32 @@ Er trad een fout op bij het benaderen van het 'token' endpoint: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Er trad een fout op bij het benaderen van het "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Lege JSON van OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Kon de van de server ontvangen JSON niet verklaren: <br><em>%1</em> - + The reply from the server did not contain all expected fields Het antwoord van de server bevatte niet alle verwachte velden - + <h1>Login Error</h1><p>%1</p> <h1>Inlog fout<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>Verkeerde gebruiker</h1><p>Je bent ingelogd met gebruiker <em>%1</em>, maar moest inloggen als gebruiker <em>%2</em>.<br>Log uit van %3 in een andere tab en dan <a href='%4'>klik hier</a> en log in als gebruiker %2</p> @@ -2790,7 +2723,7 @@ A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Your computer may reboot to complete the installation. - Een nieuwe update voor %1 wordt geïnstalleerd. De updater kan om extra privileges vragen tijdens het update proces. Je computer kan herstart worden om de installatie te voltooien. + @@ -2830,45 +2763,45 @@ Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Kon de download niet bijwerken. Open <a href='%1'>%1</a> om de download handmatig bij te werken. + - + Could not download update. Please open %1 to download the update manually. Kon de update niet downloaden. Open %1 om de update handmatig op te halen. - + Could not check for new updates. Kon niet controleren op updates. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Nieuwe %1 beschikbaar. Open <a href='%2'>%1</a> om de update te downloaden. + - + New %1 is available. Please open %2 to download the update. Nieuwe %1 beschikbaar. Open %2 om de update te downloaden. - + 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. Je installatie is al van de laatste versie. - + Update Check Controle update @@ -2896,14 +2829,14 @@ Verbinden ... - - + + Use &virtual files instead of downloading content immediately %1 Gebruik &virtuele bestanden in plaats van direct downloaden content%1 - - + + (experimental) (experimenteel) @@ -2928,49 +2861,49 @@ Vrije ruimte: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuele bestanden worden niet ondersteund voor Windows-partitie-hoofdmappen als lokale map. Kies een geldige submap onder de stationsletter. - + %1 folder "%2" is synced to local folder "%3" - %1 map "%2" is gesynchroniseerd naar de lokale map "%3" + - + Sync the folder "%1" Synchroniseer de map "%1" - + Warning: The local folder is not empty. Pick a resolution! Waarschuwing: De lokale map is niet leeg. Maak een keuze! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 vrije ruimte - + Virtual files are not available for the selected folder Virtuele bestanden zijn niet beschikbaar voor de geselecteerde map - + Local Sync Folder Lokale synchronisatiemap - - + + (%1) (%1) - + There isn't enough free space in the local folder! Er is niet genoeg ruimte beschikbaar in de lokale map! @@ -3040,14 +2973,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3113,7 +3038,7 @@ &Volgende > - + Server address does not seem to be valid Het serveradres lijkt niet geldig @@ -3123,7 +3048,7 @@ Ongeldige URL - + Could not load certificate. Maybe wrong password? Kon certificaat niet laden. Misschien onjuist wachtwoord? @@ -3163,7 +3088,7 @@ 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. + @@ -3221,54 +3146,54 @@ aanmaken map op Nextcloud: %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 externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.<br/>Ga terug en controleer je 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 externe map is mislukt, waarschijnlijk omdat je inloggegevens fout waren.</font><br/>ga terug en controleer je 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 @@ -3278,12 +3203,12 @@ 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. - + Cannot 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> @@ -3291,7 +3216,7 @@ OCC::OwncloudWizard - + Add %1 account Toevoegen %1 account @@ -3301,17 +3226,17 @@ %1 Verbindingswizard - + Skip folders configuration Sla configuratie van mappen over - + Enable experimental feature? Inschakelen experimentele functies? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3328,12 +3253,12 @@ Dit is een nieuwe, experimentele modus. Als je besluit het te gebruiken, vragen we je om eventuele problemen te melden. - + Enable experimental placeholder mode Inschakelen experimentele aanduider modus - + Stay safe Blijf veilig @@ -3341,7 +3266,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Ongeldig JSON antwoord van de opgegeven URL @@ -3351,25 +3276,25 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Bestand eindigt in spaties en kon niet hernoemd worden omdat een bestand met dezelfde naam al bestaat op de server. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Bestand eindigt in spaties en kon niet hernoemd worden omdat een bestand met dezelfde naam lokaal al bestaat. + - + 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. @@ -3381,135 +3306,125 @@ File names containing the character "%1" are not supported on this file system. - Bestandsnamen met een "%1" symbool worden niet ondersteund door het bestandssysteem. + - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - + 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. - + File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. - + Stat failed. Stat mislukt. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Bestandsconflict: server versie is gedownload en lokale kopie hernoemd en niet geüpload - + The filename cannot be encoded on your file system. De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. - + The filename is blacklisted on the server. De bestandsnaam staat op de negeerlijst van de server. - + File has extension reserved for virtual files. Bestand heeft een extensie gereserveerd voor virtuele bestanden. - + size omvang permissions - machtigingen - - - - server reported no %1 - Server meldde geen %1 - - - - permission - machtiging + permissies - + file id bestand id - - Server reported no %1 - Server rapporteerde nr %1 + + server reported no %1 + Server meldde geen %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Conflict bij het uploaden van sommige bestanden naar een map. Die betreffende conflicterende bestanden zullen worden gewist! - + Conflict when uploading a folder. It's going to get cleared! Conflict bij het uploaden van een map. Het wordt opgeruimd! - + Conflict when uploading a file. It's going to get removed! Conflict bij het uploaden van een bestand. Het wordt verwijderd! - + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" negeerlijst - + Not allowed because you don't have permission to add subfolders to that folder - Niet toegestaan, omdat je geen machtiging hebt om submappen aan die map toe te voegen + Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed because you don't have permission to add files in that folder - Niet toegestaan omdat je geen machtiging hebt om bestanden in die map toe te voegen + Niet toegestaan omdat je geen rechten hebt om bestanden in 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 - + Moved to invalid target, restoring Verplaatst naar ongeldig doel, herstellen - + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Error while reading the database Fout bij lezen database @@ -3519,9 +3434,9 @@ Server gaf een foutmelding bij lezen directory '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 - Server gaf een foutmelding bij lezen directory "%1'": %2 + @@ -3532,17 +3447,12 @@ Fout bij schrijven van Metadata naar de database - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Fout bij bijwerken metadata: %1 - + File is currently in use Bestand is al in gebruik @@ -3555,44 +3465,44 @@ Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. - + File %1 cannot be downloaded because encryption information is missing. Bestand %1 kan niet worden gedownload, omdat crypto informatie ontbreekt. - - + + File has changed since discovery Het bestand is gewijzigd sinds het is gevonden - - + + File %1 cannot be downloaded because of a local file name clash! Bestand %1 kan niet worden gedownload, omdat de naam conflicteert met een lokaal bestand - + 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 local disk space below the limit De download zou de vrije lokale schijfruimte beperken tot onder de limiet - + 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. @@ -3602,12 +3512,12 @@ Het gedownloade bestand is leeg, hoewel de server meldde dat het %1 zou moeten zijn. - + The downloaded file is empty, but the server said it should have been %1. Het gedownloade bestand is leeg, maar 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! @@ -3617,18 +3527,12 @@ Fout bij schrijven van Metadata naar de database - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Fout bij bijwerken metadata: %1 - + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3636,12 +3540,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - ; Herstellen mislukt: %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 @@ -3715,12 +3619,12 @@ Bestand %1 kan niet worden hernoemd naar %2, omdat de naam conflicteert met een lokaal bestand - + Error updating metadata: %1 Fout bij bijwerken metadata: %1 - + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3731,12 +3635,12 @@ Fout bij schrijven van Metadata naar de database - + Failed to rename file Kon bestand niet hernoemen - + Error setting pin state Fout bij instellen pin status @@ -3770,12 +3674,12 @@ Fout bij schrijven van Metadata naar de database - + Error writing metadata to the database: %1 Fout bij schrijven van metadata naar de database: %1 - + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3793,22 +3697,25 @@ Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". - + Error updating metadata: %1 Fout bij bijwerken metadata: %1 - + The file %1 is currently in use Bestand %1 is al in gebruik - + Error setting pin state - Fout bij instellen pin status +   +Fout bij instellen pin status +  +  - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -3816,46 +3723,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Kon versleuteld bestand niet uploaden. - + 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 bestaat, al verschillen hoofd/kleine letters + Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaan, al verschillen hoofd/kleine letters - - + + Upload of %1 exceeds the quota for the folder Upload van %1 overschrijdt het quotum voor de map - + File Removed (start upload) %1 Bestand verwijderd (start upload) %1 - + Local file changed during syncing. It will be resumed. - Lokaal bestand gewijzigd gedurende sync. Wordt opnieuw meegenomen. + Lokaal bestand gewijzigd bij sync. Wordt opnieuw meengenomen. - + Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. + Lokaal bestand gewijzigd bij sync. - + Failed to unlock encrypted folder. Kon versleutelde map niet ontgrendelen. @@ -3865,12 +3764,12 @@ Fout bij schrijven van Metadata naar de database - + Error updating metadata: %1 Fout bij bijwerken metadata: %1 - + The file %1 is currently in use Bestand %1 is al in gebruik @@ -3878,32 +3777,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - + Local file changed during sync. - Lokaal bestand gewijzigd tijdens sync. + Lokaal bestand gewijzigd bij sync. - + Poll URL missing Peilingen-URL ontbreekt - + 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 @@ -3911,22 +3810,22 @@ OCC::PropagateUploadFileV1 - + 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 tijdens 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) @@ -4004,7 +3903,7 @@ OCC::ServerNotificationHandler - + Dismiss Terzijde leggen @@ -4058,7 +3957,7 @@ Nextcloud Path: - Nextcloud Pad: + Nextcloud-pad: @@ -4083,12 +3982,12 @@ 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 machtiging. + Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen toestemming. The file cannot be shared because it does not have sharing permission. - Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen machtiging. + Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen toestemming. @@ -4174,17 +4073,17 @@ Wachtwoord beveiligen - + Allow editing Bewerken toestaan - + View only - Alleen lezen + - + Allow upload and editing Toestaan uploaden en bewerken @@ -4194,7 +4093,7 @@ Vervaldatum - + File drop (upload only) Bestand droppen (alleen uploaden) @@ -4204,32 +4103,32 @@ Stop met delen - + Link name - Linknaam + - + Note to recipient Notitie voor ontvanger - + Password protect Wachtwoord beveiligen - + Set expiration date Stel vervaldatum in - + Delete link - Verwijder link + - + Add another link Toevoegen andere link @@ -4239,27 +4138,27 @@ Verwijder deellink - + Confirm Link Share Deletion Bevestig verwijderen deellink - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Wil je de openbare deellink <i>%1</i> echt verwijderen?</p><p>let op: Dit kan niet ongedaan worden gemaakt.</p> - + Delete Verwijderen - + Cancel Annuleren - + Public link Openbare Link @@ -4272,12 +4171,12 @@ Deel met gebruikers of groepen ... - + Search globally Zoek door alles - + Copy link Kopiëren link @@ -4287,22 +4186,22 @@ Geen resultaten voor '%1' - + No results for "%1" Geen resultaten voor "%1" - + Password for share required Wachtwoord voor delen vereist - + Please enter a password for your email share: Voer het wachtwoord voor je e-mailserver in: - + I shared something with you Ik deelde iets met u @@ -4340,42 +4239,42 @@ Verloopt: - + Can reshare Kan doordelen - + Note to recipient Notitie voor ontvanger - + Set expiration date Instellen vervaldatum - + Unshare Stop met delen - + Can create Kan creëren - + Can change Kan wijzigen - + Can delete Kan verwijderen - + Password protect Wachtwoord beveiligd @@ -4392,23 +4291,23 @@ OCC::SocketApi - + Context menu share Contextmenu delen - + Select new location … Selecteer nieuwe locatie ... - + I shared something with you Ik deelde iets met u - - + + Share options Deelopties @@ -4421,76 +4320,76 @@ Activity - Activiteit + - + Copy private link to clipboard Kopiëren privé-link naar klembord - + Send private link by email … Verstuur privélink per e-mail --- - + Resharing this file is not allowed Verder delen van dit bestand is niet toegestaan - + Resharing this folder is not allowed Verder delen van deze map is niet toegestaan - - + + Copy public link Kopieer openbare link - + Copy internal link Kopieer interne link - + Edit Bewerken - + Open in browser Openen in browser - + Resolve conflict … Oplossen conflict ... - + Move and rename … Verplaatsen en hernoemen ... - + Move, rename and upload … Verplaatsen, hernoemen en uploaden ... - + Delete local changes Verwijder lokale aanpassingen - + Move and upload … Verplaatsen en uploaden ... - + Delete Verwijderen @@ -4636,77 +4535,77 @@ Vertrouw dit certificaat alsnog - + Untrusted Certificate Niet vertrouwd certificaat - + Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: Additional errors: - Additionele fouten: + - + 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 (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Ingangsdatum: %1 - + Expiration Date: %1 Vervaldatum: %1 - + Issuer: %1 Uitgever: %1 @@ -4721,7 +4620,7 @@ Failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - Kon het journal bestand niet maken of lezen. Controleer of u de juiste lees- en schrijfrmachtigingen in de lokale syncmap hebt. + Kon het journal bestand niet maken of lezen. Controleer of u de juiste lees- en schrijfrechten in de lokale syncmap hebt. @@ -4799,33 +4698,33 @@ Een interne fout met nummer %1 is opgetreden. - + %1 (skipped due to earlier error, trying again in %2) %1 (overgeslagen wegens een eerdere fout, probeer opnieuw over %2) - + Could not update file: %1 Kon bestand niet bijwerken: %1 - + Could not update virtual file metadata: %1 Kon virtuele bestand metadata niet bijwerken: %1 - + Unresolved conflict. Bestandsconflict - + 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 - + Aborted Afgebroken @@ -4838,17 +4737,17 @@ Not allowed because you don't have permission to add subfolders to that folder - Niet toegestaan, omdat je geen machtiging hebt om submappen aan die map toe te voegen + Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen Not allowed because you don't have permission to add parent folder - Niet toegestaan omdat u geen machtiging hebt om een bovenliggende map toe te voegen + 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 machtiging hebt om bestanden in die map toe te voegen + Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen @@ -4902,16 +4801,16 @@ Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map + + File names containing the character '%1' are not supported on this file system. Bestandsnamen met een '%1' symbool worden niet ondersteund door het bestandssysteem. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Kon de lokale sync-database niet openen of aanmaken. Zorg ervoor dat je schrijf-toegang hebt in de sync-map - - The file name is a reserved name on this file system. De bestandsnaam is een gereserveerde naam op dit bestandssysteem. @@ -4932,7 +4831,7 @@ Bestand/Map is genegeerd omdat het verborgen is. - + Using virtual files with suffix, but suffix is not set gebruik maken van virtuele bestanden met achtervoegsel, maar achtervoegsel niet ingesteld @@ -4947,7 +4846,7 @@ De bestandsnaam kan op je bestandssysteem niet worden gecodeerd. - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database @@ -4962,17 +4861,17 @@ Stat mislukt. + + Unable to read from the sync journal. + Niet mogelijk om te lezen uit het synchronisatie verslag. + + Filename encoding is not valid Bestandsnaamcodering is niet geldig - - 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 @@ -4982,22 +4881,22 @@ Ongeldige tekens, hernoem "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - Synchronization will resume shortly. - Synchronisatie wordt spoedig hervat. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - Schijfruimte laag: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. + Schijfruimte laa: Downloads die de vrije ruimte tot onder %1 zouden reduceren, zijn overgeslagen. - + There is insufficient space available on the server for some uploads. Onvoldoende schijfruimte op de server voor sommige uploads. @@ -5008,107 +4907,107 @@ Offline - Offline + All synced! - Alles gesynchroniseerd! + Some files couldn't be synced! - Sommige bestanden konden niet gesynchroniseerd worden! + See below for errors - Zie hieronder voor fouten + Syncing - Synchroniseren + Sync paused - Synchronisatie gepauzeerd + Some files could not be synced! - Sommige bestanden konden niet gesynchroniseerd worden! + See below for warnings - Zie hieronder voor waarschuwingen + %1 of %2 · %3 left - %1 van %2 · %3 resterend + %1 of %2 - %1 van %2 + Syncing file %1 of %2 - Bestand %1 van %2 synchroniseren + OCC::Systray - + Add account Account toevoegen - + Open main dialog Open het hoofdvenster + - Pause sync Pauzeer sync - - + + Resume sync Vervolg sync - + Settings Instellingen - + Exit %1 Verlaat %1 - + Pause sync for all Pauzeer sync voor iedereen - + Resume sync for all Vervolg sync voor iedereen - + %1: %2 %1: %2 @@ -5116,24 +5015,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Desktop Client</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versie %1. Voor meer informatie klik <a href='%2'>hier</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Gebruik makend van virtuele bestanden plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Deze release is geleverd door %1</p> @@ -5141,55 +5040,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Fout bij het laden van providers. + - + Failed to fetch search providers for '%1'. Error: %2 - Fout bij het zoeken van providers voor '%1'. Error: %2 + - + Search has failed for '%2'. - Fout bij het zoeken naar '%2'. + - + Search has failed for '%1'. Error: %2 - Fout bij het zoeken naar '%1'. Error: %2 + OCC::User - + Retry all uploads Probeer alle uploads opnieuw - + Synced %1 %1 gesynchroniseerd - + You renamed %1 Je hernoemde %1 - + You deleted %1 Je verwijderde %1 - + You created %1 Je creëerde %1 - + You changed %1 Je wijzigde %1 @@ -5197,22 +5096,22 @@ OCC::UserModel - + 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 je echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijder je <b>geen</b> bestanden.</p> - + Remove connection Verwijderen verbinding - + Cancel Annuleren @@ -5232,12 +5131,12 @@ User status feature is not supported. You will not be able to set your user status. - Gebruikersstatus functie wordt niet ondersteund. Je zult je gebruikersstatus niet kunnen instellen. + Emojis feature is not supported. Some user status functionality may not work. - Emoji functie wordt niet ondersteund. Sommige gebruikersstatusfuncties werken mogelijk niet. + @@ -5317,30 +5216,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 De Virtuele bestandssysteemfunctie vereist een NTFS bestandssysteem, %1 gebruikt %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5546,7 +5427,7 @@ Checking for changes in remote "%1" - Controleren op wijzigingen in externe "%1" + @@ -5556,7 +5437,7 @@ Checking for changes in local "%1" - Controleren op wijzigingen in lokale "%1" + @@ -5756,7 +5637,7 @@ <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploadet.</p></body></html> + <html><head/><body><p>Als deze checkbox is aangevinkt zullen bestaande bestanden in de lokale map worden gewist om een schone sync vanaf de server te starten.</p><p>Vink dit niet aan als de lokale bestanden naar de map op de server zouden moeten worden geüploaded.</p></body></html> @@ -5862,52 +5743,52 @@ Nieuwe map - + %n day ago %n dag geleden%n dagen geleden - + %n days ago %n dag geleden%n dagen geleden - + in the future in de toekomst - + %n hour ago %n uur geleden%n uur geleden - + %n hours ago %n uur geleden%n uur geleden - + now nu - + Less than a minute ago Minder dan een minuut geleden - + %n minute ago %n minuut geleden%n minuten geleden - + %n minutes ago %n minuut geleden%n minuten geleden - + Some time ago Even geleden @@ -5941,7 +5822,7 @@ SyncJournalDb - + Failed to connect database. Kon niet verbinden met database. @@ -5949,9 +5830,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Zoek in bestanden, berichten, afspraak ... + @@ -5959,7 +5840,7 @@ Load more results - Laad meer resultaten + @@ -5967,7 +5848,7 @@ Search result skeleton. - Zoekresultaat skelet. + @@ -5975,7 +5856,7 @@ Load more results - Laad meer resultaten + @@ -5986,21 +5867,11 @@ Accountinvoer - + Switch to account Omschakelen naar account - - Current user status is online - Huidige gebruikersstatus is online - - - - Current user status is do not disturb - Huidige gebruikersstatus is niet storen - - Account connected Account verbonden @@ -6011,7 +5882,17 @@ Account niet verbonden - + + Current user status is online + Huidige gebruikersstatus is online + + + + Current user status is do not disturb + Huidige gebruikersstatus is niet storen + + + Account actions Accountacties @@ -6021,24 +5902,24 @@ Verwijder Account - + Set status Status instellen - - + + Log out Afmelden - - + + Log in Meld u aan - + Remove account Verwijder account @@ -6048,7 +5929,7 @@ Online status - Online status + @@ -6068,7 +5949,7 @@ Invisible - Onzichtbaar + @@ -6099,57 +5980,57 @@ 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 @@ -6157,7 +6038,7 @@ ValidateChecksumHeader - + The checksum header is malformed. De header van het controlegetal is misvormd. @@ -6179,75 +6060,75 @@ 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. "%1" != "%2" - Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. "%1" != "%2" + Window - + Nextcloud desktop main dialog Nextcloud desktop hoofddialoog - + Current account Huidige account - - + + Resume sync for all Hervat de synchronisatie voor iedereen - - + + Pause sync for all Synchronisatie voor iedereen onderbreken - + Set user status Gebruikersstatus instellen - + Add account Account toevoegen - + Add new account Nieuw account toevoegen - + Settings Instellingen - + Exit Afsluiten - + Current user avatar Huidige gebruikersavatar - + Current user status is online Huidige gebruikersstatus is online - + Current user status is do not disturb Huidige gebruikersstatus is niet storen @@ -6257,32 +6138,32 @@ Deel %1 - + Account switcher and settings menu Accountswitcher en instellingenmenu - + Connected Verbonden - + Disconnected Niet verbonden - + Open local folder of current account Open lokale map van huidig account - + Open Nextcloud Talk in browser Open Nextcloud Talk in browser - + More apps Meer apps @@ -6292,7 +6173,7 @@ Apps menu - + Open %1 in browser Open %1 in browser @@ -6312,9 +6193,9 @@ Open het dialoogvenster voor delen - + Unified search results list - Samengevoegde zoekresultaten lijst + @@ -6323,15 +6204,15 @@ Toon meer acties - + %1 - File activity - %1 - Bestandsactiviteit + main.cpp - + System Tray not available Systeemvak niet beschikbaar @@ -6341,7 +6222,7 @@ %1 heeft een werkend systeemvak nodig. Als u XFCE draait volg <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Anders, installeer een systeemvak applicatie zoals 'trayer' and probeer het opnieuw. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 heeft een werkend systeemvak nodig. Als je XFCE draait volg je <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">deze instructies</a>. Installeer anders een systeemvak applicatie zoals "trayer" en probeer het opnieuw. @@ -6349,7 +6230,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebouwd vanaf Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_oc.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_oc.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_oc.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_oc.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Dobrir %1 localement - + Open share dialog Dobrir la fenèstra de partiment - + Share %1 Partejar %1 - - + + Show more actions Mostrar mai d’accions @@ -39,7 +39,7 @@ ActivityList - + Activity list Lista d’activitats @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Relambi d’espèra passat - + Unknown error: network reply was deleted Error desconeguda : la responsa del ret es estat suprimida - + Server replied "%1 %2" to "%3 %4" Lo servidor a respondut « %1 %2 » a « %3 %4 » @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemonic de chiframent del cap a la fin - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Anullar @@ -494,52 +494,52 @@ Suprimir la sincro. del dossièr - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) (experimental) - + Folder creation failed Creacion del dossièr pas reüssida - + <p>Could not create local folder <i>%1</i>.</p> <p>Creacion impossibla del dossièr local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal - + <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> - + Remove Folder Sync Connection - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running Execucion de la sincro. - + The syncing operation is running.<br/>Do you want to terminate it? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %1 sus %2 en utilizacion - + Currently there is no storage usage information available. Per ara i a pas cap d’informacion sus l’utilizacion de l’espaci d’emmaganizatge. - + %1 in use %1 es utilizat @@ -598,87 +598,87 @@ Connexion - + %1 as %2 %1 coma %2 - + The server version %1 is unsupported! Proceed at your own risk. - + Connected to %1. Connectat a %1. - + Server %1 is temporarily unavailable. Lo servidor %1 es temporàriament indisponible. - + Server %1 is currently in maintenance mode. Lo servidor %1 es actualament en mòde mantenença. - + Signed out from %1. Desconnexion de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1 … Connexion a %1… - + No connection to %1 at %2. Cap de connexion a %1 a %2. - + Server configuration error: %1 at %2. Error de configuracion servidor : %1 a %2. - + No %1 connection configured. Cap de connexion %1 configurat. - + 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 Confirmatz la supression 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> - + Remove connection Suprimir la connexion @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Desconnectat - + Disconnected Desconnectat - + Connected Connectat - + Service unavailable Servidor indisponible - + Maintenance mode Mòde mentenença - + Network error Error de ret - + Configuration error Error de configuracion - + Asking Credentials Demanda d’identificants - + Unknown account state Estat del compte desconegut @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Los fichièrs de la lista d’ignorar e los ligams simbolics son pas sincronizats. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit Daissar - + Continue Contunhar - + Error accessing the configuration file Error d’accès al fichièr de configuracion - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 Quitar %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Error en escrivent las metadonadas dins la basa de donadas @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase Picatz la frasa secreta E2E @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Error en dobrissent lo repertòri %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 Repertòri pas trobat : %1 - + Filename encoding is not valid - + Error while reading directory %1 Error en legissent lo repertòri %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> Error enviada pel servidor : <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,39 +1297,39 @@ Activitat de la sincro. - + 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. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1401,6 +1338,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1453,22 +1397,7 @@ - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1476,24 +1405,32 @@ - + 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? Suprimit totes los fichièrs ? - + Remove all files Suprimir totes los fichièrs - + + 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 restore 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. + + + + Keep files Gardar los fichièrs @@ -1529,7 +1466,7 @@ OCC::FolderMan - + Could not reset folder state @@ -1539,37 +1476,37 @@ - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (salvagarda) - + (backup %1) (salvagarda %1) - + Undefined State. Estat desconegut. - + Waiting to start syncing. En espèra del començament de la sincronizacion. - + Preparing for sync. Preparacion per sincronizar. - + Sync is running. Sincronizacion en cors. @@ -1579,67 +1516,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. - + Setup Error. Error de parametratge. - + User Abort. L’utilizaire a abandonat. - + Sync is paused. La sincronizacion es suspenduda. - + %1 (Sync is paused) - + No valid folder selected! - + The selected path does not exist! - + The selected path is not a folder! - + You have no permission to write to the selected 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! - + There is already a sync from the server to this local folder. Please pick another local folder! @@ -1851,12 +1788,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Apondre connexion de sincro. dossièr - + Add Sync Connection @@ -1897,42 +1834,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1940,24 +1877,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1978,27 +1915,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout @@ -2118,54 +2055,54 @@ Crear un archiu de debugatge… - + Server notifications that require attention. Las notificacions del servidor que demanda vòstra atencion. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel Anullar - + Create Debug Archive Crear un archiu de debugatge - + Zip Archives Archius ZIP - + Debug Archive Created - + Debug archive is created at %1 @@ -2173,22 +2110,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Protegir amb senhal - + Please enter a password for your link share: Mercés de picar un senhal pel ligam de partatge : - + Sharing error Error de partatge - + Could not retrieve or create the public link share. Error: %1 @@ -2321,7 +2258,7 @@ Invalid filename - nom de fichièr invalid + @@ -2331,22 +2268,22 @@ Error - Error + Please enter a new name for the file: - Mercés de picar un nom novèl pel fichièr : + New filename - Nom novèl de fichièr + Rename file - Renomenar fichièr + @@ -2504,7 +2441,7 @@ OCC::Logger - + Error Error @@ -2514,7 +2451,7 @@ - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2522,33 +2459,33 @@ OCC::NSISUpdater - + New Version Available Nòva version disponibla - + <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 Sautar aquesta version - + Skip this time Sautar aqueste còp - + Get update - + Update Failed @@ -2563,17 +2500,17 @@ - + Ask again later Tornar demandar - + Restart and update Reaviar e actualizar - + Update manually Actualizar manualament @@ -2684,7 +2621,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> @@ -2694,32 +2631,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Error d’autentificacion</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> @@ -2788,12 +2725,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Verificacion de las mesas a jorn impossibla. @@ -2803,27 +2740,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … Verificacion del servidor de mesa a jorn… - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. Cap de mesa a jorn pas disponibla. Vòstra installacion es la darrièra en data. - + Update Check Verificacion de mesa a jorn @@ -2851,14 +2788,14 @@ Connexion… - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) (experimental) @@ -2883,49 +2820,49 @@ Espaci liure : %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 espaci liure - + Virtual files are not available for the selected folder - + Local Sync Folder - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -2995,14 +2932,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3067,7 +2996,7 @@ &Seguent > - + Server address does not seem to be valid L’adreça del servidor sembla pas valid @@ -3077,7 +3006,7 @@ URL invalida - + Could not load certificate. Maybe wrong password? @@ -3175,54 +3104,54 @@ - + 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 @@ -3232,12 +3161,12 @@ - + Cannot 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> @@ -3245,7 +3174,7 @@ OCC::OwncloudWizard - + Add %1 account Apondre compte %1 @@ -3255,17 +3184,17 @@ - + Skip folders configuration Passar la configuracion dels dossièrs - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3276,12 +3205,12 @@ - + Enable experimental placeholder mode - + Stay safe Demoratz en seguretat @@ -3289,7 +3218,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3307,17 +3236,17 @@ - + 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. @@ -3332,57 +3261,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size talha @@ -3392,72 +3321,62 @@ - - server reported no %1 - - - - - permission - permission - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3467,7 +3386,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3480,17 +3399,12 @@ - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3503,44 +3417,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3550,12 +3464,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3565,18 +3479,12 @@ Error en escrivent las metadonadas dins la basa de donadas - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3584,12 +3492,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3663,12 +3571,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3679,12 +3587,12 @@ - + Failed to rename file - + Error setting pin state @@ -3718,12 +3626,12 @@ - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3741,22 +3649,22 @@ - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database @@ -3764,46 +3672,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3813,12 +3713,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3826,32 +3726,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. - + Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3859,22 +3759,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3952,7 +3852,7 @@ OCC::ServerNotificationHandler - + Dismiss Regetar @@ -4122,17 +4022,17 @@ Senhal de proteccion - + Allow editing Permetre la modificacion - + View only - Veire solament + - + Allow upload and editing @@ -4142,7 +4042,7 @@ Data d'expiracion - + File drop (upload only) @@ -4152,32 +4052,32 @@ Partejar pas mai - + Link name - Nom ligam + - + Note to recipient - + Password protect Protegir per un senhal - + Set expiration date Especificar una data d'expiracion - + Delete link - Suprimir ligam + - + Add another link Ajustar un autre ligam @@ -4187,27 +4087,27 @@ - + Confirm Link Share Deletion Confirmatz la supression del ligam de partatge - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Volètz vertadièrament suprimir lo ligam public de partatge <i>%1</i> ?</p><p>Nòta : aquesta accion pòt pas èsser anullada.</p> - + Delete Suprimir - + Cancel Anullar - + Public link Ligam public @@ -4220,12 +4120,12 @@ Partejar amb d'utilizaires o gropes… - + Search globally - + Copy link Copiar lo ligam @@ -4235,22 +4135,22 @@ Cap de resultat per « %1 » - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Ai partejat quicòm amb tu @@ -4288,42 +4188,42 @@ - + Can reshare Permetre lo repartatge - + Note to recipient - + Set expiration date - + Unshare Partejar pas mai - + Can create Permetre las creacions - + Can change Permetre los cambiaments - + Can delete Permetre las supressions - + Password protect @@ -4340,23 +4240,23 @@ OCC::SocketApi - + Context menu share Menú contèxtual del partatge - + Select new location … - + I shared something with you Ai partejat quicòm amb tu - - + + Share options Opcions de partatge @@ -4369,76 +4269,76 @@ Activity - Activitat + - + Copy private link to clipboard Copiar lo ligam privat al quichapapièr - + Send private link by email … Enviar un ligam privat per mail … - + Resharing this file is not allowed Tornar partejar aqueste - + Resharing this folder is not allowed - - + + Copy public link Copiar lo ligam public - + Copy internal link Copiar lo ligam intèrn - + Edit Modificar - + Open in browser Dobrir dins lo navegador - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Suprimir @@ -4584,12 +4484,12 @@ - + Untrusted Certificate Certificat pas fisable - + Cannot connect securely to <i>%1</i>: @@ -4599,62 +4499,62 @@ - + with Certificate %1 - - - + + + &lt;not specified&gt; - - + + Organization: %1 Organizacion : %1 - - + + Unit: %1 Unitat : %1 - - + + Country: %1 País : %1 - + Fingerprint (SHA1): <tt>%1</tt> Emprunta (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Emprunta (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Emprunta (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data efectiva : %1 - + Expiration Date: %1 Data d’expiracion :%1 - + Issuer: %1 Emissor : %1 @@ -4747,33 +4647,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted Anullat @@ -4850,13 +4750,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4880,7 +4780,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4895,7 +4795,7 @@ - + Unable to read the blacklist from the local database @@ -4910,17 +4810,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal @@ -4930,22 +4830,22 @@ - - File name contains at least one invalid character + + Synchronization will resume shortly. - - Synchronization will resume shortly. + + File name contains at least one invalid character - + 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. @@ -4956,7 +4856,7 @@ Offline - Fòra linha + @@ -4998,12 +4898,12 @@ %1 of %2 · %3 left - %1 de %2 · %3 restants + %1 of %2 - %1 de %2 + @@ -5014,49 +4914,49 @@ OCC::Systray - + Add account Apondre un compte - + Open main dialog Dobrir fenèstra principala + - Pause sync Suspendre la sincro. - - + + Resume sync Reprendre la sincro. - + Settings Paramètres - + Exit %1 Quitar %1 - + Pause sync for all - + Resume sync for all Reprendre la sincro. per totes - + %1: %2 %1: %2 @@ -5064,24 +4964,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Client de burèu %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Version %1. Per mai d’informacion clicatz <a href='%2'>aquí</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Usatge extension pels fichièrs virtuals : %1</small></p> - + <p>This release was supplied by %1</p> <p>Aquesta version es provesida per %1</p> @@ -5089,22 +4989,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5112,32 +5012,32 @@ OCC::User - + Retry all uploads Tornar enviar totes los fichièrs - + Synced %1 %1 sincronizat - + You renamed %1 Avètz renomenat %1 - + You deleted %1 Avètz suprimit %1 - + You created %1 Avètz creat %1 - + You changed %1 Avètz modificat %1 @@ -5145,22 +5045,22 @@ OCC::UserModel - + Confirm Account Removal Confirmatz la supression 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> - + Remove connection Suprimir la connexion - + Cancel Anullar @@ -5201,94 +5101,76 @@ Don't clear - Escafar pas + 30 minutes - 30 minutas + 1 hour - 1 ora + 4 hours - 4 oras + Today - Uèi + This week - Aquesta setmana + Less than a minute - Mens d’una setmana + 1 minute - 1 minuta + %1 minutes - %1 minutas + %1 hours - %1 oras + 1 day - 1 jorn + %1 days - %1 jorns + OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5810,52 +5692,52 @@ Dossièr novèl - + %n day ago fa %n jornfa %n jorns - + %n days ago fa %n jornsfa %n jorns - + in the future dins lo futur - + %n hour ago fa %n orafa %n ora - + %n hours ago fa %n orasfa %n oras - + now ara - + Less than a minute ago Fa mens d’una minuta - + %n minute ago fa %n minutafa %n minuta - + %n minutes ago fa %n minutasfa %n minutas - + Some time ago Fa qualque temps @@ -5889,7 +5771,7 @@ SyncJournalDb - + Failed to connect database. @@ -5897,7 +5779,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5907,7 +5789,7 @@ Load more results - Cargar mai de resultats + @@ -5934,21 +5816,11 @@ - + Switch to account - - Current user status is online - - - - - Current user status is do not disturb - - - Account connected Compte connectat @@ -5959,7 +5831,17 @@ Compte pas connectat - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Accions del compte @@ -5969,24 +5851,24 @@ Levar compte - + Set status - - + + Log out Desconnexion - - + + Log in Se connectar - + Remove account Levar compte @@ -6001,32 +5883,32 @@ Online - En linha + Away - Absent + Do not disturb - Desrengar pas + Invisible - Invisible + Status message - Messatge d’estatut + What is your status? - Quin es vòstre estatut ? + @@ -6047,57 +5929,57 @@ Utility - + %L1 GB %L1 Go - + %L1 MB %L1 Mo - + %L1 KB %L1 Ko - + %L1 B %L1 O - + %n year(s) %s an(s)%s an(s) - + %n month(s) %s mes(es)%s mes(es) - + %n day(s) %s jorn(s)%s jorn(s) - + %n hour(s) %n ora(s)%n ora(s) - + %n minute(s) %n minuta(s)%n minuta(s) - + %n second(s) %n segonda(s)%n segonda(s) - + %1 %2 %1 %2 @@ -6105,7 +5987,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6138,64 +6020,64 @@ Window - + Nextcloud desktop main dialog - + Current account Compte actual - - + + Resume sync for all Reprendre la sincro. per totes - - + + Pause sync for all Suspendre la sincro. per totes - + Set user status - + Add account Apondre un compte - + Add new account Apondre un compte novèl - + Settings Paramètres - + Exit Quitar - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6205,32 +6087,32 @@ Partejar %1 - + Account switcher and settings menu - + Connected Connectat - + Disconnected Desconnectat - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Mai d’app @@ -6240,7 +6122,7 @@ Menú d’aplicacion - + Open %1 in browser @@ -6260,7 +6142,7 @@ Dobrir fenèstra de partatge - + Unified search results list @@ -6271,7 +6153,7 @@ Veire mai d’accions - + %1 - File activity @@ -6279,7 +6161,7 @@ main.cpp - + System Tray not available @@ -6289,7 +6171,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6297,7 +6179,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construit de la revision Git <a href="%1">%2</a> sus %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pl.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pl.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pl.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pl.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Otwórz lokalnie %1 - + Open share dialog Otwórz okno udostępniania - + Share %1 Udostępnij %1 - - + + Show more actions Pokaż więcej akcji @@ -39,7 +39,7 @@ ActivityList - + Activity list Lista aktywności @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Przekroczono czas odpowiedzi - + Unknown error: network reply was deleted Nieznany błąd: odpowiedź sieci została usunięta - + Server replied "%1 %2" to "%3 %4" Serwer odpowiedział "%1 %2" na "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Klucz szyfrowania end to end - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Aby chronić Twoją tożsamość kryptograficzną, szyfrujemy ją kluczem składającym się z 12 wyrazów. Hasło zachowaj w bezpiecznym miejscu. Będzie ono potrzebne do dodania innych urządzeń do Twojego konta (takich jak telefon komórkowy lub laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Anuluj @@ -495,52 +495,52 @@ Usuń katalog synchronizacji - + Disable virtual file support … Wyłącz obsługę plików wirtualnych… - + Enable virtual file support %1 … Włącz obsługę plików wirtualnych %1… - + (experimental) (eksperymentalne) - + Folder creation failed Utworzenie katalogu nie powiodło się - + <p>Could not create local folder <i>%1</i>.</p> <p>Nie można utworzyć katalogu lokalnego <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Potwierdź usunięcie katalogu synchronizacji - + <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ę katalogu <i>%1</i>?</p><p><b>Uwaga:</b> Ta operacja <b>nie</b> usunie żadnych plików.</p> - + Remove Folder Sync Connection Usuń katalog synchronizacji - + Disable virtual file support? Wyłączyć obsługę plików wirtualnych? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Ta czynność spowoduje przerwanie aktualnie uruchomionej synchronizacji. - + Disable support Wyłącz wsparcie - + 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 (%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 katalogi, w tym zamontowane lub udostępnione katalogi w sieci, mogą mieć różne ograniczenia. - + %1 of %2 in use Wykorzystane: %1 z %2 - + Currently there is no storage usage information available. Obecnie nie ma dostępnych informacji o wykorzystaniu pamięci. - + %1 in use Wykorzystane: %1 @@ -603,87 +603,87 @@ Zaloguj - + %1 as %2 %1 jako %2 - + The server version %1 is unsupported! Proceed at your own risk. Wersja serwera %1 nie jest już obsługiwana! Kontynuujesz na własne ryzyko. - + Connected to %1. Połączono z %1. - + Server %1 is temporarily unavailable. Serwer %1 jest tymczasowo niedostępny. - + Server %1 is currently in maintenance mode. Serwer %1 jest obecnie w trybie konserwacji. - + Signed out from %1. Wylogowano z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Uzyskiwanie autoryzacji z przeglądarki. <a href='%1'>Kliknij tutaj</a>, aby ponownie otworzyć przeglądarkę. - + Connecting to %1 … Łączenie do %1… - + No connection to %1 at %2. Brak połączenia do %1 z %2. - + Server configuration error: %1 at %2. Błąd konfiguracji serwera: %1 w %2. - + No %1 connection configured. Nie skonfigurowano połączenia %1. - + There are folders that were not synchronized because they are too big: Katalogi te nie zostały zsynchronizowane ponieważ są zbyt duże: - + There are folders that were not synchronized because they are external storages: Katalogi te nie zostały zsynchronizowane, ponieważ znajdują się w magazynach zewnętrznych: - + There are folders that were not synchronized because they are too big or external storages: Katalogi te nie zostały zsynchronizowane, ponieważ są zbyt duże lub znajdują się w magazynach zewnętrznych: - + 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 Usuń połączenie @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Wylogowany - + Disconnected Rozłączony - + Connected Połączony - + Service unavailable Usługa niedostępna - + Maintenance mode Tryb konserwacji - + Network error Błąd sieci - + Configuration error Błąd konfiguracji - + Asking Credentials Zapytanie o poświadczenia - + Unknown account state Nieznany status konta @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Pliki z listy ignorowanych oraz dowiązania symboliczne nie są synchronizowane. - + For more activities please open the Activity app. Aby uzyskać więcej informacji o działaniach, otwórz aplikację Aktywność. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Kontynuacja będzie oznaczać <b>usunięcie tych ustawień</b>. - + Continuing will mean <b>ignoring these settings</b>. Kontynuacja będzie oznaczać <b>zignorowanie tych ustawień</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Niektóre ustawienia zostały skonfigurowane w nowszych wersjach tego klienta i używają funkcji, które nie są dostępne w tej wersji.<br><br>%1<br><br>Bieżący plik konfiguracyjny został już utworzony w <i>%2</i>. - + Quit Wyjdź - + Continue Kontynuuj - + Error accessing the configuration file Błąd dostępu do pliku konfiguracyjnego - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Wystąpił błąd podczas uzyskiwania dostępu do pliku konfiguracyjnego w %1. Upewnij się, że użytkownik może uzyskać dostęp do pliku. - + Quit %1 Zamknij %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - Plik %1 nie może zostać wysłany, ponieważ istnieje inny plik o tej samej nazwie, różniący się tylko wielkością liter - - - - - File %1 has invalid modified time. Do not upload to the server. - Plik %1 ma nieprawidłowy czas modyfikacji. Nie wysyłaj na serwer. - - - - File Removed (start upload) %1 - Plik usunięty (rozpocznij wysyłanie) %1 - - - - Local file changed during syncing. It will be resumed. - Plik lokalny zmieniony podczas synchronizacji. Zostanie wznowiony. - - - - - Local file changed during sync. - Plik lokalny zmieniony podczas synchronizacji. - - - - Error updating metadata: %1 - Błąd podczas aktualizowania metadanych: %1 - - - - The file %1 is currently in use - Plik %1 jest aktualnie używany - - - - The local file was removed during sync. - Plik lokalny został usunięty podczas synchronizacji. - - - - ; Restoration Failed: %1 - ; Przywracanie nie powiodło się: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Błąd zapisu metadanych do bazy danych @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Wprowadź hasło szyfrowania end to end:<br><br>Użytkownik: %2<br>Konto: %3<br> - + Enter E2E passphrase Wprowadź hasło dla end to end @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - Błąd podczas anulowania usuwania pliku - - - - Error while canceling delete of %1 - Błąd podczas anulowania usuwania %1 - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Odpowiedź serwera: Nie można odnaleźć danych - - + + Server error: PROPFIND reply is not XML formatted! Błąd serwera: odpowiedź PROPFIND nie ma formatu XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Błąd podczas otwierania katalogu %1 - + Directory not accessible on client, permission denied Katalog niedostępny w kliencie, odmowa uprawnienia - + Directory not found: %1 Nie znaleziono katalogu: %1 - + Filename encoding is not valid Kodowanie nazwy pliku jest nieprawidłowe - + Error while reading directory %1 Błąd podczas odczytu katalogu %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Serwer zwrócił błąd: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Wystąpił błąd podczas uzyskiwania dostępu do punktu końcowego "tokena": <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Nie można przeanalizować kodu JSON zwróconego z serwera: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odpowiedź z serwera nie zawierała wszystkich oczekiwanych zakresów - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Zwrócony adres URL serwera nie zaczyna się od HTTPS pomimo adresu URL logowania zaczynającego się od HTTPS. Logowanie nie będzie możliwe, ponieważ może to stanowić problem z bezpieczeństwem. Skontaktuj się z administratorem. @@ -1368,41 +1305,41 @@ Synchronizuj aktywność - + Could not read system exclude file Nie można odczytać systemowego pliku wykluczeń - + A new folder larger than %1 MB has been added: %2. Dodano nowy katalog większy niż %1 MB: %2. - + A folder from an external storage has been added. - Dodano katalog z magazynu zewnętrznego. + Dodano katalog z pamięci zewnętrznej. - + Please go in the settings to select it if you wish to download it. Przejdź do ustawień, aby go wybrać do pobrania. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Katalog %1 został utworzony, ale wcześniej został wykluczony z synchronizacji. Dane w nim zawarte nie zostaną zsynchronizowane. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Plik %1 został utworzony, ale wcześniej został wykluczony z synchronizacji. Nie zostanie on zsynchronizowany. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Wszystkie pliki w lokalnym katalogu synchronizacji '%1' zostały usunięte. Te usunięcia zostaną zsynchronizowane z Twoim serwerem, co oznacza całkowite ich usunięcie +Czy na pewno chcesz zsynchronizować te działania z serwerem? +Jeśli to był przypadek i zdecydujesz się zachować swoje pliki, zostaną one przywrócone z serwera. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Zachowaj pliki lokalne jako pliki konfliktu - - 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 restore 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. - Wszystkie pliki z katalogu synchronizacji '%1' zostały usunięte z serwera. -W momencie synchronizacji zostaną usunięte z lokalnego katalogu, co spowoduje ich niedostępność, chyba że posiadasz prawo do przywracania. -Jeśli zdecydujesz się przywrócić pliki i posiadasz odpowiednie uprawnienia, zostaną one ponownie wysłane na serwer. -Jeśli zdecydujesz się je usunąć, nie będą już dostępne. - - - - 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. - Wszystkie pliki w lokalnym katalogu synchronizacji '%1' zostały usunięte. Te usunięcia zostaną zsynchronizowane z Twoim serwerem, co oznacza całkowite ich usunięcie -Czy na pewno chcesz zsynchronizować te działania z serwerem? -Jeśli to był przypadek i zdecydujesz się zachować swoje pliki, zostaną one przywrócone z serwera. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Jeśli zdecydujesz się je usunąć, nie będą już dostępne. - + 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. @@ -1514,17 +1440,28 @@ Jeśli to był przypadek i zdecydujesz się zachować swoje pliki, zostaną one przywrócone z serwera. - + Remove All Files? Usunąć wszystkie pliki? - + Remove all files Usuń wszystkie pliki - + + 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 restore 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. + Wszystkie pliki z katalogu synchronizacji '%1' zostały usunięte z serwera. +W momencie synchronizacji zostaną usunięte z lokalnego katalogu, co spowoduje ich niedostępność, chyba że posiadasz prawo do przywracania. +Jeśli zdecydujesz się przywrócić pliki i posiadasz odpowiednie uprawnienia, zostaną one ponownie wysłane na serwer. +Jeśli zdecydujesz się je usunąć, nie będą już dostępne. + + + Keep files Zachowaj pliki @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Nie można zresetować stanu katalogu @@ -1570,37 +1507,37 @@ Znaleziono stary dziennik synchronizacji '%1', ale nie można go usunąć. Upewnij się, że żadna aplikacja go nie używa. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Znaleziono stary dziennik synchronizacji "%1", ale nie można go usunąć. Upewnij się, że żadna aplikacja go nie używa. - + (backup) (kopia zapasowa) - + (backup %1) (kopia zapasowa %1) - + Undefined State. Niezdefiniowany stan. - + Waiting to start syncing. Oczekiwanie na rozpoczęcie synchronizacji. - + Preparing for sync. Przygotowanie do synchronizacji. - + Sync is running. Synchronizacja jest uruchomiona. @@ -1610,67 +1547,67 @@ Synchronizacja przebiegła pomyślnie, nierozwiązane konflikty. - + Sync finished with unresolved conflicts. Synchronizacja zakończona z nierozwiązanymi konfliktami. - + Last Sync was successful. Ostatnia synchronizacja zakończona powodzeniem. - + Setup Error. Błąd ustawień. - + User Abort. Użytkownik anulował. - + Sync is paused. Synchronizacja wstrzymana. - + %1 (Sync is paused) %1 (Synchronizacja wstrzymana) - + No valid folder selected! Nie wybrano prawidłowego katalogu! - + The selected path does not exist! Wybrana ścieżka nie istnieje! - + 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ń do zapisu w wybranym katalogu! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Katalog lokalny %1 zawiera już katalog używany w połączeniu do synchronizacji katalogów. Wybierz inny! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! W katalogu lokalnym %1 jest już zawarty katalog używany w obsłudze do synchronizacji katalogów. Wybierz inny! - + There is already a sync from the server to this local folder. Please pick another local folder! Ten katalog jest już wybrany do synchronizacji z serwerem. Wybierz inny katalog lokalny! @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Dodaj katalog synchronizacji - + Add Sync Connection Dodaj połączenie synchronizacji @@ -1928,42 +1865,42 @@ Wpisz nazwę dla nowego katalogu, utworzonego poniżej "%1": - + Folder was successfully created on %1. Katalog został utworzony pomyślnie w %1 - + Authentication failed accessing %1 Uwierzytelnianie nie powiodło się podczas uzyskiwania dostępu do %1 - + Failed to create the folder on %1. Please check manually. Nie udało się utworzyć katalogu w %1. Sprawdź ręcznie. - + Failed to list a folder. Error: %1 Nie udało się wyświetlić listy katalogów. 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 katalogiem nadrzędnym <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Synchronizujesz już <i>%1</i>, który jest podkatalogiem <i>%2</i>. @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Użyj plików wirtualnych zamiast bezpośrednio pobierać ich zawartość %1 - - + + (experimental) (eksperymentalne) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Pliki wirtualne nie są obsługiwane w przypadku katalogów głównych partycji Windows jako katalogu lokalnego. Wybierz prawidłowy podkatalog według litery dysku. - + Virtual files are not available for the selected folder Pliki wirtualne nie są dostępne dla wybranego katalogu @@ -2009,27 +1946,27 @@ 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. Ponowna próba następnym razem. - + We received an unexpected download Content-Length. Otrzymano niespodziewanie dużą zawartość do pobrania. - + Server returned wrong content-range Serwer zwrócił błędny zakres zawartości - + Connection Timeout Limit czasu połączenia @@ -2149,22 +2086,22 @@ Utwórz archiwum debugowania… - + Server notifications that require attention. Powiadomienia serwera, które wymagają uwagi. - + You cannot disable autostart because system-wide autostart is enabled. Nie można wyłączyć autostartu, ponieważ autostart całego systemu jest włączony. - + Change update channel? Zmienić kanał aktualizacji? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ Zwróć uwagę, że wybiera to tylko, z której puli aktualizacje są pobierane oraz że nie można powrócić do niższej wersji. Więc powrót z kanału beta do stabilnego zwykle nie może być wykonany natychmiast i oznacza to oczekiwanie na stabilną wersję, która jest nowsza niż aktualnie zainstalowana wersja beta. - + Change update channel Zmień kanał aktualizacji - + Cancel Anuluj - + Create Debug Archive Utwórz archiwum debugowania - + Zip Archives Archiwa Zip - + Debug Archive Created Utworzono archiwum debugowania - + Debug archive is created at %1 Archiwum debugowania jest utworzone w %1 @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Wymagane hasło dla udostępnienia - + Please enter a password for your link share: Wprowadź hasło dla udostępnionego linku: - + Sharing error Błąd udostępniania - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Błąd @@ -2556,7 +2493,7 @@ <nobr>Plik '%1'<br/>nie może zostać otwarty do zapisu.<br/><br/>Dane wyjściowe dziennika <b>nie</b> mogą być zapisane!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Plik "%1"<br/>nie może być otwarty do zapisu.<br/><br/>Dane wyjściowe dziennika <b>nie</b> mogą być zapisane!</nobr> @@ -2564,33 +2501,33 @@ OCC::NSISUpdater - + New Version Available Dostępna nowa wersja - + <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>Dostępna jest nowa wersja klienta %1.</p><p><b>%2</b> jest dostępny do pobrania. Zainstalowana wersja to %3.</p> - - + + Skip this version Pomiń tą wersję - + Skip this time Pomiń tym razem - + Get update Pobierz aktualizację - + Update Failed Aktualizacja nie powiodła się @@ -2605,17 +2542,17 @@ <p>Dostępna jest nowa wersja klienta %1, ale proces aktualizacji nie powiódł się.</p><p><b>%2</b> został pobrany. Zainstalowana wersja to %3. Jeśli potwierdzisz ponowne uruchomienie i aktualizację, komputer może się ponownie uruchomić, aby zakończyć instalację.</p> - + Ask again later Zapytaj ponownie później - + Restart and update Uruchom ponownie i zaktualizuj - + Update manually Aktualizuj ręcznie @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Serwer zwrócił błąd: <em>%1</em> @@ -2736,32 +2673,32 @@ Wystąpił błąd podczas uzyskiwania dostępu do punktu końcowego "tokena": <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Wystąpił błąd podczas uzyskiwania dostępu do punktu końcowego "tokena": <br><em>%1</em> - + Empty JSON from OAuth2 redirect Pusty plik JSON z przekierowania OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Nie można przeanalizować zwróconego z serwera kodu JSON : <br><em>%1</em> - + The reply from the server did not contain all expected fields Odpowiedź z serwera nie zawierała wszystkich oczekiwanych zakresów - + <h1>Login Error</h1><p>%1</p> <h1>Błąd logowania</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>Nieprawidłowy użytkownik</h1><p>Zalogowałeś się jako użytkownik <em>%1</em>, a powinieneś zalogować się jako <em>%2</em>.<br>Wyloguj się z %3 na innej karcie, a potem <a href='%4'>kliknij tutaj</a>, aby zalogować się jako %2</p> @@ -2831,12 +2768,12 @@ Nie można pobrać aktualizacji. Kliknij <a href='%1'>%1</a>, aby ręcznie pobrać aktualizację. - + Could not download update. Please open %1 to download the update manually. Nie udało się pobrać aktualizacji. Otwórz %1, aby ręcznie pobrać aktualizację. - + Could not check for new updates. Nie można sprawdzić nowych aktualizacji. @@ -2846,27 +2783,27 @@ Dostępny jest nowy %1. Kliknij <a href='%2'>%2</a>, aby pobrać aktualizację. - + New %1 is available. Please open %2 to download the update. Dostępny jest nowy %1. Otwórz %2, aby pobrać aktualizację. - + Checking update server … Sprawdzanie serwera aktualizacji… - + Update status is unknown: Did not check for new updates. Status aktualizacji jest nieznany. Nie sprawdzono dostępności 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ę @@ -2894,14 +2831,14 @@ Połącz… - - + + Use &virtual files instead of downloading content immediately %1 Użyj plików &wirtualnych zamiast bezpośrednio pobierać ich zawartość %1 - - + + (experimental) (eksperymentalne) @@ -2926,49 +2863,49 @@ Wolna przestrzeń: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Pliki wirtualne nie są obsługiwane w przypadku katalogów głównych partycji Windows jako katalogu lokalnego. Wybierz prawidłowy podkatalog według litery dysku. - + %1 folder "%2" is synced to local folder "%3" Katalog %1 "%2" jest synchronizowany z katalogiem lokalnym "%3" - + Sync the folder "%1" Synchronizuj katalog "%1" - + Warning: The local folder is not empty. Pick a resolution! Uwaga: Katalog lokalny nie jest pusty. Bądź ostrożny! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 wolnej przestrzeni - + Virtual files are not available for the selected folder Pliki wirtualne nie są dostępne dla wybranego katalogu - + Local Sync Folder Lokalny katalog synchronizacji - - + + (%1) (%1) - + There isn't enough free space in the local folder! W katalogu lokalnym nie ma wystarczającej ilości wolnego miejsca! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3111,7 +3040,7 @@ &Dalej > - + Server address does not seem to be valid Adres serwera jest nieprawidłowy @@ -3121,7 +3050,7 @@ Nieprawidłowy adres URL - + Could not load certificate. Maybe wrong password? Nie udało się załadować certyfikatu. Być może hasło jest nieprawidłowe? @@ -3219,54 +3148,54 @@ tworzenie katalogu w Nextcloud: %1 - + Remote folder %1 created successfully. Katalog zdalny %1 został pomyślnie utworzony. - + The remote folder %1 already exists. Connecting it for syncing. Zdalny katalog %1 już istnieje. Podłączam go do synchronizowania. + - The folder creation resulted in HTTP error code %1 Tworzenie katalogu 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 katalogu ponieważ podane poświadczenia są nieprawidłowe!<br/>Powróć i sprawdź poświadczenia.</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 katalogu zdalnego nie powiodło się. Prawdopodobnie dostarczone poświadczenia są nieprawidłowe.</font><br/>Powróć i sprawdź poświadczenia.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Tworzenie katalogu 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. Nie można nawiązać połączenia z %1. Sprawdź ponownie. - + Folder rename failed Zmiana nazwy katalogu nie powiodła się @@ -3276,12 +3205,12 @@ Nie można usunąć i wykonać kopii zapasowej katalogu, ponieważ katalog lub plik znajdujący się w nim jest otwarty w innym programie. Zamknij katalog lub plik i naciśnij przycisk "Ponów próbę" lub anuluj konfigurację. - + Cannot 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ąć oraz wykonać kopii zapasowej katalogu, ponieważ katalog lub plik znajdujący się w nim jest otwarty w innym programie. Zamknij katalog lub plik i naciśnij przycisk "Ponów próbę" lub anuluj konfigurację. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Utworzenie lokalnego katalogu synchronizowanego %1 zakończone pomyślnie!</b></font> @@ -3289,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account Dodaj konto %1 @@ -3299,17 +3228,17 @@ Kreator połączeń %1 - + Skip folders configuration Pomiń konfigurację katalogów - + Enable experimental feature? Włączyć funkcję eksperymentalną? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3326,12 +3255,12 @@ To nowy, eksperymentalny tryb. Jeśli zdecydujesz się z niego skorzystać, zgłoś wszelkie pojawiające się problemy. - + Enable experimental placeholder mode Włącz eksperymentalny tryb symboli zastępczych - + Stay safe Bądź bezpieczny @@ -3339,7 +3268,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Nieprawidłowa odpowiedź JSON z adresu URL ankiety @@ -3357,17 +3286,17 @@ Plik zawiera już spacje i nie można zmienić jego nazwy, ponieważ plik o tej nazwie już istnieje lokalnie. - + Symbolic links are not supported in syncing. Linki symboliczne nie są obsługiwane podczas synchronizacji. - + File is listed on the ignore list. Plik znajduje się na liście ignorowanych. - + File names ending with a period are not supported on this file system. Nazwy plików kończące się kropką nie są obsługiwane w tym systemie plików. @@ -3382,57 +3311,57 @@ Nazwy plików zawierające znak "%1" nie są obsługiwane w tym systemie plików. - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - + The file name is a reserved name on this file system. Nazwa pliku jest nazwą zarezerwowaną w tym systemie plików. - + Filename contains trailing spaces. Nazwa pliku zawiera na końcu spacje. - + Filename is too long. Nazwa pliku jest za długa. - + File/Folder is ignored because it's hidden. Plik/katalog jest ignorowany, ponieważ jest ukryty. - + Stat failed. Błąd statystyk. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Pobrano wersję z serwera, nazwa lokalnej kopii została zmieniona i nie wysłana. - + The filename cannot be encoded on your file system. Nazwa pliku nie może być zakodowana w systemie plików. - + The filename is blacklisted on the server. Nazwa pliku jest na czarnej liście na serwerze. - + File has extension reserved for virtual files. Plik ma rozszerzenie zarezerwowane dla plików wirtualnych. - + size rozmiar @@ -3442,72 +3371,62 @@ uprawnienia - - server reported no %1 - serwer zgłosił brak %1 - - - - permission - pozwolenie - - - + file id id pliku - - Server reported no %1 - Serwer zgłosił brak %1 + + server reported no %1 + serwer zgłosił brak %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Konflikt podczas wysyłania niektórych plików do katalogu. Konfliktowe zostaną wyjaśnione! - + Conflict when uploading a folder. It's going to get cleared! Konflikt podczas wysyłania katalogu. To się wyjaśni! - + Conflict when uploading a file. It's going to get removed! Konflikt podczas wysyłania pliku. Zostanie usunięty! - + Ignored because of the "choose what to sync" blacklist Ignorowane z powodu czarnej listy "Wybierz co synchronizować" - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów do tego katalogu - + 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 - + Not allowed to upload this file because it is read-only on the server, restoring - Wysyłanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie + Przesyłanie niedozwolone, ponieważ plik jest "tylko do odczytu" na serwerze, przywracanie - + Moved to invalid target, restoring Przeniesiono do nieprawidłowego obiektu, przywracanie - + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Error while reading the database Błąd podczas odczytu bazy danych @@ -3517,7 +3436,7 @@ Serwer odpowiedział z błędem podczas odczytu katalogu '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 Serwer odpowiedział z błędem podczas odczytu katalogu "%1" : %2 @@ -3530,17 +3449,12 @@ Błąd podczas zapisu metadanych do bazy danych - - Error updating metadata due to invalid modified time - Błąd podczas aktualizacji metadanych z powodu nieprawidłowego czasu modyfikacji - - - + Error updating metadata: %1 Błąd podczas aktualizowania metadanych: %1 - + File is currently in use Plik jest aktualnie używany @@ -3553,44 +3467,44 @@ Nie można pobrać pliku %1 z powodu braku informacji o szyfrowaniu. - + File %1 cannot be downloaded because encryption information is missing. Nie można pobrać pliku %1 z powodu braku informacji o szyfrowaniu. - - + + File has changed since discovery W trakcie wyszukiwania plik uległ zmianie - - + + File %1 cannot be downloaded because of a local file name clash! Nie można pobrać pliku %1 z powodu konfliktu nazwy pliku lokalnego! - + 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 local disk space below the limit Pobranie zmniejszyłoby wolne miejsce na dysku lokalnym poniżej limitu - + 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. Plik nie mógł być całkowicie pobrany. @@ -3600,12 +3514,12 @@ Pobrany plik jest pusty, mimo że serwer stwierdził, że powinien być %1. - + The downloaded file is empty, but the server said it should have been %1. Pobrany plik jest pusty, ale serwer odpowiedział, że powinien mieć %1. - + File %1 cannot be saved because of a local file name clash! Nie można zapisać pliku %1 z powodu lokalnego konfliktu nazwy pliku! @@ -3615,18 +3529,12 @@ Błąd podczas zapisu metadanych do bazy danych - - - File %1 has invalid modified time reported by server. Do not save it. - Plik %1 ma nieprawidłowy czas modyfikacji zgłoszony przez serwer. Nie zapisuj go. - - - + Error updating metadata: %1 Błąd podczas aktualizowania metadanych: %1 - + The file %1 is currently in use Plik %1 jest aktualnie używany @@ -3634,12 +3542,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Przywracanie nie powiodło się: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Plik lub katalog został usunięty z udostępnienia "tylko do odczytu". Przywracanie nie powiodło się: %1 @@ -3713,12 +3621,12 @@ Nie można zmienić nazwy pliku %1 na %2 z powodu konfliktu lokalnej nazwy pliku - + Error updating metadata: %1 Błąd podczas aktualizowania metadanych: %1 - + The file %1 is currently in use Plik %1 jest aktualnie używany @@ -3729,12 +3637,12 @@ Błąd zapisu metadanych do bazy danych - + Failed to rename file Nie udało się zmienić nazwy pliku - + Error setting pin state Błąd podczas ustawiania stanu przypięcia @@ -3768,12 +3676,12 @@ Błąd zapisu metadanych do bazy danych - + Error writing metadata to the database: %1 Błąd zapisu metadanych do bazy danych: %1 - + The file %1 is currently in use Plik %1 jest aktualnie używany @@ -3791,22 +3699,22 @@ Serwer zwrócił nieprawidłowy kod HTTP. Oczekiwano 201, a otrzymano "%1 %2". - + Error updating metadata: %1 Błąd podczas aktualizowania metadanych: %1 - + The file %1 is currently in use Plik %1 jest aktualnie używany - + Error setting pin state Błąd podczas ustawiania stanu przypięcia - + Error writing metadata to the database Błąd zapisu metadanych do bazy danych @@ -3814,46 +3722,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - Plik %1 ma nieprawidłowy czas modyfikacji. Nie wysyłaj na serwer. - - - + Failed to upload encrypted file. Nie udało się wysłać zaszyfrowanego pliku. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Plik %1 nie może zostać wysłany, ponieważ istnieje inny plik o tej samej nazwie. - - + + Upload of %1 exceeds the quota for the folder Wysłanie %1 przekracza limit dla katalogu - + File Removed (start upload) %1 Plik usunięto (rozpoczęto wysyłanie) %1 - + Local file changed during syncing. It will be resumed. Plik lokalny zmieniony podczas synchronizacji. Zostanie wznowiony. - + Local file changed during sync. Plik lokalny zmieniony podczas synchronizacji. - + Failed to unlock encrypted folder. Nie udało się odblokować zaszyfrowanego katalogu. @@ -3863,12 +3763,12 @@ Błąd zapisu metadanych do bazy danych - + Error updating metadata: %1 Błąd podczas aktualizowania metadanych: %1 - + The file %1 is currently in use Plik %1 jest aktualnie używany @@ -3876,32 +3776,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Plik lokalny zmieniony podczas synchronizacji. - + Poll URL missing Brak adresu URL sondy - + Unexpected return code from server (%1) Nieoczekiwana odpowiedź z serwera (%1) - + Missing File ID from server Brak pliku ID z serwera - + Missing ETag from server Brak ETag z serwera @@ -3909,22 +3809,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Brak adresu URL ankiety - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Plik lokalny zmieniony podczas synchronizacji. - + The server did not acknowledge the last chunk. (No e-tag was present) Serwer nie potwierdził ostatniego fragmentu. (Nie odnaleziono e-tag) @@ -3970,7 +3870,7 @@ Loading … - Wczytywanie… + Ładowanie… @@ -4002,7 +3902,7 @@ OCC::ServerNotificationHandler - + Dismiss Odrzuć @@ -4172,17 +4072,17 @@ Ochrona hasłem - + Allow editing Zezwalaj na edytowanie - + View only Tylko podgląd - + Allow upload and editing Zezwalaj na wysyłanie i edytowanie @@ -4192,7 +4092,7 @@ Data wygaśnięcia - + File drop (upload only) Upuszczanie pliku (tylko wysyłanie) @@ -4202,32 +4102,32 @@ Zatrzymaj udostępnianie - + Link name Nazwa linku - + Note to recipient Informacja dla odbiorcy - + Password protect Zabezpiecz hasłem - + Set expiration date Ustaw datę ważności - + Delete link Usuń link - + Add another link Dodaj kolejny link @@ -4237,27 +4137,27 @@ Usuń link udostępnienia - + Confirm Link Share Deletion Potwierdź usunięcie linku udostępniania - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Czy na pewno chcesz usunąć udostępniony link publiczny <i>%1</i>?</p><p>Uwaga: Tej czynności nie można cofnąć.</p> - + Delete Usuń - + Cancel Anuluj - + Public link Link publiczny @@ -4270,12 +4170,12 @@ Udostępnij użytkownikom lub grupom… - + Search globally Szukaj globalnie - + Copy link Kopiuj link @@ -4285,22 +4185,22 @@ Brak wyników dla '%1' - + No results for "%1" Brak wyników dla "%1" - + Password for share required Wymagane hasło dla udostępnienia - + Please enter a password for your email share: Wprowadź hasło dla udostępnienia e-mailem: - + I shared something with you Coś Tobie udostępniłem @@ -4338,42 +4238,42 @@ Wygasa: - + Can reshare Może udostępnić innym - + Note to recipient Notatka dla odbiorcy - + Set expiration date Ustaw datę wygaśnięcia - + Unshare Zatrzymaj udostępnianie - + Can create Może utworzyć - + Can change Może zmienić - + Can delete Może usunąć - + Password protect Zabezpiecz hasłem @@ -4390,23 +4290,23 @@ OCC::SocketApi - + Context menu share Menu kontekstowe udostępniania - + Select new location … Wybierz nową lokalizację… - + I shared something with you Coś Tobie udostępniłem - - + + Share options Opcje udostępniania @@ -4422,73 +4322,73 @@ Aktywność - + Copy private link to clipboard Kopiuj link prywatny do schowka - + Send private link by email … Wyślij link prywatny e-mailem… - + Resharing this file is not allowed Udostępnianie dalej tego pliku jest niedozwolone - + Resharing this folder is not allowed Udostępnianie dalej tego katalogu jest niedozwolone - - + + Copy public link Kopiuj link publiczny - + Copy internal link Kopiuj link wewnętrzny - + Edit Edytuj - + Open in browser Otwórz w przeglądarce - + Resolve conflict … Rozwiąż konflikt… - + Move and rename … Przenieś i zmień nazwę… - + Move, rename and upload … Przenieś, zmień nazwę i wyślij… - + Delete local changes Usuń zmiany lokalne - + Move and upload … Przenieś i wyślij… - + Delete Usuń @@ -4634,77 +4534,77 @@ Zaufaj temu certyfikatowi mimo wszystko - + Untrusted Certificate Certyfikat niezaufany - + Cannot connect securely to <i>%1</i>: Nie można nawiązać bezpiecznego połączenia z <i>%1</i>: Additional errors: - Dodatkowe błędy: + - + 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 (SHA1): <tt>%1</tt> Odcisk palca (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Odcisk palca (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Odcisk palca (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data wejścia w życie: %1 - + Expiration Date: %1 Data wygaśnięcia: %1 - + Issuer: %1 Wystawca: %1 @@ -4797,33 +4697,33 @@ Wystąpił błąd wewnętrzny o numerze %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (pominięty z powodu wcześniejszego błędu, próbuję ponownie %2) - + Could not update file: %1 Nie można zaktualizować pliku: %1 - + Could not update virtual file metadata: %1 Nie można zaktualizować metadanych pliku wirtualnego: %1 - + Unresolved conflict. Nierozpoznany konflikt. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Dostępnych jest tylko %1, aby rozpocząć, potrzebujesz co najmniej %2 - + Aborted Przerwany @@ -4900,16 +4800,16 @@ Nazwy plików kończące się kropką nie są obsługiwane w tym systemie plików. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Nie można otworzyć lub utworzyć lokalnej bazy danych synchronizacji. Upewnij się, że masz dostęp do zapisu w katalogu synchronizacji. + + File names containing the character '%1' are not supported on this file system. Nazwy plików zawierające znak '%1' nie są obsługiwane w tym systemie plików. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Nie można otworzyć lub utworzyć lokalnej bazy danych synchronizacji. Upewnij się, że masz dostęp do zapisu w katalogu synchronizacji. - - The file name is a reserved name on this file system. Nazwa pliku jest nazwą zarezerwowaną w tym systemie plików. @@ -4930,7 +4830,7 @@ Plik/katalog jest ignorowany, ponieważ jest ukryty. - + Using virtual files with suffix, but suffix is not set Używanie plików wirtualnych z przyrostkiem, lecz przyrostek nie jest ustawiony @@ -4945,7 +4845,7 @@ Nazwa pliku nie może być zakodowana w systemie plików. - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych @@ -4960,17 +4860,17 @@ Błąd statystyk. + + Unable to read from the sync journal. + Nie można odczytać z dziennika synchronizacji. + + Filename encoding is not valid Kodowanie nazwy pliku jest nieprawidłowe - - Unable to read from the sync journal. - Nie można odczytać z dziennika synchronizacji. - - - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji @@ -4980,22 +4880,22 @@ Nieprawidłowe znaki, zmień nazwę "%1" + + Synchronization will resume shortly. + Synchronizacja zostanie wkrótce wznowiona. + + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - Synchronization will resume shortly. - Synchronizacja zostanie wkrótce wznowiona. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Brak miejsca na dysku: Pominięto pobieranie plików, które zmniejszyłyby ilość wolnego miejsca poniżej %1. - + There is insufficient space available on the server for some uploads. Na serwerze nie ma wystarczającej ilości miejsca na niektóre wysłane pliki. @@ -5064,49 +4964,49 @@ OCC::Systray - + Add account Dodaj konto - + Open main dialog Otwórz główne okno dialogowe + - Pause sync Wstrzymaj synchronizację - - + + Resume sync Wznów synchronizację - + Settings Ustawienia - + Exit %1 Wyjdź z %1 - + Pause sync for all Wstrzymaj wszystkie synchronizacje - + Resume sync for all Wznów wszystkie synchronizacje - + %1: %2 %1: %2 @@ -5114,24 +5014,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Desktop Client</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Wersja %1. Aby uzyskać więcej informacji, kliknij <a href='%2'>tutaj</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Używanie wtyczki plików wirtualnych: %1</small></p> - + <p>This release was supplied by %1</p> <p>To wydanie zostało dostarczone przez %1</p> @@ -5139,22 +5039,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Nie udało się pobrać dostawców. - + Failed to fetch search providers for '%1'. Error: %2 Nie udało się pobrać dostawców wyszukiwania dla '%1'. Błąd: %2 - + Search has failed for '%2'. Wyszukiwanie nie powiodło się dla '%2'. - + Search has failed for '%1'. Error: %2 Wyszukiwanie nie powiodło się dla '%1'. Błąd: %2 @@ -5162,32 +5062,32 @@ OCC::User - + Retry all uploads Ponów wysłanie wszystkich plików - + Synced %1 Zsynchronizowano %1 - + You renamed %1 Zmieniłeś nazwę %1 - + You deleted %1 Usunąłeś %1 - + You created %1 Utworzyłeś %1 - + You changed %1 Zmieniłeś %1 @@ -5195,22 +5095,22 @@ OCC::UserModel - + 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 Usuń połączenie - + Cancel Anuluj @@ -5315,30 +5215,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Funkcja wirtualnego systemu plików wymaga systemu plików NTFS, %1 używa %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Błąd podczas aktualizacji metadanych z powodu nieprawidłowego czasu modyfikacji - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Błąd podczas aktualizacji metadanych z powodu nieprawidłowego czasu modyfikacji - - - OCC::WebEnginePage @@ -5860,52 +5742,52 @@ Nowy katalog - + %n day ago %n dzień temu%n dni temu%n dni temu%n dni temu - + %n days ago %n dzień temu%n dni temu%n dni temu%n dni temu - + in the future w przyszłości - + %n hour ago %n godzina temu%n godziny temu%n godzin temu%n godzin temu - + %n hours ago %n godzina temu%n godziny temu%n godzin temu%n godzin temu - + now teraz - + Less than a minute ago Mniej niż minutę temu - + %n minute ago %n minuta temu%n minuty temu%n minut temu%n minut temu - + %n minutes ago %n minuta temu%n minuty temu%n minut temu%n minut temu - + Some time ago Jakiś czas temu @@ -5939,7 +5821,7 @@ SyncJournalDb - + Failed to connect database. Nie udało się połączyć z bazą danych. @@ -5947,7 +5829,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … Szukaj plików, wiadomości, wydarzeń… @@ -5957,7 +5839,7 @@ Load more results - Wczytaj więcej wyników + Załaduj więcej wyników @@ -5973,7 +5855,7 @@ Load more results - Wczytaj więcej wyników + Załaduj więcej wyników @@ -5984,21 +5866,11 @@ Włącz konto - + Switch to account Przełącz na konto - - Current user status is online - Aktualny status użytkownika to "Online" - - - - Current user status is do not disturb - Aktualny status użytkownika to "Nie przeszkadzać" - - Account connected Połączono z kontem @@ -6009,7 +5881,17 @@ Konto nie jest połączone - + + Current user status is online + Aktualny status użytkownika to "Online" + + + + Current user status is do not disturb + Aktualny status użytkownika to "Nie przeszkadzać" + + + Account actions Czynności na koncie @@ -6019,24 +5901,24 @@ Usuń konto - + Set status Ustaw status - - + + Log out Wyloguj - - + + Log in Zaloguj - + Remove account Usuń konto @@ -6097,57 +5979,57 @@ 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 @@ -6155,7 +6037,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Nagłówek sumy kontrolnej jest nieprawidłowy. @@ -6188,64 +6070,64 @@ Window - + Nextcloud desktop main dialog Główne okno pulpitu Nextcloud - + Current account Bieżące konto - - + + Resume sync for all Wznów synchronizację dla wszystkich - - + + Pause sync for all Wstrzymaj synchronizację dla wszystkich - + Set user status Ustaw status użytkownika - + Add account Dodaj konto - + Add new account Dodaj nowe konto - + Settings Ustawienia - + Exit Wyjście - + Current user avatar Aktualny awatar użytkownika - + Current user status is online Aktualny status użytkownika to "Online" - + Current user status is do not disturb Aktualny status użytkownika to "Nie przeszkadzać" @@ -6255,32 +6137,32 @@ Udostępnij %1 - + Account switcher and settings menu Przełączenie konta i menu ustawień - + Connected Połączony - + Disconnected Rozłączony - + Open local folder of current account Otwórz katalog lokalny bieżącego konta - + Open Nextcloud Talk in browser Otwórz Nextcloud Talk w przeglądarce - + More apps Więcej aplikacji @@ -6290,7 +6172,7 @@ Menu aplikacji - + Open %1 in browser Otwórz %1 w przeglądarce @@ -6310,7 +6192,7 @@ Otwórz okno udostępnienia - + Unified search results list Ujednolicona lista wyników wyszukiwania @@ -6321,7 +6203,7 @@ Pokaż więcej akcji - + %1 - File activity %1 — Aktywność pliku @@ -6329,7 +6211,7 @@ main.cpp - + System Tray not available Systemowy pasek nie dostępny @@ -6339,7 +6221,7 @@ %1 wymaga działającego zasobnika systemowego. Jeśli korzystasz z XFCE, postępuj zgodnie <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">z tymi instrukcjami</a>. W przeciwnym razie zainstaluj aplikację zasobnika systemowego, taką jak "trayer" i spróbuj ponownie. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 wymaga działającego zasobnika systemowego. Jeśli korzystasz z XFCE, postępuj zgodnie <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">z tymi instrukcjami</a>. W przeciwnym razie zainstaluj aplikację zasobnika systemowego, taką jak "trayer" i spróbuj ponownie. @@ -6347,7 +6229,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Zbudowany na podstawie wersji Git <a href="%1">%2</a> na %3, %4 przy użyciu Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pt_BR.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pt_BR.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pt_BR.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pt_BR.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Abrir %1 localmente - + Open share dialog Abrir diálogo de compartilhamento - + Share %1 Compartilhar %1 - - + + Show more actions Mais ações @@ -39,7 +39,7 @@ ActivityList - + Activity list Lista de atividades @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out A 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" O servidor respondeu "%1 %2" para "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemônico da criptografia de ponta-a-ponta - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para proteger sua Identidade Criptográfica, nós criptografamos com um mnemônico de 12 palavras de dicionário. Anote e mantenha-os em segurança. Eles serão necessários para adicionar outros dispositivos à sua conta (como seu celular ou laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -495,52 +495,52 @@ Remover conexão de sincronização de pastas - + Disable virtual file support … Desativar suporte a arquivo virtual... - + Enable virtual file support %1 … Habilitar suporte de arquivo virtual %1 … - + (experimental) (experimental) - + Folder creation failed Falha na criação da pasta - + <p>Could not create local folder <i>%1</i>.</p> <p>Não foi possível criar a pasta local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar a Remoção da Sincronização de Pasta - + <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 realmente parar a sincronização desta pasta <i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> vai excluir qualquer arquivo.</p> - + Remove Folder Sync Connection Remover conexão de sincronização de pasta - + Disable virtual file support? Desativar suporte a arquivo virtual? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Esta ação irá cancelar qualquer sincronização atualmente em execução. - + Disable support Desativar suporte - + Sync Running Sincronização ocorrendo - + The syncing operation is running.<br/>Do you want to terminate it? A operação de sincronização está ocorrendo.<br/>Deseja finalizá-la? - + %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 as montadas na rede ou pastas compartilhadas, podem ter limites diferentes. - + %1 of %2 in use %1 de %2 em uso - + Currently there is no storage usage information available. Atualmente, não há informação disponível do uso de armazenamento. - + %1 in use %1 em uso @@ -603,87 +603,87 @@ Entrar - + %1 as %2 %1 como %2 - + The server version %1 is unsupported! Proceed at your own risk. A versão do servidor %1 não é suportada! Prossiga por sua própria conta e risco. - + 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. O servidor %1 está 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. - + Server configuration error: %1 at %2. Erro na configuração do servidor: %1 em %2. - + No %1 connection configured. Nenhuma conexão %1 configurada. - + 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 são 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>Deseja realmente remover a conexão desta conta<i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> irá excluir nenhum arquivo.</p> - + Remove connection Remover conexão @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Desconectado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Serviço indisponível - + Maintenance mode Modo de manutenção - + Network error Erro de rede - + Configuration error Erro de configuração - + Asking Credentials Solicitando credenciais - + Unknown account state Estado desconhecido da conta @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Arquivos da lista de ignorados e links simbólicos não são sincronizados. - + For more activities please open the Activity app. Para mais atividades, abra o aplicativo Atividade. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Continuar significa <b>excluir essas configuracões</b>. - + Continuing will mean <b>ignoring these settings</b>. Continuar significa <b>ignorar essas configuraçães</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Algumas configurações foram definidas em versões mais recentes deste cliente e usam recursos que não estão disponíveis nesta versão. <br><br>%1<br><br>O arquivo de configuração atual já foi copiado para <i>%2</i>. - + Quit Sair - + Continue Continuar - + Error accessing the configuration file Erro acessando o arquivo de configuração - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Houve um erro ao acessar o arquivo de configuração em % 1. Certifique-se que o arquivo pode ser acessado pelo seu usuário. - + Quit %1 Sair %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - O arquivo %1 não pode ser carregado porque existe outro arquivo com o mesmo nome, diferindo apenas no caso - - - - - File %1 has invalid modified time. Do not upload to the server. - O arquivo %1 possui data/hora de modificação inválida. Não enviar ao servidor. - - - - File Removed (start upload) %1 - Arquivo removido (iniciar envio) %1 - - - - Local file changed during syncing. It will be resumed. - Arquivo local alterado durante a sincronização. Será retomado. - - - - - Local file changed during sync. - Arquivo local alterado durante a sincronização. - - - - Error updating metadata: %1 - Erro ao atualizar metadados: %1 - - - - The file %1 is currently in use - O arquivo %1 está atualmente em uso - - - - The local file was removed during sync. - O arquivo local foi removido durante a sincronização. - - - - ; Restoration Failed: %1 - ; A restauração falhou: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Ocorreu um erro ao escrever metadados no banco de dados @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Insira a senha da criptografia de ponta-a-ponta:<br><br>Usuário: %2<br>Conta: %3<br> - + Enter E2E passphrase Digite a senha E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Na resposta de descoberta do arquivo do servidor está faltando dados. - - + + Server error: PROPFIND reply is not XML formatted! Erro do servidor: a resposta PROPFIND não está formatada em XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Erro ao abrir diretório %1 - + Directory not accessible on client, permission denied Diretório não acessível no cliente, permissão negada - + Directory not found: %1 Diretório não encontrado: %1 - + Filename encoding is not valid A codificação do nome do arquivo não é válida - + Error while reading directory %1 Erro enquanto lia o diretório %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Erro retornado do servidor: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Ocorreu um erro ao acessar o endpoint "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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. A URL do servidor não começa com HTTPS. No entanto, a URL de login começava com HTTPS. Não será possível fazer login, pois isto pode ser um risco de segurança. Por favor contate seu administrador de sistemas. @@ -1368,41 +1305,41 @@ Atividade de Sincronização - + Could not read system exclude file Não foi possível ler o arquivo de exclusão do sistema - + 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á às configurações para selecioná-la se desejar baixá-la. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. A pasta %1 foi criada, mas foi excluída da sincronização anteriormente. Dados dentro dela não serão sincronizados. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. O arquivo %1 foi criado, mas foi excluído da sincronização anteriormente. Não será sincronizado. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Todos os arquivos em sua pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com seu servidor, tornando esses arquivos indisponíveis a menos que sejam 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 sincronizados novamente a partir do servidor. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Manter Arquivos Locais como Conflito - - 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 restore 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. - Todos os arquivos na pasta de sincronização '%1' foram excluídos do servidor. -Essas exclusões serão sincronizadas com sua pasta de sincronização local, tornando esses arquivos indisponíveis, a menos que você tenha o direito de restaurá-los. -Se você decidir restaurar os arquivos, eles serão sincronizados novamente com o servidor se você tiver direitos para fazer isso. -Se você decidir excluir os arquivos, eles ficarão indisponí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 em sua pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com seu servidor, tornando esses arquivos indisponíveis a menos que sejam 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 sincronizados novamente a partir do servidor. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,24 +1431,35 @@ Se você decidir excluir os arquivos, eles ficarão indisponí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 em sua pasta de sincronização local "%1" foram excluídos. Essas exclusões serão sincronizadas com seu servidor, tornando esses arquivos indisponíveis a menos que sejam 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 sincronizados novamente a partir do servidor. - + Remove All Files? Remover todos os arquivos? - + Remove all files Remover todos os arquivos - + + 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 restore 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. + Todos os arquivos na pasta de sincronização '%1' foram excluídos do servidor. +Essas exclusões serão sincronizadas com sua pasta de sincronização local, tornando esses arquivos indisponíveis, a menos que você tenha o direito de restaurá-los. +Se você decidir restaurar os arquivos, eles serão sincronizados novamente com o servidor se você tiver direitos para fazer isso. +Se você decidir excluir os arquivos, eles ficarão indisponíveis para você, a menos que você seja o proprietário. + + + Keep files Manter arquivos @@ -1558,7 +1495,7 @@ OCC::FolderMan - + Could not reset folder state Não foi possível redefinir o estado da pasta @@ -1568,37 +1505,37 @@ Uma antiga atividade de sincronização '%1' foi encontrada, mas não pôde ser removida. Por favor, certifique-se de que nenhuma aplicação está usando-a. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Um antigo diário de sincronização "%1" foi encontrado, mas não pôde ser removido. Certifique-se de que nenhum aplicativo o esteja usando no momento. - + (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 a sincronização. - + Sync is running. A sincronização está ocorrendo. @@ -1608,67 +1545,67 @@ Sincronização com sucesso, conflitos não resolvidos. - + Sync finished with unresolved conflicts. Sincronização concluída com conflitos não resolvidos. - + Last Sync was successful. A última sincronização foi finalizada. - + Setup Error. Erro de Configuração. - + User Abort. Interrompido pelo Usuário. - + 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 does not exist! O caminho selecionado não existe! - + 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 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! - + 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! @@ -1880,12 +1817,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Adicionar conexão de sincronização de pasta - + Add Sync Connection Adicionar conexão de sincronização @@ -1926,42 +1863,42 @@ Digite o nome da nova pasta a ser criada abaixo de "%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 é a pasta pai de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Você já está sincronizando <i>%1</i>, que é uma subpasta de <i>%2</i>. @@ -1969,24 +1906,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Use arquivos virtuais em vez de baixar o conteúdo imediatamente %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Arquivos virtuais não são suportados como partição raiz do Windows como pasta local. Escolha uma subpasta válida na letra da unidade. - + Virtual files are not available for the selected folder Os arquivos virtuais não estão disponíveis para a pasta selecionada @@ -2007,27 +1944,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nenhuma E-Tag recebida do servidor, verifique o Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Recebemos um e-Tag diferente para retomar. Retentando na próxima vez. - + We received an unexpected download Content-Length. Recebemos inesperado arquivo com Comprimento-Inesperado. - + Server returned wrong content-range O servidor retornou um conteúdo errado - + Connection Timeout Tempo Limite de Conexão Atingido @@ -2147,22 +2084,22 @@ Criar arquivo de depuração... - + Server notifications that require attention. Notificações do servidor que exigem atenção. - + You cannot disable autostart because system-wide autostart is enabled. Você não pode desativar a inicialização automática porque a inicialização automática em todo o sistema está ativada. - + Change update channel? Mudar canal de atualização? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2171,32 +2108,32 @@ Observe que isso seleciona apenas quais upgrades de pool são retirados, e que não há downgrades: Portanto, voltar do canal beta para o canal estável geralmente não pode ser feito imediatamente e significa esperar por uma versão estável que seja mais recente que a beta instalada atualmente versão. - + Change update channel Mudar canal de atualização - + Cancel Cancelar - + Create Debug Archive Criar arquivamento de depuração - + Zip Archives Arquivos Zip - + Debug Archive Created Depurar arquivamento criado - + Debug archive is created at %1 Arquivo de depuração é criado às %1 @@ -2204,22 +2141,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required É necessária uma senha de compartilhamento - + Please enter a password for your link share: Digite uma senha para seu link: - + Sharing error Erro de compartilhamento - + Could not retrieve or create the public link share. Error: %1 @@ -2543,7 +2480,7 @@ OCC::Logger - + Error Erro @@ -2553,7 +2490,7 @@ <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> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>O arquivo "%1"<br/>não pode ser aberto para escrita .<br/><br/>A saída do log <b>não pode</b> ser salva!</nobr> @@ -2561,33 +2498,33 @@ OCC::NSISUpdater - + New Version Available Nova Versão Disponível - + <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 do Cliente %1 está disponível.</p><p><b>%2</b> está disponível para baixar. A versão instalada é a %3.</p> - - + + Skip this version Pular esta versão - + Skip this time Pular desta vez - + Get update Atualizar - + Update Failed Falha na atualização @@ -2602,17 +2539,17 @@ <p>Uma nova versão do cliente %1 está disponível, mas o processo de atualização falhou.</p><p><b>%2</b> foi baixado. A versão instalada é %3. Se você confirmar a reinicialização e atualização, seu computador pode reiniciar para completar a instalação.</p> - + Ask again later Pergunte novamente mais tarde - + Restart and update Reiniciar e atualizar - + Update manually Atualizar manualmente @@ -2723,7 +2660,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Erro retornado pelo servidor: <em>%1</em> @@ -2733,32 +2670,32 @@ Ocorreu um erro ao acessar o ponto final do token: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Ocorreu um erro ao acessar o "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON vazio do redirecionamento OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Não foi possível analisar o JSON retornado pelo 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 incorreto</h1><p>Você fez logon com o usuário <em>%1</em>, mas deve fazer 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 o usuário %2</p> @@ -2828,12 +2765,12 @@ Não foi possível baixar a atualização. Por favor abra <a href='%1'>%1</a>para baixar a atualização manualmente. - + Could not download update. Please open %1 to download the update manually. Não foi possível baixar a atualização. Por favor, abra %1 para baixar a atualização manualmente. - + Could not check for new updates. Não foi possível verificar novas atualizações. @@ -2843,27 +2780,27 @@ Novo %1 está disponível. Por favor Abra <a href='%2'>%2</a> para baixar a atualização. - + New %1 is available. Please open %2 to download the update. Novo %1 está disponível. Por favor, abra %2 para baixar a atualização. - + Checking update server … Verificando o servidor de atualização... - + Update status is unknown: Did not check for new updates. Status de atualização desconhecida: Não foram verificadas 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 @@ -2891,14 +2828,14 @@ Conectar... - - + + Use &virtual files instead of downloading content immediately %1 Use os arquivos &virtuais em vez de baixar o conteúdo imediatamente %1 - - + + (experimental) (experimental) @@ -2923,49 +2860,49 @@ Espaço livre: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Arquivos virtuais não são suportados como partição raiz do Windows como pasta local. Escolha uma subpasta válida na letra da unidade. - + %1 folder "%2" is synced to local folder "%3" %1 pasta "%2" está sincronizada com a pasta local "%3" - + Sync the folder "%1" Sincronizar a pasta "%1" - + Warning: The local folder is not empty. Pick a resolution! Aviso: A pasta local não está vazia. Escolha uma resolução! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 de espaço livre - + Virtual files are not available for the selected folder Os arquivos virtuais não estão disponíveis para a pasta selecionada - + Local Sync Folder Pasta de Sincronização Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! Não há espaço livre na pasta local! @@ -3035,14 +2972,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3108,7 +3037,7 @@ &Próximo > - + Server address does not seem to be valid O endereço do servidor não parece ser válido @@ -3118,7 +3047,7 @@ URL inválida - + Could not load certificate. Maybe wrong password? Não foi possível carregar o certificado. Senha errada? @@ -3216,54 +3145,54 @@ criando pasta no Nextcloud: %1 - + Remote folder %1 created successfully. Pasta remota %1 criada com sucesso. - + The remote folder %1 already exists. Connecting it for syncing. A pasta remota %1 já existe. Conectando-a para sincronizar. + - The folder creation resulted in HTTP error code %1 A criação da pasta resultou em um erro HTTP de 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 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 da pasta remota falhou provavelmente devido a credenciais incorretas</font><br/>Por favor, volte e verifique suas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A criação da pasta remota %1 falhou 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. A conexão a %1 não foi estabelecida. Por favor, verifique novamente. - + Folder rename failed Falha ao renomear pasta @@ -3273,12 +3202,12 @@ Não é possível remover e fazer backup da pasta porque a pasta ou um arquivo estão abertos em outro programa. Feche a pasta ou arquivo e tente novamente ou cancele a operação. - + Cannot 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 foi possível remover e fazer o backup da pasta porque a pasta ou algum arquivo presente dentro desta pasta está aberto em outro programa. Por favor feche o arquivo ou a pasta e tente novamente ou cancele 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> @@ -3286,7 +3215,7 @@ OCC::OwncloudWizard - + Add %1 account Adicionar conta %1  @@ -3296,17 +3225,17 @@ Assistente de Conexão %1 - + Skip folders configuration Pular a configuração de pastas - + Enable experimental feature? Ativar recurso experimental? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3324,12 +3253,12 @@ Este é um novo modo experimental. Se você decidir usá-lo, relate quaisquer problemas que surgirem. - + Enable experimental placeholder mode Ativar modo de marcador de posição experimental - + Stay safe Fique seguro @@ -3337,7 +3266,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Resposta JSON inválida do conjunto de URL @@ -3355,17 +3284,17 @@ O arquivo contém espaços à direita e não pôde ser renomeado, porque um arquivo com o mesmo nome já existe localmente. - + Symbolic links are not supported in syncing. Links simbólicos não são suportados na 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. File names ending with a period are not supported on this file system. @@ -3380,57 +3309,57 @@ Nomes de arquivos contendo o caractere "%1" não são suportados neste sistema de arquivos. - + File name contains at least one invalid character O nome do arquivo contém pelo menos um caractere inválido - + 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 arquivo é muito grande. - + File/Folder is ignored because it's hidden. Arquivo/pasta será ignorado porque está oculto. - + Stat failed. Stat falhou. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflito: versão do servidor baixada, cópia local renomeada e não carregada. - + The filename cannot be encoded on your file system. O nome do arquivo não pode ser codificado em seu sistema de arquivos. - + The filename is blacklisted on the server. O nome do arquivo está na lista negra do servidor. - + File has extension reserved for virtual files. O arquivo tem extensão reservada para arquivos virtuais. - + size tamanho @@ -3440,72 +3369,62 @@ permissões - - server reported no %1 - servidor relatou não %1 - - - - permission - permissão - - - + file id ID do arquivo - - Server reported no %1 - Servidor relatou não %1 + + server reported no %1 + servidor relatou não %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Conflito ao enviar alguns arquivos para uma pasta. Esses, em conflito, serão eliminados! - + Conflict when uploading a folder. It's going to get cleared! Conflito ao enviar uma pasta. Vai ser limpa! - + Conflict when uploading a file. It's going to get removed! Conflito ao enviar um arquivo. Vai ser removido! - + Ignored because of the "choose what to sync" blacklist Ignorado devido à 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 a essa pasta - + 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 nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer upload deste arquivo porque ele é somente leitura no servidor, restaurando - + Moved to invalid target, restoring Movido para destino inválido, restaurando - + Not allowed to remove, restoring Não tem permissão para remover, restaurar - + Error while reading the database Erro ao ler o banco de dados @@ -3515,7 +3434,7 @@ O servidor respondeu com um erro ao ler o diretório '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 O servidor respondeu com um erro ao ler o diretório "%1" : %2 @@ -3528,17 +3447,12 @@ Ocorreu um erro ao escrever metadados no banco de dados - - Error updating metadata due to invalid modified time - Erro ao atualizar os metadados devido a erro na data/hora modificada - - - + Error updating metadata: %1 Erro ao atualizar metadados: %1 - + File is currently in use O arquivo está atualmente em uso @@ -3551,44 +3465,44 @@ O arquivo %1 não pode ser baixado porque a informação de criptografia está faltando. - + File %1 cannot be downloaded because encryption information is missing. O arquivo %1 não pode ser baixado porque está faltando informações de criptografia. - - + + File has changed since discovery O arquivo foi alterado desde a descoberta - - + + File %1 cannot be downloaded because of a local file name clash! O arquivo %1 não pode ser baixado devido a um conflito local no nome do arquivo! - + File %1 can not be downloaded because of a local file name clash! O arquivo %1 não pode ser baixado devido a um conflito local no nome do arquivo! - + The download would reduce free local disk space below the limit O download reduziria o espaço livre no disco local abaixo do limite - + 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 apagado do servidor - + The file could not be downloaded completely. O arquivo não pôde ser baixado completamente. @@ -3598,12 +3512,12 @@ O arquivo baixado está vazio apesar do servidor ter anunciado que ele deveria ter %1. - + The downloaded file is empty, but the server said it should have been %1. O arquivo baixado está vazio, mas o servidor disse que deveria ser %1. - + File %1 cannot be saved because of a local file name clash! O arquivo %1 não pôde ser salvo devido a um conflito com um nome de arquivo local! @@ -3613,18 +3527,12 @@ Ocorreu um erro ao escrever metadados no banco de dados - - - File %1 has invalid modified time reported by server. Do not save it. - O arquivo %1 possui erro na data/hora modificada informado pelo servidor. Não salvar. - - - + Error updating metadata: %1 Erro ao atualizar metadados: %1 - + The file %1 is currently in use O arquivo %1 está correntemente em uso @@ -3632,12 +3540,12 @@ 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 @@ -3711,12 +3619,12 @@ O arquivo %1 não pode ser renomeado para %2 devido a um conflito com o nome de um arquivo local - + Error updating metadata: %1 Erro ao atualizar metadados: %1 - + The file %1 is currently in use O arquivo %1 está correntemente em uso @@ -3727,12 +3635,12 @@ Ocorreu um erro ao escrever metadados no banco de dados - + Failed to rename file Falha ao renomear arquivo - + Error setting pin state Erro ao definir o estado do pin @@ -3766,12 +3674,12 @@ Ocorreu um erro ao escrever metadados no banco de dados - + Error writing metadata to the database: %1 Erro ao gravar metadados no banco de dados: %1 - + The file %1 is currently in use O arquivo %1 está atualmente em uso @@ -3789,22 +3697,22 @@ Código HTTP errado retornado pelo servidor. 201 esperado, mas recebeu "%1 %2". - + Error updating metadata: %1 Erro ao atualizar metadados: %1 - + The file %1 is currently in use O arquivo %1 está correntemente em uso - + Error setting pin state Erro ao definir o estado do pin - + Error writing metadata to the database Ocorreu um erro ao escrever metadados no banco de dados @@ -3812,46 +3720,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - O arquivo %1 possui data/hora de modificação inválida. Não enviar ao servidor. - - - + Failed to upload encrypted file. Falha ao fazer upload do arquivo criptografado. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists O arquivo %1 não pôde ser enviado porque um outro arquivo com o mesmo nome, diferenciando apenas letras maiúsculas e minúsculas, existe - - + + Upload of %1 exceeds the quota for the folder O envio de %1 excede a cota para a pasta - + File Removed (start upload) %1 Arquivo Removido (iniciar envio) %1 - + 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. - + Failed to unlock encrypted folder. Falha ao desbloquear a pasta criptografada. @@ -3861,12 +3761,12 @@ Ocorreu um erro ao escrever metadados no banco de dados - + Error updating metadata: %1 Erro ao atualizar metadados: %1 - + The file %1 is currently in use O arquivo %1 está correntemente em uso @@ -3874,32 +3774,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. O arquivo local foi modificado durante a sincronização. - + Poll URL missing URL de enquete ausente - + 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 @@ -3907,22 +3807,22 @@ OCC::PropagateUploadFileV1 - + 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. O arquivo local foi 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) @@ -4000,7 +3900,7 @@ OCC::ServerNotificationHandler - + Dismiss Dispensar @@ -4170,17 +4070,17 @@ Proteger com Senha - + Allow editing Permitir edição - + View only Somente visualização - + Allow upload and editing Permitir envio e edição @@ -4190,7 +4090,7 @@ Data de Expiração - + File drop (upload only) Soltar arquivo (somente envio) @@ -4200,32 +4100,32 @@ Descompartilhar - + Link name Nome do link - + Note to recipient Observação ao destinatário - + Password protect Proteger com senha - + Set expiration date Definir data de vencimento - + Delete link Excluir link - + Add another link Adicionar outro link @@ -4235,27 +4135,27 @@ Excluir o link de compartilhamento - + Confirm Link Share Deletion Confirmar o Link de Eliminação de Compartilhamento - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Quer mesmo excluir o link de compartilhamento público <i>%1</i>?</p><p>Nota: Esta ação não pode ser desfeita.</p> - + Delete Excluir - + Cancel Cancelar - + Public link Link público @@ -4268,12 +4168,12 @@ Compartilhar com usuários ou grupos... - + Search globally Pesquisar globalmente - + Copy link Copiar link @@ -4283,22 +4183,22 @@ Sem resultados para '%1' - + No results for "%1" Nenhum resultado para "%1" - + Password for share required É necessária uma senha de compartilhamento - + Please enter a password for your email share: Digite uma senha para seu compartilhamento por e-mail: - + I shared something with you Eu compartilhei algo com você @@ -4336,42 +4236,42 @@ Expira em: - + Can reshare Pode recompartilhar - + Note to recipient Nota para o destinatário - + Set expiration date Definir data de validade - + Unshare Descompartilhar - + Can create Pode criar - + Can change Pode alterar - + Can delete Pode excluir - + Password protect Proteger com senha @@ -4388,23 +4288,23 @@ OCC::SocketApi - + Context menu share Compartilhamento do menu de contexto - + Select new location … Selecionar novo local... - + I shared something with you Eu compartilhei algo com você - - + + Share options Opções de compartilhamento @@ -4420,73 +4320,73 @@ Atividade - + Copy private link to clipboard Copiar link privado para a área de transferência - + Send private link by email … Enviar link privado por e-mail... - + Resharing this file is not allowed Não é permitido recompartilhar este arquivo - + Resharing this folder is not allowed Compartilhar de novo esta pasta não é permitido - - + + Copy public link Copiar link público - + Copy internal link Copiar link interno - + Edit Editar - + Open in browser Abrir no navegador - + Resolve conflict … Resolver conflito… - + Move and rename … Mover e renomear... - + Move, rename and upload … Mova, renomeie e faça upload... - + Delete local changes Excluir alterações locais - + Move and upload … Mover e fazer upload... - + Delete Excluir @@ -4632,77 +4532,77 @@ 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>: Additional errors: - Erros adicionais: + - + 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 (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Impressão Digital (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Impressão Digital (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data Efetiva: %1 - + Expiration Date: %1 Data de Expiração: %1 - + Issuer: %1 Emissor: %1 @@ -4795,33 +4695,33 @@ Ocorreu um erro interno de número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (ignorado devido a um erro anterior, tentando novamente em %2) - + Could not update file: %1 Não foi possível atualizar o arquivo: %1 - + Could not update virtual file metadata: %1 Não foi possível atualizar os metadados do arquivo virtual: %1 - + Unresolved conflict. Conflito não solucionado. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 está disponível, é preciso pelo menos %2 para começar - + Aborted Cancelado @@ -4898,16 +4798,16 @@ Os nomes de arquivos que terminam com um ponto não são suportados neste sistema de arquivos. + + 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. + + 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. - - 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. - - The file name is a reserved name on this file system. O nome do arquivo é um nome reservado neste sistema de arquivos. @@ -4928,7 +4828,7 @@ Arquivo/Pasta ignorado porque está oculto. - + Using virtual files with suffix, but suffix is not set Usando arquivos virtuais com sufixo, mas o sufixo não está definido @@ -4943,7 +4843,7 @@ O nome do arquivo não pode ser codificado em seu sistema de arquivos. - + Unable to read the blacklist from the local database Não é possível ler a lista negra do banco de dados local @@ -4958,17 +4858,17 @@ Stat falhou. + + Unable to read from the sync journal. + Não é possível ler a partir do journal de sincronização. + + Filename encoding is not valid A codificação do nome do arquivo é inválida - - Unable to read from the sync journal. - Não é possível ler a partir do journal de sincronização. - - - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização @@ -4978,22 +4878,22 @@ Caracteres inválidos, favor renomear "%1" + + Synchronization will resume shortly. + A sincronização será retomada em breve. + + File name contains at least one invalid character O nome do arquivo contém pelo menos um caractere inválido - - Synchronization will resume shortly. - A sincronização será retomada em breve. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduziriam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Não há espaço disponível no servidor para alguns envios. @@ -5062,49 +4962,49 @@ OCC::Systray - + Add account Adicionar conta - + Open main dialog Abrir a caixa de diálogo principal + - Pause sync Pausar sincronização - - + + Resume sync Continuar a sincronização - + Settings Configurações - + Exit %1 Sair do %1 - + Pause sync for all Pausar a sincronização para todos - + Resume sync for all Continuar a sincronização para todos - + %1: %2 %1: %2 @@ -5112,24 +5012,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Cliente Desktop</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versão %1. Para mais informações clique <a href='%2'>aqui</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Usando o plugin de arquivos virtuais: %1</small></p> - + <p>This release was supplied by %1</p> <p>Esta versão foi fornecida por %1</p> @@ -5137,22 +5037,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Falha ao buscar provedores. - + Failed to fetch search providers for '%1'. Error: %2 Falha ao buscar provedores de pesquisa para '%1'. Erro: %2 - + Search has failed for '%2'. A pesquisa por '%2' falhou. - + Search has failed for '%1'. Error: %2 A pesquisa por '%1' falhou. Erro: %2 @@ -5160,32 +5060,32 @@ OCC::User - + Retry all uploads Retentar todos os envios - + Synced %1 %1 sincronizado - + You renamed %1 Você renomeou %1 - + You deleted %1 Você excluiu %1 - + You created %1 Você criou %1 - + You changed %1 Você alterou %1 @@ -5193,22 +5093,22 @@ OCC::UserModel - + Confirm Account Removal Confirme a Exclusã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>Quer realmente excluir a conexão para a conta <i>%1</i>?</p><p><b>Obs.:</b> Isso <b>não</b> excluirá nenhum arquivo.</p> - + Remove connection Excluir conexão - + Cancel Cancelar @@ -5313,30 +5213,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 O recurso de sistema de arquivos virtual requer um sistema de arquivos NTFS, %1 está usando %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Erro ao atualizar os metadados devido a erro na data/hora modificada - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Erro ao atualizar os metadados devido a erro na data/hora modificada - - - OCC::WebEnginePage @@ -5858,52 +5740,52 @@ Nova pasta - + %n day ago %n dia atrás%n dias atrás - + %n days ago %n dia atrás%n dias atrás - + in the future no futuro - + %n hour ago %n hora atrás%n horas atrás - + %n hours ago %n hora atrás%n horas atrás - + now agora - + Less than a minute ago Há menos de um minuto - + %n minute ago %n minuto atrás%n minutos atrás - + %n minutes ago %n minuto atrás%n minutos atrás - + Some time ago Algum tempo atrás @@ -5937,7 +5819,7 @@ SyncJournalDb - + Failed to connect database. Falha ao conectar banco de dados @@ -5945,9 +5827,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Pesquise arquivos, mensagens, eventos ... + @@ -5982,21 +5864,11 @@ Entrada de conta - + Switch to account Mudar para a conta - - Current user status is online - Online é o status atual do usuário - - - - Current user status is do not disturb - Não Perturbe é o status atual do usuário - - Account connected Conta conectada @@ -6007,7 +5879,17 @@ Conta não conectada - + + Current user status is online + Online é o status atual do usuário + + + + Current user status is do not disturb + Não Perturbe é o status atual do usuário + + + Account actions Ações da conta @@ -6017,24 +5899,24 @@ Remover conta - + Set status Definir status - - + + Log out Sair - - + + Log in Entrar - + Remove account Remover conta @@ -6095,57 +5977,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n anos - + %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 @@ -6153,7 +6035,7 @@ ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho do checksum está malformado. @@ -6186,64 +6068,64 @@ Window - + Nextcloud desktop main dialog Diálogo principal do Nextcloud Desktop - + Current account Conta atual - - + + Resume sync for all Retomar a sincronização para todos - - + + Pause sync for all Pausar a sincronização para todos - + Set user status Definir o status do usuário - + Add account Adicionar conta - + Add new account Adicionar nova conta - + Settings Configurações - + Exit Sair - + Current user avatar Avatar do usuário atual - + Current user status is online Online é o status atual do usuário - + Current user status is do not disturb Não Perturbe é o status atual do usuário @@ -6253,32 +6135,32 @@ Compartilhar %1 - + Account switcher and settings menu Alternador de conta e menu de configurações - + Connected Conectado - + Disconnected Desconectado - + Open local folder of current account Abrir pasta local da conta - + Open Nextcloud Talk in browser Abrir o Nextcloud Talk no navegador - + More apps Mais aplicativos @@ -6288,7 +6170,7 @@ Menu de aplicativos - + Open %1 in browser Abrir %1 no navegador @@ -6308,7 +6190,7 @@ Abrir janela de compartilhamento - + Unified search results list Lista unificada de resultados de pesquisa @@ -6319,7 +6201,7 @@ Mostrar mais ações - + %1 - File activity %1 - Atividade de arquivo @@ -6327,7 +6209,7 @@ main.cpp - + System Tray not available Área de Notificação não disponível @@ -6337,7 +6219,7 @@ %1 requer uma área de notificação em funcionamento. Se você estiver executando o XFCE, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray"> estas instruções</a>. Caso contrário, instale um aplicativo de área de notificação, como o 'trayer' e tente novamente. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 requer uma área de notificação em funcionamento. Se você estiver executando o XFCE, siga <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">estas instruções</a>. Caso contrário, instale um aplicativo de área de notificação, como o "trayer" e tente novamente. @@ -6345,7 +6227,7 @@ nextcloudTheme::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 da revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pt.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pt.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_pt.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_pt.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out A ligação expirou - + Unknown error: network reply was deleted Erro desconhecido: resposta de rede foi apagada - + Server replied "%1 %2" to "%3 %4" O Servidor respondeu "%1 %2" até "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemónica de criptografia ponto-a-ponto - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Para proteger sua Identidade Criptográfica, nós encriptamo-la com uma mnemónica de 12 palavras do dicionário. Por favor anote-as e mantenha-as em segurança. Elas serão necessárias para adicionar outros dispositivos à sua conta (como seu telemóvel ou portátil). @@ -305,9 +305,9 @@ - - - + + + Cancel Cancelar @@ -494,52 +494,52 @@ Remover ligação de sincronização de pasta - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Não foi possível criar a pasta - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmar Remoção da Ligação de Sincronização de Pasta - + <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> - + Remove Folder Sync Connection Remover Ligação da Sincronização de Pasta - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + 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 (%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. - + %1 in use %1 em utilização @@ -598,87 +598,87 @@ Iniciar Sessão - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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. O Servidor %1 encontra-se em manutenção - + 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. A obter autorização do browser <a href='%1'>Clique aqui</a> para reabrir o browser - + Connecting to %1 … - + No connection to %1 at %2. Sem ligação para %1 em %2. - + Server configuration error: %1 at %2. - + No %1 connection configured. %1 sem ligação configurada. - + 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 @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out Sessão terminada - + Disconnected Desligado - + Connected Ligado - + Service unavailable Serviço indisponível - + Maintenance mode Modo de Manutenção - + Network error Erro de rede - + Configuration error Erro de configuração - + Asking Credentials Perguntar Credenciais - + Unknown account state Estado de conta desconhecido @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Erro a aceder ao ficheiro de configuração - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Ocorreu um erro enquanto se acedia ao ficheiro de configuração em %1. Por favor tenha a certeza que o ficheiro pode ser acedido pelo seu utilizador. - + Quit %1 Sair do %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Por favor, insira a sua palavra-passe de encriptação %1:<br><br>Utilizador: %2<br>Conta: %3<br> - + Enter E2E passphrase Introduza palavra passe E2E @@ -1098,19 +1048,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1118,8 +1055,8 @@ A procura do ficheiro de servidor respondeu falta de informação - - + + Server error: PROPFIND reply is not XML formatted! @@ -1127,27 +1064,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1170,7 +1107,7 @@ - + Error returned from the server: <em>%1</em> Erro devolvido pelo servidor: <em>%1</em> @@ -1182,24 +1119,24 @@ - + 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> Não foi possível processar a resposta JSON retornada pelo servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor não contem todos os campos esperados - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1360,41 +1297,41 @@ 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 definições para a selecionar, se desejar transferi-la. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. A pasta% 1 foi criada, mas foi excluída da sincronização anteriormente. Os dados dentro dela não serão sincronizados. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. A pasta% 1 foi criada, mas foi excluída da sincronização anteriormente. Não será sincronizada. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1403,6 +1340,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1457,22 +1401,7 @@ Manter Ficheiros Locais como Conflito - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1480,24 +1409,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1533,7 +1470,7 @@ OCC::FolderMan - + Could not reset folder state Não foi possível reiniciar o estado da pasta @@ -1543,37 +1480,37 @@ 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. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (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. @@ -1583,67 +1520,67 @@ Sincronizado com sucesso, conflitos por resolver. - + Sync finished with unresolved conflicts. - + Last Sync was successful. A última sincronização foi bem sucedida. - + 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 does not exist! - + 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 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! - + 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! @@ -1855,12 +1792,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Adicionar Ligação de Sincronização de Pasta - + Add Sync Connection Adicionar Ligação de Sincronização @@ -1901,42 +1838,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1944,24 +1881,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1982,27 +1919,27 @@ 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. - + We received an unexpected download Content-Length. - + Server returned wrong content-range O servidor devolveu o alcance-conteúdo errado - + Connection Timeout O tempo de ligação expirou @@ -2122,54 +2059,54 @@ - + Server notifications that require attention. Notificações do Servidor que requerem atenção. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2177,22 +2114,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Erro de partilha - + Could not retrieve or create the public link share. Error: %1 @@ -2510,7 +2447,7 @@ OCC::Logger - + Error Erro @@ -2520,7 +2457,7 @@ <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> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2528,33 +2465,33 @@ 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 é %3.</p> - - + + Skip this version Ignorar esta versão - + Skip this time Ignorar desta vez - + Get update Obter atualização - + Update Failed @@ -2569,17 +2506,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2690,7 +2627,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Erro devolvido pelo servidor: <em>%1</em> @@ -2700,32 +2637,32 @@ Ocorreu um erro ao aceder ao 'token' de endpoint em: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + Could not parse the JSON returned from the server: <br><em>%1</em> Não foi possível processar a resposta JSON retornada pelo servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor não contem todos os campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Erro no 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>Utilizador errado</h1><p>Entrou com o utilizador <em>%1</em>, mas tem que entrar com o utilizador <em>%2</em>.<br>Por favor saia do %3 no outro separador, depois <a href='%4'>clique aqui</a> e entre com o utilizador %2</p> @@ -2795,12 +2732,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Não foi possível procurar por novas atualizações. @@ -2810,27 +2747,27 @@ - + New %1 is available. Please open %2 to download the update. - + Checking update server … - + 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 @@ -2858,14 +2795,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2890,49 +2827,49 @@ Espaço disponível: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Pasta de Sincronização Local - - + + (%1) (%1) - + There isn't enough free space in the local folder! Não existe espaço disponível na pasta local! @@ -3002,14 +2939,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3074,7 +3003,7 @@ &Seguinte > - + Server address does not seem to be valid @@ -3084,7 +3013,7 @@ URL inválido - + Could not load certificate. Maybe wrong password? Não foi possível carregar o certificado. Talvez palavra passe errada? @@ -3182,54 +3111,54 @@ a criar a pasta na Nextcloud: %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 @@ -3239,12 +3168,12 @@ 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. - + Cannot 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>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -3252,7 +3181,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3262,17 +3191,17 @@ Assistente de ligação %1 - + Skip folders configuration Saltar a configuração das pastas - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3283,12 +3212,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3296,7 +3225,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Resposta JSON inválida do URL poll @@ -3314,17 +3243,17 @@ - + 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. @@ -3339,57 +3268,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3399,72 +3328,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3474,7 +3393,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3487,17 +3406,12 @@ Erro ao escrever a meta-informação par a base de dados - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3510,44 +3424,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery O ficheiro alterou-se desde a sua descoberta - - + + File %1 cannot be downloaded because of a local file name clash! - + 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 local disk space below the limit A transferência iria reduzir o espaço livre local acima do limite - + 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. @@ -3557,12 +3471,12 @@ - + The downloaded file is empty, but the server said it should have been %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. @@ -3572,18 +3486,12 @@ Erro ao gravar os metadados para a base de dados - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3591,12 +3499,12 @@ 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 @@ -3670,12 +3578,12 @@ O ficheiro %1 nao pode ser renomeado para %2 devido a conflito com nome de ficheiro local - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3686,12 +3594,12 @@ Erro ao escrever a meta-informação par a base de dados - + Failed to rename file - + Error setting pin state @@ -3725,12 +3633,12 @@ Erro ao escrever a meta-informação par a base de dados - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3748,22 +3656,22 @@ Código HTTP errado devolvido pelo servidor. Esperado 201, mas foi recebido "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -3771,46 +3679,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + 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. - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 Ficheiro Removido (iniciar upload) %1 - + 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. - + Failed to unlock encrypted folder. @@ -3820,12 +3720,12 @@ Erro ao gravar os metadados para a base de dados - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3833,32 +3733,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing - + 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 @@ -3866,22 +3766,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3959,7 +3859,7 @@ OCC::ServerNotificationHandler - + Dismiss Rejeitar @@ -4129,17 +4029,17 @@ Proteger com palavra-passe - + Allow editing Permitir edição - + View only - + Allow upload and editing Permtir carregamentos e edições @@ -4149,7 +4049,7 @@ Data de Expiração - + File drop (upload only) Pasta de carregamento apenas @@ -4159,32 +4059,32 @@ Cancelar partilha - + Link name - + Note to recipient Nota para o destinatário - + Password protect Proteger com palavra-passe - + Set expiration date Definir a data de expiração - + Delete link - + Add another link Adicionar outra hiperligação @@ -4194,27 +4094,27 @@ Apagar hiperligação de partilha - + Confirm Link Share Deletion Confirmar Eliminação do Link de Partilha - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Eliminar - + Cancel Cancelar - + Public link Hiperligação Pública @@ -4227,12 +4127,12 @@ - + Search globally - + Copy link Copiar ligação @@ -4242,22 +4142,22 @@ Sem resultados para '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Partilhei alguma coisa consigo @@ -4295,42 +4195,42 @@ - + Can reshare Pode voltar a partilhar - + Note to recipient - + Set expiration date - + Unshare Cancelar partilha - + Can create Pode criar - + Can change Pode alterar - + Can delete Pode apagar - + Password protect @@ -4347,23 +4247,23 @@ OCC::SocketApi - + Context menu share Partilha do menu de contexto - + Select new location … - + I shared something with you Partilhei alguma coisa consigo - - + + Share options Opções de partilha @@ -4379,73 +4279,73 @@ - + Copy private link to clipboard Copiar link privado para a área de transferência - + Send private link by email … - + Resharing this file is not allowed Voltar a partilhar não é permitido - + Resharing this folder is not allowed - - + + Copy public link Copiar link publico - + Copy internal link Copiar ligação interna - + Edit - + Open in browser Abrir no navegador - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Eliminar @@ -4591,12 +4491,12 @@ 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>: @@ -4606,62 +4506,62 @@ - + 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 (SHA1): <tt>%1</tt> Chave(SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Chave (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Chave (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data efectiva: %1 - + Expiration Date: %1 Data de Expiração: %1 - + Issuer: %1 Emissor: %1 @@ -4754,33 +4654,33 @@ Ocorreu o erro interno número %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (ignorado devido a erro anterior, tentando novamente em %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Conflito por resolver. - + 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 - + Aborted @@ -4857,16 +4757,16 @@ Nomes de ficheiros acabados com um ponto final não são suportados neste sistema de ficheiros. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Não foi possível abrir ou criar a base de dados de sincronização local. Verifique se tem acesso de gravação na pasta de sincronização. + + 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. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Não foi possível abrir ou criar a base de dados de sincronização local. Verifique se tem acesso de gravação na pasta de sincronização. - - The file name is a reserved name on this file system. O nome de ficheiro é um nome reservado neste sistema de ficheiros. @@ -4887,7 +4787,7 @@ O ficheiro/pasta foi ignorado porque está oculto. - + Using virtual files with suffix, but suffix is not set @@ -4902,7 +4802,7 @@ O nome do ficheiro não pode ser codificado no seu sistema. - + 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 @@ -4917,17 +4817,17 @@ Estado falhou. + + Unable to read from the sync journal. + Não foi possível ler a partir do jornal de sincronização. + + Filename encoding is not valid Codificação de nome de ficheiro não é válida - - 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 @@ -4937,22 +4837,22 @@ Carateres inválidos, por favor, renomeie "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é baixo: Downloads que reduzam o espaço abaixo de %1 serão ignorados. - + There is insufficient space available on the server for some uploads. Não há espaço livre suficiente no servidor para alguns uploads. @@ -5021,49 +4921,49 @@ OCC::Systray - + Add account Adicionar conta - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Configurações - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5071,24 +4971,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versão %1. Para mais informação por favor clique <a href='%2'>aqui</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Esta versão foi fornecida por %1</p> @@ -5096,22 +4996,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5119,32 +5019,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5152,22 +5052,22 @@ OCC::UserModel - + 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 - + Cancel Cancelar @@ -5272,30 +5172,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5817,52 +5699,52 @@ - + %n day ago %n dias atrás%n dia atrás - + %n days ago %n dias atrás%n dias atrás - + in the future no futuro - + %n hour ago %n hora atrás%n hora atrás - + %n hours ago %n horas atrás%n hours ago - + now agora - + Less than a minute ago Menos de um minuto atrás - + %n minute ago %n minuto atrás%n minuto ago - + %n minutes ago %n minutos atrás%n minutes ago\ - + Some time ago Algum tempo atrás @@ -5896,7 +5778,7 @@ SyncJournalDb - + Failed to connect database. @@ -5904,7 +5786,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5941,32 +5823,32 @@ - + Switch to account Trocar para a conta - - Current user status is online - + + Account connected + Conta ligada - - Current user status is do not disturb + + Account not connected - Account connected - Conta ligada + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5976,24 +5858,24 @@ - + Set status - - + + Log out Terminar sessão - - + + Log in Iniciar sessão - + Remove account Remover conta @@ -6054,57 +5936,57 @@ 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 @@ -6112,7 +5994,7 @@ ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho de "checksum" está com problemas. @@ -6145,64 +6027,64 @@ Window - + Nextcloud desktop main dialog - + Current account Conta atual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Adicionar conta - + Add new account - + Settings Configurações - + Exit Sair - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6212,32 +6094,32 @@ - + Account switcher and settings menu - + Connected Ligado - + Disconnected Desligado - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Mais apps @@ -6247,7 +6129,7 @@ - + Open %1 in browser Abrir %1 no navegador @@ -6267,7 +6149,7 @@ - + Unified search results list @@ -6278,7 +6160,7 @@ - + %1 - File activity @@ -6286,7 +6168,7 @@ main.cpp - + System Tray not available Barra de sistema indisponível @@ -6296,7 +6178,7 @@ %1 necessita de uma Barra de Tarefas. Se está a utilizar XFCE, por favor siga as seguintes <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">instruções</a>. Caso contrário, por favor instale uma Barra de Tarefas, por exemplo 'trayer', e tente novamente. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6304,7 +6186,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construido a partir da revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ro.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ro.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ro.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ro.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Deschis %1 local - + Open share dialog Deschide dialogul de partajare - + Share %1 Partajează %1 - - + + Show more actions Arată mai multe acțiuni @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Conexiunea a expirat - + Unknown error: network reply was deleted Eroare necunoscută: răspunsul de rețea a fost șters - + Server replied "%1 %2" to "%3 %4" Răspunsul serverului "%1 %2" to "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Fraza de memorare pentru criptarea end-to-end - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pentru a proteja identitatea ta criptografică noi o criptăm cu o frază de memorare ce conține 12 cuvinte provenite din dictionar (în engleză). Vă rugăm să notați aceste cuvinte și să letineți într-un loc sigur. Acestea vor fi necesare pentru a adăuga alte dispozitive la contul dumneavoastră (de exemplu telefonul mobil sau laptopul). @@ -305,9 +305,9 @@ - - - + + + Cancel Anulează @@ -495,52 +495,52 @@ Elimină conexiunea de sincronizare pentru acest dosar - + Disable virtual file support … Dezactivează suportul pentru fișiere virtuale ... - + Enable virtual file support %1 … Activează suportul pentru fișiere virtuale %1 ... - + (experimental) (experimental) - + Folder creation failed Crearea directorului a eșuat - + <p>Could not create local folder <i>%1</i>.</p> <p>Nu s-a putut creea un dosar local <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Confirmă eliminarea conexiunii de sincronizare - + <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>Dorești să oprești sincronizarea dosarului <i>%1</i>?</p><p><b>Notă:</b> Această funcție <b>nu</b>va șterge nici-un fișier.</p> - + Remove Folder Sync Connection Elimină conexiunea de sincronizare - + Disable virtual file support? Dezactivează suportul pentru fișiere virtuale? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Această acțiune va opri toate sincronizările în derulare din acest moment. - + Disable support Dezactivează suportul - + Sync Running Sincronizare în desfășurare - + The syncing operation is running.<br/>Do you want to terminate it? Operațiunea de sincronizare este în derulare. <br/>Dorești să o oprești ? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) din %2 în folosire. Unele fișiere, inclusiv dosarele partajate prin rețea, ar putea avea limite diferite. - + %1 of %2 in use %1 din %2 utilizat - + Currently there is no storage usage information available. În acest moment nu există informații legate de folosirea spațiului de stocare. - + %1 in use %1 folosiți @@ -603,87 +603,87 @@ Autentificare - + %1 as %2 %1 ca %2 - + The server version %1 is unsupported! Proceed at your own risk. Versiunea serverului %1 este veche și nu mai este menținut!ă Continuă pe propriul tău risc. - + Connected to %1. Conectat la %1. - + Server %1 is temporarily unavailable. Serverul %1 este temporar indisponibil. - + Server %1 is currently in maintenance mode. Serverul %1 este momentan in mentenanță, - + Signed out from %1. Deautentificat de la %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Se obține autorizarea de la browser. <a href='%1'>Click aici</a> pentru a redeschide browser-ul. - + Connecting to %1 … Se conectează la %1 ... - + No connection to %1 at %2. Nu există nici-o conexiune către %1 la %2. - + Server configuration error: %1 at %2. Eroare de configurare a serverulu: %1 la %2. - + No %1 connection configured. Nu există nici-o conexiune configurată la %1. - + There are folders that were not synchronized because they are too big: Există dosare ce nu au fost sincronizate deoarece au o dimenziune prea mare: - + There are folders that were not synchronized because they are external storages: Există dosare ce nu sunt sincronizate deoarece se află pe stocarea externă: - + There are folders that were not synchronized because they are too big or external storages: Există dosare ce nu au fost sinscronizate deoarece acestea sunt prea mari sau se află pe stocarea externă: - + Confirm Account Removal Confirmați ștergerea contului - + <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>Doriți să ștergeți conexiunea la acest cont <i>%1</i>?</p><p><b>Notă:</b>Această acțiune <b>nu</b>va șterge nici-un fișier.</p> - + Remove connection Șterge conexiunea @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Deconectat - + Disconnected Deconenctat - + Connected Conectat - + Service unavailable Serviciu indisponibil - + Maintenance mode Mod mentenanță - + Network error Eroare de rețea - + Configuration error Eroare de configurare - + Asking Credentials Întrebare despre acreditări - + Unknown account state Nu se cunoaște starea contului @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Fișierele din lista de ignorare precum și legăturile simbolice nu sunt sincronizate. - + For more activities please open the Activity app. Pentru mai multe activități vă rugăm deschideți aplicația de activități. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Dacă continuați aceste setări <b>vor fi șterse</b>. - + Continuing will mean <b>ignoring these settings</b>. Dacă continuați aceste setări <b>vor fi ignorate</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Unele setări au fost configurate în versiuni mai noi ale acetui client folosind niște opțiuni ce nu sunt disponibile în această versiune. <br><br> %1<br><br>Fișierul de configurare a fost deja copiat la <i>%2</i>. - + Quit Ieșire - + Continue Continuare - + Error accessing the configuration file A apărut o eroare în accesarea fișierului de ocnfigurare - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. A apărut o eroare în accesarea fișierului de configurare la %1. Vă rugăm să vă asigurați că fișierul poate fi accesat de către acest utilizator. - + Quit %1 Ieșire %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database A apărut o eroare în timpul scrierii de metadata în baza de date @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Vă rugăm să introduceți fraza de criptare end to end: <br><br>Utilizator:%2<br>Cont:%3<br> - + Enter E2E passphrase Introduceți fraza E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Răspunsul serverului are date lipsă - - + + Server error: PROPFIND reply is not XML formatted! Eroare de server: PROPFIND reply is not XML formatted! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 A apărut o eroare în timpul deschiderii dosarului %1 - + Directory not accessible on client, permission denied Dosarul nu este accesibil pe acest client, accesul este refuzat - + Directory not found: %1 Dosarul nu a fost găsit: %1 - + Filename encoding is not valid Encodarea numelui fisierului nu este validă - + Error while reading directory %1 A apărut o eroare in timpul citirii dosarului %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Răspunsul serverului conține o eroare: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> A apărut o eroare in accesarea punctului final 'token': <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Nu sa putut analiza fișierul JSON provenit de la server: <br><em>%1</em> - + The reply from the server did not contain all expected fields Răspunsul de la server nu conține toate informațiile așteptate - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Deși URL-ul începe cu HTTPS, adresa URL-ului de pooling nu începe cu HTTPS. Autentificarea nu va fii posibilă deoarece ar putea exista o problemă de securitate. Vă rugăm contactați administartorul dumneavoastră. @@ -1368,40 +1305,40 @@ Activitate de sincronizare - + Could not read system exclude file Nu sa putut citi fișierul de excludere - + A new folder larger than %1 MB has been added: %2. Un nou fisier mai mare de %1 MB a fost adăugat: %2. - + A folder from an external storage has been added. Un dosar dintr-o locație externă de stocare a fost adăugat. - + Please go in the settings to select it if you wish to download it. Vă rugăm să selectați în setări dacă doriți să descărcați acest fișier. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Dosarul %1 a fost creeat dar a fost exclus, în trecut de la sincronizare. Conținutul nu va fii sincronizat. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Fisierul %1 a fost creeat dar a fost exclus, în trecut de la sincronizare. Acest nu va fii sincronizat. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1414,6 +1351,15 @@ %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. + Toate fisierele din dosarul local de sincronizare '%1' au fost șterse. Aceste acțiuni vor fi sincronizate cu serverul tău, drept urmare aceste fisiere vor deveni indisponibile. +Ești sigur că dorești să sincronizezi toate aceste acțiuni cu serverul ? +Dacă această acțiune a fost un accident și dorești să pastrezi fișierele, acestea pot fi resincronizate de pe server. + + All files in the sync folder '%1' 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. @@ -1471,24 +1417,7 @@ Păstrează fișierele locale ca și conflicte - - 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 restore 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. - - - - - 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. - Toate fisierele din dosarul local de sincronizare '%1' au fost șterse. Aceste acțiuni vor fi sincronizate cu serverul tău, drept urmare aceste fisiere vor deveni indisponibile. -Ești sigur că dorești să sincronizezi toate aceste acțiuni cu serverul ? -Dacă această acțiune a fost un accident și dorești să pastrezi fișierele, acestea pot fi resincronizate de pe server. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1496,24 +1425,32 @@ - + 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? Ștergeți toate fișierele ? - + Remove all files Șterge toate fișierele - + + 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 restore 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. + + + + Keep files Păstrează fișierele @@ -1549,7 +1486,7 @@ OCC::FolderMan - + Could not reset folder state Nu s-a putut reseta starea dosarului @@ -1559,37 +1496,37 @@ Un jurnal de sicronizare vechi '%1' a fost găsit, dar acesta nu a putut fi șters. Vă rugăm să vă asigurați că acest jurnal nu este folosit de o aplicație. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Un jurnal de sicronizare vechi '%1' a fost găsit, dar acesta nu a putut fi șters. Vă rugăm să vă asigurați că acest jurnal nu este folosit de o aplicație. - + (backup) copie de siguranță (backup) - + (backup %1) copia de siguranță %1 (backup) - + Undefined State. Stare nedefinită - + Waiting to start syncing. Se așteaptă pentru a începe sincronizarea. - + Preparing for sync. Se pregătește sincronizarea. - + Sync is running. Sincronizare în derulare @@ -1599,67 +1536,67 @@ Sincronizarea a reușit, conflicte nerezolvate. - + Sync finished with unresolved conflicts. Sincronizarea a reușit cu conflicte nenrezolvate. - + Last Sync was successful. Ultima sincronizare a fost un succes. - + Setup Error. Eroare de configurare, - + User Abort. Anulați utilizatorul. - + Sync is paused. Sincronizarea este oprită. - + %1 (Sync is paused) %1 (Sincronizarea este oprită) - + No valid folder selected! Nu este selectat un dosar valid! - + The selected path does not exist! Calea selectaă nu există! - + The selected path is not a folder! Calea selectaă nu este un dosar! - + You have no permission to write to the selected folder! Nu ai permisiunea de a scrie în dosarul selectat! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Dosarul local %1 conține deja un dosar folosit pentru sincronizare. Vă rugăm să alegeți un dosar diferit! - + There is already a sync from the server to this local folder. Please pick another local folder! Deja există un dosar de sincronizare de la acest sever către acest server. Vă rugăm să selectați un dosar local diferit! @@ -1871,12 +1808,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Adaugă conexiunea de sincronizare pentru dosar - + Add Sync Connection Aadaugă conexiune de sincronizare @@ -1917,42 +1854,42 @@ Introduceți numele noului dosar ce va fii creat mai joi '%1'. - + Folder was successfully created on %1. Dosarul a fost creeat cu succes pe %1. - + Authentication failed accessing %1 Autentificarea a eșuat în momentul accesării %1 - + Failed to create the folder on %1. Please check manually. Nu se poate creea un dosar pe %1. Vă rugăm să verificați manual. - + Failed to list a folder. Error: %1 A apărut o eroare in timpul listării dosarului. Eroare: %1 - + Choose this to sync the entire account Apasă aici pentru a sincroniza tot contul - + This folder is already being synced. Acest dosar este deja sincronizat - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Deja sincronizezi <i>%1</i>, care este un dosar păritnte pentru <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Deja sincronizezi <i>%1</i>,. care este un subdosar al <i>%2</i>. @@ -1960,24 +1897,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Folosește fișiere virtuale în loc să descarci continutul imediat %1 - - + + (experimental) (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Fișierele virtuale nu sunt suportate pentru partițiile Wwindows ca dosar local. Vă rugăm să alegeți un subdosar valid. - + Virtual files are not available for the selected folder Fișierele virtuale nu sunt disponibile pentru dosarul selectat @@ -1998,27 +1935,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nu s-a primit nici-un E-Tag de la server, verifică setările pentru Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Am primit un E-Tag diferit pentru a relua activitatea. Se reîncearcă data viitoare. - + We received an unexpected download Content-Length. - + Server returned wrong content-range - + Connection Timeout Eroare de conexiune @@ -2138,54 +2075,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel Anulează - + Create Debug Archive - + Zip Archives Arhive Zip - + Debug Archive Created - + Debug archive is created at %1 @@ -2193,22 +2130,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: - + Sharing error Eroare la partajare - + Could not retrieve or create the public link share. Error: %1 @@ -2524,7 +2461,7 @@ OCC::Logger - + Error Eroare @@ -2534,7 +2471,7 @@ - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2542,33 +2479,33 @@ 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 Obține actualizare - + Update Failed @@ -2583,17 +2520,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2704,7 +2641,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Eroare returnată de server: <em>%1</em> @@ -2714,32 +2651,32 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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>Eroare la autentificare</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> @@ -2808,12 +2745,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. @@ -2823,27 +2760,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 Verificare actualizări @@ -2871,14 +2808,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2903,49 +2840,49 @@ Spațiu disponibil: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3015,14 +2952,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3087,7 +3016,7 @@ &Următorul > - + Server address does not seem to be valid @@ -3097,7 +3026,7 @@ URL invalid - + Could not load certificate. Maybe wrong password? @@ -3195,54 +3124,54 @@ - + 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 @@ -3252,12 +3181,12 @@ - + Cannot 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> @@ -3265,7 +3194,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3275,17 +3204,17 @@ - + Skip folders configuration - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3296,12 +3225,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3309,7 +3238,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL @@ -3327,17 +3256,17 @@ - + 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. @@ -3352,57 +3281,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3412,72 +3341,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3487,7 +3406,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3500,17 +3419,12 @@ - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3523,44 +3437,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! - + 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. @@ -3570,12 +3484,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! @@ -3585,18 +3499,12 @@ - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3604,12 +3512,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3683,12 +3591,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3699,12 +3607,12 @@ - + Failed to rename file - + Error setting pin state @@ -3738,12 +3646,12 @@ - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3761,22 +3669,22 @@ - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database @@ -3784,46 +3692,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - + + Upload of %1 exceeds the quota for the folder - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + Failed to unlock encrypted folder. @@ -3833,12 +3733,12 @@ - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3846,32 +3746,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. - + Local file changed during sync. - + Poll URL missing - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -3879,22 +3779,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3972,7 +3872,7 @@ OCC::ServerNotificationHandler - + Dismiss Înlătură @@ -4142,17 +4042,17 @@ Protejare cu parolă - + Allow editing Permite editarea - + View only - + Allow upload and editing Permite încărcarea și editarea @@ -4162,7 +4062,7 @@ Data expirării - + File drop (upload only) Aruncă fișierul (numai încărcare) @@ -4172,32 +4072,32 @@ Anulare partajare - + Link name - + Note to recipient Notă către destinatar - + Password protect Protejare cu parolă - + Set expiration date Specifică data expirării - + Delete link - + Add another link Adaugă un alt link @@ -4207,27 +4107,27 @@ Șterge linkul partajat - + Confirm Link Share Deletion - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> - + Delete Șterge - + Cancel Anulează - + Public link Link public @@ -4240,12 +4140,12 @@ - + Search globally - + Copy link Copiză link @@ -4255,22 +4155,22 @@ Niciun rezultat pentru '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Am partajat ceva cu tine @@ -4308,42 +4208,42 @@ - + Can reshare Poate repartaja - + Note to recipient - + Set expiration date - + Unshare Anulare partajare - + Can create Poate crea - + Can change Poate schimba - + Can delete Poate șterge - + Password protect @@ -4360,23 +4260,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you Am partajat ceva cu tine - - + + Share options @@ -4392,73 +4292,73 @@ - + Copy private link to clipboard - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link Copiză link public - + Copy internal link Copiază linkul intern - + Edit - + Open in browser Deschide în Browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Șterge @@ -4602,12 +4502,12 @@ - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: @@ -4617,62 +4517,62 @@ - + with Certificate %1 - - - + + + &lt;not specified&gt; - - + + Organization: %1 - - + + Unit: %1 - - + + Country: %1 - + Fingerprint (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 - + Expiration Date: %1 - + Issuer: %1 @@ -4765,33 +4665,33 @@ - + %1 (skipped due to earlier error, trying again in %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Aborted @@ -4868,13 +4768,13 @@ - - File names containing the character '%1' are not supported on this file system. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + File names containing the character '%1' are not supported on this file system. @@ -4898,7 +4798,7 @@ - + Using virtual files with suffix, but suffix is not set @@ -4913,7 +4813,7 @@ - + Unable to read the blacklist from the local database @@ -4928,17 +4828,17 @@ - - Filename encoding is not valid + + Unable to read from the sync journal. - - Unable to read from the sync journal. + + Filename encoding is not valid - + Cannot open the sync journal @@ -4948,22 +4848,22 @@ + + Synchronization will resume shortly. + + + File name contains at least one invalid character Numele fișierului conține cel puțin un caracter invalid - - Synchronization will resume shortly. - - - - + 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. @@ -5032,49 +4932,49 @@ OCC::Systray - + Add account Adaugă cont - + Open main dialog + - Pause sync - - + + Resume sync - + Settings Setări - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5082,24 +4982,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5107,22 +5007,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5130,32 +5030,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5163,22 +5063,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5283,30 +5183,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5828,52 +5710,52 @@ - + %n day ago - + %n days ago - + in the future în viitor - + %n hour ago - + %n hours ago - + now acum - + Less than a minute ago acum mai putin de un minut - + %n minute ago - + %n minutes ago - + Some time ago @@ -5907,7 +5789,7 @@ SyncJournalDb - + Failed to connect database. @@ -5915,7 +5797,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5952,32 +5834,32 @@ - + Switch to account - - Current user status is online - + + Account connected + Cont conectat - - Current user status is do not disturb + + Account not connected - Account connected - Cont conectat + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5987,24 +5869,24 @@ - + Set status - - + + Log out Ieșire - - + + Log in Autentificare - + Remove account Sterge contul @@ -6065,57 +5947,57 @@ Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 @@ -6123,7 +6005,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6156,64 +6038,64 @@ Window - + Nextcloud desktop main dialog - + Current account Cont actual - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Adaugă cont - + Add new account - + Settings Setări - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6223,32 +6105,32 @@ - + Account switcher and settings menu - + Connected Conectat - + Disconnected Deconenctat - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Mai multe aplicatii @@ -6258,7 +6140,7 @@ - + Open %1 in browser Deschide %1 în Browser @@ -6278,7 +6160,7 @@ - + Unified search results list @@ -6289,7 +6171,7 @@ - + %1 - File activity @@ -6297,7 +6179,7 @@ main.cpp - + System Tray not available @@ -6307,7 +6189,7 @@ - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6315,7 +6197,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ru.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ru.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_ru.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_ru.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,38 +10,38 @@ ActivityItem - + Open %1 locally Открыть «%1» на ПК - + Open share dialog Открыть диалог публикации - + Share %1 Опубликовать «%1» - - + + Show more actions Дополнительные действия View activity - Просмотр активности + ActivityList - + Activity list - Список действий + @@ -144,7 +144,7 @@ Could not move "%1" to "%2" - Не удалось переместить "%1" в "%2" + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Превышено время ожидания соединения - + Unknown error: network reply was deleted Неизвестная ошибка: сетевой ответ был удален - + Server replied "%1 %2" to "%3 %4" На запрос «%3 %4» от сервера получен ответ «%1 %2» @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Мнемофраза сквозного шифрования - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Для защиты личного идентификатора сквозного шифрования используется мнемофраза, состоящая из двенадцати слов. Мнемофразу следует записать и сохранить запись в надёжном месте, она потребуется для подключения к учётной записи ваших дополнительных устройств. @@ -305,9 +305,9 @@ - - - + + + Cancel Отмена @@ -494,52 +494,52 @@ Отключить синхронизацию папки - + Disable virtual file support … Отключить поддержку виртуальных файлов… - + Enable virtual file support %1 … Включить поддержку виртуальных файлов %1… - + (experimental) (экспериментальное) - + Folder creation failed Ошибка создания папки - + <p>Could not create local folder <i>%1</i>.</p> <p>Не удалось создать локальную папку: <i>«%1»</i>.</p> - + Confirm Folder Sync Connection Removal Подтверждение отключения синхронизации папки - + <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> - + Remove Folder Sync Connection Отключить синхронизацию папки - + Disable virtual file support? Отключить поддержку виртуальных файлов? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -552,37 +552,37 @@ Отключение приведёт к прекращению выполняющейся синхронизации. - + Disable support Отключить поддержку - + Sync Running Синхронизация запущена - + The syncing operation is running.<br/>Do you want to terminate it? Выполняется синхронизация.<br/>Действительно прервать операцию? - + %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. В данный момент информация о заполненности хранилища недоступна. - + %1 in use Используется %1 @@ -602,87 +602,87 @@ Войти - + %1 as %2 %1: %2 - + The server version %1 is 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. - + Server configuration error: %1 at %2. Ошибка конфигурации сервера: %1: %2. - + No %1 connection configured. Нет настроенного подключения %1. - + 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 Удалить подключение @@ -690,47 +690,47 @@ OCC::AccountState - + Signed out Выполнен выход из учётной записи - + Disconnected Отключено - + Connected Подключено - + Service unavailable Сервис недоступен - + Maintenance mode Режим технического обслуживания. - + Network error Ошибка сети - + Configuration error Ошибка конфигурации - + Asking Credentials Запрос учётных данных - + Unknown account state Неизвестное состояние учетной записи @@ -738,12 +738,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Из синхронизации исключены символьные ссылки и файлы, попадающие под правила из списка игнорируемых файлов. - + For more activities please open the Activity app. Вся история доступна в приложении «События». @@ -804,42 +804,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. При продолжении, эти <b>параметры будут удалены</b>. - + Continuing will mean <b>ignoring these settings</b>. При продолжении, эти <b>параметры будут проигнорированы</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Используемая версия приложения не поддерживает некоторые параметры, настроенные в более новой версии. <br><br>%1<br><br> Резервная копия файла конфигурации сохранена в <i>%2</i>. - + Quit Выйти - + Continue Продолжить - + Error accessing the configuration file Ошибка при доступе к файлу конфигурации - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Ошибка при обращении к файлу конфигурации «%1», убедитесь, что файл доступен. - + Quit %1 Выйти из %1 @@ -873,59 +873,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -933,12 +883,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Введите свою парольную фразу сквозного шифрования: <br><br> Пользователь: %2<br>Учётная запись: %3<br> - + Enter E2E passphrase Введите парольную фразу сквозного шифрования @@ -1104,19 +1054,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1124,8 +1061,8 @@ Сервер вернул ответ, не содержащих данных о файле. - - + + Server error: PROPFIND reply is not XML formatted! Ошибка сервера: ответ PROPFIND не в формате XML. @@ -1133,27 +1070,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Не удалось открыть каталог «%1» - + Directory not accessible on client, permission denied Каталог не доступен для клиента, доступ запрещён - + Directory not found: %1 Каталог «%1» не найден - + Filename encoding is not valid Некорректная кодировка имени файла - + Error while reading directory %1 Не удалось прочитать содержимое каталога «%1» @@ -1177,7 +1114,7 @@ - + Error returned from the server: <em>%1</em> Сервер сообщил об ошибке: <em>%1</em> @@ -1189,24 +1126,24 @@ - + 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 В ответе сервера содержатся не все ожидаемые поля - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. При запросе процедуры авторизации с использованием HTTPS получен адрес сервера, не использующего HTTPS. Продолжение процедуры авторизации будет прервано, так как такой вход небезопасен. Сообщите о ситуации системному администратору. @@ -1367,41 +1304,41 @@ Журнал синхронизации - + Could not read system exclude file Невозможно прочесть системный файл исключений - + A new folder larger than %1 MB has been added: %2. Добавлена новая папка «%2», размер которой превышает %1 МБ. - + A folder from an external storage has been added. Добавлена папка внешнего хранилища. - + Please go in the settings to select it if you wish to download it. Чтобы скачать его, перейдите в параметры приложения и отметьте его для синхронизации. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Создана папка «%1» создана, но ранее она была исключена из синхронизации. Данные внутри этой папки не будут синхронизированы. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Создан файл «%1», но ранее он был исключён из синхронизации. Этот файл не будет синхронизирован. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1413,6 +1350,15 @@ %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» удалены все файлы. Информация об удалении будет отправлена на сервер, таким образом сделав файлы недоступными, если только не восстанавливать их из резервной копии. +Действительно выполнить синхронизировать с этими изменениями? +Если это произошло случайно, и вы решите сохранить файлы, они будут повторно скачаны с сервера. + + All files in the sync folder '%1' 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. @@ -1470,8 +1416,8 @@ Сохранить локальные файлы как конфликтующие - - All files in the sync folder '%1' folder were deleted on the server. + + 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 restore 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. @@ -1481,8 +1427,8 @@ При выборе «Удалить файлы», файлы станут недоступны, кроме случая, когда вы являетесь их владельцем. - - 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. + + 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» удалены все файлы. Информация об удалении будет отправлена на сервер, таким образом сделав файлы недоступными, если только не восстанавливать их из резервной копии. @@ -1491,7 +1437,17 @@ - All files in the sync folder "%1" folder were deleted on the server. + Remove All Files? + Удалить все файлы? + + + + Remove all files + Удалить все файлы + + + + 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 restore 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. @@ -1502,25 +1458,6 @@ - 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 Сохранить файлы @@ -1556,7 +1493,7 @@ OCC::FolderMan - + Could not reset folder state Невозможно сбросить состояние папки @@ -1566,37 +1503,37 @@ Найден старый журнал синхронизации '%1', и он не может быть удалён. Убедитесь что он не открыт в другом приложении. - + 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. Идет синхронизация. @@ -1606,67 +1543,67 @@ Синхронизация прошла успешно, но обнаружены неразрешённые конфликты. - + Sync finished with unresolved conflicts. Синхронизация завершена с неразрешенными конфликтами. - + Last Sync was successful. Последняя синхронизация прошла успешно. - + Setup Error. Ошибка установки. - + User Abort. Отмена пользователем. - + Sync is paused. Синхронизация приостановлена. - + %1 (Sync is paused) %1 (синхронизация приостановлена) - + No valid folder selected! Не выбрана допустимая папка. - + The selected path does not exist! Выбранный путь не существует - + The selected path is not a folder! Выбранный путь не является папкой. - + You have no permission to write to the selected 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» является вложенной в папку, которая уже синхронизируется с сервером. Выберите другую папку. - + There is already a sync from the server to this local folder. Please pick another local folder! Синхронизация этой локальной папки с сервером уже настроена. Выберите другую локальную папку. @@ -1878,12 +1815,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Добавление подключения синхронизации папки - + Add Sync Connection Добавить подключение для синхронизации @@ -1924,42 +1861,42 @@ Введите имя папки для создания внутри «%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 <i>%1</i>, which is a subfolder of <i>%2</i>. Папка <i>«%1»</i> уже настроена для синхронизации, и она является вложенной для папки <i>«%2»</i>. @@ -1967,24 +1904,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Использовать виртуальные файлы вместо загрузки %1 - - + + (experimental) (экспериментальная функция) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. В ОС Windows механизм виртуальных файлов не поддерживается для корневой уровня файловой системы. Для продолжения выберите папку на диске, а не сам диск. - + Virtual files are not available for the selected folder Использование виртуальные файлов недоступно для выбранной папки @@ -2005,27 +1942,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway E-Tag от сервера не получен, проверьте настройки прокси/шлюза. - + We received a different E-Tag for resuming. Retrying next time. Получена отличающаяся метка возобновления, будет произведена ещё одна попытка. - + We received an unexpected download Content-Length. Получено неожиданное значение размера данных. - + Server returned wrong content-range Сервер вернул неверный диапазон содержимого - + Connection Timeout Время ожидания подключения истекло @@ -2145,22 +2082,22 @@ Создать архив с отладочными данными… - + Server notifications that require attention. Требующие внимания уведомления, полученные с сервера. - + You cannot disable autostart because system-wide autostart is enabled. Автоматический запуск не может быть отключен, т.к. он настроен на уровне системы. - + Change update channel? Сменить канал обновлений? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2169,32 +2106,32 @@ Обратите внимание, что смена канала возможна переход только при увеличения внутренней версии приложения: переход со стабильного на бета-канал происходит моментально, а переход с бета-канала на стабильный потребует времени, пока стабильная версия станет новее установленной бета-версии. - + Change update channel Сменить канал обновлений - + Cancel Отменить - + Create Debug Archive Создать архив с отладочными данными - + Zip Archives Zip архивы - + Debug Archive Created Создан архив с отладочными данными - + Debug archive is created at %1 Архив с отладочными данными создан: «%1» @@ -2202,22 +2139,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Требуется задать пароль для общего ресурса - + Please enter a password for your link share: Задайте пароль для доступа по ссылке: - + Sharing error Ошибка общего доступа - + Could not retrieve or create the public link share. Error: %1 @@ -2353,62 +2290,62 @@ Invalid filename - Неверное имя файла + The file could not be synced because it contains characters which are not allowed on this system. - Файл не может быть синхронизирован, поскольку он содержит символы, недопустимые в этой системе. + Error - Ошибка + Please enter a new name for the file: - Введите новое имя для файла: + New filename - Новое имя файла + Rename file - Переименуйте файл + The file %1 could not be synced because the name contains characters which are not allowed on this system. - Не удалось синхронизировать файл % 1, поскольку имя содержит символы, недопустимые в этой системе. + The following characters are not allowed on the system: * " | & ? , ; : \ / ~ < > - В системе запрещены следующие символы: * "| &?,;: \ / ~ <> + You don't have the permission to rename this file. Please ask the author of the file to rename it. - У вас нет разрешения на переименование этого файла. Попросите автора файла переименовать его. + Filename contains illegal characters: %1 - Имя файла содержит недопустимые символы: % 1 + Could not rename file. Please make sure you are connected to the server. - Не удалось переименовать файл. Убедитесь, что вы подключены к серверу. + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Невозможно переименовать файл, поскольку файл с таким именем уже существует на сервере. Пожалуйста, выберите другое имя. + @@ -2541,7 +2478,7 @@ OCC::Logger - + Error Ошибка @@ -2551,7 +2488,7 @@ <nobr>Файл '%1'<br/>не может быть открыт на запись.<br/><br/>Журнал <b>не может</b> быть сохранён!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Файл «%1»<br/>не может быть открыт на запись.<br/><br/>Журнал <b>не может</b> быть сохранён!</nobr> @@ -2559,33 +2496,33 @@ 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 Получить обновление - + Update Failed Сбой обновления @@ -2600,17 +2537,17 @@ <p>Новая версия %1 клиента доступна, но произошёл сбой в процессе обновления.</p><p><b>%2</b> был загружен. Установлена версия %3. При подтверждении перезапуска и обновления, для завершения установки компьютер может быть перезагружен.</p> - + Ask again later Спросить позже - + Restart and update Перезагрузить и обновить - + Update manually Обновить вручную @@ -2721,7 +2658,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Сервер вернул ошибку: <em>%1</em> @@ -2731,32 +2668,32 @@ При доступе к конечной точке 'токена' произошла ошибка: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Ошибка при доступе к механизму обработки токенов: <br><em>%1</em> - + Empty JSON from OAuth2 redirect При перенаправлении с Oauth2 получен пустой ответ в формате JSON - + 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> @@ -2823,45 +2760,45 @@ Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Не удалось загрузить обновление. Откройте <a href='%1'>1%</a>, чтобы загрузить обновление вручную. + - + Could not download update. Please open %1 to download the update manually. Не удалось загрузить обновление. Откройте %1, чтобы загрузить обновление вручную. - + Could not check for new updates. Не удалось проверить наличие новых обновлений. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Доступен новый % 1. Откройте <a href='%2'>%2</a>, чтобы загрузить обновление. + - + New %1 is available. Please open %2 to download the update. Доступен новый %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 Проверка обновлений @@ -2889,14 +2826,14 @@ Подключиться... - - + + Use &virtual files instead of downloading content immediately %1 Использовать &виртуальные файлы вместо загрузки %1 - - + + (experimental) (экспериментальная функция) @@ -2921,49 +2858,49 @@ Свободно: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. В ОС Windows механизм виртуальных файлов не поддерживается для корневой уровня файловой системы. Для продолжения выберите папку на диске, а не сам диск. - + %1 folder "%2" is synced to local folder "%3" %1 каталог «%2» синхронизирован с локальной папкой «%3» - + Sync the folder "%1" Синхронизировать папку «%1» - + Warning: The local folder is not empty. Pick a resolution! Предупреждение: локальная папка не пуста. Выберите действие! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 свободного места - + Virtual files are not available for the selected folder Использование виртуальные файлов недоступно для выбранной папки. - + Local Sync Folder Локальный каталог синхронизации - - + + (%1) (%1) - + There isn't enough free space in the local folder! Недостаточно свободного места в локальной папке. @@ -3033,14 +2970,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3107,7 +3036,7 @@ &Далее > - + Server address does not seem to be valid Адрес сервера недействителен @@ -3117,7 +3046,7 @@ Неверная ссылка - + Could not load certificate. Maybe wrong password? Невозможно загрузить сертификат. Возможно неверный пароль? @@ -3215,54 +3144,54 @@ создание папки на сервере Nextcloud: %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 Ошибка переименования папки @@ -3272,12 +3201,12 @@ Невозможно удалить каталог и создать его резервную копию, каталог или файл в ней открыт в другом приложении. Закройте каталог или файл и нажмите «Повторить попытку», либо прервите работу мастера настройки. - + Cannot 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> @@ -3285,7 +3214,7 @@ OCC::OwncloudWizard - + Add %1 account Создание учётной записи %1 @@ -3295,17 +3224,17 @@ Мастер подключения %1 - + Skip folders configuration Пропустить настройку папок - + Enable experimental feature? Использовать экспериментальную функцию? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3322,12 +3251,12 @@ Так как эта функция является экспериментальной, сообщайте разработчикам об ошибках в её работе. - + Enable experimental placeholder mode Использовать экспериментальную функцию подстановки - + Stay safe Не рисковать @@ -3335,7 +3264,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL С опрашиваемого адреса получен неверный ответ в формате JSON @@ -3345,25 +3274,25 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Файл содержит конечные пробелы и не может быть переименован, поскольку файл с таким именем уже существует на сервере. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Файл содержит конечные пробелы и не может быть переименован, поскольку файл с таким именем уже существует локально. + - + 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. Используемая файловая система не поддерживает имена файлов, оканчивающиеся на точку. @@ -3378,57 +3307,57 @@ Используемая файловая система не поддерживает имена файлов, содержащие символ «%1». - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - + The file name is a reserved name on this file system. Имя файла является зарезервированным внутренним именем в используемой файловой системе. - + Filename contains trailing spaces. Имя файла содержит пробелы на конце. - + Filename is too long. Имя файла слишком длинное. - + File/Folder is ignored because it's hidden. Файл или папка исключены из синхронизации, так как являются скрытыми. - + Stat failed. Ошибка вызова функции stat. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Конфликт: загружена версия файла с сервера, а локальная копия переименована и не передана на сервер. - + The filename cannot be encoded on your file system. Имя файла не может быть закодировано для используемой файловой системы. - + The filename is blacklisted on the server. Имя файла внесено в чёрный список на сервере. - + File has extension reserved for virtual files. Расширение файла является зарезервированным для виртуальных файлов. - + size размер @@ -3438,72 +3367,62 @@ права доступа - - server reported no %1 - ответ сервера: %1 отсуствует - - - - permission - разрешение - - - + file id id файла - - Server reported no %1 - Сервер сообщил об отсутствии % 1 + + server reported no %1 + ответ сервера: %1 отсуствует - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Передача файлов в папку на сервере привела к конфликту версий. Файлы, вызвавшие конфликт версий, будут удалены. - + Conflict when uploading a folder. It's going to get cleared! Передача папки на сервер привела к конфликту версии. Папка, вызвавшая конфликт версии, будет удалена. - + Conflict when uploading a file. It's going to get removed! Передача файла на сервер привела к конфликту версии. Файл, вызвавший конфликт версии, будет удалён. - + 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 because you don't have permission to add files in that folder Недостаточно прав для создания файлов в этой папке - + Not allowed to upload this file because it is read-only on the server, restoring Передача этого файла на сервер не разрешена, т.к. он доступен только для чтения, выполняется восстановление - + Moved to invalid target, restoring Перемещено в некорректное расположение, выполняется восстановление - + Not allowed to remove, restoring Удаление недопустимо, выполняется восстановление - + Error while reading the database Ошибка чтения базы данных @@ -3513,7 +3432,7 @@ Ошибка сервера при попытке прочитать каталог «%1»: %2 - + Server replied with an error while reading directory "%1" : %2 Ошибка сервера при попытке прочитать каталог «%1»: %2 @@ -3526,17 +3445,12 @@ Ошибка записи метаданных в базу данных - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Ошибка обновления метаданных: %1 - + File is currently in use Файл используется @@ -3549,44 +3463,44 @@ Файл «%1» не может быть загружен из-за отсутствия информации о применяемом шифровании. - + File %1 cannot be downloaded because encryption information is missing. Файл %1 не может быть загружен из-за отсутствия информации о применяемом шифровании. - - + + File has changed since discovery После обнаружения файл был изменен - - + + File %1 cannot be downloaded because of a local file name clash! Файл %1 не может быть загружен из-за локального конфликта имён. - + File %1 can not be downloaded because of a local file name clash! Файл «%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. Невозможно полностью загрузить файл. @@ -3596,12 +3510,12 @@ Скачанный файл пуст, хотя сервер сообщил, что его размер должен составлять %1. - + The downloaded file is empty, but the server said it should have been %1. Скачанный файл пуст, хотя сервер сообщил, что его размер должен составлять %1 - + File %1 cannot be saved because of a local file name clash! Файл «%1» не может быть сохранён по причине локального конфликта имён. @@ -3611,18 +3525,12 @@ Ошибка записи метаданных в базу данных - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Ошибка обновления метаданных: %1 - + The file %1 is currently in use Файл «%1» используется @@ -3630,12 +3538,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Восстановление не удалось: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Файл или папка была удалена из доступа только для чтения, восстановление завершилось с ошибкой: %1 @@ -3709,12 +3617,12 @@ Файл «%1» не может быть переименован в «%2» из-за локального конфликта имён - + Error updating metadata: %1 Ошибка обновления метаданных: %1 - + The file %1 is currently in use Файл «%1» используется @@ -3725,12 +3633,12 @@ Ошибка записи метаданных в базу данных - + Failed to rename file Не удалось переименовать файл - + Error setting pin state Не удалось задать состояние pin @@ -3764,12 +3672,12 @@ Ошибка записи метаданных в базу данных - + Error writing metadata to the database: %1 Ошибка записи метаданных в базу данных: %1 - + The file %1 is currently in use Файл «%1» используется @@ -3787,22 +3695,22 @@ Сервер ответил неправильным кодом HTTP. Ожидался 201, но получен «%1 %2». - + Error updating metadata: %1 Ошибка обновления метаданных: %1 - + The file %1 is currently in use Файл «%1» используется - + Error setting pin state Не удалось задать состояние pin - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -3810,46 +3718,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Не удалось передать на сервер зашифрованный файл. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Невозможно загрузить файл «%1», так как уже существует файл с тем же именем, но отличающимся регистром символов - - + + Upload of %1 exceeds the quota for the folder При передаче «%1» на сервер будет превышена квота, установленная для папки - + File Removed (start upload) %1 Файл удалён (начало передачи) %1 - + Local file changed during syncing. It will be resumed. Локальный файл изменился в процессе синхронизации. Операция будет возобновлена. - + Local file changed during sync. Локальный файл был изменён во время синхронизации. - + Failed to unlock encrypted folder. Не удалось разблокировать зашифрованную папку. @@ -3859,12 +3759,12 @@ Ошибка записи метаданных в базу данных - + Error updating metadata: %1 Ошибка обновления метаданных: %1 - + The file %1 is currently in use Файл «%1» используется @@ -3872,32 +3772,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Локальный файл был удалён в процессе синхронизации. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + Poll URL missing Не хватает сформированного URL - + Unexpected return code from server (%1) Неожиданный код завершения от сервера (%1) - + Missing File ID from server Отсутствует код файла от сервера - + Missing ETag from server Отсутствует ETag с сервера @@ -3905,22 +3805,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3998,7 +3898,7 @@ OCC::ServerNotificationHandler - + Dismiss Отклонить @@ -4168,17 +4068,17 @@ Защитить паролем - + Allow editing Разрешить редактирование - + View only - Только просмотр + - + Allow upload and editing Разрешить приём и редактирование @@ -4188,7 +4088,7 @@ Срок действия - + File drop (upload only) Хранилище (только приём файлов) @@ -4198,32 +4098,32 @@ Закрыть доступ - + Link name - Название ссылки + - + Note to recipient Примечание для получателя - + Password protect Защитить паролем - + Set expiration date Установить срок действия - + Delete link - Удалить ссылку + - + Add another link Добавить другую ссылку @@ -4233,27 +4133,27 @@ Удалить ссылку - + Confirm Link Share Deletion Подтверждение закрытия доступа по ссылке - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Действительно закрыть доступ по ссылке «<i>%1</i>»?</p><p>Внимание: это действие будет невозможно отменить.</p> - + Delete Удалить - + Cancel Отмена - + Public link Общедоступная ссылка @@ -4266,12 +4166,12 @@ Поделиться с пользователями или группами… - + Search globally Искать глобально - + Copy link Скопировать ссылку @@ -4281,22 +4181,22 @@ Отсутствуют результаты поиска «%1» - + No results for "%1" Отсутствуют результаты поиска «%1» - + Password for share required Создаваемый общий ресурс требуется защитить паролем - + Please enter a password for your email share: Задайте пароль для публикации ссылки по эл. почты: - + I shared something with you Вам предоставлен доступ @@ -4334,42 +4234,42 @@ Истекает: - + Can reshare разрешить делиться - + Note to recipient Примечание для получателя - + Set expiration date Установить срок действия - + Unshare Закрыть доступ - + Can create разрешить создавать - + Can change разрешить вносить изменения - + Can delete разрешить удалять - + Password protect Защитить паролем @@ -4386,23 +4286,23 @@ OCC::SocketApi - + Context menu share Контекстное меню предоставления общего доступа - + Select new location … Выбрать новое расположение ... - + I shared something with you Я поделился с тобой - - + + Share options Общий доступ… @@ -4415,76 +4315,76 @@ Activity - Активность + - + Copy private link to clipboard Скопировать закрытую ссылку в буфер обмена - + Send private link by email … Отправить закрытую ссылку по электронной почте... - + Resharing this file is not allowed Повторная публикация этого файла не разрешена - + Resharing this folder is not allowed Повторная публикация этой папки не разрешена - - + + Copy public link Скопировать общедоступную ссылку - + Copy internal link Скопировать внутреннюю ссылку - + Edit Редактировать - + Open in browser Открыть в браузере - + Resolve conflict … Разрешение конфликта … - + Move and rename … Переместить и переименовать … - + Move, rename and upload … Переместить, переименовать и загрузить … - + Delete local changes Удалить локальные изменения - + Move and upload … Переместить и загрузить … - + Delete Удалить @@ -4630,77 +4530,77 @@ Доверять этому сертификату в любом случае - + Untrusted Certificate Сертификат без доверия - + Cannot connect securely to <i>%1</i>: Не удалось осуществить безопасное подключение к <i>%1</i>: Additional errors: - Дополнительные ошибки + - + with Certificate %1 Сертификат %1 - - - + + + &lt;not specified&gt; &lt;не указано&gt; - - + + Organization: %1 Организация: %1 - - + + Unit: %1 Подразделение: %1 - - + + Country: %1 Страна: %1 - + Fingerprint (SHA1): <tt>%1</tt> Отпечаток (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Отпечаток (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Отпечаток (SHA-512): <tt>%1</tt> - + Effective Date: %1 Дата вступления в силу: %1 - + Expiration Date: %1 Дата окончания: %1 - + Issuer: %1 Издатель: %1 @@ -4793,33 +4693,33 @@ Произошла внутренняя ошибка номер %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (пропущено из-за предыдущей ошибки, повторная попытка через %2) - + Could not update file: %1 Не удалось обновить файл: %1 - + Could not update virtual file metadata: %1 Не удалось обновить метаданные виртуального файла: %1 - + Unresolved conflict. Неразрешённый конфликт. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + Aborted Отменено @@ -4896,16 +4796,16 @@ Эта файловая система не поддерживает имена файлов, оканчивающиеся на точку. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. + + File names containing the character '%1' are not supported on this file system. Эта файловая система не поддерживает имена файлов, содержащие символ '%1'. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - - The file name is a reserved name on this file system. Данное имя файла зарезервировано в данной файловой системе. @@ -4926,7 +4826,7 @@ Файл или папка исключены из синхронизации, так как являются скрытыми. - + Using virtual files with suffix, but suffix is not set Для виртуальных файлов настроено использование специального суффикса, но суффикс не указан @@ -4941,7 +4841,7 @@ Невозможно перекодировать имя файла для вашей системы. - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. @@ -4956,17 +4856,17 @@ Не удалось загрузить статистику. + + Unable to read from the sync journal. + Не удалось прочитать из журнала синхронизации. + + Filename encoding is not valid Кодировка имени файла не верна - - Unable to read from the sync journal. - Не удалось прочитать из журнала синхронизации. - - - + Cannot open the sync journal Не удаётся открыть журнал синхронизации @@ -4976,22 +4876,22 @@ Недопустимые символы, пожалуйста, переименуйте "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - Synchronization will resume shortly. - Синхронизация возобновится в ближайшее время. - - - + 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. На сервере недостаточно места для некоторых закачек. @@ -5002,107 +4902,107 @@ Offline - Не в сети + All synced! - Все синхронизировано! + Some files couldn't be synced! - Некоторые файлы не синхронизировались! + See below for errors - Смотрите ошибки ниже + Syncing - Синхронизации + Sync paused - Синхронизация приостановлена + Some files could not be synced! - Некоторые файлы не могут быть синхронизированы! + See below for warnings - Смотрите предупреждения ниже. + %1 of %2 · %3 left - %1 из %2, осталось %3 + %1 of %2 - %1 из %2 + Syncing file %1 of %2 - Синхронизируется файл %1 из %2 + OCC::Systray - + Add account Добавить аккаунт - + Open main dialog Открыть основное окно + - Pause sync Приостановить синхронизацию - - + + Resume sync Возобновить синхронизацию - + Settings Параметры - + Exit %1 Закрыть %1 - + Pause sync for all Приостановить синхронизацию всех учётных записей - + Resume sync for all Возобновить синхронизацию всех учётных записей - + %1: %2 %1: %2 @@ -5110,24 +5010,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 клиент для ПК</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Версия %1. Для получения дополнительной информации нажмите <a href='%2'>сюда</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Используемый модуль поддержки виртуальных файлов: %1</small></p> - + <p>This release was supplied by %1</p> <p>Этот выпуск подготовлен %1</p> @@ -5135,55 +5035,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Не удалось получить поставщиков. + - + Failed to fetch search providers for '%1'. Error: %2 - Не удалось получить список поставщиков поиска %1: Ошибка: %2 + - + Search has failed for '%2'. - Ошибка поиска %2. + - + Search has failed for '%1'. Error: %2 - Ошибка поиска %1: Ошибка %2 + OCC::User - + Retry all uploads Повторить передачу файлов на сервер - + Synced %1 Синхронизировано %1 - + You renamed %1 Вы переименовали «%1» - + You deleted %1 Вы удалили «%1» - + You created %1 Вы создали «%1» - + You changed %1 Вы изменили «%1» @@ -5191,22 +5091,22 @@ OCC::UserModel - + 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 Удалить подключение - + Cancel Отмена @@ -5311,30 +5211,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Для использования виртуальной файловой системы требуется NTFS, %1 использует %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5857,52 +5739,52 @@ Новая папка - + %n day ago день назад%n дня назад%n дней назад%n дней назад - + %n days ago день назад%n дня назад%n дней назад%n дней назад - + in the future в будущем - + %n hour ago час назад%n часа назад%n часов назад%n часов назад - + %n hours ago час назад%n часа назад%n часов назад%n часов назад - + now только что - + Less than a minute ago Меньше минуты назад - + %n minute ago минуту назад%n минуты назад%n минут назад%n минут назад - + %n minutes ago минуту назад%n минуты назад%n минут назад%n минут назад - + Some time ago Некоторое время назад @@ -5936,7 +5818,7 @@ SyncJournalDb - + Failed to connect database. Не удалось подключиться к базе данных @@ -5944,9 +5826,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Искать файлы, сообщения, события… + @@ -5954,7 +5836,7 @@ Load more results - Показать больше результатов + @@ -5962,7 +5844,7 @@ Search result skeleton. - Шаблон результатов поиска. + @@ -5970,7 +5852,7 @@ Load more results - Показать больше результатов + @@ -5981,21 +5863,11 @@ Учётная запись - + Switch to account Переключить учётную запись - - Current user status is online - Текущий статус пользователя - в сети - - - - Current user status is do not disturb - Текущий статус пользователя - не беспокоить - - Account connected Аккаунт подключен @@ -6006,7 +5878,17 @@ Учётная запись не подключена - + + Current user status is online + Текущий статус пользователя - в сети + + + + Current user status is do not disturb + Текущий статус пользователя - не беспокоить + + + Account actions Действия над аккаунтом @@ -6016,24 +5898,24 @@ Удалить учётную запись - + Set status Установить статус - - + + Log out Выйти - - + + Log in Войти - + Remove account Удалить учётную запись @@ -6094,57 +5976,57 @@ Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) один год%n года%n лет%n лет - + %n month(s) один месяц%n месяца%3 месяцев%n месяцев - + %n day(s) один день%n дня%n дней%n дней - + %n hour(s) один час%n часа%n часов%n часа - + %n minute(s) %n минута%n минуты%n минут%n минуты - + %n second(s) %n секунда%n секунды%n секунд%n секунды - + %1 %2 %1 %2 @@ -6152,7 +6034,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Неверная контрольная сумма заголовка. @@ -6185,64 +6067,64 @@ Window - + Nextcloud desktop main dialog Основное окно Nextcloud - + Current account Текущая учётная запись - - + + Resume sync for all Возобновить синхронизацию всех учётных записей - - + + Pause sync for all Приостановить синхронизацию всех учётных записей - + Set user status Задать статус - + Add account Добавить аккаунт - + Add new account Добавить учётную запись - + Settings Параметры - + Exit Выход - + Current user avatar Текущее изображение профиля - + Current user status is online Текущий статус пользователя - в сети - + Current user status is do not disturb Текущий статус пользователя - не беспокоить @@ -6252,32 +6134,32 @@ Опубликовать «%1» - + Account switcher and settings menu Переключение уч. записей и настройки - + Connected Подключено - + Disconnected Отключено - + Open local folder of current account Открыть локальную папку текущей учетной записи - + Open Nextcloud Talk in browser Открыть Nextcloud Talk в браузере - + More apps Ещё приложения @@ -6287,7 +6169,7 @@ Меню приложений - + Open %1 in browser Открыть %1 в браузере @@ -6307,9 +6189,9 @@ Открыть диалог настройки общего доступа - + Unified search results list - Единый список результатов поиска + @@ -6318,15 +6200,15 @@ Дополнительные действия - + %1 - File activity - %1 - Файловая активность + main.cpp - + System Tray not available Панель системных значков недоступна @@ -6336,7 +6218,7 @@ %1 требует работающей панели системных значков. Если вы используете XFCE, следуйте <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">этим инструкциям</a>. В противном случае, установите приложение панели системных значков, например, 'trayer', и попробуйте ещё раз. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. Для работы %1 требуется системный лоток значков. При использовании XFCE, следуйте <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">этим инструкциям</a>. В противном случае, установите приложение панели системных значков, например, 'trayer', и попробуйте ещё раз. @@ -6344,7 +6226,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sc.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sc.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sc.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sc.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Aberi %1 in locale - + Open share dialog Aberi bentana de cumpartzidura - + Share %1 Cumpartzi %1 - - + + Show more actions Mustra àteras atziones @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Sa connessione si nch'est iscàdida - + Unknown error: network reply was deleted Ddoe at àpidu un'errore disconnotu: sa risposta de rete est istada cantzellada - + Server replied "%1 %2" to "%3 %4" Su serbidore at rispostu "%1 %2" a "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Tzifradura mnemònica End to end - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pro bardiare s'identidade criptogràfica tua, dda tziframus con unu còdighe mnemònicu de 12 paràulas de ditzionàriu. Signa·ti·ddas e pone·ddas a banda. Ant a serbire pro agiùnghere àteros dispositivos a su tuo (che a su telefoneddu o a su portàtile). @@ -305,9 +305,9 @@ - - - + + + Cancel Annulla @@ -495,52 +495,52 @@ Boga sa connessione pro sincronizare is cartellas - + Disable virtual file support … Disativa assistèntzia de is archìvios virtuales ... - + Enable virtual file support %1 … Ativa assistèntzia de is archìvios virtuales %1 … - + (experimental) (isperimentale) - + Folder creation failed Creatzione cartella faddida - + <p>Could not create local folder <i>%1</i>.</p> <p>No at fatu a creare una cartella locale <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Cunfirma bogadura connessione de sincronizatzione cartellas - + <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>A beru boles firmare sa sincronizatzione de is cartellas <i>%1</i>?</p><p><b>Mira:</b> custa operatzione <b>no</b> at a cantzellare perunu archìviu.</p> - + Remove Folder Sync Connection Boga connessione de sincronizatzione cartellas - + Disable virtual file support? Boles disativare s'assistèntzia de is archìvios virtuales? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Custa atzione at a firmare cale si siat sincronizatzione immoe in esecutzione. - + Disable support Disativa suportu - + Sync Running Sincronizatzione in esecutzione - + The syncing operation is running.<br/>Do you want to terminate it? Sa sincronizatzione est in esecutzione.<br/> cheres a dda terminare? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 impreadu. Calicuna cartella, incluende cuddas montadas in sa rete o cuddas cumpartzidas, diant àere barrancos diferentes. - + %1 of %2 in use %1 de %2 impreados - + Currently there is no storage usage information available. Immoe non ddoe at informatziones a disponimentu subra de s'impreu de s'ispàtziu de archiviatzione. - + %1 in use %1 impreados @@ -603,87 +603,87 @@ Intra - + %1 as %2 %1 comente %2 - + The server version %1 is unsupported! Proceed at your own risk. Sa versione %1 de su serbidore non est suportada! Sighi a arriscu tuo. - + Connected to %1. Connètidu a %1. - + Server %1 is temporarily unavailable. Su serbidore %1 pro immoe no est a disponimentu. - + Server %1 is currently in maintenance mode. Su serbidore %1 pro immoe en in modalidade de mantenidura. - + Signed out from %1. Disconnètidu dae %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Otenimentu de su permissu dae su navigadore. <a href='%1'>Incarca inoghe</a> pro torrare a abèrrere su navigadore. - + Connecting to %1 … Connetende·si a %1 … - + No connection to %1 at %2. Peruna connessione a %1 in %2. - + Server configuration error: %1 at %2. Ddoe at àpidu un'errore in su serbidore: %1 in %2. - + No %1 connection configured. Perunu connessione %1 configurada. - + There are folders that were not synchronized because they are too big: Ddoe at cartellas chi non sunt istadas sincronizadas ca sunt tropu mannas: - + There are folders that were not synchronized because they are external storages: Ddoe at cartellas chi non sunt istadas sincronizadas ca in foras ddoe at memòrias de archiviatzione: - + There are folders that were not synchronized because they are too big or external storages: Ddoe at cartellas chi non sunt istadas sincronizadas ca sunt tropu mannas o memòrias de archiviatziones de foras: - + Confirm Account Removal Cunfirma bogadura contu - + <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>A beru nche boles bogare sa connessione a su contu <i>%1</i>?</p><p><b>Nota:</b> Custu <b>no</b> at a cantzellare perunu archìviu.</p> - + Remove connection Boga connessione @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Essidu - + Disconnected Disconnètidu - + Connected Connètidu - + Service unavailable Servìtziu no a disponimentu - + Maintenance mode Modalidade mantenidura - + Network error Errore de rete - + Configuration error Ddoe at àpidu un'errore de cunfiguratzione - + Asking Credentials Rechesta credentziales - + Unknown account state Istadu de su contu disconnotu @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Is archìvios de s'elencu de non tènnere in contu gasi comente is ligòngios non sunt sincronizados. - + For more activities please open the Activity app. Pro àteras atividades, pro praghere, aberi s'aplicatzione Activity. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. A sighire bolet nàrrere a <b>nche cantzellare custas impostatziones</b>. - + Continuing will mean <b>ignoring these settings</b>. A sighire bolet nàrrere a <b>a non tènnere in contu custas impostatziones</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Calicuna impostatzione est istada cunfigurada in is versiones prus noas de custu cliente e impreat funtzionalidades chi non sunt a disponimentu in custa versione.<br><br>%1<br><br>S'archìviu de cunfiguratzione atuale est istadu giai postu in una còpia de seguridade in <i>%2</i>. - + Quit Essi·nche - + Continue Sighi - + Error accessing the configuration file Ddoe at àpidu un'errore intrende a s'archìviu de cunfiguratzione - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Ddoe at àpidu un'errore intrende a s'archìviu de cunfiguratzione su %1. Segura·ti chi a s'archìviu si potzat intrare dae s'utèntzia tua. - + Quit %1 Essi·nche %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database DDoe at àpidu un'errore iscriende metadatos in sa base de datos @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Pro praghere, iscrie sa fràsia segreta de tzifradura end-to-end:<br><br>Utente: %2<br>Contu: %3<br> - + Enter E2E passphrase Pone sa fràsia segreta de E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Sa risposta de su rilevamentu de s'archìviu de su serbidore at rispostu chi mancant datos. - - + + Server error: PROPFIND reply is not XML formatted! Errore de su serbidore: sa risposta PROPFIND no est in formadu XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Ddoe at àpidu un'errore aberende sa cartella %1 - + Directory not accessible on client, permission denied Non faghet a intrare a sa cartella in su cliente, permissu negadu - + Directory not found: %1 Cartella no agatada: %1 - + Filename encoding is not valid Sa codìfica de su nùmene de s'archìviu no est vàlida - + Error while reading directory %1 Ddoe at àpidu un'errore leghende sa cartella %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Errore torradu dae su serbidore: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Ddoe at àpidu un'errore intrende a su terminadore de is "token": <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> No at fatu a elaborare su JSON torradu dae su serbidore: <br><em>%1</em> - + The reply from the server did not contain all expected fields Sa risposta de su serbidore non teniat totu is campos isetados - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. S'URL de serbidore de resposta no cumintzat cun HTTPS comente s'URL de atzessu. No s'at a pòdere fàghere s'atzessu ca bi podent èssere problemas de seguresa. Cuntata s'amministratzione. @@ -1368,41 +1305,41 @@ Atividade de sincronizatzione - + Could not read system exclude file No at fatu a lèghere s'archìviu de esclusione de su sistema - + A new folder larger than %1 MB has been added: %2. Una cartella noa prus manna de %1 MB est istada agiunta: %2. - + A folder from an external storage has been added. Una cartella noa est istada agiunta dae una memòria de dae un'archiviatzione de foras. - + Please go in the settings to select it if you wish to download it. Pro praghere, bae a is impostatziones pro dda seletzionare si dda boles iscarrigare. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Sa cartella %1 est istada creada, ma in antis est istada lassada in foras de sa sincronizatzione, Is datos in intro no ant a èssere sincronizados. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. S'archìviu %1 est istadu creadu, ma in antis est istadu lassadu in foras de sa sincronizatzione. No at a èssere sincronizadu. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + Totu is archìvios in sa cartella de sincronizatzione '%1' sunt eliminados in su serbidore. +Ses seguru chi boles sincronizare custas atziones cun su serbidore? +Si custu fiat un'errore e detzides de mantènnere is archìvios tuos, custos ddos at a torrare a sincronizare su serbidore. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Mantene archìvios locales comente cunflitu - - 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 restore 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. - Totu is archìvios in sa cartella de sincronizatzione '%1' sunt istados eliminados in su serbidore. -Sa cantzelladura at a èssere sincronizada cun sa cartella de sincronizatzione locale tua, gasi chi custos archìvios no ant a èssere prus a disponimentu, francu chi apas su permissu pro ddos pòdere ripristinare. -Si detzides de ripristinare is archìvios, custos ant a èssere sincronizados torra cun su serbidore, si tenes is diritos pro ddu fàghere. -Si detzides de cantzellare is archìvios, non ant a èssere prus a disponimentu, francu chi sias tue su mere. - - - - 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. - Totu is archìvios in sa cartella de sincronizatzione '%1' sunt eliminados in su serbidore. -Ses seguru chi boles sincronizare custas atziones cun su serbidore? -Si custu fiat un'errore e detzides de mantènnere is archìvios tuos, custos ddos at a torrare a sincronizare su serbidore. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Si detzides de cantzellare is archìvios, non ant a èssere prus a disponimentu, francu chi sias tue su mere. - + 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. @@ -1515,17 +1441,28 @@ Si custu fiat un'errore e detzides de mantènnere is archìvios tuos, custos ddos at a torrare a sincronizare su serbidore. - + Remove All Files? Boles bogare totu is archìvios? - + Remove all files Boga totu is archìvios? - + + 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 restore 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. + Totu is archìvios in sa cartella de sincronizatzione '%1' sunt istados eliminados in su serbidore. +Sa cantzelladura at a èssere sincronizada cun sa cartella de sincronizatzione locale tua, gasi chi custos archìvios no ant a èssere prus a disponimentu, francu chi apas su permissu pro ddos pòdere ripristinare. +Si detzides de ripristinare is archìvios, custos ant a èssere sincronizados torra cun su serbidore, si tenes is diritos pro ddu fàghere. +Si detzides de cantzellare is archìvios, non ant a èssere prus a disponimentu, francu chi sias tue su mere. + + + Keep files Mantene is archìvios @@ -1561,7 +1498,7 @@ OCC::FolderMan - + Could not reset folder state No at fatu a ripristinare s'istadu de sa cartella @@ -1571,37 +1508,37 @@ Agatadu unu registru betzu de archiviatzione '%1', ma non faghet a ddu bogare. Pro praghere, segura·ti chi peruna aplicatzione ddu siat impreende. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Agatadu unu registru betzu de archiviatzione "%1" ma non faghet a ddu bogare. Assegura•ti chi peruna aplicatzione siat impreende•ddu. - + (backup) (còpia de seguresa) - + (backup %1) (còpia de seguresa %1) - + Undefined State. Istadu non definidu. - + Waiting to start syncing. Isetende chi cumintzet sa sincronizatzione. - + Preparing for sync. Aprontende sa sincronizatzione. - + Sync is running. Sa sincronizatzione est aviada. @@ -1611,67 +1548,67 @@ Sa sincronizatzione est andada bene, is cunflitos no isòrvidos ancora. - + Sync finished with unresolved conflicts. Sincronizatzione agabbada cun cunflitos non isortos. - + Last Sync was successful. S'ùrtima sincronizatzione est andada bene. - + Setup Error. Errore de cunfiguratzione - + User Abort. Firmadu dae s'utente. - + Sync is paused. Sa sincronizatzione est in pàusa. - + %1 (Sync is paused) %1 (Sincronizatzione in pàusa) - + No valid folder selected! Peruna cartella bàlida seletzionada! - + The selected path does not exist! Su caminu seletzionadu non b'est! - + The selected path is not a folder! Su caminu seletzionadu non b'est!! - + You have no permission to write to the selected folder! Non tenes su permissu pro iscrìere in sa cartella seletzionada! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Sa cartella locale %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Sa cartella locala %1 cuntenet giai una cartella impreada in una connessione de sincronizatzione de is cartellas. Seletziona·nde un'àtera! - + There is already a sync from the server to this local folder. Please pick another local folder! Esistet giai una sincronizatzione dae su serbidore a custa cartella locale. Seletziona·nde un'àtera locale! @@ -1883,12 +1820,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Agiunghe connessione de sincronizatzione cartellas - + Add Sync Connection Agiunghe connessione de sincronizatzione @@ -1929,42 +1866,42 @@ Iscrie su nùmene de sa cartella noa de creare suta de su "%1": - + Folder was successfully created on %1. Sa cartella creada in manera curreta in %1. - + Authentication failed accessing %1 Autenticatzione faddida intrende a %1 - + Failed to create the folder on %1. Please check manually. No at fatu a creare sa cartella in %1. Pro praghere, controlla tue etotu. - + Failed to list a folder. Error: %1 No at fatu a pònnere in elencu una cartella. Errore: %1 - + Choose this to sync the entire account Seletziona·dda pro sincronizare totu su contu - + This folder is already being synced. Custa cartella nch'est giai sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ses giai sincronizende <i>%1</i>, cun sa cartella superiore de <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Ses giai sincronizende <i>%1</i>, cun una cartella inferiore de<i>%2</i>. @@ -1972,24 +1909,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Imprea archìvios virtuales imbetzes de iscarrigare deretu su cuntenutu %1 - - + + (experimental) (isperimentale) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Is archìvios virtuales no sunt suportados pro is sorgentes de partzidura de Windows comente cartellas locales. Sèbera una sutacartella bàlida a suta de sa lìtera de su discu. - + Virtual files are not available for the selected folder Imprea archìvios virtuales imbetzes de iscarrigare deretu is cuntenutos @@ -2010,27 +1947,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Peruna etichetta eletrònica retzida dae su serbidore, controlla su proxy/gateway - + We received a different E-Tag for resuming. Retrying next time. Amus retzidu un'etichetta eletrònica diferente pro su riprìstinu. Torra a proare luego. - + We received an unexpected download Content-Length. Amus retzidu sena nos ddu isetare unu content-lenght de s'iscarrigamentu. - + Server returned wrong content-range Su serbidore at torradu unu content-range isballiadu - + Connection Timeout Connessione iscàdida @@ -2150,22 +2087,22 @@ Crea archìviu de debug … - + Server notifications that require attention. Serbidore de notìficas chi tocat a ddis dare contu. - + You cannot disable autostart because system-wide autostart is enabled. Non faghet a disativare s'aviamentu automàticu ca est ativu s'aviamentu automàticu a livellu de sistema. - + Change update channel? Boles cambiare su canale de agiornamentu? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2174,32 +2111,32 @@ Annota chi custu seletzionat isceti dae cale grùstiu prelevare is agiornamentos e chi non ddoe apant downgrade: duncas, a su sòlitu non faghet a torrare deretu dae su canale beta a su canale istàbile e custu cheret nàrrere a isetare una versione istàbile chi siat prus reghente de sa versione beta chi ddoe est immoe. - + Change update channel Càmbia su canale de agiornamentu - + Cancel Annulla - + Create Debug Archive Crea archìviu de debug - + Zip Archives Archìvios zip - + Debug Archive Created Archìviu debug creadu - + Debug archive is created at %1 S'archìviu de debug nch'est creadu in %1 @@ -2207,22 +2144,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Recherta sa crae pro cumpartzire - + Please enter a password for your link share: Inserta una crae pro su ligòngiu pro cumpartzire: - + Sharing error Errore cumpartzinde - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Errore @@ -2556,7 +2493,7 @@ <nobr>S'archìviu '%1'<br/>no at fatu a ddu abèrrere in s'iscritura.<br/><br/>Su resurtadu de su log <b>no</b> at a èssere sarvadu!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>S'archìviu '%1'<br/>no faghet a dd'abèrrere pro s'iscritura.<br/><br/>Su resurtadu de su log <b>no</b> podet èssere sarvadu!</nobr> @@ -2564,33 +2501,33 @@ OCC::NSISUpdater - + New Version Available Versione noa a disponimentu - + <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 versione noa de su cliente %1 Client est a disponimentu.</p><p><b>%2</b> est dispostu pro ddu iscàrrigare. Sa versione installada est %3.</p> - - + + Skip this version Brinca custa versione - + Skip this time Brinca custa borta - + Get update Otène s'agiornamentu - + Update Failed Agiornamentu faddidu @@ -2605,17 +2542,17 @@ <p>Una versione noa de su Client %1 est a disponimentu, ma su protzessu de agiornamentu no est andadu bene.</p><p><b>%2</b> est istadu iscarrigadu. Sa versione installada est %3. Si cunfirmas de torrare a aviare e agiornare, su computer tuo s'at a pòdere torrare a aviare pro cumpletare s'installatzione.</p> - + Ask again later Torra·ddu a pregontare luego - + Restart and update Torra a cumintzare e agiorna - + Update manually Agiorna tue etotu @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Errore torradu dae su serbidore: <em>%1</em> @@ -2736,32 +2673,32 @@ Ddoe at àpidu un'errore intrende a su terminale de su terminadore de is 'token': <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> B'at àpidu un'errore intrende a su terminadore de is "token": <br><em>%1</em> - + Empty JSON from OAuth2 redirect JSON bòidos dae sa re-aderetada a OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Non faghet a elaborare su JSON torradu dae su serbidore: <br><em>%1</em> - + The reply from the server did not contain all expected fields Sa risposta de su serbidore non cuntenet is campos isetados - + <h1>Login Error</h1><p>%1</p> <h1>Errore de identificatzione</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>Utente irballiadu</h1><p>Ses intradu cun s'utente <em>%1</em>, ma depes intrare cun s'utente <em>%2</em>.<br>Serra sa sessione de %3 in un'àtera ischeda, pustis <a href='%4'>incarca inoghe</a> e intra cun s'utente %2</p> @@ -2831,12 +2768,12 @@ No at fatu a iscarrigare s'agiornamentu. Aberi <a href='%1'>%1</a> pro iscarrigare s'agiornamentu a manu. - + Could not download update. Please open %1 to download the update manually. No at fatu a iscarrigare s'agiornamentu. Aberi %1 pro iscarrigare s'agiornamentu tue etotu. - + Could not check for new updates. No at fatu a controllare is agiornamentos noos. @@ -2846,27 +2783,27 @@ Unu nou %1 est a disponimentu. Aberi <a href='%2'>%2</a> pro iscarrigare s'agiornamentu. - + New %1 is available. Please open %2 to download the update. Su %1 nou est a disponimentu. Aberi %2 pro iscarrigare s'agiornamentu. - + Checking update server … Controllu serbidore de is agiornamentos … - + Update status is unknown: Did not check for new updates. Non si nd'ischet a cale puntu est s'agiornamentu. Non faghet a cumproare sa si ddoe at agiornamentos noos. - + No updates available. Your installation is at the latest version. No ddoe at agiornamentos a disponimentu. S'installatzione tua est a sa versione prus agiornada. - + Update Check Controlla agiornamentu @@ -2894,14 +2831,14 @@ Connete … - - + + Use &virtual files instead of downloading content immediately %1 Imprea is archìvios &virtuales imbetzes de iscarrigare deretu su cuntenutu %1 - - + + (experimental) (isperimentale) @@ -2926,49 +2863,49 @@ Logu lìberu: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Is archìvios virtuales no sunt suportados pro is sorgentes de partzidura de Windows comente cartellas locales. Sèbera una sutacartella bàlida a suta de sa lìtera de su discu. - + %1 folder "%2" is synced to local folder "%3" Sa cartella %1 de "%2" est sincronizada cun sa cartella locale "%3" - + Sync the folder "%1" Sincroniza sa cartella "%1" - + Warning: The local folder is not empty. Pick a resolution! Avisu: sa cartella locale no est bòida. Sèbera unu remèdiu! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB Logu lìberu %1 - + Virtual files are not available for the selected folder Is archìvios virtuales non sunt a disponimentu pro sa cartella seletzionada - + Local Sync Folder Sincronizatzione cartella locale - - + + (%1) (%1) - + There isn't enough free space in the local folder! Non bastat su logu lìberu in sa cartella locale! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3111,7 +3040,7 @@ A in&antis > - + Server address does not seem to be valid Paret chi s'indiritzu de su serbidore no est bàlidu @@ -3121,7 +3050,7 @@ URL non bàlidu - + Could not load certificate. Maybe wrong password? No at fatu a nche carrigare su tzertificadu. No est chi sa crae est isballiada? @@ -3219,54 +3148,54 @@ creende una cartella in Nextcloud: %1 - + Remote folder %1 created successfully. Sa creatzione de sa cartella remota %1 est andada bene . - + The remote folder %1 already exists. Connecting it for syncing. Sa cartella remota %1 b'est giai. Connetende·dda pro dda sincronizare. + - The folder creation resulted in HTTP error code %1 Sa creatzione de sa cartella at torradu un'errore HTTP còdighe %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Sa creatzione de sa cartella remota est faddida ca mancari is credentziales sunt isballiadas.<br/>Torra in segus e controlla is credentziales.</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">Sa creatzione de sa cartella remota no est andada bene ca mancari is credentziales sunt isballiadas.</font><br/>Torra in segus e controlla is credentziales tuas.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creatzione de sa cartella remota %1 faddida cun errore <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Istabilida una connessione de sincronizatzione dae %1 a sa cartella remota %2. - + Successfully connected to %1! Connessione a %1 renèssida! - + Connection to %1 could not be established. Please check again. Sa connessione a %1 non faghet a dda istabilire. Proa torra. - + Folder rename failed No at fatu a torrare a numenare sa cartella @@ -3276,12 +3205,12 @@ Non faghet a nche bogare o creare una còpia de seguesa de sa cartella ca sa cartella o un'archìviu in intro de issa est abertu in un àteru programma. Serra sa cartella o s'archìviu e incarca Proa torra o annulla sa cunfiguratzione. - + Cannot 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 at fatu a catzare o copiare sa cartella ca sa cartella o s'archìviu in intro est abertu in un àteru programma. Serra sa cartella o s'archìviu e incarca Proa torra o annulla s'impostatzione. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Cartella locale %1 creada in manera curreta!</b></font> @@ -3289,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account Agiunghe contu %1 @@ -3299,17 +3228,17 @@ Protzedura ghiada de connessione de %1 - + Skip folders configuration Brinca cunfiguratzione de is cartellas - + Enable experimental feature? Boles ativare sa funtzionalidade isperimentale? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ Custa est una modalidade noa, isperimentale. Si detzides de dda impreare, sinnala is problemas chi ant a essire a campu. - + Enable experimental placeholder mode Ativa sa modalidade isperimentale marcalogu - + Stay safe Abarra in su seguru @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Risposta JSON non bàlida dae su URL de dimanda @@ -3356,17 +3285,17 @@ - + Symbolic links are not supported in syncing. Is ligòngios simbòlicos non sunt suportados in sa sincronizatzione. - + File is listed on the ignore list. Archìviu postu in s'elencu de is ignorados. - + File names ending with a period are not supported on this file system. Is nùmenes chi agabbant cun unu puntu non sunt suportados in custu archìviu de sistema. @@ -3381,57 +3310,57 @@ Is archìvios cun in intro su caràtere "%1" non sunt suportados in custu archìviu de su sistema. - + File name contains at least one invalid character Su nùmene de su'archìviu tenet a su mancu unu caràtere non bàlidu - + The file name is a reserved name on this file system. Su nùmene de s'archìviu est unu nùmene riservadu a custu archìviu de sistema. - + Filename contains trailing spaces. Su nùmene de s'archìviu cuntenet tretos a sa fine. - + Filename is too long. Su nùmene de s'archìviu est tropu longu. - + File/Folder is ignored because it's hidden. S'archìviu/cartella ignoradu ca cuadu. - + Stat failed. Stat faddida. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Cunflitu: versione de su serbidore iscarrigada, còpia locale torrada a numenare e non carrigada. - + The filename cannot be encoded on your file system. Su nùmene de s'archìviu non podet èssere codificada in s'archìviu tuo de sistema. - + The filename is blacklisted on the server. Su nùmene de s'archìviu est in sa lista niedda de su serbidore. - + File has extension reserved for virtual files. S'archìviu at un'estensione riservada a is archìvios virtuales. - + size mannària @@ -3441,72 +3370,62 @@ permissos - - server reported no %1 - su serbidore no at torradu perunu %1 - - - - permission - - - - + file id id de s'archìviu - - Server reported no %1 - + + server reported no %1 + su serbidore no at torradu perunu %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! B'at un'iscòrriu carrighende unos archìvios a sa cartella. Cussos in iscòrriu ant a èssere cantzellados! - + Conflict when uploading a folder. It's going to get cleared! Iscòrriu carrighende una cartella. Custa s'at a cantzellare! - + Conflict when uploading a file. It's going to get removed! Iscòrriu carrighende un'archìviu. Custu s'at a cantzellare! - + Ignored because of the "choose what to sync" blacklist Ignoradu ca in sa lista niedda de is cosas de no sincronizare - + Not allowed because you don't have permission to add subfolders to that folder Non podes ca non tenes su permissu pro agiùnghere sutacartellas a custas cartellas - + Not allowed because you don't have permission to add files in that folder Non podes ca non tenes su permissu pro agiùnghere archìvios a custa cartella - + Not allowed to upload this file because it is read-only on the server, restoring Non podes carrigare custu archìviu ca in su serbidore podes isceti lèghere, riprìstinu - + Moved to invalid target, restoring Tramudadu a un'indiritzu non bàlidu, riprìstinu - + Not allowed to remove, restoring Non ddu podes bogare, riprìstinu - + Error while reading the database Errore leghende sa base de datos @@ -3516,7 +3435,7 @@ Su serbidore at dadu errore leghende sa cartella '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 Su serbidore nd'at torradu un'errore leghende sa cartella "%1" : %2 @@ -3529,17 +3448,12 @@ Errore iscriende metadatos in sa base de datos - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Errore agiornende is metadatos: %1 - + File is currently in use S'archìviu est giai impreadu @@ -3552,44 +3466,44 @@ S'archìviu %1 non podet èssere iscarrigadu pro sa mancàntzia de informatziones de tzifradura. - + File %1 cannot be downloaded because encryption information is missing. S'archìviu %1 non faghet a dd'iscarrigare ca non b'at informatziones de tzifradura. - - + + File has changed since discovery Archìviu cambiadu in pessu rilevadu - - + + File %1 cannot be downloaded because of a local file name clash! S'archìviu %1 nn faghet a dd'iscarrigare pro unu cunflitu cun su nùmene de s'archìviu locale! - + File %1 can not be downloaded because of a local file name clash! S'archìviu %1 non podet èssere iscarrigadu pro unu cunflitu cun un'archìviu locale! - + The download would reduce free local disk space below the limit S'iscarrigamentu at a torrare a suta de su lìmite su logu lìberu in su discu locale - + Free space on disk is less than %1 Su logu lìberu in su discu est prus pagu de %1 - + File was deleted from server S'archìviu est cantzelladu dae su serbidore - + The file could not be downloaded completely. No at fatu a iscarrigare s'archìviu de su totu @@ -3599,12 +3513,12 @@ S'archìviu iscarrigadu est bòidu mancari su serbidore indicaret una mannària de %1. - + The downloaded file is empty, but the server said it should have been %1. S'archìviu iscarrigadu est bòidu, ma su serbidore at indicadu una mannària de %1. - + File %1 cannot be saved because of a local file name clash! S'archìviu %1 non podet èssere sarvadu pro unu cunflitu in unu'archìviu locale! @@ -3614,18 +3528,12 @@ Errore iscriende is metadatos in su base de datos - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Errore agiornende is metadatos: %1 - + The file %1 is currently in use S'archìviu %1 est giai impreadu @@ -3633,12 +3541,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Riprìstinu faddidu: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un'archìviu o cartella est bogadu dae una cumpartzidura isceti pro sa letura, ma sriprìstinu est faddidu: %1 @@ -3712,12 +3620,12 @@ S'archìviu %1 non podet èssere torradu a numenare a su %2 ca ddoe est unu cunflitu cun su nùmene de un'archìviu locale - + Error updating metadata: %1 Errore agiornende is metadatos: %1 - + The file %1 is currently in use S'archìviu %1 est giai impreadu @@ -3728,12 +3636,12 @@ Errore iscriende metadatos in sa base de datos - + Failed to rename file No at fatu a torrare a numenare s'archìviu - + Error setting pin state Errore impostende s'istadu de su pin @@ -3767,12 +3675,12 @@ Errore iscriende is metadatos in sa base de datos - + Error writing metadata to the database: %1 Errore iscriende is metadatos in sa base de datos: %1 - + The file %1 is currently in use S'archìviu %1 est giai impreadu @@ -3790,22 +3698,22 @@ Còdighe HTTP isballiadu torradu dae su serbidore. Atesu 201, ma retzidu "%1 %2". - + Error updating metadata: %1 Errore agiornende is metadatos: %1 - + The file %1 is currently in use S'archìviu %1 est giai impreadu - + Error setting pin state Errore impostende s'istadu de su pin - + Error writing metadata to the database Errore iscriende metadatos in sa base de datos @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Carrigamentu de s'archìviu criptadu faddidu - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists S'archìviu %1 non podet èssere carrigadu ca ddo est un'àteru archìviu cun su pròpiu nùmene, ma cun diferèntzias intre maiùsculas e minùsculas - - + + Upload of %1 exceeds the quota for the folder Su carrigamentu de %1 sùperat sa cuota a cartella - + File Removed (start upload) %1 Archìviu bogadu (aviu de su carrigamentu) %1 - + Local file changed during syncing. It will be resumed. S'archìviu locale est istadu modificadu durante sa sincronizatzione. At a èssere ripristinadu. - + Local file changed during sync. Archìviu locale cambiadu durante sa sincronizatzione. - + Failed to unlock encrypted folder. Isblocu de sa cartella criptada faddidu. @@ -3862,12 +3762,12 @@ Errore iscriende is metadatos in sa base de datos - + Error updating metadata: %1 Errore agiornende is metadatos: %1 - + The file %1 is currently in use S'archìviu %1 est giai impreadu @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. S'archìviu locale est istadu bogadu durante sa sincronizatzione. - + Local file changed during sync. Archìviu locale cambiadu durante sa sincronizatzione. - + Poll URL missing Mancat su URL de su sondàgiu - + Unexpected return code from server (%1) Còdighe de essida inatesu dae su serbidore (%1) - + Missing File ID from server Archìviu ID mancante dae su serbidore - + Missing ETag from server Eeticheta chi mancat dae su serbidore @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Mancat su URL de su sondàgiu - + The local file was removed during sync. S'archìviu locale est bogadu durante sa sincronizatzione. - + Local file changed during sync. Archìviu locale cambiadu durante sa sincronizatzione. - + The server did not acknowledge the last chunk. (No e-tag was present) Su serbidore no at reconnotu s'ùrtimu cantu. (Non bi fiat peruna eticheta eletrònica) @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss Annulla @@ -4171,17 +4071,17 @@ Bàrdia crae - + Allow editing Cunsenti sa modìfica - + View only Isceti in visualizatzione - + Allow upload and editing Permite carrigamentos e modìficas @@ -4191,7 +4091,7 @@ Data de iscadèntzia - + File drop (upload only) Tìsina archìviu (isceti pro carrigare) @@ -4201,32 +4101,32 @@ Annulla sa cumpartzidura - + Link name Nùmene ligòngiu - + Note to recipient Nota pro sa persone destinatària - + Password protect Bàrdia crae - + Set expiration date Imposta data de iscadèntzia - + Delete link Cantzella ligòngiu - + Add another link Agiunghe un'àteru ligòngiu @@ -4236,27 +4136,27 @@ Cantzella ligòngiu de cumpartzidura - + Confirm Link Share Deletion Cunfirma de cantzellare su ligòngiu - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>A beru nche boles cantzellare sa cumpartzidura a su ligòngiu pùblicu<i>%1</i>?</p><p>Avisu: custa operatzione non si podet annullare.</p> - + Delete Cantzella - + Cancel Annulla - + Public link Ligòngiu pùblicu @@ -4269,12 +4169,12 @@ Cumpartzi cun utentes e grupos ... - + Search globally Chirca globale - + Copy link Còpia ligòngiu @@ -4284,22 +4184,22 @@ Perunu resurtadu pro '%1' - + No results for "%1" Perunu resurtadu pro "%1" - + Password for share required Recherta sa crae pro cumpartzire - + Please enter a password for your email share: Inserta•nche una crae pro su ligòngiu tuo de cumpartzidura: - + I shared something with you Apo cumpartzidu una cosa cun tegus @@ -4337,42 +4237,42 @@ Iscadet: - + Can reshare Faghet a torrare a cumpartzire - + Note to recipient Nota a sa persone destinatària - + Set expiration date Imposta data de iscadèntzia - + Unshare Annulla sa cumpartzidura - + Can create Faghet a creare - + Can change Faghet a cambiare - + Can delete Faghet a cantzellare - + Password protect Bardiadura cun crae @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share Cumpartzidura de su menu cuntestuale - + Select new location … Seletziona positzione noa ... - + I shared something with you Apo cumpartzidu una cosa cun tegus - - + + Share options Sèberos de cumpartzidura @@ -4421,73 +4321,73 @@ - + Copy private link to clipboard Còpia ligòngios privados in punta de billete - + Send private link by email … Imbia unu ligòngiu privadu tràmite posta eletrònica ... - + Resharing this file is not allowed Non faghet a torrare a cumpartzire - + Resharing this folder is not allowed Non faghet a torrare a cumpartzire custa cartella - - + + Copy public link Còpia ligòngiu pùblicu - + Copy internal link Còpia ligòngiu internu - + Edit Modìfica - + Open in browser Aberi in su navigadore - + Resolve conflict … Isorve cunflitu ... - + Move and rename … Tràmuda e torra a numenare ... - + Move, rename and upload … Tràmuda, torra a numenare e carriga ... - + Delete local changes Cantzella càmbios locales - + Move and upload … Tràmuda e carriga ... - + Delete Cantzella @@ -4633,12 +4533,12 @@ Fida·ti in ogni casu de custu tzertificadu - + Untrusted Certificate Tzertificadu non fidadu - + Cannot connect securely to <i>%1</i>: Non faghet a su connètere in manera segura a <i>%1</i>: @@ -4648,62 +4548,62 @@ - + with Certificate %1 cun Tzertificadu %1 - - - + + + &lt;not specified&gt; &lt;no ispetzificadu&gt; - - + + Organization: %1 Organizatzione: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 Paisu: %1 - + Fingerprint (SHA1): <tt>%1</tt> Imprenta digitale (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Imprenta digitale (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Imprenta digitale (SHA-512): <tt>%1</tt> - + Effective Date: %1 Data efetiva: %1 - + Expiration Date: %1 Data de iscadèntzia: %1 - + Issuer: %1 Mitente: %1 @@ -4796,33 +4696,33 @@ Est acontèssidu un'errore internu nùmeru %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (brincadu pro un'errore pretzedente, proende torra in %2) - + Could not update file: %1 No at fatu a carrigare custu archìviu: %1 - + Could not update virtual file metadata: %1 No at fatu a nche carrigare is metadatos de is archìvios virtuales: %1 - + Unresolved conflict. Cunflitu non isortu. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sunt disponìbiles isceti %1, serbint isceti %2 pro cumintzare - + Aborted Firmadu @@ -4899,16 +4799,16 @@ Is nòmines chi agabant cun unu puntu non sunt suportados in custu archìviu de sistema. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Impossìbile a abèrrere o a creare sa base de datos locale de sincronizatzione. Segura·ti de àere atzessu de iscritura in sa cartella de sincronizatzione. + + File names containing the character '%1' are not supported on this file system. Is nùmenes de is archìvios chi tenent su caràtere '%1' non sunt suportados in custu archìviu de sistema. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Impossìbile a abèrrere o a creare sa base de datos locale de sincronizatzione. Segura·ti de àere atzessu de iscritura in sa cartella de sincronizatzione. - - The file name is a reserved name on this file system. Su nùmene de s'archìviu est riservadu in custu archìviu de sistema. @@ -4929,7 +4829,7 @@ Archìviu/Cartella ignoradu ca est cuadu. - + Using virtual files with suffix, but suffix is not set Impreu de is archìvios virtuales, ma su sufissu non est impostadu @@ -4944,7 +4844,7 @@ Su nùmene de s'archìviu non faghet a ddu codificare in s'archìviu de sistema tuo. - + Unable to read the blacklist from the local database Non at fatu a lèghere sa lista niedda de sa base de datos locale @@ -4959,17 +4859,17 @@ Stat faddida. + + Unable to read from the sync journal. + No at fatu a lèghere dae su registru de sincronizatzione. + + Filename encoding is not valid Codìfica de su nùmene de s'archìviu non bàlida. - - Unable to read from the sync journal. - No at fatu a lèghere dae su registru de sincronizatzione. - - - + Cannot open the sync journal Non faghet a abèrrerer su registru de sincronizatzione @@ -4979,22 +4879,22 @@ Caràteres non bàlidos, torra a numenare "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Su nùmene de s'archìviu cuntenet a su mancu unu caràtere imbàlidu - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Su logu in su discu est pagu: is iscarrigamentos chi diant pòdere minimare su logu lìberu suta de %1 s'ant a lassare. - + There is insufficient space available on the server for some uploads. Non b'at logu in su serbidore pro unos cantos carrigamentos. @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account Agiunghe contu - + Open main dialog Aberi sa bentana printzipale + - Pause sync Pone in pasu sa sincronizatzione - - + + Resume sync Torra a cumintzare sa sincronizatzione - + Settings Impostatziones - + Exit %1 Essi·nche dae %1 - + Pause sync for all Pone in pasu sa sincronizatzione de totu - + Resume sync for all Torra a cumintzare sa sincronizatzione de totu - + %1: %2 %1: %2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Cliente de iscrivania</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Versione %1. Pro àteras informatziones incarca <a href='%2'>inoghe</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Impreende s'estensione de archìvios virtuales: %1</small></p> - + <p>This release was supplied by %1</p> <p>Custa versione est dispensada dae %1</p> @@ -5138,22 +5038,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5161,32 +5061,32 @@ OCC::User - + Retry all uploads Torra a proare totu is carrigamentos - + Synced %1 %1 sincronizadu - + You renamed %1 %1 as torradu a numenare - + You deleted %1 As eliminadu %1 - + You created %1 As creadu %1 - + You changed %1 As cambiadu %1 @@ -5194,22 +5094,22 @@ OCC::UserModel - + Confirm Account Removal Cunfirma bogada de su contu - + <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>A beru nche cheres bogare sa connessione a su contu <i>%1</i>?</p><p><b>Mira:</b> custu <b>no at a</b> cantzellare perunu archìviu.</p> - + Remove connection Boga connessione - + Cancel Annulla @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Sa funtzionalidade de s'archìviu de sistema rechedet unu archìviu de sistema NTFS, %1 est impreende %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ Cartella noa - + %n day ago %n die a como%n die a oe - + %n days ago %n dies a oe%n dies a oe - + in the future in futuro - + %n hour ago %n un'ora a como%n un'ora a immoe - + %n hours ago %n oras a como%n oras a immoe - + now immoe - + Less than a minute ago Mancu unu minutu a immoe - + %n minute ago %n minute ago%n minutu a immoe - + %n minutes ago %n minutos a immoe%n minutos a immoe - + Some time ago Dae pagu tempus @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. No at fatu a si connètere sa base de datos. @@ -5946,7 +5828,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5983,21 +5865,11 @@ Insertada de datos - + Switch to account Passa a su contu - - Current user status is online - S'istadu atuale de s'utente est in lìnia - - - - Current user status is do not disturb - S'istadu atuale de s'utente est chi non si cheret istorbadu - - Account connected Contu connètidu @@ -6008,7 +5880,17 @@ Contu non connètidu - + + Current user status is online + S'istadu atuale de s'utente est in lìnia + + + + Current user status is do not disturb + S'istadu atuale de s'utente est chi non si cheret istorbadu + + + Account actions Atziones de su contu @@ -6018,24 +5900,24 @@ Boga·nche su contu - + Set status Imposta istadu - - + + Log out Essi·nche - - + + Log in Intra - + Remove account Boga·nche su contu @@ -6096,57 +5978,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n annu(os)%n annu(os) - + %n month(s) %n mese(s)%n mese(s) - + %n day(s) %n die(s)%n die(s) - + %n hour(s) %n ora(s)%n ora(s) - + %n minute(s) %n minuto(s)%n minuto(s) - + %n second(s) %n minuto(s)%n segundu(os) - + %1 %2 %1 %2 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. S'intestatzione de su còdighe de controllu. @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog Bentana printzipale de Nextcloud de iscrivania - + Current account Contu atuale - - + + Resume sync for all Riprìstina sincronizatzione pro totu - - + + Pause sync for all Pone in pasu sincronizatzione pro totu - + Set user status Imposta istadu de s'utente - + Add account Agiunghe contu - + Add new account Agiunghe unu contu - + Settings Impostatziones - + Exit Essi - + Current user avatar Avatar atuale de s'utente - + Current user status is online S'istadu atuale de s'utente est in lìnia - + Current user status is do not disturb S'istadu atuale de s'utente est chi non si cheret istorbadu @@ -6254,32 +6136,32 @@ Cumpartzi %1 - + Account switcher and settings menu Ischertadore de contu e impostatziones de su menu - + Connected Connètidu - + Disconnected Disconnètidu - + Open local folder of current account Aberi sa cartella locale in su contu atuale - + Open Nextcloud Talk in browser Aberi Nextcloud Talk in su navigadore - + More apps Àteras aplicatziones @@ -6289,7 +6171,7 @@ Menu de aplicatziones - + Open %1 in browser Aberi %1 in su navigadore @@ -6309,7 +6191,7 @@ Aberi bentana de cumpartzidura - + Unified search results list @@ -6320,7 +6202,7 @@ Mustra àteras atziones - + %1 - File activity @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available Sa safata de sistema no est a disponimentu @@ -6338,7 +6220,7 @@ %1 rechedet una safata de sistema. Si ses impreende XFCE, sighi <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">custa istrutziones</a>. Sinunca, installa un'aplicatzione safata de sistema comente a 'trayer' e torra a proare. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 rechedet una safata de sistema. Si ses impreende XFCE, sighi <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">custa istrutziones</a>. Sinunca, installa un'aplicatzione safata de sistema comente a 'trayer' e torra a proare. @@ -6346,7 +6228,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Cumpiladu dae sa versione Git <a href="%1">%2</a> on %3, %4 impreende Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sk.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sk.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sk.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sk.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Otvoriť %1 lokálne - + Open share dialog Otvoriť dialógové okno zdieľania - + Share %1 Zdieľať %1 - - + + Show more actions Zobraziť ďalšie akcie @@ -39,7 +39,7 @@ ActivityList - + Activity list Zoznam aktivít @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Prekročený časový limit spojenia - + 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" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemonické šifrovanie medzi koncovými bodmi - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Pre ochranu vašej kryptografickej identity, šifrujeme ju pomocou 12 mnemotechnických slov slovníka. Poznačte si ich a uschovajte ich. Budú potrebné na pridanie ďalších zariadení do vášho účtu (napríklad mobilného telefónu alebo notebooku). @@ -305,9 +305,9 @@ - - - + + + Cancel Zrušiť @@ -495,52 +495,52 @@ Odstrániť prepojenie synchronizácie priečinka - + Disable virtual file support … Vypnúť podporu virtuálnych súborov ... - + Enable virtual file support %1 … Zapnúť podproru virtuálnych súborov %1 … - + (experimental) (experimentálne) - + Folder creation failed Vytvorenie priečinka zlyhalo - + <p>Could not create local folder <i>%1</i>.</p> <p>Nie je možné vytvoriť lokálny priečinok <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Potvrdiť odstránenie prepojenia synchronizácie priečinka - + <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> - + Remove Folder Sync Connection Odstrániť prepojenie synchronizácie priečinka - + Disable virtual file support? Vypnúť podporu virtuálnych súborov? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Táto akcia zruší všetky prebiehajúce synchronizácie. - + Disable support Zakázať podporu - + Sync Running Prebieha 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 (%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. Momentálne nie sú k dispozícii žiadne informácie o využití ukladacieho priestoru. - + %1 in use %1 sa používa @@ -603,87 +603,87 @@ Prihlásiť sa - + %1 as %2 %1 ako %2 - + The server version %1 is unsupported! Proceed at your own risk. Verzia serveru %1 nie je podporovaná! 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. Server %1 je momentálne v režime údržby. - + Signed out from %1. Odhlásené z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Získavam autorizáciu z prehliadača. <a href='%1'>Kliknite sem</a> na opätovné otvorenie prehliadača. - + Connecting to %1 … Pripája sa k %1 … - + No connection to %1 at %2. Žiadne pripojenie k %1 na %2. - + Server configuration error: %1 at %2. Chyba konfigurácie serveru: %1 na %2. - + No %1 connection configured. Žiadne nakonfigurované %1 spojenie - + There are folders that were not synchronized because they are too big: Tieto priečinky neboli synchronizované pretože sú príliš veľké: - + There are folders that were not synchronized because they are external storages: Niektoré priečinky neboli synchronizované, pretože sú na externom úložisku - + There are folders that were not synchronized because they are too big or external storages: Niektoré priečinky neboli synchronizované, pretože sú príliš veľké alebo sú na externom úložisku - + 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 Odstrániť prepojenie @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Odhlásené - + Disconnected Odpojené - + Connected Pripojené - + Service unavailable Služba nedostupná - + Maintenance mode Mód údržby - + Network error Chyba siete - + Configuration error Chyba nastavenia - + Asking Credentials Zisťujem prihlasovacie údaje - + Unknown account state Neznámy stav účtu @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Súbory zo zoznamu ignorovaných ako aj symbolické linky sa nesynchronizujú. - + For more activities please open the Activity app. Pre viac aktivít otvorte aplikáciu Aktivity. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Pokračovanie bude znamenať <b>zmazanie týchto nastavení </b>. - + Continuing will mean <b>ignoring these settings</b>. Pokračovanie bude znamenať <b>ignorovanie týchto nastavení </b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Niektoré nastavenia boli nakonfigurované v novších verziách tohto klienta a používajú funkcie, ktoré v tejto verzii nie sú k dispozícii.<br><br>% 1<br><br>Aktuálny konfiguračný súbor bol už zálohovaný do <i>% 2</i>. - + Quit Ukončiť - + Continue Pokračovať - + Error accessing the configuration file Chyba pri prístupe ku konfiguračnému súboru - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Pri prístupe ku konfiguračnému súboru na %1 sa vyskytla chyba. Uistite sa, že váš používateľ má prístup k súboru. - + Quit %1 Ukončiť %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - Súbor %1 nie je možné nahrať, pretože existuje iný súbor s rovnakým názvom, ktorý sa líši len veľkostou písmen - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Súbor odobratý (spustiť nahrávanie) %1 - - - - Local file changed during syncing. It will be resumed. - Lokálny súbor bol zmenený počas synchronizácie. Nahrávanie bude obnovené. - - - - - Local file changed during sync. - Lokálny súbor bol zmenený počas synchronizácie. - - - - Error updating metadata: %1 - Chyba pri aktualizácii metadát: %1 - - - - The file %1 is currently in use - Súbor %1 sa v súčasnosti používa - - - - The local file was removed during sync. - Lokálny súbor bol odstránený počas synchronizácie. - - - - ; Restoration Failed: %1 - ; Obnovenie zlyhalo: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Zadajte svoju prístupovú frázu pre šifrovanie medzi koncovými bodmi: <br><br>Používateľ: %2<br>Účet: %3<br> - + Enter E2E passphrase Zadajte E2E prístupovú frázu @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ V odpovedi servra na objavovanie súboru chýbajú údaje. - - + + Server error: PROPFIND reply is not XML formatted! Chyba servera: odpoveď PROPFIND nie je vo formáte XML. @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Chyba pri otváraní adresára %1 - + Directory not accessible on client, permission denied Priečinok nie je prístupný pre klienta, prístup odmietnutý - + Directory not found: %1 Adresár nebol nájdený: %1 - + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - + Error while reading directory %1 Chyba pri načítavaní adresára %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Chyba vrátená zo servera: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Chyba pri prístupe k 'tokenu' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Nie je možné spracovať JSON odpoveď zo servera: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odpoveď zo servera neobsahuje všetky očakávané polia - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Vrátená URL adresa nezačína na HTTPS, každopádne adresa pre prihlásenie na HTTPS začína. Prihlásenie nebude umožnené, pretože by to mohol byť bezpečnostný problém. Obráťte sa na svojho správcu. @@ -1368,41 +1305,41 @@ 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. Bol pridaný nový priečinok väčší ako %1 MB: %2. - + A folder from an external storage has been added. Bol pridaný priečinok z externého úložiska. - + Please go in the settings to select it if you wish to download it. Ak si to prajete prevziať, tak prejdite do nastavení a vyberte to. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Priečinok %1 bol vytvorený, ale bol už skôr vylúčený zo synchronizácie. Nebude preto synchronizovaný. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Súbor %1 bol vytvorený, ale bol už skôr vylúčený zo synchronizácie. Nebude preto synchronizovaný. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ % 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. + Všetky súbory vo vašej lokálnej synchronizovanom priečinku '%1' boli vymazané. Tieto súbory budú vymazané aj na serveri a teda už viac nebudú dostupné až kým ich neobnovíte. +Ste si istí, že chcete tieto akcie synchronizovať so serverom? +Ak to bol omyl a rozhodnete sa tieto súbory ponechať, budú opäť synchronizované zo servera. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Ponechať lokálne súbory ako konfliktné - - 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 restore 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. - Všetky súbory v synchronizačnom priečinku '%1' boli na serveri vymazané. -Tieto zmeny budú synchronizované do lokálneho synchronizačného priečinka, takže už tieto vymazané súbory nebudú dostupné, ak máte oprávnenie pre ich obnovu. -Ak sa rozhodnete lokálne súbory ponechať, budú znovu synchronizované so serverom ak na to máte oprávnenie. -Ak sa rozhodnete súbory vymazať tak následne už nebudú dostupné, ak nie ste vlastník. - - - - 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. - Všetky súbory vo vašej lokálnej synchronizovanom priečinku '%1' boli vymazané. Tieto súbory budú vymazané aj na serveri a teda už viac nebudú dostupné až kým ich neobnovíte. -Ste si istí, že chcete tieto akcie synchronizovať so serverom? -Ak to bol omyl a rozhodnete sa tieto súbory ponechať, budú opäť synchronizované zo servera. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Ak sa rozhodnete súbory vymazať tak následne už nebudú dostupné, ak nie ste vlastník. - + 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. @@ -1514,17 +1440,28 @@ Ak to bol omyl a rozhodnete sa tieto súbory ponechať, budú opäť synchronizované zo servera. - + Remove All Files? Odstrániť všetky súbory? - + Remove all files Odstrániť všetky súbory - + + 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 restore 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. + Všetky súbory v synchronizačnom priečinku '%1' boli na serveri vymazané. +Tieto zmeny budú synchronizované do lokálneho synchronizačného priečinka, takže už tieto vymazané súbory nebudú dostupné, ak máte oprávnenie pre ich obnovu. +Ak sa rozhodnete lokálne súbory ponechať, budú znovu synchronizované so serverom ak na to máte oprávnenie. +Ak sa rozhodnete súbory vymazať tak následne už nebudú dostupné, ak nie ste vlastník. + + + Keep files Ponechať súbory @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Nemožno resetovať stav priečinka @@ -1570,37 +1507,37 @@ 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. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Bol nájdený starý žurnál synchronizácie "%1", avšak nemôže byť odstránený. 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. @@ -1610,67 +1547,67 @@ Synchronizácia bola úspešná s nevyriešenými konfliktmi. - + Sync finished with unresolved conflicts. Synchronizácia skončila s nevyriešenými konfliktami. - + Last Sync was successful. Posledná synchronizácia sa úspešne skončila. - + 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 does not exist! Zvolená cesta neexistuje! - + 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 already contains a folder used in a folder sync connection. Please pick another one! Lokálny priečinok %1  už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Lokálny priečinok %1 už obsahuje podpriečinok použitý pre synchronizáciu. Vyberte prosím iný priečinok. - + There is already a sync from the server to this local folder. Please pick another local folder! Do tohto lokálneho priečinka sa už synchronizuje. Vyberte prosím iný priečinok. @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Pridať prepojenie priečinka - + Add Sync Connection Pridať synchronizačné pripojenie @@ -1928,42 +1865,42 @@ 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 Chyba pri zobrazení priečinka: %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 <i>%1</i>, which is a subfolder of <i>%2</i>. Už synchronizujete <i>%1</i>, čo je podzložka <i>%2</i>. @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Použiť virtuálne súbory namiesto okamžitého sťahovania lokálneho obsahu %1 - - + + (experimental) (experimentálne) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuálne súbory nie sú podporované na koreňovej partícii Windows ako lokálny priečinok. Prosím vyberte validný priečinok pod písmenom disku. - + Virtual files are not available for the selected folder Virtuálne súbory sú nedostupné pre vybraný priečinok @@ -2009,27 +1946,27 @@ 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. - + We received an unexpected download Content-Length. Prijali sme neočakávaný Content-Length pri sťahovaní. - + Server returned wrong content-range Server vrátil nesprávnu hodnotu Content-range - + Connection Timeout Spojenie vypršalo @@ -2149,22 +2086,22 @@ Vytvoriť archív s informáciami pre debug... - + Server notifications that require attention. Zobrazovať hlásenie, ktoré vyžadujú pozornosť. - + You cannot disable autostart because system-wide autostart is enabled. Nemôžete vypnúť autoštart pretože autoštart je zapnutý na systémov úrovni. - + Change update channel? Zmeniť aktualizáciu kanálu? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ Upozorňujeme, že sa tým vyberie iba to, odkiaľ sa aktualizácie budú sťahovať, a že nedôjde k nijakému downgrade. Takže návrat z beta kanála do stabilného kanála sa zvyčajne nedá vykonať okamžite a znamená čakať na stabilnú verziu, ktorá je novšia ako aktuálne nainštalovaná beta verzia. - + Change update channel Zmeniť aktualizáciu kanálu - + Cancel Zrušiť - + Create Debug Archive Vytvoriť debug archív - + Zip Archives Zip archívy - + Debug Archive Created Archív ladiacich informácii vytvorený - + Debug archive is created at %1 Archív ladiacich informácií vytvorený %1 @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Pre sprístupnenie je potrebné heslo - + Please enter a password for your link share: Zadajte heslo pre sprístupnenie pomocou odkazu: - + Sharing error Chyba sprístupnenia - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Chyba @@ -2556,7 +2493,7 @@ <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> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>Súbor "%1"<br/>nie je možné otvoriť pre úpravu.<br/><br/>Systémový záznam - log <b>nemôže</b> byť uložený!</nobr> @@ -2564,33 +2501,33 @@ 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 - + Update Failed Aktualizácia sa nepodarila @@ -2605,17 +2542,17 @@ <p>K dispozícii je nová verzia klienta %1, ale proces aktualizácie zlyhal. </p><p><b>%2</b> bolo stiahnuté. Nainštalovaná verzia je %3. Ak potvrdíte reštart a aktualizáciu, váš počítač sa môže reštartovať a dokončiť inštaláciu.</p> - + Ask again later Opýtať sa neskôr - + Restart and update Reštart a aktualizácia - + Update manually Aktualizovať manuálne @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Chyba vrátená zo servera: <em>%1</em> @@ -2736,32 +2673,32 @@ Chyba pri prístupe k 'tokenu' endpoint: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Chyba pri prístupe k 'tokenu' endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect Prázdny JSON z presmerovania OAuth2 - + Could not parse the JSON returned from the server: <br><em>%1</em> Nie je možné spracovať JSON odpoveď zo servera: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odpoveď zo servera neobsahovala všetky očakávané polia - + <h1>Login Error</h1><p>%1</p> <h1>Chyba prihlásenia</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>Chybný používateľ</h1><p>Prihlásili ste sa ako používateľ <em>%1</em>, ale je potrebné sa prihlásiť ako <em>%2</em>.<br>Odhláste %3 v inej karte, potom <a href='%4'>kliknite sem</a> a prihláste sa ako používateľ %2</p> @@ -2831,12 +2768,12 @@ Nemôžem stiahnuť aktualizáciu. Kliknite, prosím, na <a href='%1'>%1</a> pre ručné stiahnutie aktualizácie. - + Could not download update. Please open %1 to download the update manually. Nemôžem stiahnuť aktualizáciu. Otvorte prosím %1 pre ručné stiahnutie aktualizácie. - + Could not check for new updates. Nemôžem skontrolovať dostupnosť aktualizácie. @@ -2846,27 +2783,27 @@ Je dostupná nová %1. Pre stiahnutie kliknite <a href='%2'>%2</a> pre stiahnutie aktualizácie. - + New %1 is available. Please open %2 to download the update. Je dostupná nová %1. Prosím otvorte %2 pre stiahnutie aktualizácie. - + Checking update server … Prebieha kontrola aktualizačného servera... - + 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í @@ -2894,14 +2831,14 @@ Pripojiť... - - + + Use &virtual files instead of downloading content immediately %1 Použiť virtuálne súbory namiesto okamžitého sťahovania obsahu %1 - - + + (experimental) (experimentálne) @@ -2926,49 +2863,49 @@ Voľné miesto: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Virtuálne súbory nie sú podporované na koreňovej partícii Windows ako lokálny priečinok. Prosím vyberte validný priečinok pod písmenom disku. - + %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" - + Warning: The local folder is not empty. Pick a resolution! Varovanie: Lokálny priečinok nie je prázdny. Vyberte riešenie! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 voľného miesta - + Virtual files are not available for the selected folder Virtuálne súbory sú nedostupné pre vybraný priečinok - + Local Sync Folder Lokálny synchronizačný priečinok - - + + (%1) (%1) - + There isn't enough free space in the local folder! V lokálnom priečinku nie je dostatok voľného miesta! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3039,7 @@ &Ďalšia > - + Server address does not seem to be valid Neplatná adresa servera @@ -3120,7 +3049,7 @@ Neplatná URL - + Could not load certificate. Maybe wrong password? Nie je možné načítať certifikát. Možno zlé heslo? @@ -3218,54 +3147,54 @@ Vytvára sa priečinok v Nextcloud: %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 @@ -3275,12 +3204,12 @@ 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. - + Cannot 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 alebo 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> @@ -3288,7 +3217,7 @@ OCC::OwncloudWizard - + Add %1 account Pridať %1 účet @@ -3298,17 +3227,17 @@ %1 Asistent pripojenia - + Skip folders configuration Preskočiť konfiguráciu priečinkov - + Enable experimental feature? Povoliť experimentálnu funkciu? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ Toto je nový experimentálny režim. Ak sa ho rozhodnete použiť, nahláste všetky problémy, ktoré sa objavia. - + Enable experimental placeholder mode Povoliť experimentálny mód zástupcu. - + Stay safe Zostať v bezpečí @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Neplatná JSON odpoveď z URL adresy @@ -3356,17 +3285,17 @@ Súbor obsahuje medzery na konci a nemožno ho premenovať, pretože súbor s rovnakým názvom už lokálne existuje. - + 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. Názvy súborov končiacich bodkou nie sú na tomto súborovom systéme podporované. @@ -3381,57 +3310,57 @@ Názvy súborov obsahujúce znak "%1" nie sú na tomto súborovom systéme podporované. - + File name contains at least one invalid character Názov súboru obsahuje nepovolený znak - + The file name is a reserved name on this file system. Názov súboru je na tomto súborovom systéme rezervovaným názvom. - + Filename contains trailing spaces. Názov súboru obsahuje medzery na konci. - + Filename is too long. Meno súboru je veľmi dlhé. - + File/Folder is ignored because it's hidden. Súbor/priečinok je ignorovaný, pretože je skrytý - + Stat failed. Nepodarilo sa získať informácie o súbore. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Konflikt: Prevzatá verzia zo servera, lokálna kópia premenovaná a neodovzdaná. - + The filename cannot be encoded on your file system. Názov súboru nemôže byť na tomto súborovom systéme enkódovaný. - + The filename is blacklisted on the server. Súbor je na tomto serveri na čiernej listine. - + File has extension reserved for virtual files. Prípona súboru je rezervovaná pre virtuálne súbory. - + size veľkosť @@ -3441,72 +3370,62 @@ oprávnenia - - server reported no %1 - server nevrátil žiadne %1 - - - - permission - oprávnenie - - - + file id id súboru - - Server reported no %1 - Server nevrátil žiadne %1 + + server reported no %1 + server nevrátil žiadne %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Konflikt pri nahrávaní niektorých súborov do priečinka. Konfliktné súbory budú odstránené! - + Conflict when uploading a folder. It's going to get cleared! Konflikt pri nahrávaní priečinka. Bude odstránený! - + Conflict when uploading a file. It's going to get removed! Konflikt pri nahrávaní súboru. Bude odstránený! - + 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 because you don't have permission to add files in that folder Nie je možné, pretože nemáte oprávnenie pridávať súbory 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, obnovujem - + Moved to invalid target, restoring Presunuté do neplatného cieľa, obnovujem - + Not allowed to remove, restoring Nie je dovolené odstrániť, obnovujem - + Error while reading the database Chyba pri čítaní z databáze @@ -3516,7 +3435,7 @@ Server odpovedal chybne počas čítania adresára '%1' : %2 - + Server replied with an error while reading directory "%1" : %2 Server odpovedal chybne počas načítania priečinka "%1" : %2 @@ -3529,17 +3448,12 @@ Chyba pri zápise metadát do databázy - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Chyba pri aktualizácii metadát: %1 - + File is currently in use Súbor sa v súčasnosti používa @@ -3552,44 +3466,44 @@ Súbor %1 nie je možné prevziať, pretože chýbajú informácie o šifrovaní. - + File %1 cannot be downloaded because encryption information is missing. Súbor %1 nie je možné prevziať, pretože chýbajú informácie o šifrovaní. - - + + File has changed since discovery Súbor sa medzitým zmenil - - + + File %1 cannot 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! - + 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 local disk space below the limit Sťahovanie by znížilo miesto na lokálnom disku pod nastavený limit - + Free space on disk is less than %1 Voľné miesto na disku je menej ako %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. @@ -3599,12 +3513,12 @@ Prebratý súbor je prázdny napriek tomu, že server oznámil, že mal mať %1. - + The downloaded file is empty, but the server said it should have been %1. Prebratý súbor je prázdny napriek tomu, že server oznámil, že mal mať %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! @@ -3614,18 +3528,12 @@ Chyba pri zápise metadát do databázy - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Chyba pri aktualizácii metadát: %1 - + The file %1 is currently in use Súbor %1 sa v súčasnosti používa @@ -3633,12 +3541,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovenie zlyhalo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Súbor alebo adresár bol odobratý zo sprístupnenia len na čítanie, ale jeho obnovenie zlyhalo: %1 @@ -3712,12 +3620,12 @@ Súbor %1 nemôže byť premenovaný na %2 z dôvodu, že tento názov je už použitý - + Error updating metadata: %1 Chyba pri aktualizácii metadát: %1 - + The file %1 is currently in use Súbor %1 sa v súčasnosti používa @@ -3728,12 +3636,12 @@ Chyba pri zápise metadát do databázy - + Failed to rename file Nepodarilo sa premenovať súbor - + Error setting pin state Chyba pri nastavovaní stavu pin-u @@ -3767,12 +3675,12 @@ Chyba pri zápise metadát do databázy - + Error writing metadata to the database: %1 Chyba pri zápise metadát do databázy: %1 - + The file %1 is currently in use Súbor %1 sa v súčasnosti používa @@ -3790,22 +3698,22 @@ Server vrátil neplatný HTTP kód. Očakávaný bol 201, ale vrátený bol "%1 %2". - + Error updating metadata: %1 Chyba pri aktualizácii metadát: %1 - + The file %1 is currently in use Súbor %1 sa v súčasnosti používa - + Error setting pin state Chyba pri nastavovaní stavu pin-u - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Zlyhalo nahrávanie šifrovaného súboru. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Súbor %1 nie je možné nahrať, pretože existuje iný súbor s rovnakým názvom, ktorý sa líši len veľkostou písmen - - + + Upload of %1 exceeds the quota for the folder Nahranie %1 prekračuje kvótu, ktorá je pre priečinok nastavená - + File Removed (start upload) %1 Súbor odobratý (spustiť nahrávanie) %1 - + 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. - + Failed to unlock encrypted folder. Zlyhalo odomykanie zamknutého adresára. @@ -3862,12 +3762,12 @@ Chyba pri zápise metadát do databázy - + Error updating metadata: %1 Chyba pri aktualizácii metadát: %1 - + The file %1 is currently in use Súbor %1 sa v súčasnosti používa @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing Chýba Poll URL - + Unexpected return code from server (%1) Neočakávaný návratový kód zo servera (%1) - + Missing File ID from server Chýba ID (identifikátor) súboru zo servera - + Missing ETag from server Chýba ETag zo servera @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + 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) Server nepotvrdil poslednú časť dát (nenašiel sa e-tag). @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss Odmietnuť @@ -4171,17 +4071,17 @@ Chrániť heslom - + Allow editing Povoliť úpravy - + View only Iba pre čítanie - + Allow upload and editing Povoliť nahrávanie a úpravy @@ -4191,7 +4091,7 @@ Dátum vypršania: - + File drop (upload only) Odovzdávanie súborov (len nahrávanie) @@ -4201,32 +4101,32 @@ Zneprístupniť - + Link name Názov odkazu - + Note to recipient Poznámka pre príjemcu - + Password protect Chrániť heslom - + Set expiration date Nastaviť dátum expirácie - + Delete link Zmazať odkaz - + Add another link Pridať ďalší odkaz @@ -4236,27 +4136,27 @@ Zmazať sprístupnený odkaz - + Confirm Link Share Deletion Potvrdzovať rušenie sprístupnenia - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Naozaj chcete vymazať odkaz pre verejné sprístupnenie <i>%1</i>?</p><p>Pozn.: túto akciu nie je možné vrátiť späť.</p> - + Delete Zmazať - + Cancel Zrušiť - + Public link Verejný odkaz @@ -4269,12 +4169,12 @@ Zdieľať s používateľmi alebo skupinami ... - + Search globally Hľadať globálne - + Copy link Kopírovať odkaz @@ -4284,22 +4184,22 @@ Žiadne výsledky pre '%1' - + No results for "%1" Žiadne výsledky pre "%1" - + Password for share required Pre sprístupnenie je potrebné heslo - + Please enter a password for your email share: Zadajte heslo pre sprístupnenie pomocou emailu: - + I shared something with you Niečo som vám sprístupnil @@ -4337,42 +4237,42 @@ Platnosť končí: - + Can reshare Môže sprístupniť aj iným - + Note to recipient Poznámka pre príjemcu - + Set expiration date Nastaviť dátum expirácie - + Unshare Zneprístupniť - + Can create Môže vytvárať - + Can change Môže meniť - + Can delete Môže odstraňovať - + Password protect Chrániť heslom @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share Sprístupnenie kontextovej ponuky - + Select new location … Zadajte novú polohu ... - + I shared something with you Niečo som vám sprístupnil - - + + Share options Možnosti zdieľania @@ -4421,73 +4321,73 @@ Aktivity - + Copy private link to clipboard Kopírovať privátny odkaz do schránky - + Send private link by email … Odoslať privátny odkaz e-mailom… - + Resharing this file is not allowed Opätovné sprístupňovanie tohto súboru je zakázané - + Resharing this folder is not allowed Opätovné zdieľanie tohto adresára je zakázané - - + + Copy public link Kopírovať verejný odkaz - + Copy internal link Kopírovať interný odkaz - + Edit Upraviť - + Open in browser Otvoriť v prehliadači - + Resolve conflict … Vyriešiť konflikt ... - + Move and rename … Presunúť a premenovať ... - + Move, rename and upload … Presunúť. remenovať a nahrať ... - + Delete local changes Zrušiť lokálne zmeny - + Move and upload … Presunúť a nahrať ... - + Delete Zmazať @@ -4633,77 +4533,77 @@ Dôverovať danému certifikátu v každom prípade - + Untrusted Certificate Nedôveryhodný certifikát - + Cannot connect securely to <i>%1</i>: Nie je možné sa bezpečne pripojiť k <i>%1</i>: Additional errors: - Ďalšie chyby: + - + 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 (SHA1): <tt>%1</tt> Odtlačok (SHA1 hash): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Odtlačok (SHA-256 hash): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Odtlačok (SHA-512 hash): <tt>%1</tt> - + Effective Date: %1 Dátum účinnosti: %1 - + Expiration Date: %1 Koniec platnosti: %1 - + Issuer: %1 Vydavateľ: %1 @@ -4796,33 +4696,33 @@ Vyskytla sa interná chyba číslo %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (vynechané kvôli predchádzajúcej chybe, ďalší pokus o %2) - + Could not update file: %1 Nemôžem aktualizovať súbor: %1 - + Could not update virtual file metadata: %1 Nemôžem aktualizovať metadáta virtuálneho súboru: %1 - + Unresolved conflict. Nevyriešený konflikt. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných len %1, pre spustenie je potrebných aspoň %2 - + Aborted Prerušiť @@ -4899,16 +4799,16 @@ Názvy súborov končiacich bodkou nie sú na tomto súborovom systéme podporované. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Nie je možné otvoriť alebo vytvoriť miestnu synchronizačnú databázu. Skontrolujte či máte právo na zápis do synchronizačného priečinku. + + File names containing the character '%1' are not supported on this file system. Názvy súborov obsahujúce znak "%1" nie sú na tomto súborovom systéme podporované. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Nie je možné otvoriť alebo vytvoriť miestnu synchronizačnú databázu. Skontrolujte či máte právo na zápis do synchronizačného priečinku. - - The file name is a reserved name on this file system. Názov súboru je na tomto súborovom systéme rezervovaným názvom (nie je možné ho použiť). @@ -4929,7 +4829,7 @@ Súbor/priečinok je ignorovaný, pretože je skrytý - + Using virtual files with suffix, but suffix is not set Používate virtuálne súbory s príponou, ale prípona nie je nastavená @@ -4944,7 +4844,7 @@ Názov súboru nemôže byť na tomto súborovom systéme enkódovaný. - + Unable to read the blacklist from the local database Nepodarilo sa načítať čiernu listinu z miestnej databázy @@ -4959,17 +4859,17 @@ Nepodarilo sa získať informácie o súbore. + + Unable to read from the sync journal. + Nemožno čítať zo synchronizačného žurnálu + + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - - 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 @@ -4979,22 +4879,22 @@ Neplatné znaky, premenujte prosím "%1" + + Synchronization will resume shortly. + Synchronizácia bude čoskoro pokračovať. + + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - Synchronization will resume shortly. - Synchronizácia bude čoskoro pokračovať. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Na disku dochádza voľné miesto. Sťahovanie, ktoré by zmenšilo voľné miesto pod %1 bude vynechané. - + There is insufficient space available on the server for some uploads. Na serveri nie je pre niektoré z nahrávaných súborov dostatok voľného miesta. @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account Pridať účet - + Open main dialog Otvoriť hlavné dialógové okno + - Pause sync Pozastaviť synchronizáciu - - + + Resume sync Pokračovať v synchronizácii - + Settings Nastavenia - + Exit %1 Ukončiť %1 - + Pause sync for all Pozastaviť synchronizáciu pre všetky účty - + Resume sync for all Pokračovať v synchronizácii pre všetky účty - + %1: %2 %1: %2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Klient pre počítač</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Verzia %1. Viac informácií získate <a href='%2'>kliknutím sem</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Používa zásuvný modul virtuálnych súborov: %1</small></p> - + <p>This release was supplied by %1</p> <p>Toto vydanie bolo poskytnuté %1</p> @@ -5138,55 +5038,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Nepodarilo sa načítať poskytovateľov. + - + Failed to fetch search providers for '%1'. Error: %2 - Nepodarilo sa načítať poskytovateľov vyhľadávania pre „%1“. Chyba: %2 + - + Search has failed for '%2'. - Vyhľadávanie '%2' zlyhalo. + - + Search has failed for '%1'. Error: %2 - Vyhľadávanie '%1' zlyhalo. Chyba: %2 + OCC::User - + Retry all uploads Zopakovať všetky nahrávania - + Synced %1 Zosynchronizované %1 - + You renamed %1 Premenovali ste %1 - + You deleted %1 Zmazali ste %1 - + You created %1 Vytvorili ste %1 - + You changed %1 Zmenili ste %1 @@ -5194,22 +5094,22 @@ OCC::UserModel - + 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ýmto sa <b>neodstránia</b> žiadne súbory.</p> - + Remove connection Vymazať prepojenie - + Cancel Zrušiť @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Funkcia Virtuálneho súborového systému vyžaduje NTFS, %1 používa %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ Nový priečinok - + %n day ago pred %n dňompred %n dňamipred %n dňamipred %n dňami - + %n days ago pred %n dňompred %n dňamipred %n dňamipred %n dňami - + in the future v budúcnosti - + %n hour ago pred %n hodinoupred %n hodinamipred %n hodinamipred %n hodinami - + %n hours ago pred %n hodinoupred %n hodinamipred %n hodinamipred %n hodinami - + now teraz - + Less than a minute ago Menej ako pred minútou - + %n minute ago pred %n minútoupred %n minútamipred %n minútamipred %n minútami - + %n minutes ago pred %n minútoupred %n minútamipred %n minútamipred %n minútami - + Some time ago Pred istým časom @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. Nepodarilo sa pripojiť k databáze. @@ -5946,9 +5828,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Vyhľadať súbory, správy, udalosti ... + @@ -5956,7 +5838,7 @@ Load more results - Načítať viac výsledkov + @@ -5964,7 +5846,7 @@ Search result skeleton. - Kostra výsledkov vyhľadávania. + @@ -5972,7 +5854,7 @@ Load more results - Načítať viac výsledkov + @@ -5983,21 +5865,11 @@ Zadanie účtu - + Switch to account Prepnúť na účet - - Current user status is online - Stav aktuálneho užívateľa je pripojený - - - - Current user status is do not disturb - Stav aktuálneho užívateľa je nerušiť - - Account connected Účet pripojený @@ -6008,7 +5880,17 @@ Účet nie je pripojený - + + Current user status is online + Stav aktuálneho užívateľa je pripojený + + + + Current user status is do not disturb + Stav aktuálneho užívateľa je nerušiť + + + Account actions Možnosti účtu @@ -6018,24 +5900,24 @@ Odobrať účet - + Set status Nastaviť stav - - + + Log out Odhlásiť - - + + Log in Prihlásiť sa - + Remove account Odobrať účet @@ -6096,57 +5978,57 @@ 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 rokov - + %n month(s) %n mesiac%n mesiace%n mesiacov%n mesiacov - + %n day(s) %n deň%n dni%n dní%n dní - + %n hour(s) %n hodina%n hodiny%n hodín%n hodín - + %n minute(s) %n minúta%n minúty%n minút%n minút - + %n second(s) %n sekunda%n sekundy%n sekúnd%n sekúnd - + %1 %2 %1 %2 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolného súčtu je poškodená. @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog Hlavné dialógové okno pracovnej plochy Nextcloud - + Current account Aktuálny účet - - + + Resume sync for all Pokračovať v synchronizácii pre všetky účty - - + + Pause sync for all Pozastaviť synchronizáciu pre všetky účty - + Set user status Nastaviť status užívateľa - + Add account Pridať účet - + Add new account Pridať nový účet - + Settings Nastavenia - + Exit Ukončiť - + Current user avatar Avatar aktuálneho užívateľa - + Current user status is online Stav aktuálneho užívateľa je pripojený - + Current user status is do not disturb Stav aktuálneho užívateľa je nerušiť @@ -6254,32 +6136,32 @@ Sprístupniť %1 - + Account switcher and settings menu Prepínač účtov a menu nastavení - + Connected Pripojené - + Disconnected Odpojené - + Open local folder of current account Otvoriť lokálny priečinok aktuálneho účtu - + Open Nextcloud Talk in browser Otvoriť Nextcloud Talk v prehliadači - + More apps Viac aplikácií @@ -6289,7 +6171,7 @@ Menu aplikácií - + Open %1 in browser Otvoriť %1 v prehliadači @@ -6309,9 +6191,9 @@ Otvoriť dialógové okno sprístupnenia - + Unified search results list - Jednotný zoznam výsledkov vyhľadávania + @@ -6320,7 +6202,7 @@ Zobraziť ďalšie akcie - + %1 - File activity %1 - Aktivita súboru @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available Systémová lišta "tray" neprístupná @@ -6338,7 +6220,7 @@ %1 vyžaduje funkčnú systémovú lištu "tray". Pokiaľ používate prostredie XFCE, prosím pokračujte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">podľa týchto inštrukcií</a>. Inak si prosím nainštalujte aplikáciu systémovej lišty "tray" ako napr. 'trayer' a skúste to znova. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 vyžaduje funkčnú systémovú lištu "tray". Pokiaľ používate prostredie XFCE, prosím pokračujte <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">podľa týchto inštrukcií</a>. Inak si prosím nainštalujte aplikáciu systémovej lišty "tray" ako napr. 'trayer' a skúste to znova. @@ -6346,7 +6228,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sl.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sl.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sl.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sl.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally Odpri datoteko %1 krajevno - + Open share dialog Odpri pogovorno okno souporabe - + Share %1 Omogoči souporabo %1 - - + + Show more actions Pokaži več možnosti @@ -39,7 +39,7 @@ ActivityList - + Activity list Seznam dejavnosti @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Povezava je časovno potekla - + Unknown error: network reply was deleted Neznana napaka: odziv strežnika je bil izbrisan - + Server replied "%1 %2" to "%3 %4" Odziv strežnika: »%1 %2« za »%3 %4« @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Mnemonika celostnega šifriranja - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Za zaščito vaše kriptografske istovetnosti se ta šifrira z uporabo 12 slovarskih besed. Te je priporočljivo zabeležiti in jih varno shraniti. Brez njih ni mogoče dodati drugih naprav v račun (kot sta mobilni telefon in prenosni računalnik). @@ -305,9 +305,9 @@ - - - + + + Cancel Prekliči @@ -495,52 +495,52 @@ Odstrani povezavo za usklajevanje mape - + Disable virtual file support … Onemogoči podporo za navidezne datoteke ... - + Enable virtual file support %1 … Omogoči podporo za navidezne datoteke %1 ... - + (experimental) (preizkusno) - + Folder creation failed Ustvarjanje mape je spodletelo - + <p>Could not create local folder <i>%1</i>.</p> <p>Ni mogoče ustvariti krajevne mape <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Potrdi odstranjevanje povezave usklajevanja mape - + <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> - + Remove Folder Sync Connection Odstrani povezavo za usklajevanje mape - + Disable virtual file support? Ali želite onemogočiti podporo navideznih datotek? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ S tem dejanjem prav tako prekinete vsa trenutna usklajevanja v izvajanju. - + Disable support Onemogoči podporo - + 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 (%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. - + %1 in use Skupna velikost je %1 @@ -603,87 +603,87 @@ Prijava - + %1 as %2 %1 z računom %2 - + The server version %1 is unsupported! Proceed at your own risk. Različica strežnika %1 ni podprta! Nadaljujete na lastno odgovornost. - + Connected to %1. Vzpostavljena je povezava s strežnikom %1. - + Server %1 is temporarily unavailable. Strežnik %1 trenutno ni dosegljiv. - + Server %1 is currently in maintenance mode. Strežnik %1 je trenutno v vzdrževalnem načinu. - + 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. - Poteka pridobitev overitve po brskalniku. <a href='%1'>Kliknite</a> to za ponovno odpiranje brskalnika. + Poteka pridobitev overitve prek brskalnika. <a href='%1'>Kliknite</a> to za ponovno odpiranje brskalnika. - + Connecting to %1 … Poteka vzpostavljanje povezave s strežnikom %1 ... - + No connection to %1 at %2. S strežnikom %1 ni vzpostavljene povezave (%2). - + Server configuration error: %1 at %2. Napaka nastavitve strežnika: %1 na %2 - + No %1 connection configured. Ni nastavljene povezave %1. - + 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 so del zunanje shrambe, zato 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 zato, ker so del zunanje shrambe, niso bile usklajene: - + Confirm Account Removal Potrdi odstranjevanje 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> odstranitev povezave <b>ne izbriše</b> nobene datoteke.</p> - + Remove connection Odstrani povezavo @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Odjavljeno - + Disconnected Brez povezave - + Connected Povezano - + Service unavailable Storitev ni na voljo - + Maintenance mode Vzdrževalni način - + Network error Omrežna napaka - + Configuration error Napaka nastavitve - + Asking Credentials Zahteva po poverilih - + Unknown account state Neznano stanje računa @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Datoteke, ki so na seznamu neusklajevanja, in simbolne povezave se ne usklajujejo. - + For more activities please open the Activity app. Za izpis več dejavnosti odprite program Dejavnost @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. Nadaljevanje pomeni <b>brisanje teh nastavitev</b>. - + Continuing will mean <b>ignoring these settings</b>. Nadaljevanje pomeni, da bodo <b>nastavitve prezrte</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Nekatere nastavitve so bile nastavljene v novejši različici programa in vključujejo možnosti, ki v trenutni različici niso na voljo.<br><br>%1<br><br>Za trenutno uporabljeno nastavitveno datoteko je varnostna kopija že shranjena na <i>%2</i>. - + Quit Končaj - + Continue Nadaljuj - + Error accessing the configuration file Napaka dostopa do nastavitvene datoteke - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Med dostopom do nastavitvene datoteke na %1 je prišlo do napake. Preverite, ali je dostopna z uporabniškim računom. - + Quit %1 Končaj %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - 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 %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - Datoteka je odstranjena (začni pošiljanje) %1. - - - - 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. - - - - Error updating metadata: %1 - Prišlo je do napake posodabljanja metapodatkov: %1 - - - - The file %1 is currently in use - Datoteka %1 je trenutno v uporabi. - - - - The local file was removed during sync. - Krajevna datoteka je bila med usklajevanjem odstranjena. - - - - ; Restoration Failed: %1 - Obnovitev je spodletela: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Vnesite neposredno geslo:<br><br>uporabnik: %2<br>račun: %3<br> - + Enter E2E passphrase Vpis gesla za celovito šifriranje E2E @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Strežniški odziv odkrivanja datotek je brez podatkov. - - + + Server error: PROPFIND reply is not XML formatted! Napaka strežnika: odziv PROPFIND ni zapisan kot XML! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 Prišlo je do napake med odpiranjem mape %1 - + Directory not accessible on client, permission denied Mapa v programu ni dosegljiva, ni ustreznih dovoljenj. - + Directory not found: %1 Mape ni mogoče najti: %1 - + Filename encoding is not valid Kodiranje imena datoteke ni veljavno - + Error while reading directory %1 Prišlo je do napake med branjem mape %1 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> S strežnika je prejet odziv o napaki: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> Prišlo je do napake med dostopom do končne točke »žetona«: <br><em>%1</em>. - + Could not parse the JSON returned from the server: <br><em>%1</em> Ni mogoče razčleniti zapisa JSON, vrnjenega s strežnika: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odziv strežnika ne vključuje vseh pričakovanih polj - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Vrnjen naslov URL strežnika se ne začne s HTTPS, kljub temu, da se naslov URL za prijavo je. Prijava ne bo mogoča, ker je to lahko varnostna težava. Stopite v stik s skrbnikom sistema. @@ -1368,41 +1305,41 @@ 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 je mogoče izbrati in označiti za prejem. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Mapa %1 je bila ustvarjena, a je bila izločena s seznama usklajevanja. Podatki v tej mapi ne bodo usklajeni. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Datoteka %1 je bila ustvarjena, a je bila izločena s seznama usklajevanja. Podatki ne bodo usklajeni. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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. + 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. + + All files in the sync folder '%1' 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. @@ -1474,27 +1420,7 @@ Ohrani krajevne datoteke kot datoteke v sporu - - 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 restore 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. - Vse datoteke v usklajevani mapi »%1« so bile na strežniku izbrisane. -Sprememba bo usklajena tudi s krajevno mapo na disku, zato bodo te datoteke, če ni ustreznih dovoljenj za obnovitev, izgubljene. -V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, bodo spet usklajene s strežnikom. -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. - 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. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1505,7 +1431,7 @@ Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več dosegljive. - + 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. @@ -1514,17 +1440,28 @@ Č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 - + + 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 restore 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. + Vse datoteke v usklajevani mapi »%1« so bile na strežniku izbrisane. +Sprememba bo usklajena tudi s krajevno mapo na disku, zato bodo te datoteke, če ni ustreznih dovoljenj za obnovitev, izgubljene. +V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, bodo spet usklajene s strežnikom. +Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več na voljo. + + + Keep files Ohrani datoteke @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Ni mogoče ponastaviti stanja mape @@ -1570,37 +1507,37 @@ Obstaja star dnevnik usklajevanja »%1«, ki pa ga ni mogoče odstraniti. Preverite, ali je datoteka morda v uporabi. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Obstaja star dnevnik usklajevanja »%1«, ki pa ga ni mogoče odstraniti. Preverite, ali je datoteka morda 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 na usklajevanje. - + Sync is running. Usklajevanje je v teku. @@ -1610,67 +1547,67 @@ Usklajevanje je bilo uspešno končano, so pa zaznani nerešeni spori. - + Sync finished with unresolved conflicts. Usklajevanje je končano z zaznanimi nerešenimi spori. - + Last Sync was successful. Zadnje usklajevanje je bilo uspešno končano. - + 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 does not exist! Izbrana pot ne obstaja! - + 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 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. - + 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. @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Dodaj povezavo za usklajevanje mape - + Add Sync Connection Dodaj povezavo za usklajevanje @@ -1928,42 +1865,42 @@ Vpišite ime mape, ki bo ustvarjena kot podrejena »%1«: - + Folder was successfully created on %1. Mapa na %1 je uspešno ustvarjena. - + 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>. Mapa <i>%1</i> se že usklajuje, ker je nadrejena <i>%2</i>. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. Mapa <i>%1</i> se že usklajuje, ker je podrejena mapi <i>%2</i>. @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 Uporabi možnost navideznih datotek namesto prejemanja celotne vsebine %1 - - + + (experimental) (preizkusno) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Kot krajevne datoteke na ravni korenske mape v okolju Windows navidezne datoteke niso podprte. Izbrati je treba ustrezno podrejeno mapo na črkovnem pogonu. - + Virtual files are not available for the selected folder Navidezne datoteke niso na voljo za izbrano mapo @@ -2009,27 +1946,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ni prejete oznake E-Tag 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. - + We received an unexpected download Content-Length. Zaznana je nepričakovana zahteva za prejem Vsebine-Dolžine. - + Server returned wrong content-range Odziv strežnika kaže na neveljaven obseg vsebine - + Connection Timeout Povezava je časovno potekla @@ -2149,22 +2086,22 @@ Ustvari arhiv razhroščevanja - + Server notifications that require attention. Prejeto je obvestilo strežnika, ki zahteva pozornost. - + You cannot disable autostart because system-wide autostart is enabled. Samodejnega zagona ni mogoče izklopiti, ker je ta omogočen sistemsko. - + Change update channel? Ali želite zamenjati kanal za posodobitve? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ Zavedati se je treba, da izbor določa le različice programske opreme za nadgradnjo in da povrnitev na starejše različice ni več mogoča. Povrnitev iz preizkusnega kanala Beta na Stabilnega ni mogoča, dokler stabilna različica ni višja oziroma novejša od nameščene preizkusne različice. - + Change update channel Spreminjanje kanala posodobitev - + Cancel Prekliči - + Create Debug Archive Ustvari arhiv razhroščevanja - + Zip Archives Arhivi ZIP - + Debug Archive Created Arhiv razhroščevanja je ustvarjen - + Debug archive is created at %1 Arhiv razhroščevanja je ustvarjen na %1 @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Zahtevano je geslo za souporabo - + Please enter a password for your link share: Vpisati je treba geslo za mesto souporabe prek povezave: - + Sharing error Napaka souporabe - + Could not retrieve or create the public link share. Error: %1 @@ -2255,7 +2192,7 @@ <a href="%1">Click here</a> to request an app password from the web interface. - <a href="%1">Kliknite</a> za dodelitev gesla programa po spletnem vmesniku. + <a href="%1">Kliknite</a> za dodelitev gesla programa prek spletnega vmesnika. @@ -2544,7 +2481,7 @@ OCC::Logger - + Error Napaka @@ -2554,7 +2491,7 @@ <nobr>Datoteke »%1«<br/>ni mogoče odpreti za pisanje.<br/><br/>Dnevniškega zapisa <b>ni mogoče</b> shraniti!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</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> @@ -2562,33 +2499,33 @@ 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 - + Update Failed Posodobitev je spodletela @@ -2603,17 +2540,17 @@ <p>Na voljo je nova različica programa %1, vendar je posodobitev spodletela.</p><p>Program <b>%2</b> je sicer že prejet. Trenutno nameščeno različico %3 je morda mogoče namestiti, če potrdite ponovni zagon sistema.</p> - + Ask again later Znova vprašaj kasneje - + Restart and update Ponovno zaženi in posodobi - + Update manually Posodobi ročno @@ -2724,7 +2661,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> S strežnika je prejet odziv o napaki: <em>%1</em> @@ -2734,32 +2671,32 @@ Prišlo je do napake med dostopom do končne točke: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> Prišlo je do napake med dostopom do končne točke »žetona«: <br><em>%1</em>. - + Empty JSON from OAuth2 redirect Preusmeritev OAuth2 prek prazne vsebine JSON - + Could not parse the JSON returned from the server: <br><em>%1</em> Ni mogoče razčleniti zapisa JSON, vrnjenega s strežnika: <br><em>%1</em> - + The reply from the server did not contain all expected fields Odziv strežnika ne vključuje vseh pričakovanih polj - + <h1>Login Error</h1><p>%1</p> <h1>Napaka prijave</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>Napačen uporabnik</h1><p>Prijavljeni ste kot uporabnik <em>%1</em>, morali pa bi biti povezani kot <em>%2</em>.<br>Odjavite povezavo %3 v drugem zavihku, nato <a href='%4'>kliknite za novo sejo</a> in se prijavite kot %2</p> @@ -2829,12 +2766,12 @@ Posodobitve ni mogoče prejeti. Odprite <a href='%1'>%1</a> za prejem in ročno namestitev. - + Could not download update. Please open %1 to download the update manually. Posodobitve ni mogoče prejeti. Odprite %1 za ročni prejem in namestitev. - + Could not check for new updates. Ni mogoče preveriti za nove posodobitve. @@ -2844,27 +2781,27 @@ Na voljo je različica %1. Kliknite na <a href='%2'>%2</a> za prejem posodobitve. - + New %1 is available. Please open %2 to download the update. Na voljo je nova različica %1. Odprite %2 za ročni prejem posodobitve. - + Checking update server … Poteka 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. Trenutno ni novih posodobitev. Nameščena je najnovejša različica. - + Update Check Preverjanje za posodobitve @@ -2892,14 +2829,14 @@ Poveži ... - - + + Use &virtual files instead of downloading content immediately %1 Uporabite $navidezne datoteke namesto prejemanja celotne vsebine %1 - - + + (experimental) (preizkusno) @@ -2924,49 +2861,49 @@ Prostor: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Kot krajevne datoteke na ravni korenske mape v okolju Windows navidezne datoteke niso podprte. Izbrati je treba ustrezno podrejeno mapo na črkovnem pogonu. - + %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 « - + Warning: The local folder is not empty. Pick a resolution! Opozorilo: krajevna mapa ni prazna. Izberite razpoložljivo možnost za razrešitev problema! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 razpoložljivega prostora - + Virtual files are not available for the selected folder Navidezne datoteke niso na voljo za izbrano mapo - + Local Sync Folder Krajevna mapa usklajevanja - - + + (%1) (%1) - + There isn't enough free space in the local folder! V krajevni mapi ni dovolj prostora! @@ -3036,14 +2973,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3109,7 +3038,7 @@ &Naslednja > - + Server address does not seem to be valid Kaže, da naslov strežnika ni veljaven. @@ -3119,7 +3048,7 @@ Neveljaven naslov URL - + Could not load certificate. Maybe wrong password? Ni mogoče naložiti potrdila. Ste morda vnesli napačno geslo? @@ -3217,54 +3146,54 @@ ustvarjanje mape v oblaku Nextcoud: %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. Vzpostavljena je povezava za usklajevanje med %1 in oddaljeno mapo %2. - + Successfully connected to %1! Povezava s strežnikom %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 @@ -3274,12 +3203,12 @@ Mape ni mogoče odstraniti niti ni mogoče ustvariti varnostne kopije, ker je mapa, oziroma dokument v njej, odprt v drugem programu. Zaprite mapo oziroma dokument, ali pa prekinite namestitev. - + Cannot 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, ker je mapa, oziroma dokument v njej, odprt v drugem programu. Zaprite mapo oziroma dokument, ali pa 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> @@ -3287,7 +3216,7 @@ OCC::OwncloudWizard - + Add %1 account Dodaj račun %1 @@ -3297,17 +3226,17 @@ Čarovnik za povezavo %1 - + Skip folders configuration Preskoči nastavitve map - + Enable experimental feature? Ali želite omogočiti preizkusne možnosti? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3324,12 +3253,12 @@ To je nov preizkusni način. Če ga boste uporabili, pošljite tudi poročila o težavah, na katere naletite. - + Enable experimental placeholder mode Omogoči preizkusni način vsebnikov - + Stay safe Ostanite varni @@ -3337,7 +3266,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Neveljaven odziv JSON ob preverjanju naslova URL @@ -3355,17 +3284,17 @@ Ime datoteke vsebuje nepotrebne končne presledke in ga ni mogoče preimenovati, saj datoteka z istim imenom krajevno že obstaja. - + Symbolic links are not supported in syncing. Usklajevanje simbolnih povezav ni podprto. - + File is listed on the ignore list. Datoteka je na seznamu neusklajevanih datotek. - + File names ending with a period are not supported on this file system. Imena datotek, ki vsebujejo končno piko, na tem sistemu niso podprta. @@ -3380,57 +3309,57 @@ Imena datotek, ki vsebujejo znak »%1«, na tem sistemu niso podprta. - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - + 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. - + File/Folder is ignored because it's hidden. Datoteka/Mapa ni usklajevana, ker je skrita. - + Stat failed. Določanje stanja je spodletelo. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Spor: prejeta je strežniška različica, krajevna je preimenovana, a ne tudi poslana v oblak. - + The filename cannot be encoded on your file system. Zapisa imena datoteke na tem datotečnem sistemu ni mogoče kodirati. - + The filename is blacklisted on the server. Ime datoteke je na črnem seznamu strežnika. - + File has extension reserved for virtual files. Datoteka ima predpono, ki je zadržana za navidezne datoteke. - + size velikost @@ -3440,72 +3369,62 @@ dovoljenja - - server reported no %1 - prejet je odziv strežnika %1 - - - - permission - dovoljenje - - - + file id ID datoteke - - Server reported no %1 - Prejet je odziv strežnika %1 + + server reported no %1 + prejet je odziv strežnika %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Zaznan je spor pri nalaganju nekaterih datotek v mapo. Spori bodo samodejno počiščeni! - + Conflict when uploading a folder. It's going to get cleared! Zaznan je spor pri pošiljanju mape. Mapa bo počiščena! - + Conflict when uploading a file. It's going to get removed! Zaznan je spor pri pošiljanju datoteke. Datoteka bo odstranjena! - + Ignored because of the "choose what to sync" blacklist Predmet ni usklajevan, ker je na »črnem seznamu datotek« 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 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 - + Not allowed to upload this file because it is read-only on the server, restoring Te datoteke ni dovoljeno poslati, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - + Moved to invalid target, restoring Predmet je premaknjen na neveljaven cilj, vsebina bo obnovljena. - + Not allowed to remove, restoring Odstranjevanje ni dovoljeno, vsebina bo obnovljena. - + Error while reading the database Napaka branja podatkovne zbirke @@ -3515,7 +3434,7 @@ Odziv strežnika vključuje napako med branjem mape »%1«: %2 - + Server replied with an error while reading directory "%1" : %2 Odziv strežnika vključuje napako med branjem mape »%1«: %2 @@ -3528,17 +3447,12 @@ Napaka zapisovanja metapodatkov v podatkovno zbirko - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 Prišlo je do napake posodabljanja metapodatkov: %1 - + File is currently in use Datoteka je trenutno v uporabi. @@ -3551,44 +3465,44 @@ Datoteke %1 ni mogoče prejeti zaradi manjkajočih podatkov šifriranja! - + File %1 cannot be downloaded because encryption information is missing. Datoteke %1 ni mogoče prejeti zaradi manjkajočih podatkov šifriranja! - - + + File has changed since discovery Datoteka je bila spremenjena po usklajevanju seznama datotek - - + + File %1 cannot be downloaded because of a local file name clash! Datoteke %1 ni mogoče prejeti zaradi neskladja z imenom krajevne datoteke! - + 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 local disk space below the limit Prejem predmetov bi zmanjšal prostor na krajevnem disku pod določeno omejitev. - + 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. @@ -3598,12 +3512,12 @@ Prejeta datoteka je prazna, čeprav je s strešnika javljena velikost %1. - + The downloaded file is empty, but the server said 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! @@ -3613,18 +3527,12 @@ Napaka zapisovanja metapodatkov v podatkovno zbirko - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 Prišlo je do napake posodabljanja metapodatkov: %1 - + The file %1 is currently in use Datoteka %1 je trenutno v uporabi. @@ -3632,12 +3540,12 @@ 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 @@ -3711,12 +3619,12 @@ Datoteke %1 ni mogoče preimenovati v %2 zaradi že obstoječe datoteke s tem imenom. - + Error updating metadata: %1 Prišlo je do napake posodabljanja metapodatkov: %1 - + The file %1 is currently in use Datoteka %1 je trenutno v uporabi. @@ -3727,12 +3635,12 @@ Napaka zapisovanja metapodatkov v podatkovno zbirko - + Failed to rename file Preimenovanje datoteke je spodletelo - + Error setting pin state Napaka nastavljanja pripetega staja @@ -3766,12 +3674,12 @@ Napaka zapisovanja metapodatkov v podatkovno zbirko - + Error writing metadata to the database: %1 Napaka zapisovanja metapodatkov v podatkovno zbirko: %1 - + The file %1 is currently in use Datoteka %1 je trenutno v uporabi. @@ -3789,22 +3697,22 @@ S strežnika je vrnjen neveljaven odziv HTTP. Pričakovan je 201, prejet pa je bil »%1 %2«. - + Error updating metadata: %1 Prišlo je do napake posodabljanja metapodatkov: %1 - + The file %1 is currently in use Datoteka %1 je trenutno v uporabi. - + Error setting pin state Napaka nastavljanja pripetega staja - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -3812,46 +3720,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. Pošiljanje šifrirane datoteke je spodletelo. - + 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. - - + + Upload of %1 exceeds the quota for the folder Pošiljanje %1 preseže omejitev, določeno za mapo. - + File Removed (start upload) %1 Datoteka je odstranjena (začni pošiljanje) %1. - + 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. - + Failed to unlock encrypted folder. Odklepanje šifrirane mape je spodletelo. @@ -3861,12 +3761,12 @@ Napaka zapisovanja metapodatkov v podatkovno zbirko - + Error updating metadata: %1 Prišlo je do napake posodabljanja metapodatkov: %1 - + The file %1 is currently in use Datoteka %1 je trenutno v uporabi. @@ -3874,32 +3774,32 @@ OCC::PropagateUploadFileNG - + 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. - + Poll URL missing Preveri manjkajoči naslov URL - + 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 datoteka ETag @@ -3907,22 +3807,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -4000,7 +3900,7 @@ OCC::ServerNotificationHandler - + Dismiss Opusti @@ -4170,17 +4070,17 @@ Zaščiti z geslom - + Allow editing Dovoli urejanje - + View only Le ogled - + Allow upload and editing Dovoli pošiljanje in urejanje @@ -4190,7 +4090,7 @@ Datum preteka - + File drop (upload only) Poteg datotek v okno (samo nalaganje) @@ -4200,32 +4100,32 @@ Prekini souporabo - + Link name Ime povezave - + Note to recipient Sporočilo za prejemnika - + Password protect Zaščiti z geslom - + Set expiration date Nastavi datum preteka - + Delete link Izbriši povezavo - + Add another link Dodaj novo povezavo @@ -4235,27 +4135,27 @@ Izbriši povezavo za souporabo - + Confirm Link Share Deletion Potrdi brisanje povezave do mesta souporabe - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Ali res želite izbrisati javno povezavo do mesta souporabe <i>%1</i>?</p><p>Opomba: opravila ni mogoče povrniti.</p> - + Delete Izbriši - + Cancel Prekliči - + Public link Javna povezava @@ -4268,12 +4168,12 @@ Souporaba z uporabniki ali skupinami ... - + Search globally Išči splošno - + Copy link Kopiraj povezavo @@ -4283,22 +4183,22 @@ Za iskalni niz »%1« ni zadetkov - + No results for "%1" Za iskalni niz »%1« ni zadetkov - + Password for share required Zahtevano je geslo za mesto souporabe - + Please enter a password for your email share: Vpisati je treba geslo za mesto souporabe prek elektronske pošte: - + I shared something with you Nekaj vam dajem v souporabo @@ -4336,42 +4236,42 @@ Poteče: - + Can reshare Lahko omogoči souporabo - + Note to recipient Sporočilo za prejemnika - + Set expiration date Nastavi datum preteka - + Unshare Prekini souporabo - + Can create Lahko ustvari - + Can change Lahko spremeni - + Can delete Lahko izbriše - + Password protect Zaščiti z geslom @@ -4388,23 +4288,23 @@ OCC::SocketApi - + Context menu share Vsebinski meni souporabe - + Select new location … Izbor novega mesta ... - + I shared something with you Nekaj vam dajem v souporabo - - + + Share options Možnosti souporabe @@ -4420,73 +4320,73 @@ Dejavnosti - + Copy private link to clipboard Kopiraj zasebno povezavo v odložišče - + Send private link by email … Pošlji zasebno povezavo prek elektronske pošte ... - + Resharing this file is not allowed Nadaljnje omogočanje souporabe ni dovoljeno - + Resharing this folder is not allowed Nadaljnje omogočanje souporabe mape ni dovoljeno - - + + Copy public link Kopiraj javno povezavo - + Copy internal link Kopiraj krajevno povezavo - + Edit Uredi - + Open in browser Odpri v brskalniku - + Resolve conflict … Razreši spor ... - + Move and rename … Premakni in preimenuj ... - + Move, rename and upload … Premakni, preimenuj in pošlji ... - + Delete local changes Izbriši krajevne spremembe - + Move and upload … Premakni in pošlji ... - + Delete Izbriši @@ -4632,77 +4532,77 @@ Vseeno zaupaj digitalnemu potrdilu - + Untrusted Certificate Potrdilo ni vredno zaupanja - + Cannot connect securely to <i>%1</i>: Ni mogoče vzpostaviti varne povezave s strežnikom <i>%1</i>: Additional errors: - Dodatne napake: + - + 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 (SHA1): <tt>%1</tt> Prstni odtis (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Prstni odtis (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Prstni odtis (SHA-512): <tt>%1</tt> - + Effective Date: %1 Začetek veljavnosti: %1 - + Expiration Date: %1 Datum preteka: %1 - + Issuer: %1 Izdajatelj: %1 @@ -4795,33 +4695,33 @@ Prišlo je do notranje napake %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (prenos je zadržan zaradi predhodne napake; poskus bo ponovljen čez %2) - + Could not update file: %1 Ni mogoče posodobiti datoteke: %1 - + Could not update virtual file metadata: %1 Ni mogoče posodobiti metapodatkov navidezne datoteke: %1 - + Unresolved conflict. Nerazrešen spor - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Na voljo je le %1, za zagon pa je zahtevanih vsaj %2 - + Aborted Preklicano @@ -4898,16 +4798,16 @@ Imena datotek, ki vsebujejo končno piko, na tem sistemu niso podprta. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Ni mogoče odpreti ali ustvariti krajevne usklajevalne podatkovne zbirke. Prepričajte se, da imate ustrezna dovoljenja za pisanje v usklajevani mapi. + + File names containing the character '%1' are not supported on this file system. Imena datotek, ki vsebujejo znak »%1«, na tem sistemu niso podprta. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Ni mogoče odpreti ali ustvariti krajevne usklajevalne podatkovne zbirke. Prepričajte se, da imate ustrezna dovoljenja za pisanje v usklajevani mapi. - - The file name is a reserved name on this file system. Ime datoteke je na tem sistemu zadržano za sistemsko datoteko. @@ -4928,7 +4828,7 @@ Datoteka/Mapa ni usklajevana, ker je skrita. - + Using virtual files with suffix, but suffix is not set V uporabi so navidezne datoteke s pripono, a ta ni nastavljena. @@ -4943,7 +4843,7 @@ Zapisa imena datoteke na tem datotečnem sistemu ni mogoče kodirati. - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape @@ -4958,17 +4858,17 @@ Določanje stanja je spodletelo. + + Unable to read from the sync journal. + Ni mogoče brati iz dnevnika usklajevanja + + Filename encoding is not valid Kodni zapis imena datoteke ni veljaven. - - 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 @@ -4978,22 +4878,22 @@ Uporabljen je neveljaven znak; predmet »%1« je treba preimenovati. + + Synchronization will resume shortly. + Usklajevanje se bo v kratkem nadaljevalo. + + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - Synchronization will resume shortly. - Usklajevanje se bo v kratkem nadaljevalo. - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Zmanjkuje prostora na disku: prejem predmetov, ki bi zmanjšali prostor na disku pod %1 bo prekinjen. - + There is insufficient space available on the server for some uploads. Za usklajevanje je na strežniku premalo prostora. @@ -5036,7 +4936,7 @@ Some files could not be synced! - Nekaterih datotek ni mogoče uskladiti! + @@ -5062,49 +4962,49 @@ OCC::Systray - + Add account Dodaj račun - + Open main dialog Odpri glavno pogovorno okno + - Pause sync Ustavi usklajevanja - - + + Resume sync Nadaljuj z usklajevanjem - + Settings Nastavitve - + Exit %1 Končaj %1 - + Pause sync for all Ustavi usklajevanje za vse - + Resume sync for all Nadaljuj z usklajevanjem za vse - + %1: %2 %1: %2 @@ -5112,24 +5012,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>Namizni program %1</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Nameščena je različica %1. Več podrobnosti je zabeleženih v <a href='%2'>priročniku Nextcloud</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Uporablja vstavek navideznih datotek: %1</small></p> - + <p>This release was supplied by %1</p> <p>Objavo je omogočila skupina %1</p> @@ -5137,55 +5037,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Pridobivanje ponudnikov je spodletelo. + - + Failed to fetch search providers for '%1'. Error: %2 - Spodletelo je pridobivanje ponudnikov iskanja za »%1«. Napaka %2 + - + Search has failed for '%2'. - Iskanje »%2« je spodletelo. + - + Search has failed for '%1'. Error: %2 - Iskanje »%1« je spodletelo. Napaka: %2 + OCC::User - + Retry all uploads Ponovi pošiljanje vseh predmetov - + Synced %1 Usklajeno %1 - + You renamed %1 Preimenovali ste %1 - + You deleted %1 Izbrisali ste %1 - + You created %1 Ustvarili ste %1 - + You changed %1 Spremenili ste %1 @@ -5193,22 +5093,22 @@ OCC::UserModel - + Confirm Account Removal Potrdi odstranjevanje 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> odstranitev povezave <b>ne izbriše</b> nobene datoteke.</p> - + Remove connection Odstrani povezavo - + Cancel Prekliči @@ -5228,22 +5128,22 @@ User status feature is not supported. You will not be able to set your user status. - Možnost prikaza stanja uporabnika ni podprta. Uporabniškega statusa ne bo mogoče nastaviti. + Emojis feature is not supported. Some user status functionality may not work. - Možnost uporabe izraznih ikon ni podprta. Nekatere možnosti stanja uporabnika morda ne bodo na voljo. + Could not set user status. Make sure you are connected to the server. - Stanja uporabnika ni mogoče nastaviti. Prepričajte se, da ste povezani s strežnikom. + Could not clear user status message. Make sure you are connected to the server. - Sporočila o stanju uporabnika ni bilo mogoče izbrisati. Prepričajte se, da ste povezani s strežnikom. + @@ -5313,30 +5213,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Navidezni datotečni sistem zahteva uporabo NTFS, Na %1 pa je v uporabi %2. - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5542,7 +5424,7 @@ Checking for changes in remote "%1" - Poteka preverjanje sprememb na oddaljenem mestu »%1«. + @@ -5552,7 +5434,7 @@ Checking for changes in local "%1" - Poteka preverjanje za krajevne spremembe v »%1«. + @@ -5858,52 +5740,52 @@ Nova mapa - + %n day ago pred %n dnempred %n dnemapred %n dnevipred %n dnevi - + %n days ago pred %n dnevompred %n dnevomapred %n dnevipred %n dnevi - + in the future v prihodnje - + %n hour ago pred %n uropred %n uramapred %n uramipred %n urami - + %n hours ago pred %n uropred %n uramapred %n uramipred %n urami - + now zdaj - + Less than a minute ago Pred manj kot minuto - + %n minute ago pred %n minutopred %n minutamapred %n minutamipred %n minutami - + %n minutes ago pred %n minutopred %n minutamapred %n minutamipred %n minutami - + Some time ago Pred nekaj časa @@ -5937,7 +5819,7 @@ SyncJournalDb - + Failed to connect database. Vzpostavljanje povezave s podatkovno zbirko je spodletelo. @@ -5945,9 +5827,9 @@ UnifiedSearchInputContainer - + Search files, messages, events … - Iskanje datotek, sporočil, dogodkov ... + @@ -5955,7 +5837,7 @@ Load more results - Naloži več zadetkov + @@ -5963,7 +5845,7 @@ Search result skeleton. - Skelet zadetkov iskanja. + @@ -5971,7 +5853,7 @@ Load more results - Naloži več zadetkov + @@ -5982,21 +5864,11 @@ Vpis računa - + Switch to account Preklopi v drug račun - - Current user status is online - Trenutno je uporabnik povezan - - - - Current user status is do not disturb - Trenutno uporabnik ne želi motenj - - Account connected Račun je povezan @@ -6007,7 +5879,17 @@ Račun ni povezan - + + Current user status is online + Trenutno je uporabnik povezan + + + + Current user status is do not disturb + Trenutno uporabnik ne želi motenj + + + Account actions Dejanja računa @@ -6017,24 +5899,24 @@ Odstrani račun - + Set status Nastavi stanje - - + + Log out Odjava - - + + Log in Log in - + Remove account Odstrani račun @@ -6095,57 +5977,57 @@ 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 @@ -6153,7 +6035,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Glava nadzorne vsote je napačno oblikovana. @@ -6175,75 +6057,75 @@ 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. "%1" != "%2" - Nadzorna vsota prejete datoteke ni skladna s varnostno nadzorno vsoto, zato bo prejem ponovljen. »%1« != »%2« + Window - + Nextcloud desktop main dialog Glavni vmesnik namizja Nextcloud - + Current account Trenutni račun - - + + Resume sync for all Nadaljuj z usklajevanjem za vse - - + + Pause sync for all Ustavi usklajevanje za vse - + Set user status Nastavi stanje uporabnika - + Add account Dodaj račun - + Add new account Dodaj račun - + Settings Nastavitve - + Exit Končaj - + Current user avatar Trenutna podoba uporabnika - + Current user status is online Trenutno je uporabnik povezan - + Current user status is do not disturb Trenutno uporabnik ne želi motenj @@ -6253,32 +6135,32 @@ Souporaba %1 - + Account switcher and settings menu Preklopnik računov in meni nastavitev - + Connected Povezano - + Disconnected Brez povezave - + Open local folder of current account Odpri krajevno mapo v trenutnem računu - + Open Nextcloud Talk in browser Odpri Nextcloud Talk v brskalniku - + More apps Več programov @@ -6288,7 +6170,7 @@ Meni programov - + Open %1 in browser Odpri %1 v brskalniku @@ -6308,9 +6190,9 @@ Odpri pogovorno okno souporabe - + Unified search results list - Poenoten seznam zadetkov iskanja + @@ -6319,15 +6201,15 @@ Pokaži več možnosti - + %1 - File activity - %1 – Dejavnost datoteke + main.cpp - + System Tray not available Sistemska vrstica ni na voljo @@ -6337,15 +6219,15 @@ %1 zahteva uporabo sistemske obvestilne vrstice. Pri uporabnikih namizja XFCE je treba upoštevati <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">posebne nastavitve</a>. V kolikor to ni mogoče, je treba namestiti katerikoli sistem obveščanja, kot je na primer program »trayer«. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. - %1 zahteva uporabo sistemske obvestilne vrstice. Pri uporabnikih namizja XFCE je treba upoštevati <a href="http://docs.xfce.org/xfce/xfce4-panel/systray"> ta navodila </a>. V nasprotnem primeru namestite program sistemske obvestilne vrstice, kot je »trayer«" in poskusite znova. + nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Izgradnje iz predelave Git <a href="%1">%2</a> na %3, %4 z uporabo Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sr.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sr.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sr.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sr.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Време повезивања истекло - + Unknown error: network reply was deleted Непозната грешка: мрежни одговор је обрисан - + Server replied "%1 %2" to "%3 %4" Сервер је одговорио „%1 %2“ на „%3 %4“ @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Мнемоник шифровања са краја на крај - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Да бисте заштитили Ваш криптографски идентитет, шифровали смо га са лако памтљивих 12 речи из речника. Запишите их и добро их чувајте. Биће Вам потребне да додате нове уређаје на Ваш налог (као нпр. мобилни или лаптоп). @@ -305,9 +305,9 @@ - - - + + + Cancel Одустани @@ -495,52 +495,52 @@ Уклони везу на синхронизацију фасцикле - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed Прављење фасцикле није успело - + <p>Could not create local folder <i>%1</i>.</p> <p>Не могу да направим локалну фасциклу <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Потврдите уклањање конекције на синхронизацију фасцикле - + <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> - + Remove Folder Sync Connection Уклони везу на синхронизацију фасцикле - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support - + Sync Running Синхронизација у току - + The syncing operation is running.<br/>Do you want to terminate it? Синхронизација је у току.<br/>Желите ли да је прекинете? - + %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. Тренутно нема доступних података о заузећу складишта. - + %1 in use %1 искоришћено @@ -599,87 +599,87 @@ Пријава - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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. - + Server configuration error: %1 at %2. - + No %1 connection configured. Нема подешене %1 везе. - + 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 Уклони везу @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out Одјављен - + Disconnected Неповезан - + Connected Повезан - + Service unavailable Услуга није доступна - + Maintenance mode Режим одржавања - + Network error Грешка мреже - + Configuration error Грешка подешавања - + Asking Credentials Питам за акредитиве - + Unknown account state Непознато стање налога @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. За још активности отворите апликацију Активности. @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit - + Continue - + Error accessing the configuration file Грешка при приступању фајлу са подешавањима - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Догодила се грешка приликом учитавања фајла са подешавањима са %1. Проверите да ли корисник има приступ овом фајлу. - + Quit %1 Напусти %1 @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Грешка приликом уписивања метаподатака у базу @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Унесите Вашу лозинку за шифровање са краја на крај:<br><br>Корисник: %2<br>Налог: %3<br> - + Enter E2E passphrase Унесите E2E лозинку @@ -1099,19 +1049,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1119,8 +1056,8 @@ У одговору са сервера за откривање фајлова недостају подаци. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1128,27 +1065,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1172,7 +1109,7 @@ - + Error returned from the server: <em>%1</em> Грешка враћена са сервера: <em>%1</em> @@ -1184,24 +1121,24 @@ - + 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> Не могу да парсирам JSON враћен са сервера: <br><em>%1</em> - + The reply from the server did not contain all expected fields Одговор са сервера није садржао сва очекивана поља - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1362,41 +1299,41 @@ Активност синхронизације - + 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. Идите у поставке и означите ако желите да ја преузмете. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Фасцикла %1 је креирана, али је још раније искључена из синхронизације. Подаци унутар ње неће бити синхронизовани. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Фајл %1 је креиран, али је још раније искључен из синхронизације. Неће бити синхронизован. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1409,6 +1346,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1468,22 +1412,7 @@ Чувај локалне фајлове као конфликтне - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1491,24 +1420,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1544,7 +1481,7 @@ OCC::FolderMan - + Could not reset folder state Не могу да ресетујем стање фасцикле @@ -1554,37 +1491,37 @@ Пронађен је стари журнал синхронизације „%1“ али се не може уклонити. Проверите да га нека апликација тренутно не користи. - + 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) (резерва %1) - + Undefined State. Неодређено стање. - + Waiting to start syncing. Чекам на почетак синхронизације. - + Preparing for sync. Припремам синхронизацију. - + Sync is running. Синхронизација у току. @@ -1594,67 +1531,67 @@ Синхронизација је била успешна, има неразрешених конфликата. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Последња синхронизација је била успешна. - + Setup Error. Грешка подешавања. - + User Abort. Корисник прекинуо. - + Sync is paused. Синхронизација је паузирана. - + %1 (Sync is paused) %1 (синхронизација паузирана) - + No valid folder selected! Није изабран ниједна исправна фасцикла! - + The selected path does not exist! - + The selected path is not a folder! Одабрана путања није фасцикла! - + You have no permission to write to the selected 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 је већ унутар фасцикле која се користи за синхронизацију. Одаберите неку другу! - + There is already a sync from the server to this local folder. Please pick another local folder! Већ постоји синхронизација са сервера у ову локалну фасциклу. Одаберите другу локалну фасциклу! @@ -1866,12 +1803,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Додај везу синхронизације фасцикле - + Add Sync Connection Додај везу синхронизације @@ -1912,42 +1849,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1955,24 +1892,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1993,27 +1930,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Нема е-ознаке са сервера. Проверите прокси или мрежни излаз - + We received a different E-Tag for resuming. Retrying next time. Добијена је различита е-ознака за наставак преноса. Покушаћу поново следећи пут. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Сервер је вратио погрешан опсег садржаја - + Connection Timeout Време за повезивање је истекло @@ -2133,54 +2070,54 @@ - + Server notifications that require attention. Обавештења са сервера која захтевају пажњу. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2188,22 +2125,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Потребна лозинка за дељење - + Please enter a password for your link share: Унесите лозинку за везу дељења: - + Sharing error Грешка приликом дељења - + Could not retrieve or create the public link share. Error: %1 @@ -2525,7 +2462,7 @@ OCC::Logger - + Error Грешка @@ -2535,7 +2472,7 @@ <nobr>Фајл „%1“<br/>није уписив.<br/><br/>Записник се <b>не може</b> сачувати!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2543,33 +2480,33 @@ 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 Ажурирај - + Update Failed @@ -2584,17 +2521,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2705,7 +2642,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Грешка враћена са сервера: <em>%1</em> @@ -2715,32 +2652,32 @@ Догодила се грешка при приступању 'token' крајњој тачки: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2810,12 +2747,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Не могу да проверим нова ажурирања. @@ -2825,27 +2762,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 Провера надоградњи @@ -2873,14 +2810,14 @@ Повезујем сe… - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2905,49 +2842,49 @@ Слободан простор: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Синхронизација локалне фасцикле - - + + (%1) (%1) - + There isn't enough free space in the local folder! Нема довољно слободног места у локалној фасцикли! @@ -3017,14 +2954,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3090,7 +3019,7 @@ &Следеће > - + Server address does not seem to be valid @@ -3100,7 +3029,7 @@ Неисправна адреса - + Could not load certificate. Maybe wrong password? Не могу да учитам сертификат. Можда је лозинка погрешна? @@ -3198,54 +3127,54 @@ правим фасциклу на Некстклауду: % 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 Преименовање није успело @@ -3255,12 +3184,12 @@ Не могу да уклоним и направим резервну копију фасцикле јер су фасцикла или фајл отворени у другом програму. Затворите фасциклу или фајл и покушајте поново или одустаните од подешавања. - + Cannot 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> @@ -3268,7 +3197,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3278,17 +3207,17 @@ %1 чаробњак повезивања - + Skip folders configuration Прескочи подешавање фасцикли - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3299,12 +3228,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3312,7 +3241,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Неисправан ЈСОН одговор са адресе упита @@ -3330,17 +3259,17 @@ - + 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. @@ -3355,57 +3284,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3415,72 +3344,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3490,7 +3409,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3503,17 +3422,12 @@ Грешка при упису мета података у базу - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3526,44 +3440,44 @@ Фајл %1 се не може преузети јер недостају подаци о шифровању. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Фајл је измењен у међувремену - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Фајл %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. Фајл није могао бити преузет у потпуности. @@ -3573,12 +3487,12 @@ Преузети фајл је празан иако је сервер рекао да треба да је %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Фајл %1 се не може сачувати јер се судара са називом локалног фајла! @@ -3588,18 +3502,12 @@ Грешка при упису мета података у базу - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3607,12 +3515,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Враћање није успело: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Фајл или фасцикла је уклоњена из дељења које је само за читање, али повраћај није успео: %1 @@ -3686,12 +3594,12 @@ Фајл %1 се не може преименовати у %2 због сударања са називом локалног фајла - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3702,12 +3610,12 @@ Грешка при упису мета података у базу - + Failed to rename file - + Error setting pin state @@ -3741,12 +3649,12 @@ Грешка при упису мета података у базу - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3764,22 +3672,22 @@ Сервер је вратио лош ХТТП код. Очекивано је 201 али је примљено „%1 %2“. - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Грешка при упису мета података у базу @@ -3787,46 +3695,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Фајл %1 се не може отпремити јер постоји други фајл, чије се име разликује само у великим и малим словима - - + + Upload of %1 exceeds the quota for the folder Отпремање %1 премашује квоту фасцикле - + File Removed (start upload) %1 Фајл уклоњен (започето отпремање) %1 - + Local file changed during syncing. It will be resumed. Локални фајл је измењен током синхронизације. Биће настављена. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + Failed to unlock encrypted folder. @@ -3836,12 +3736,12 @@ Грешка приликом уписа метаподатака у базу података - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3849,32 +3749,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Локални фајл је уклоњен током синхронизације. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + Poll URL missing - + Unexpected return code from server (%1) Неочекивани повратни код са сервера (%1) - + Missing File ID from server ID фајла недостаје са сервера - + Missing ETag from server ETag фајла недостаје са сервера @@ -3882,22 +3782,22 @@ OCC::PropagateUploadFileV1 - + 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-а) @@ -3975,7 +3875,7 @@ OCC::ServerNotificationHandler - + Dismiss Откажи @@ -4145,17 +4045,17 @@ Заштита лозинком - + Allow editing Дозволи уређивање - + View only - + Allow upload and editing Дозволи отпремање и уређивање @@ -4165,7 +4065,7 @@ Датум истека - + File drop (upload only) Превлачење фајлова (само за отпремање) @@ -4175,32 +4075,32 @@ Укини дељење - + Link name - + Note to recipient Напомена примаоцу - + Password protect Заштићено лозинком - + Set expiration date Постави датум истека - + Delete link - + Add another link Додај још једну везу @@ -4210,27 +4110,27 @@ Обриши везу дељења - + Confirm Link Share Deletion Потврдите брисање везе дељења - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Да ли стварно желите да обришете јавну везу дељења <i>%1</i>?</p><p>Белешка: ово је неповратна операција.</p> - + Delete Обриши - + Cancel Откажи - + Public link Јавна веза @@ -4243,12 +4143,12 @@ Дели са корисницима или групама… - + Search globally - + Copy link Копирај везу @@ -4258,22 +4158,22 @@ Нема резултата за '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Поделио сам нешто са Вама @@ -4311,42 +4211,42 @@ - + Can reshare Може да дели даље - + Note to recipient - + Set expiration date - + Unshare Укини дељење - + Can create Може да креира унутар дељења - + Can change Може да мења садржај унутар дељења - + Can delete Може да брише садржај унутар дељења - + Password protect @@ -4363,23 +4263,23 @@ OCC::SocketApi - + Context menu share Контекстни мени дељења - + Select new location … - + I shared something with you Поделио сам нешто са Вама - - + + Share options Опције дељења @@ -4395,73 +4295,73 @@ - + Copy private link to clipboard Копирај приватну везу у оставу - + Send private link by email … Пошаљи приватну везу е-поштом… - + Resharing this file is not allowed Поновно дељење није дозвољено - + Resharing this folder is not allowed - - + + Copy public link Копирај јавну везу - + Copy internal link Копирај интерну везу - + Edit Измени - + Open in browser Отвори у веб читачу - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Избриши @@ -4607,12 +4507,12 @@ Ипак веруј сертификату - + Untrusted Certificate Сертификат није од поверења - + Cannot connect securely to <i>%1</i>: Не могу да се безбедно повежем са <i>%1</i>: @@ -4622,62 +4522,62 @@ - + with Certificate %1 са сертификатом %1 - - - + + + &lt;not specified&gt; &lt;није наведено&gt; - - + + Organization: %1 Организација: %1 - - + + Unit: %1 Јединица: %1 - - + + Country: %1 Држава: %1 - + Fingerprint (SHA1): <tt>%1</tt> Отисак (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Отисак (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Отисак (SHA-512): <tt>%1</tt> - + Effective Date: %1 Важи од: %1 - + Expiration Date: %1 Истиче : %1 - + Issuer: %1 Издавач: %1 @@ -4770,33 +4670,33 @@ Десила се интерна грешка број %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (прескочено због раније грешке, покушавам поново за %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Неразрешени конфликт. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно је само %1, треба бар %2 за започињање - + Aborted @@ -4873,16 +4773,16 @@ Имена фајлова која се завршавају са тачком нису подржана на овом систему фајлова. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Не могу да отворим или креирам локалну базу за синхронизацију. Погледајте да ли имате право писања у синхронизационој фасцикли. + + File names containing the character '%1' are not supported on this file system. Имена фајлова која садрже карактер '%1' нису подржана на овом систему фајлова. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Не могу да отворим или креирам локалну базу за синхронизацију. Погледајте да ли имате право писања у синхронизационој фасцикли. - - The file name is a reserved name on this file system. Ово име фајла је резервисано на овом систему фајлова. @@ -4903,7 +4803,7 @@ Фајл/фасцикла је игнорисан зато што је скривен. - + Using virtual files with suffix, but suffix is not set @@ -4918,7 +4818,7 @@ Име фајла не може да се кодира на Вашем систему фајлова. - + Unable to read the blacklist from the local database Не могу да читам листу ставки игнорисаних за синхронизацију из локалне базе @@ -4933,17 +4833,17 @@ Stat није успео. + + Unable to read from the sync journal. + Не могу да читам синхронизациони журнал. + + Filename encoding is not valid Кодирање назива фајла није исправно - - Unable to read from the sync journal. - Не могу да читам синхронизациони журнал. - - - + Cannot open the sync journal Не могу да отворим журнал синхронизације @@ -4953,22 +4853,22 @@ Неисправан карактер, преименујте „%1“ + + Synchronization will resume shortly. + + + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - Synchronization will resume shortly. - - - - + 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. Нема довољно места на серверу за нека отпремања. @@ -5037,49 +4937,49 @@ OCC::Systray - + Add account Додај налог - + Open main dialog Отвори главни дијалог + - Pause sync - - + + Resume sync - + Settings Поставке - + Exit %1 Излаз %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5087,24 +4987,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 десктоп клијент</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Верзија %1. За више информација кликните <a href='%2'>овде</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Ово издање је обезбедио %1</p> @@ -5112,22 +5012,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5135,32 +5035,32 @@ OCC::User - + Retry all uploads Понови сва отпремања - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5168,22 +5068,22 @@ OCC::UserModel - + 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 Уклоните конекцију - + Cancel Поништи @@ -5288,30 +5188,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5833,52 +5715,52 @@ - + %n day ago пре једног данапре %n данапре %n дана - + %n days ago пре једног данапре %n данапре %n дана - + in the future у будућности - + %n hour ago пре једног сатапре %n сатапре %n сати - + %n hours ago пре једног сатапре %n сатапре %n сати - + now сада - + Less than a minute ago пре мање од минут - + %n minute ago пре једног минутапре %n минутапре %n минута - + %n minutes ago пре једног минутапре %n минутапре %n минута - + Some time ago пре неког времена @@ -5912,7 +5794,7 @@ SyncJournalDb - + Failed to connect database. @@ -5920,7 +5802,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5957,32 +5839,32 @@ - + Switch to account Пребаци на налог - - Current user status is online - + + Account connected + Налог повезан - - Current user status is do not disturb + + Account not connected - Account connected - Налог повезан + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions Акције налога @@ -5992,24 +5874,24 @@ - + Set status - - + + Log out Одјава - - + + Log in Пријава - + Remove account Уклони налог @@ -6070,57 +5952,57 @@ Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n година%n године%n година - + %n month(s) %n месец%n месеца%n месеци - + %n day(s) %n дан%n дана%n дана - + %n hour(s) један сат%n сата%n сати - + %n minute(s) један минут%n минута%n минута - + %n second(s) један секунд%n секунда%n секунди - + %1 %2 %1 %2 @@ -6128,7 +6010,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Заглавље контролне суме је лоше формирано. @@ -6161,64 +6043,64 @@ Window - + Nextcloud desktop main dialog - + Current account Тренутни налог - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Додај налог - + Add new account - + Settings Поставке - + Exit Изађи - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6228,32 +6110,32 @@ - + Account switcher and settings menu - + Connected Повезан - + Disconnected Неповезан - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Још апликација @@ -6263,7 +6145,7 @@ - + Open %1 in browser Отвори %1 у прегледачу @@ -6283,7 +6165,7 @@ - + Unified search results list @@ -6294,7 +6176,7 @@ - + %1 - File activity @@ -6302,7 +6184,7 @@ main.cpp - + System Tray not available Системска касета није доступна @@ -6312,7 +6194,7 @@ %1 захтева системску касету. Ако сте у ИксФЦЕ, испратите <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">ова упутства</a>, или инсталирајте апликацију системске касете и покушајте поново. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6320,7 +6202,7 @@ nextcloudTheme::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 користећи QT %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sv.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sv.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_sv.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_sv.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,38 +10,38 @@ ActivityItem - + Open %1 locally - Öppna %1 lokalt + - + Open share dialog - Öppna delningsdialog + - + Share %1 - Dela %1 + - - + + Show more actions - Visa fler åtgärder + View activity - Visa aktivitet + ActivityList - + Activity list - Aktivitetslista + @@ -54,7 +54,7 @@ Checking for changes in "%1" - Söker efter ändringar i "%1" + @@ -144,7 +144,7 @@ Could not move "%1" to "%2" - Kunde inte flytta "%1" till "%2" + @@ -160,7 +160,7 @@ Error removing "%1": %2 - Kunde inte radera "%1": %2 + @@ -170,7 +170,7 @@ Could not remove folder "%1" - Kunde inte ta bort mappen "%1" + @@ -198,7 +198,7 @@ Logo - Logotyp + @@ -208,7 +208,7 @@ Switch to your browser to connect your account - Använd din webläsare för att få åtkomst till ditt konto + @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tidsgräns för anslutningen överskreds - + Unknown error: network reply was deleted Okänt fel: nätverkssvaret togs bort - + Server replied "%1 %2" to "%3 %4" Servern svarade "%1 %2" på "%3 %4" @@ -275,23 +275,23 @@ 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. + "%1 Failed to unlock encrypted folder %2". - "%1 kunde inte låsa upp den krypterade mappen %2". + OCC::AccountManager - + End to end encryption mnemonic End to end krypteringsord - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). För att skydda din krypteringsidentitet, krypterar vi den med en mnemoteknisk av 12 ord. Notera dessa ord och håll dem säkra. De kommer behövas för att lägga till andra enheter till ditt konto (t.ex. mobiltelefon eller laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel Avbryt @@ -344,22 +344,22 @@ End-to-End Encryption with Virtual Files - End-to-end-kryptering med virtuella filer + You seem to have the Virtual Files feature enabled on this folder. At the moment, it is not possible to implicitly download virtual files that are End-to-End encrypted. To get the best experience with Virtual Files and End-to-End Encryption, make sure the encrypted folder is marked with "Make always available locally". - Det verkar som att funktionen "Virtuella filer" är aktiverad för denna mapp. För närvarande är det inte möjligt att uteslutande ladda ner virtuella filer med end-to-end-kryptering. För bästa upplevelse med virtuella filer och end-to-end-kryptering, säkerställ att "Gör alltid tillgänglig lokalt" är aktiverat. + Don't encrypt folder - Kryptera inte mapp + Encrypt folder - Kryptera mapp + @@ -428,12 +428,12 @@ Encryption failed - Kryptering misslyckades + Could not encrypt folder because the folder does not exist anymore - Kunde inte kryptera mappen eftersom den inte längre existerar + @@ -456,7 +456,7 @@ Create new folder - Skapa ny mapp + @@ -495,52 +495,52 @@ Ta bort anslutning till mappsynkronisering - + Disable virtual file support … Inaktivera stöd för virtuella filer ... - + Enable virtual file support %1 … - Aktivera stöd för virtuella filer %1 … + - + (experimental) - (experimentell) + - + Folder creation failed Kunde inte skapa mappen - + <p>Could not create local folder <i>%1</i>.</p> <p>Kunde inte skapa lokal mapp <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Bekräfta radering av anslutning till mappsynkronisering - + <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> - + Remove Folder Sync Connection Ta bort anslutning till mappsynkronisering - + Disable virtual file support? Inaktivera stöd för virtuella filer? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support Inaktivera support - + 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 (%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 - + %1 in use %1 används @@ -599,87 +599,87 @@ Logga in - + %1 as %2 - %1 som %2 + - + The server version %1 is unsupported! Proceed at your own risk. - Serverversion %1 stöds inte officiellt! 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. - + Server configuration error: %1 at %2. - Felaktig serverkonfiguration: %1 på %2. + - + No %1 connection configured. Ingen %1 anslutning konfigurerad. - + 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 Ta bort anslutning @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out Utloggad - + Disconnected Bortkopplad - + Connected Ansluten - + Service unavailable Tjänsten är inte tillgänglig - + Maintenance mode Underhållsläge - + Network error Nätverksfel - + Configuration error Konfigurationsfel - + Asking Credentials Frågar efter inloggningsuppgifter - + Unknown account state Okänd kontostatus @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Filer från ignorerings-listan och symboliska länkar synkroniseras inte. - + For more activities please open the Activity app. Öppna Aktivitetsappen för fler aktiviteter. @@ -765,7 +765,7 @@ Certificate & Key (pkcs12): - Certifikat och nyckel (pkcs12) : + @@ -785,7 +785,7 @@ An encrypted pkcs12 bundle is strongly recommended as a copy will be stored in the configuration file. - En krypterad PKCS12-kedja är starkt rekommenderad då en kopia kommer att lagras i konfigurationsfilen. + @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit Avsluta - + Continue Fortsätt - + Error accessing the configuration file Kunde inte komma åt konfigurationsfilen - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Ett fel uppstod vid läsning av konfigurationsfil vid %1. Kontrollera att filen kan nås av din användare. - + Quit %1 Avsluta %1 @@ -851,7 +851,7 @@ Enter username and password for "%1" at %2. - Ange användarnamn och lösenord för "%1" på %2. + @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Vänligen ange ditt lösenord för end-to-end-kryptering:<br><br>Användare: %2<br>Konto: %3<br> - + Enter E2E passphrase Ange lösenord för E2E @@ -1077,7 +1027,7 @@ Timeout - Timeout + @@ -1101,19 +1051,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1121,38 +1058,38 @@ Svaret på serverfilsupptäckten saknar data. - - + + Server error: PROPFIND reply is not XML formatted! - Serverfel: PROPFIND-svar är inte XML-formaterat! + OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - Fel uppstod när mappen %1 öppnades + - + Directory not accessible on client, permission denied - Mappen kan inte öppnas av klienten, åtkomst nekad + - + Directory not found: %1 - Mappen hittades inte: %1 + - + Filename encoding is not valid - Filnamnets teckenuppsättning är ogiltig + - + Error while reading directory %1 - Ett fel uppstod när mappen %1 skulle öppnas + @@ -1174,7 +1111,7 @@ - + Error returned from the server: <em>%1</em> Fel returnerat från server: <em>%1</em> @@ -1186,24 +1123,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> - Fel uppstod vid åtkomst till 'token'-endpoint: <br><em>%1</em> + - + Could not parse the JSON returned from the server: <br><em>%1</em> Kunde inte analysera 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1238,12 +1175,12 @@ Reopen Browser - Öppna webbläsaren igen + Copy Link - Kopiera länk + @@ -1288,13 +1225,13 @@ %1 and %n other file(s) have been added. - %1 fil har lagts till.%1 och %n ytterligare filer har lagts till. + %1 has been added. %1 names a file. - %1 har lagts till. + @@ -1364,41 +1301,41 @@ Synkroniseringsaktivitet - + Could not read system exclude file Kunde inte läsa systemets exkluderings-fil - + 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 hämta den. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Mappen %1 skapades men var tidigare exkluderad från synkronisering. Data i denna mapp kommer inte att synkroniseras. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Filen %1 skapades men var tidigare exkluderad från synkronisering. Den kommer inte att synkroniseras. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1411,6 +1348,13 @@ %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. + + + All files in the sync folder '%1' 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. @@ -1470,22 +1414,7 @@ Behåll lokala filer som konflikt - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1493,24 +1422,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files Behåll filer @@ -1520,33 +1457,33 @@ Create new folder - Skapa ny mapp + Enter folder name - Ange mappens namn + Folder already exists - Mappen existerar redan + Error - Fel + Could not create a folder! Check your write permissions. - Kunde inte skapa mappen! Kontrollera skrivrättigheterna. + OCC::FolderMan - + Could not reset folder state Kunde inte återställa mappens skick @@ -1556,37 +1493,37 @@ En gammal synkroniseringsjournal '%1' hittades, men kunde inte raderas. Vänligen se till att inga program för tillfället använder den. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. - + (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. @@ -1596,67 +1533,67 @@ Synkroniseringen lyckades men olösta konflikter. - + Sync finished with unresolved conflicts. - Synkroniseringen lyckades, men olösta konflikter uppstod. + - + Last Sync was successful. Senaste synkronisering lyckades. - + Setup Error. Inställningsfel. - + User Abort. Användare Avbryt - + Sync is paused. Synkronisering är pausad. - + %1 (Sync is paused) %1 (synkronisering pausad) - + No valid folder selected! Ingen giltig mapp markerad! - + The selected path does not exist! - Den valda sökvägen existerar inte! + - + 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 already contains a folder used in a folder sync connection. Please pick another one! Den lokala mappen %1 innehåller redan en mapp som synkroniseras. Vänligen 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 synkroniseras. 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. @@ -1726,12 +1663,12 @@ Synchronizing VirtualFiles with local folder - Synkroniserar virtuella filer med lokal mapp + Synchronizing with local folder - Synkroniserar med lokal mapp + @@ -1751,7 +1688,7 @@ Checking for changes in local "%1" - Söker efter ändringar i lokal '%1' + @@ -1868,12 +1805,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Lägg till mappsynkroniseringsanslutning - + Add Sync Connection Lägg till anslutning. @@ -1911,45 +1848,45 @@ Enter the name of the new folder to be created below "%1": - Ange namn på den mapp som ska placeras 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 synkronisera hela kontot - + This folder is already being synced. Den här mappen synkroniseras redan. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkrroniserar redan <i>%1</i>, vilket är övermapp till <i>%2</i> - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1957,26 +1894,26 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - Använd virtuella filer istället för att ladda ner innehåll direkt %1 + - - + + (experimental) - (experimentell) + - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Windows stödjer inte virtuella filer direkt i rotkataloger. Välj en underkatalog. + - + Virtual files are not available for the selected folder - Virtuella filer är inte tillgängliga för den valda mappen + @@ -1995,27 +1932,27 @@ 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. - + We received an unexpected download Content-Length. - Nerladdningens storlek är inkorrekt. + - + Server returned wrong content-range Servern returnerade felaktig content-range - + Connection Timeout Anslutningen avbröts på grund av timeout @@ -2135,54 +2072,54 @@ Skapa felsökningsarkiv … - + Server notifications that require attention. Serveraviseringar som kräver uppmärksamhet. - + You cannot disable autostart because system-wide autostart is enabled. - Du kan inte deaktivera autostart eftersom autostart är aktiverat på systemnivå. + - + Change update channel? Ändra uppdateringskanal? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel Ändra uppdateringskanal - + Cancel Avbryt - + Create Debug Archive Skapa felsökningsarkiv - + Zip Archives Zip-arkiv - + Debug Archive Created Felsökningsarkiv skapat - + Debug archive is created at %1 Felsökningsarkiv är skapat på %1 @@ -2190,22 +2127,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Lösenord för delning krävs - + Please enter a password for your link share: Ange ett lösenord for din länkdelning: - + Sharing error Fel vid delning - + Could not retrieve or create the public link share. Error: %1 @@ -2224,7 +2161,7 @@ Reading from keychain failed with error: "%1" - Läsning från nyckelkedjan misslyckades med fel: "%1" + @@ -2319,7 +2256,7 @@ Cannot write changes to "%1". - Kunde inte spara ändringar av "%1". + @@ -2342,32 +2279,32 @@ Invalid filename - Ogiltigt filnamn + The file could not be synced because it contains characters which are not allowed on this system. - Filen kunde inte synkroniseras då den innehåller tecken som är ogiltiga under detta system. + Error - Fel + Please enter a new name for the file: - Ange ett nytt namn för filen: + New filename - Nytt filnamn + Rename file - Byt filnamn + @@ -2387,17 +2324,17 @@ Filename contains illegal characters: %1 - Filnamnet innehåller ogiltiga tecken: %1 + Could not rename file. Please make sure you are connected to the server. - Kunde inte byta namn på filen. Kontrollera anslutningen till servern. + Cannot rename file because a file with the same name does already exist on the server. Please pick another name. - Kunde inte byta namn på filen eftersom filnamnet är upptaget. Ange ett annat filnamn. + @@ -2416,7 +2353,7 @@ <p>Copyright 2017-2021 Nextcloud GmbH<br />Copyright 2012-2021 ownCloud GmbH</p> - <p>Copyright 2017-2021 Nextcloud GmbH<br />Copyright 2012-2021 ownCloud GmbH</p> + @@ -2527,7 +2464,7 @@ OCC::Logger - + Error Fel @@ -2537,7 +2474,7 @@ <nobr>Filen '%1'<br/>kan inte öppnas för skrivning.<br/><br/>Loggtexten kan <b>inte</b> sparas!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2545,33 +2482,33 @@ 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 hämtning. 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 - + Update Failed Uppdateringen misslyckades @@ -2586,17 +2523,17 @@ - + Ask again later Fråga igen senare - + Restart and update Starta om och uppdatera - + Update manually Uppdatera manuellt @@ -2636,7 +2573,7 @@ Note: proxy settings have no effects for accounts on localhost - Observera att proxy-inställningar inte används för konton på localhost + @@ -2707,7 +2644,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Fel returnerat från server: <em>%1</em> @@ -2717,32 +2654,32 @@ Fel uppstod vid åtkomst till 'token' endpoint: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - Tom JSON från OAuth2-ompekning + - + 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> @@ -2764,7 +2701,7 @@ New %1 update ready - Ny %1-uppdatering redo + @@ -2809,45 +2746,45 @@ Could not download update. Please open <a href='%1'>%1</a> to download the update manually. - Kunde inte ladda ner uppdatering. Tryck på <a href='%1'>%1</a> för att ladda ner uppdateringen manuellt. + - + Could not download update. Please open %1 to download the update manually. - Kunde inte ladda ner uppdateringen. Öppna %1 för att ladda ner uppdateringen manuellt. + - + Could not check for new updates. Kunde inte söka efter uppdateringar. New %1 is available. Please open <a href='%2'>%2</a> to download the update. - Ny %1 är tillgänglig. Öppna <a href='%2'>%2</a> för att ladda ner uppdateringen. + - + New %1 is available. Please open %2 to download the update. - Ny %1 är tillgänglig. Öppna %2 för att ladda ner uppdateringen. + - + Checking update server … Kontrollerar med uppdateringsserver ... - + 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 @@ -2867,7 +2804,7 @@ Connect - Anslut + @@ -2875,16 +2812,16 @@ Anslut ... - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) - (experimentell) + @@ -2907,49 +2844,49 @@ Ledigt utrymme: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - Windows stödjer inte virtuella filer direkt i rotkataloger. Välj en underkatalog. + - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - Synkronisera mappen '%1' + - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - %1 ledigt utrymme + - + Virtual files are not available for the selected folder - Virtuella filer är inte tillgängliga för den valda mappen + - + Local Sync Folder Lokal mapp för synkronisering - - + + (%1) (%1) - + There isn't enough free space in the local folder! Det finns inte tillräckligt med ledigt utrymme i den lokala mappen! @@ -3019,14 +2956,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3092,9 +3021,9 @@ &Nästa > - + Server address does not seem to be valid - Serverns adress verkar var ogiltig + @@ -3102,7 +3031,7 @@ Ogiltig webbadress - + Could not load certificate. Maybe wrong password? Kunde inte läsa in certifikatet. Felaktigt lösenord? @@ -3172,7 +3101,7 @@ OK - OK + @@ -3200,54 +3129,54 @@ skapar mapp på Nextcloud: %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. Vänligen kontrollera och försök igen. - + Folder rename failed Omdöpning av mapp misslyckades @@ -3257,12 +3186,12 @@ 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. - + Cannot 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>Lokal synkroniseringsmapp %1 skapad!</b></font> @@ -3270,7 +3199,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3280,17 +3209,17 @@ %1 Anslutningsguiden - + Skip folders configuration Hoppa över konfiguration av mappar - + Enable experimental feature? Aktivera experimentell funktion? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3301,20 +3230,20 @@ - + Enable experimental placeholder mode - + Stay safe - Var försiktig + OCC::PollJob - + Invalid JSON reply from the poll URL Ogiltigt JSON-svar från hämtningswebbadressen @@ -3324,90 +3253,90 @@ File contains trailing spaces and could not be renamed, because a file with the same name already exists on the server. - Filen innehåller inledande mellanslag och kunde inte döpas om eftersom en fil med samma namn redan existerar på servern. + File contains trailing spaces and could not be renamed, because a file with the same name already exists locally. - Filen innehåller inledande mellanslag och kunde inte döpas om eftersom en fil med samma namn redan existerar lokalt. + - + Symbolic links are not supported in syncing. - Symboliska länkar kan ej synkroniseras. + - + File is listed on the ignore list. - Filen är listad i undantagslistan. + - + File names ending with a period are not supported on this file system. - Filnamn som slutar med en punkt stöds inte på detta filsystem. + File names containing the character '%1' are not supported on this file system. - Filnamn innehållandes tecknet "%1' stöds inte på detta filsystem. + File names containing the character "%1" are not supported on this file system. - ilnamn innehållandes tecknet "%1"' stöds inte på detta filsystem. + - + File name contains at least one invalid character - Filnamnet innehåller minst ett ogiltigt tecken + - + The file name is a reserved name on this file system. - Detta filnamn är reserverat på detta filsystem. + - + Filename contains trailing spaces. - Filnamnet innehåller inledande blanksteg. + - + Filename is too long. Filnamnet är för långt. - + File/Folder is ignored because it's hidden. - Filen/mappen ignoreras eftersom den är dold. + - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - Filnamnet kan inte avkodas på ditt filsystem. + - + The filename is blacklisted on the server. - Filnamnet är svartlistat på servern. + - + File has extension reserved for virtual files. - Filens ändelse är reserverad för virtuella filer. + - + size storlek @@ -3417,74 +3346,64 @@ behörigheter - - server reported no %1 - servern svarade inte %1 - - - - permission - behörighet - - - + file id - fil-ID + - - Server reported no %1 - Servern svarade inte %1 + + server reported no %1 + - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - Borttagning tillåts ej, återställer + - + Error while reading the database - Fel uppstod när databasen skulle läsas + @@ -3492,7 +3411,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3505,19 +3424,14 @@ Fel vid skrivning av metadata till databasen - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - Ett fel uppstod när metadata skulle uppdateras: %1 + - + File is currently in use - Filen används + @@ -3528,44 +3442,44 @@ Fil %1 kan inte hämtas eftersom krypteringsinformation fattas. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Filen har ändrats sedan upptäckten - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Filen %1 kan inte hämtas på grund av namnkonflikt med en lokal fil! - + The download would reduce free local disk space below the limit Hämtningen skulle reducera det fria diskutrymmet under gränsen - + 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 hämtas fullständigt. @@ -3575,12 +3489,12 @@ Den hämtade filen är tom trots att servern meddelade att den borde ha varit %1. - + The downloaded file is empty, but the server said it should have been %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! @@ -3590,31 +3504,25 @@ Fel vid skrivning av metadata till databasen - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use - Filen %1 används för tillfället + 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 @@ -3634,7 +3542,7 @@ Could not create folder %1 - Kunde inte skapa mappen %1 + @@ -3649,7 +3557,7 @@ The file %1 is currently in use - Filen %1 används för tillfället + @@ -3688,14 +3596,14 @@ Filen %1 kan inte döpas om till %2 på grund av ett lokalt filnamn - + Error updating metadata: %1 - + The file %1 is currently in use - Filen %1 används för tillfället + @@ -3704,12 +3612,12 @@ Fel vid skrivning av metadata till databasen - + Failed to rename file - Kunde inte döpa om filen + - + Error setting pin state @@ -3743,14 +3651,14 @@ Fel vid skrivning av metadata till databasen - + Error writing metadata to the database: %1 - + The file %1 is currently in use - Filen %1 används för tillfället + @@ -3766,22 +3674,22 @@ Felaktig HTTP-kod i svaret från servern. '201' förväntades, men "%1 %2" mottogs. - + Error updating metadata: %1 - + The file %1 is currently in use - Filen %1 används för tillfället + - + Error setting pin state - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -3789,48 +3697,40 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - Kunde inte ladda upp krypterad fil. + - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Fil %1 kan inte laddas upp eftersom en annan fil med samma namn, där endast stora/små bokstäver skiljer sig, existerar - - + + Upload of %1 exceeds the quota for the folder Uppladdningen av %1 överstiger kvoten för mappen - + File Removed (start upload) %1 Filen borttagen (starta uppladdning) %1 - + Local file changed during syncing. It will be resumed. Lokal fil ändrades under synkronisering. Den kommer återupptas. - + Local file changed during sync. Lokal fil ändrades under synkronisering. - + Failed to unlock encrypted folder. - Kunde inte låsa upp krypterad mapp. + @@ -3838,45 +3738,45 @@ Fel vid skrivning av metadata till databasen - + Error updating metadata: %1 - + The file %1 is currently in use - Filen %1 används för tillfället + OCC::PropagateUploadFileNG - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synkronisering. - + Poll URL missing - + Unexpected return code from server (%1) Oväntad svarskod från servern (%1) - + Missing File ID from server Saknar Fil-ID från servern - + Missing ETag from server Saknar ETag från servern @@ -3884,22 +3784,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Hämtningswebbadress saknas - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synkronisering. - + The server did not acknowledge the last chunk. (No e-tag was present) Servern bekräftade inte senaste leveransen. (Ingen e-tagg fanns) @@ -3977,7 +3877,7 @@ OCC::ServerNotificationHandler - + Dismiss Avfärda @@ -4061,7 +3961,7 @@ The file cannot be shared because it does not have sharing permission. - Filen kunde inte delas då den saknar delningsrättigheter. + @@ -4094,7 +3994,7 @@ Note - Anteckning + @@ -4104,7 +4004,7 @@ Set password - Ange lösenord + @@ -4119,7 +4019,7 @@ Expires - Upphör + @@ -4147,17 +4047,17 @@ Lösenordsskydda - + Allow editing Tillåt redigering - + View only - Skrivskyddad + - + Allow upload and editing Tillåt uppladdning och redigering @@ -4167,7 +4067,7 @@ Utgångsdatum - + File drop (upload only) Göm fillista (endast uppladdning) @@ -4177,32 +4077,32 @@ Sluta dela - + Link name - Länknamn + - + Note to recipient Notering till mottagare - + Password protect Lösenordsskydda - + Set expiration date Välj utgångsdatum - + Delete link - Ta bort länk + - + Add another link Lägg till en annan länk @@ -4212,27 +4112,27 @@ Ta bort delad länk - + Confirm Link Share Deletion Bekräfta radering av delad länk - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Vill du verkligen radera den publikt delade länken <i>%1</i>?</p><p>Obs: Den här åtgärden kan inte ångras.</p> - + Delete Ta bort - + Cancel Avbryt - + Public link Publik länk @@ -4245,12 +4145,12 @@ Dela med användare eller grupper ... - + Search globally Sök globalt - + Copy link Kopiera länk @@ -4260,22 +4160,22 @@ Inga resultat för '%1' - + No results for "%1" - Inga resultat för "%1" + - + Password for share required - Lösenord krävs för delning + - + Please enter a password for your email share: - Ange ett lösenord för att dela via e-post: + - + I shared something with you Jag delade något med dig @@ -4295,62 +4195,62 @@ Can edit - Kan redigeras + Note: - Anteckning: + Password: - Lösenord: + Expires: - Förfaller: + - + Can reshare Kan dela vidare - + Note to recipient - Notering till mottagare + - + Set expiration date - Välj utgångsdatum + - + Unshare Sluta dela - + Can create Kan skapa - + Can change Kan ändra - + Can delete Kan radera - + Password protect - Lösenordsskydda + @@ -4365,23 +4265,23 @@ OCC::SocketApi - + Context menu share Delningsmeny - + Select new location … Välj ny plats … - + I shared something with you Jag delade något med dig - - + + Share options Delningsalternativ @@ -4394,76 +4294,76 @@ Activity - Aktivitet + - + Copy private link to clipboard Kopiera privat länk till urklipp - + Send private link by email … Skicka privat länk med e-post ... - + Resharing this file is not allowed Vidaredelning av denna fil är inte tillåtet - + Resharing this folder is not allowed - Vidaredelning av denna mapp är inte tillåtet + - - + + Copy public link Kopiera publik länk - + Copy internal link Kopiera intern länk - + Edit Ändra - + Open in browser Öppna i webbläsare - + Resolve conflict … Lös konflikt … - + Move and rename … Flytta och byt namn … - + Move, rename and upload … Flytta, byt namn och ladda upp … - + Delete local changes Radera lokala ändringar - + Move and upload … Flytta och ladda upp … - + Delete Ta bort @@ -4609,77 +4509,77 @@ Lita på detta certifikat i alla fall - + Untrusted Certificate Otillförlitligt certifikat - + Cannot connect securely to <i>%1</i>: Kan inte ansluta säkert till <i>%1</i>: Additional errors: - Ytterligare fel: + - + 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 (SHA1): <tt>%1</tt> Fingeravtryck (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Fingeravtryck (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Fingeravtryck (SHA-512): <tt>%1</tt> - + Effective Date: %1 Giltigt datum: %1 - + Expiration Date: %1 Utgångsdatum: %1 - + Issuer: %1 Utfärdare: %1 @@ -4772,33 +4672,33 @@ Ett internt fel nummer %1 inträffade. - + %1 (skipped due to earlier error, trying again in %2) %1 (skippad på grund av ett tidigare fel, försök igen om %2) - + Could not update file: %1 - Kunde inte uppdatera filen: %1 + - + Could not update virtual file metadata: %1 - + Unresolved conflict. Olöst konflikt. - + 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 - + Aborted Avbruten @@ -4875,16 +4775,16 @@ Filnamn som slutar med punkt stöds inte i det här filsystemet. + + 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. + + 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. - - 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. - - The file name is a reserved name on this file system. Filnamnet är ett reserverat namn i detta filsystemet. @@ -4905,7 +4805,7 @@ Filen/Mappen är ignorerad för att den är dold. - + Using virtual files with suffix, but suffix is not set @@ -4920,7 +4820,7 @@ Filnamnet kan inte kodas på ditt filsystem. - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen @@ -4935,17 +4835,17 @@ Stat misslyckades. + + Unable to read from the sync journal. + Det går inte att läsa från synkroniseringsjournalen. + + Filename encoding is not valid Filnamnskodning är inte giltig - - Unable to read from the sync journal. - Det går inte att läsa från synkroniseringsjournalen. - - - + Cannot open the sync journal Det går inte att öppna synkroniseringsjournalen @@ -4955,22 +4855,22 @@ Otillåtna tecken, var vänlig byt namn på "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - Synchronization will resume shortly. - - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Diskutrymmet är lågt: Hämtningar som skulle reducera det fria utrymmet under %1 hoppas över. - + There is insufficient space available on the server for some uploads. Det finns inte tillräckligt med utrymme på servern för vissa uppladdningar. @@ -4981,44 +4881,44 @@ Offline - Offline + All synced! - Färdigsynkroniserat! + Some files couldn't be synced! - Vissa filer kunde inte synkroniseras! + See below for errors - Se nedan för felmeddelanden + Syncing - Synkroniserar + Sync paused - Synkronisering pausad + Some files could not be synced! - Vissa filer kunde inte synkroniseras! + See below for warnings - Se nedan för felmeddelanden + @@ -5028,60 +4928,60 @@ %1 of %2 - %1 av %2 + Syncing file %1 of %2 - Synkroniserar fil %1 av %2 + OCC::Systray - + Add account Lägg till konto - + Open main dialog Öppna huvuddialogen + - Pause sync Pausa synkronisering - - + + Resume sync Återuppta synkronisering - + Settings Inställningar - + Exit %1 Avsluta %1 - + Pause sync for all Pausa synkronisering för alla - + Resume sync for all Återuppta synkronisering för alla - + %1: %2 %1: %2 @@ -5089,24 +4989,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Skrivbordsklient</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>Version %1. För mer information klicka <a href='%2'>här</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Denna release levererades av %1</p> @@ -5114,55 +5014,55 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - Kunde inte hämta leverantörer + - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - Sökningen "%2' misslyckades. + - + Search has failed for '%1'. Error: %2 - Sökningen "%1'. Fel: %2. + OCC::User - + Retry all uploads Försök ladda upp igen - + Synced %1 Synkroniserade %1 - + You renamed %1 Du bytte namn på %1 - + You deleted %1 Du raderade %1 - + You created %1 Du skapade %1 - + You changed %1 Du ändrade %1 @@ -5170,22 +5070,22 @@ OCC::UserModel - + 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 ta bort anslutningen till konto <i>%1</i>?</p><p><b>OBS:</b> Detta kommer <b>inte</b> radera några filer.</p> - + Remove connection Ta bort anslutning - + Cancel Avbryt @@ -5195,121 +5095,103 @@ Could not fetch predefined statuses. Make sure you are connected to the server. - Kunde inte hämta fördefinierade statusar. Kontrollera anslutningen till servern. + Could not fetch user status. Make sure you are connected to the server. - Kunde inte hämta användarstatus. Kontrollera anslutningen till servern. + User status feature is not supported. You will not be able to set your user status. - Användarstatus stöds inte. Du kommer inte att kunna välja status. + Emojis feature is not supported. Some user status functionality may not work. - Emojis stöds inte. Viss statusfunktionalitet kan vara otillgänglig. + Could not set user status. Make sure you are connected to the server. - Kunde inte välja status. Kontrollera anslutningen till servern. + Could not clear user status message. Make sure you are connected to the server. - Kunde inte rensa status. Kontrollera anslutningen till servern. + Don't clear - Rensa inte + 30 minutes - 30 minuter + 1 hour - 1 timme + 4 hours - 4 timmar + Today - Idag + This week - Denna vecka + Less than a minute - Mindre än en minut + 1 minute - 1 minut + %1 minutes - %1 minuier + %1 hours - %1 timmar + 1 day - 1 dag + %1 days - %1 dagar + OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - Det virtuella filsystemet kräver ett NTFS-filsystem, %1 använder %2 - - - - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time @@ -5336,7 +5218,7 @@ You have been logged out of %1 as user %2. Please login again. - Du har blivit utloggad från %1 av användaren %2. Logga in igen. + @@ -5349,43 +5231,43 @@ Form - Formulär + Log in to your %1 - Logga in till din %1 + Create account with Provider - Skapa konto med leverantör + Keep your data secure and under your control - Håll din data säker och under din kontroll + Secure collaboration & file exchange - Säkert samarbete & filöverföringar + Easy-to-use web mail, calendaring & contacts - Simpel e-post-, kalender- och kontakthantering + Screensharing, online meetings & web conferences - Skärmdelning, onlinemöten och webkonferenser + Host your own server - Körs direkt från din egen dator + @@ -5529,7 +5411,7 @@ Checking for changes in local "%1" - Söker efter ändringar i lokala "%1" + @@ -5648,12 +5530,12 @@ User name - Användarnamn + Server address - Serveradress + @@ -5668,7 +5550,7 @@ Sync Logo - Synkroniseringslogo + @@ -5678,17 +5560,17 @@ Local Folder - Lokal mapp + Synchronize everything from server - Synkronisera allt från servern + Ask before syncing folders larger than - Fråga innan synkronisering av mappar större än + @@ -5699,7 +5581,7 @@ Ask before syncing external storages - Fråga innan synkronisering av externa enheter + @@ -5724,7 +5606,7 @@ Keep local data - Behåll lokal data + @@ -5734,7 +5616,7 @@ Erase local folder and start a clean sync - Radera lokal mapp och starta en fräsch synkronisering + @@ -5779,17 +5661,17 @@ TextLabel - Textetikett + Logo - Logotyp + Server address - Serveradress + @@ -5804,7 +5686,7 @@ This is the link to your %1 web interface when you open it in the browser. - Länken %1 används för att nå ditt webgränssnitt i din webläsare. + @@ -5832,55 +5714,55 @@ New folder - Ny mapp + - + %n day ago %n dag sedan%n dagar sedan - + %n days ago %n dag sedan%n dagar sedan - + in the future i framtiden - + %n hour ago %n timme sedan%n timmar sedan - + %n hours ago %n timmar sedan%n timmar sedan - + now nu - + Less than a minute ago Mindre än en minut sedan - + %n minute ago %n minut sedan%n minut sedan - + %n minutes ago %n minut sedan%n minuter sedan - + Some time ago För en tid sedan @@ -5893,38 +5775,38 @@ Away - Borta + Do not disturb - Stör ej + Offline - Offline + Online - Online + SyncJournalDb - + Failed to connect database. - Kunde inte koppla mot databasen. + UnifiedSearchInputContainer - + Search files, messages, events … - Sök efter filer, meddelanden, händelser... + @@ -5932,7 +5814,7 @@ Load more results - Visa fler resultat + @@ -5948,7 +5830,7 @@ Load more results - Visa fler resultat + @@ -5959,21 +5841,11 @@ Kontoinmatning - + Switch to account Växla till konto - - Current user status is online - Användarens status är "Online" - - - - Current user status is do not disturb - Användarens status är "Stör ej" - - Account connected Konto anslutet @@ -5984,7 +5856,17 @@ Konto inte anslutet - + + Current user status is online + + + + + Current user status is do not disturb + + + + Account actions Kontoåtgärder @@ -5994,24 +5876,24 @@ Ta bort konto - + Set status - Välj status + - - + + Log out Logga ut - - + + Log in Logga in - + Remove account Ta bort konto @@ -6021,108 +5903,108 @@ Online status - Status + Online - Online + Away - Borta + Do not disturb - Stör ej + Invisible - Osynlig + Status message - Statusmeddelande + What is your status? - Vad är din status? + Clear status message after - Rensa status efter + Clear status message - Rensa status + Set status message - Välj status + 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 @@ -6130,7 +6012,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Kontrollsummans header är felformaterad. @@ -6163,66 +6045,66 @@ Window - + Nextcloud desktop main dialog Nextcloud-klient huvuddialog - + Current account Nuvarande konto - - + + Resume sync for all Återuppta synkronisering för alla - - + + Pause sync for all Pausa synkronisering för alla - + Set user status - Välj användarstatus + - + Add account Lägg till konto - + Add new account Lägg till nytt konto - + Settings Inställningar - + Exit Avsluta - + Current user avatar Nuvarande användaravatar - + Current user status is online - Användarens status är "Online" + - + Current user status is do not disturb - Användarens status är "Stör ej" + @@ -6230,32 +6112,32 @@ Dela %1 - + Account switcher and settings menu Kontobytare och inställningsmeny - + Connected Ansluten - + Disconnected Bortkopplad - + Open local folder of current account Öppna lokal mapp för aktuellt konto - + Open Nextcloud Talk in browser Öppna Nextcloud Talk i webbläsaren - + More apps Fler appar @@ -6265,7 +6147,7 @@ Appmeny - + Open %1 in browser Öppna %1 i webbläsaren @@ -6285,9 +6167,9 @@ Öppna delningsdialogen - + Unified search results list - Sammanlagda sökresultat + @@ -6296,15 +6178,15 @@ Visa fler åtgärder - + %1 - File activity - %1 - filhändelser + main.cpp - + System Tray not available Systemfältet är inte tillgängligt @@ -6314,7 +6196,7 @@ %1 krävs på ett fungerande systemfält. Om du kör XFCE, vänligen följ <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">dessa instruktioner</a>. Annars, vänligen installera ett systemfälts-program som 'trayer' och försök igen. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6322,7 +6204,7 @@ nextcloudTheme::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> @@ -6682,22 +6564,22 @@ Away - Borta + Do not disturb - Stör ej + Offline - Offline + Online - Online + @@ -6705,7 +6587,7 @@ Download of end-to-end encrypted file failed - Nerladdning via end-to-end-kryptering misslyckades + diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_th.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_th.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_th.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_th.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog เปิดหน้าต่างแชร์ - + Share %1 แชร์ %1 - - + + Show more actions แสดงการกระทำเพิ่มเติม @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out การเชื่อมต่อหมดเวลา - + Unknown error: network reply was deleted ข้อผิดพลาดที่ไม่รู้จัก: การตอบกลับของเครือข่ายถูกลบแล้ว - + Server replied "%1 %2" to "%3 %4" เซิร์ฟเวอร์ตอบกลับ "%1 %2" ถึง "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). @@ -305,9 +305,9 @@ - - - + + + Cancel ยกเลิก @@ -494,52 +494,52 @@ ลบการเชื่อมต่อโฟลเดอร์ซิงค์ - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) - + Folder creation failed สร้างโฟลเดอร์ล้มเหลว - + <p>Could not create local folder <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal ยืนยันการลบการเชื่อมต่อโฟลเดอร์ซิงค์ - + <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> - + Remove Folder Sync Connection ลบการเชื่อมต่อโฟลเดอร์ซิงค์ - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -548,37 +548,37 @@ - + Disable support - + Sync Running กำลังซิงค์ - + The syncing operation is running.<br/>Do you want to terminate it? กำลังดำเนินการซิงค์อยู่<br/>คุณต้องการหยุดการทำงานหรือไม่? - + %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. ขณะนี้ไม่มีข้อมูลการใช้พื้นที่จัดเก็บ - + %1 in use ใช้งานอยู่ %1 @@ -598,87 +598,87 @@ เข้าสู่ระบบ - + %1 as %2 %1 ด้วยบัญชี %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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 - + Server configuration error: %1 at %2. การกำหนดค่าเซิร์ฟเวอร์ผิดพลาด: %1 ที่ %2 - + No %1 connection configured. ไม่มีการเชื่อมต่อ %1 ที่ถูกกำหนดค่า - + 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 ลบการเชื่อมต่อ @@ -686,47 +686,47 @@ OCC::AccountState - + Signed out ออกจากระบบแล้ว - + Disconnected ไม่ได้เชื่อมต่อ - + Connected เชื่อมต่อแล้ว - + Service unavailable บริการไม่พร้อมใช้งาน - + Maintenance mode โหมดการบำรุงรักษา - + Network error ข้อผิดพลาดเครือข่าย - + Configuration error การกำหนดค่าผิดพลาด - + Asking Credentials กำลังขอข้อมูลประจำตัว - + Unknown account state ไม่ทราบสถานะบัญชี @@ -734,12 +734,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. @@ -800,42 +800,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit ออก - + Continue ดำเนินการต่อ - + Error accessing the configuration file เกิดข้อผิดพลาดในการเข้าถึงไฟล์กำหนดค่า - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. - + Quit %1 ออกจาก %1 @@ -869,59 +869,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -929,12 +879,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> - + Enter E2E passphrase @@ -1100,19 +1050,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1120,8 +1057,8 @@ - - + + Server error: PROPFIND reply is not XML formatted! @@ -1129,27 +1066,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 ไม่พบไดเรกทอรี: %1 - + Filename encoding is not valid - + Error while reading directory %1 @@ -1172,7 +1109,7 @@ - + Error returned from the server: <em>%1</em> @@ -1184,24 +1121,24 @@ - + 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 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1362,41 +1299,41 @@ กิจกรรมซิงค์ - + 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. กรุณาเข้าไปในการตั้งค่าเพื่อเลือก ถ้าคุณต้องการดาวน์โหลด - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1405,6 +1342,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1459,22 +1403,7 @@ เก็บไฟล์ในเครื่องเป็นข้อขัดแย้ง - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1482,24 +1411,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1535,7 +1472,7 @@ OCC::FolderMan - + Could not reset folder state ไม่สามารถรีเซ็ตสถานะโฟลเดอร์ @@ -1545,37 +1482,37 @@ บนบันทึกการประสานข้อมูลเก่า '%1' แต่ไม่สามารถลบออกได้ กรุณาตรวจสอบให้แน่ใจว่าไม่มีแอพฯ หรือการทำงานใดๆที่ใช้มันอยู่ - + 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) (สำรองข้อมูล %1) - + Undefined State. สถานะที่ไม่ได้กำหนด - + Waiting to start syncing. กำลังรอเริ่มต้นการซิงค์ - + Preparing for sync. กำลังเตรียมการซิงค์ - + Sync is running. การประสานข้อมูลกำลังทำงาน @@ -1585,67 +1522,67 @@ - + Sync finished with unresolved conflicts. - + Last Sync was successful. ประสานข้อมูลครั้งล่าสุดเสร็จเรียบร้อยแล้ว - + Setup Error. เกิดข้อผิดพลาดในการติดตั้ง - + User Abort. ยกเลิกผู้ใช้ - + Sync is paused. การประสานข้อมูลถูกหยุดไว้ชั่วคราว - + %1 (Sync is paused) %1 (การประสานข้อมูลถูกหยุดชั่วคราว) - + No valid folder selected! เลือกโฟลเดอร์ไม่ถูกต้อง! - + The selected path does not exist! - + The selected path is not a folder! เส้นทางที่เลือกไม่ใช่โฟลเดอร์! - + You have no permission to write to the selected 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 ไดถูกใช้ไปแล้วในโฟลเดอร์ที่ประสานข้อมูล กรุณาเลือกอีกอันหนึ่ง! - + There is already a sync from the server to this local folder. Please pick another local folder! โฟลเดอร์ต้นทางนี้ได้ถูกประสานข้อมูลกับเซิร์ฟเวอร์แล้ว โปรดเลือกโฟลเดอร์ต้นทางอื่นๆ! @@ -1857,12 +1794,12 @@ OCC::FolderWizard - + Add Folder Sync Connection เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Add Sync Connection เพิ่มการประสานข้อมูลให้ตรงกัน @@ -1903,42 +1840,42 @@ ใส่ชื่อของโฟลเดอร์ใหม่ที่จะถูกสร้างขึ้นภายใต้ '%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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1946,24 +1883,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1984,27 +1921,27 @@ 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 ที่แตกต่างกันสำหรับการทำงานต่อ กำลังลองใหม่ในครั้งถัดไป - + We received an unexpected download Content-Length. - + Server returned wrong content-range เซิร์ฟเวอร์ส่งคืนช่วงของเนื้อหาที่ผิด - + Connection Timeout หมดเวลาการเชื่อมต่อ @@ -2124,54 +2061,54 @@ - + Server notifications that require attention. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel ยกเลิก - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2179,22 +2116,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required - + Please enter a password for your link share: กรุณาใส่รหัสผ่านสำหรับลิงก์แชร์ของคุณ: - + Sharing error ข้อผิดพลาดการแชร์ - + Could not retrieve or create the public link share. Error: %1 @@ -2512,7 +2449,7 @@ OCC::Logger - + Error ข้อผิดพลาด @@ -2522,7 +2459,7 @@ <nobr>ไฟล์ '%1'<br/>ไม่สามารถเปิดขึ้นมาเพื่อเขียนข้อมูลได้<br/><br/>ผลลัพธ์ของไฟล์ log <b>ไม่สามารถ</b> บันทึกข้อมูลได้!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2530,33 +2467,33 @@ 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 รับอัปเดต - + Update Failed อัปเดตล้มเหลว @@ -2571,17 +2508,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2692,7 +2629,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> เกิดข้อผิดพลาดจากเซิร์ฟเวอร์: <em>%1</em> @@ -2702,32 +2639,32 @@ เกิดข้อผิดพลาดในการเข้าถึง 'โทเค็น' ปลายทาง: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2796,12 +2733,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. ไม่สามารถตรวจสอบการอัปเดตใหม่ @@ -2811,27 +2748,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 ตรวจสอบการอัปเดต @@ -2859,14 +2796,14 @@ - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2891,49 +2828,49 @@ - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder ประสานโฟลเดอร์ต้นทาง - - + + (%1) (%1) - + There isn't enough free space in the local folder! @@ -3003,14 +2940,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3075,7 +3004,7 @@ &ถัดไป > - + Server address does not seem to be valid @@ -3085,7 +3014,7 @@ - + Could not load certificate. Maybe wrong password? @@ -3183,54 +3112,54 @@ - + 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 เปลี่ยนชื่อโฟลเดอร์ล้มเหลว @@ -3240,12 +3169,12 @@ ไม่สามารถลบและสำรองข้อมูลโฟลเดอร์เพราะโฟลเดอร์หรือไฟล์ในนั้นจะเปิดในโปรแกรมอื่นอยู่ กรุณาปิดโฟลเดอร์หรือไฟล์และกดลองใหม่อีกครั้งหรือยกเลิกการติดตั้ง - + Cannot 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> @@ -3253,7 +3182,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3263,17 +3192,17 @@ %1 ตัวช่วยสร้างการเชื่อมต่อ - + Skip folders configuration ข้ามการกำหนดค่าโฟลเดอร์ - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3284,12 +3213,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3297,7 +3226,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL ตอบกลับ JSON ไม่ถูกต้องจาก URL แบบสำรวจความคิดเห็น @@ -3315,17 +3244,17 @@ - + 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. @@ -3340,57 +3269,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3400,72 +3329,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3475,7 +3394,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3488,17 +3407,12 @@ ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3511,44 +3425,44 @@ - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery ไฟล์มีการเปลี่ยนแปลงตั้งแต่ถูกพบ - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! ไฟล์ %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. ดาวน์โหลดไฟล์ไม่สำเร็จ @@ -3558,12 +3472,12 @@ - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! ไฟล์ %1 ไม่สามารถบันทึกได้เพราะชื่อไฟล์ต้นทางเหมือนกัน! @@ -3573,18 +3487,12 @@ ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3592,12 +3500,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; ฟื้นฟูล้มเหลว: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ไฟล์หรือโฟลเดอร์ที่ถูกลบออกจากส่วนการอ่านเพียงอย่างเดียว แต่ล้มเหลวในการฟื้นฟู: %1 @@ -3671,12 +3579,12 @@ ไฟล์ %1 ไม่สามารถเปลี่ยนชื่อเป็น %2 เพราะชื่อไฟล์ต้นทางตรงกัน! - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3687,12 +3595,12 @@ ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล - + Failed to rename file - + Error setting pin state @@ -3726,12 +3634,12 @@ ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3749,22 +3657,22 @@ รหัส HTTP ผิดพลาด โดยเซิร์ฟเวอร์คาดว่าจะได้รับรหัส 201 แต่กลับได้รับ "%1 %2" - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -3772,46 +3680,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists ไม่สามารถอัพโหลดไฟล์ %1 เนื่องจากมีไฟล์อื่นที่มีชื่อเดียวกันอยู่แล้ว - - + + Upload of %1 exceeds the quota for the folder การอัพโหลด %1 เกินโควต้าของโฟลเดอร์ - + File Removed (start upload) %1 - + Local file changed during syncing. It will be resumed. ไฟล์ต้นทางถูกเปลี่ยนแปลงในระหว่างการซิงค์ มันจะกลับมา - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + Failed to unlock encrypted folder. @@ -3821,12 +3721,12 @@ ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3834,32 +3734,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. ไฟล์ต้นทางถูกลบออกในระหว่างการประสานข้อมูล - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + Poll URL missing - + Unexpected return code from server (%1) มีรหัสข้อผิดพลาดตอบกลับมาจากเซิร์ฟเวอร์ (%1) - + Missing File ID from server ไฟล์ไอดีได้หายไปจากเซิร์ฟเวอร์ - + Missing ETag from server ETag ได้หายไปจากเซิร์ฟเวอร์ @@ -3867,22 +3767,22 @@ OCC::PropagateUploadFileV1 - + 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 ในปัจจุบัน) @@ -3960,7 +3860,7 @@ OCC::ServerNotificationHandler - + Dismiss ยกเลิก @@ -4130,17 +4030,17 @@ - + Allow editing อนุญาตให้แก้ไข - + View only - + Allow upload and editing @@ -4150,7 +4050,7 @@ - + File drop (upload only) @@ -4160,32 +4060,32 @@ - + Link name - + Note to recipient - + Password protect ป้องกันด้วยรหัสผ่าน - + Set expiration date กำหนดวันที่หมดอายุ - + Delete link - + Add another link @@ -4195,27 +4095,27 @@ - + Confirm Link Share Deletion ยืนยันการลบลิงค์ที่แชร์ - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>คุณต้องการลบลิงค์ที่แชร์แบบสาธารณะ<i>%1</i>?</p><p>หมายเหตุ: ไม่สามารถยกเลิกการดำเนินการนี้ได้</p> - + Delete ลบ - + Cancel ยกเลิก - + Public link ลิงค์สาธารณะ @@ -4228,12 +4128,12 @@ - + Search globally - + Copy link @@ -4243,22 +4143,22 @@ ไม่มีผลลัพธ์สำหรับ '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you ฉันแชร์บางอย่างกับคุณ @@ -4296,42 +4196,42 @@ - + Can reshare - + Note to recipient - + Set expiration date - + Unshare - + Can create - + Can change - + Can delete - + Password protect @@ -4348,23 +4248,23 @@ OCC::SocketApi - + Context menu share - + Select new location … - + I shared something with you ฉันแชร์บางอย่างกับคุณ - - + + Share options @@ -4380,73 +4280,73 @@ - + Copy private link to clipboard คัดลอกลิงค์ส่วนตัวไปยังคลิปบอร์ด - + Send private link by email … - + Resharing this file is not allowed - + Resharing this folder is not allowed - - + + Copy public link - + Copy internal link - + Edit - + Open in browser - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete ลบ @@ -4590,12 +4490,12 @@ เชื่อถือในใบรับรองความปลอดภัยนี้ไม่ว่าอย่างไร - + Untrusted Certificate ใบรับรองไม่น่าเชื่อถือ - + Cannot connect securely to <i>%1</i>: ไม่สามารถเชื่อมต่อแบบปลอดภัยไปยัง <i>%1</i>: @@ -4605,62 +4505,62 @@ - + with Certificate %1 ด้วยใบรับรองความปลอดภัย %1 - - - + + + &lt;not specified&gt; &lt;ยังไม่ได้ถูกระบุ&gt; - - + + Organization: %1 หน่วยงาน: %1 - - + + Unit: %1 หน่วย: %1 - - + + Country: %1 ประเทศ: %1 - + Fingerprint (SHA1): <tt>%1</tt> ลายนิ้วมือ (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 วันที่บังคับใช้: %1 - + Expiration Date: %1 หมดอายุวันที่: %1 - + Issuer: %1 ผู้รับรอง: %1 @@ -4753,33 +4653,33 @@ จำนวนข้อผิดพลาดภายในที่เกิดขึ้น %1 - + %1 (skipped due to earlier error, trying again in %2) %1 (ข้ามไปเนื่องจากข้อผิดพลาดก่อนหน้านี้ กำลังลองอีกครั้งใน %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. ข้อขัดแย้งที่ยังไม่ได้แก้ไข - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Aborted @@ -4856,17 +4756,17 @@ ชื่อไฟล์ที่ลงท้ายด้วยระยะเวลา ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - - File names containing the character '%1' are not supported on this file system. - ชื่อไฟล์ที่มีตัวอักษร '%1' ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - - - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ + + 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. ชื่อไฟล์นี้เป็นชื่อที่ถูกสงวนไว้ @@ -4887,7 +4787,7 @@ ไฟล์/โฟลเดอร์ ที่ซ่อนอยู่จะถูกละเว้น - + Using virtual files with suffix, but suffix is not set @@ -4902,7 +4802,7 @@ ชื่อไฟล์ไม่สามารถเข้ารหัสในระบบไฟล์ของคุณได้ - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง @@ -4917,17 +4817,17 @@ สถิติความล้มเหลว + + Unable to read from the sync journal. + ไม่สามารถอ่านจากบันทึกการประสานข้อมูล + + Filename encoding is not valid การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - - Unable to read from the sync journal. - ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - - - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล @@ -4937,22 +4837,22 @@ ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - Synchronization will resume shortly. - - - - + 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. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ @@ -5021,49 +4921,49 @@ OCC::Systray - + Add account เพิ่มบัญชี - + Open main dialog + - Pause sync - - + + Resume sync - + Settings ตั้งค่า - + Exit %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5071,24 +4971,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> @@ -5096,22 +4996,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5119,32 +5019,32 @@ OCC::User - + Retry all uploads - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5152,22 +5052,22 @@ OCC::UserModel - + 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 - + Cancel @@ -5272,30 +5172,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5817,52 +5699,52 @@ - + %n day ago - + %n days ago - + in the future ในอนาคต - + %n hour ago - + %n hours ago - + now ตอนนี้ - + Less than a minute ago ไม่กี่นาทีที่ผ่านมา - + %n minute ago - + %n minutes ago - + Some time ago บางเวลาที่ผ่านมา @@ -5896,7 +5778,7 @@ SyncJournalDb - + Failed to connect database. @@ -5904,7 +5786,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5941,32 +5823,32 @@ - + Switch to account - - Current user status is online + + Account connected - - Current user status is do not disturb + + Account not connected - Account connected + Current user status is online - Account not connected + Current user status is do not disturb - + Account actions @@ -5976,24 +5858,24 @@ - + Set status - - + + Log out ออกจากระบบ - - + + Log in เข้าสู่ระบบ - + Remove account ลบบัญชี @@ -6054,57 +5936,57 @@ 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 @@ -6112,7 +5994,7 @@ ValidateChecksumHeader - + The checksum header is malformed. @@ -6145,64 +6027,64 @@ Window - + Nextcloud desktop main dialog - + Current account - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account เพิ่มบัญชี - + Add new account - + Settings ตั้งค่า - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6212,32 +6094,32 @@ - + Account switcher and settings menu - + Connected เชื่อมต่อ - + Disconnected ยกเลิกการเชื่อมต่อ - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps @@ -6247,7 +6129,7 @@ - + Open %1 in browser เปิด %1 ในเบราว์เซอร์ @@ -6267,7 +6149,7 @@ - + Unified search results list @@ -6278,7 +6160,7 @@ - + %1 - File activity @@ -6286,7 +6168,7 @@ main.cpp - + System Tray not available ถาดระบบไม่สามารถใช้ได้ @@ -6296,7 +6178,7 @@ %1 จำเป็นต้องทำงานบนถาดระบบ ถ้าคุณใช้ XFCE โปรดปฏิบัติตาม <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">คำแนะนำเหล่านี้</a> อย่างไรก็ตาม กรุณาติดตั้งแอพฯถาดระบบเช่น 'trayer' และลองอีกครั้ง - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6304,7 +6186,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_tr.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_tr.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_tr.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_tr.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally %1 ögesini yerel olarak aç - + Open share dialog Paylaşma penceresini aç - + Share %1 %1 ögesini paylaş - - + + Show more actions Diğer işlemleri görüntüle @@ -39,7 +39,7 @@ ActivityList - + Activity list İşlem listesi @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Bağlantı zaman aşımına uğradı - + Unknown error: network reply was deleted Bilinmeyen sorun: Ağ yanıtı silindi - + Server replied "%1 %2" to "%3 %4" "%3 %4" için sunucu yanıtı "%1 %2" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Uçtan uca şifreleme anımsatıcısı - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Şifreli kimliğiniz korunmak için 12 sözlük sözcüğünden oluşan bir anımsatıcı ile şifrelendi. Lütfen bu sözcükleri not ederek güvenli bir yerde saklayın. Bu bilgi hesabınıza başka aygıtlar (cep telefonu ya da bilgisayar) eklemek istediğinizde gerekir. @@ -305,9 +305,9 @@ - - - + + + Cancel İptal @@ -495,52 +495,52 @@ Klasör eşitleme bağlantısını sil - + Disable virtual file support … Sanal dosya desteğini devre dışı bırak … - + Enable virtual file support %1 … %1 için sanal dosya desteği kullanılsın … - + (experimental) (deneysel) - + Folder creation failed Klasör oluşturulamadı - + <p>Could not create local folder <i>%1</i>.</p> <p><i>%1</i> yerel klasörü oluşturulamadı.</p> - + Confirm Folder Sync Connection Removal Klasör eşitleme bağlantısını silmeyi onaylayı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>Gerçekten <i>%1</i> klasörünün eşitlemesini durdurmayı istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmez</b>.</p> - + Remove Folder Sync Connection Klasör eşitleme bağlantısını sil - + Disable virtual file support? Sanal dosya desteği devre dışı bırakılsın mı? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ Bu işlem şu anda yürütülmekte olan eşitleme işlemlerini durdurur. - + Disable support Desteği devre dışı bırak - + Sync Running Eşitleme çalışıyor - + The syncing operation is running.<br/>Do you want to terminate it? Eşitleme işlemi sürüyor.<br/>Durdurmak istiyor musunuz? - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) / %2 kullanımda. Ağ üzerinden bağlanmış ya da paylaşılmış klasörlerin sınırları farklı olabilir. - + %1 of %2 in use %1 / %2 kullanılıyor - + Currently there is no storage usage information available. Şu anda depolama kullanımı ile ilgili bir bilgi yok. - + %1 in use %1 kullanılıyor @@ -603,87 +603,87 @@ Oturum aç - + %1 as %2 %1, %2 olarak - + The server version %1 is unsupported! Proceed at your own risk. %1 sunucu sürümü desteklenmiyor! Riski üstlenerek devam edebilirsiniz. - + Connected to %1. %1 ile bağlı. - + Server %1 is temporarily unavailable. %1 sunucusu geçici olarak kullanılamıyor. - + Server %1 is currently in maintenance mode. %1 sunucusu bakım kipinde. - + Signed out from %1. %1 oturumu kapatıldı. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Kimlik web tarayıcısı üzerinden doğrulanıyor. Web tarayıcıyı yeniden açmak için <a href='%1'>buraya tıklayın</a>. - + Connecting to %1 … %1 bağlantısı kuruluyor … - + No connection to %1 at %2. %1 ile %2 üzerinde bağlantı yok. - + Server configuration error: %1 at %2. Sunucu yapılandırma sorunu: %1 ile %2. - + No %1 connection configured. Henüz bir %1 bağlantısı yapılandırılmamış. - + 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: Dış depolama alanlarında bulundukları 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 dış depolama alanında bulundukları için eşitlenmeyen klasörler var: - + Confirm Account Removal Hesap silmeyi 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>Gerçekten <i>%1</i> hesabının bağlantısını kaldırmayı istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmez</b>.</p> - + Remove connection Bağlantıyı kaldır @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out Oturum kapatıldı - + Disconnected Bağlantı kesildi - + Connected Bağlantı kuruldu - + Service unavailable Hizmet kullanılamıyor - + Maintenance mode Bakım kipi - + Network error Ağ sorunu - + Configuration error Yapılandırma sorunu - + Asking Credentials Kimlik doğrulama bilgileri soruluyor - + Unknown account state Hesap durumu bilinmiyor @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. Yok sayma listesindeki dosyalar ve sembolik bağlantılar eşitlenmez. - + For more activities please open the Activity app. Diğer işlemler için lütfen İşlemler uygulamasını açın. @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. İlerlerseniz <b>bu ayarlar silinecek</b>. - + Continuing will mean <b>ignoring these settings</b>. İlerlerseniz <b>bu ayarlar yok sayılacak</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. Bazı ayarlar, bu uygulamanın daha yeni sürümleri üzerinden yapılmış ve bu sürümde kullanılamaz.<br><br>%1<br><br>Geçerli yapılandırma dosyası zaten<i>%2</i> üzerine yedeklendi. - + Quit Çık - + Continue Sürdür - + Error accessing the configuration file Yapılandırma dosyasına erişilirken sorun çıktı - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. %1 üzerindeki yapılandırma dosyasına erişilirken bir sorun çıktı. Lütfen kullanıcı hesabınızın yapılandırma dosyasına erişme izinlerinin olduğundan emin olun. - + Quit %1 %1 uygulamasından çık @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - %1 dosyası, adının başka bir dosya ile çakışması nedeniyle yüklenemedi, dosya adları arasında yalnız büyük küçük harf farkı var - - - - - File %1 has invalid modified time. Do not upload to the server. - %1 dosyasının değiştirilme zamanı geçersiz. Sunucuya yüklenmedi. - - - - File Removed (start upload) %1 - Dosya kaldırıldı (yüklemeyi başlat) %1 - - - - Local file changed during syncing. It will be resumed. - Yerel dosya eşitleme sırasında değişmiş. Sürdürülecek. - - - - - Local file changed during sync. - Yerel dosya eşitleme sırasında değişmiş. - - - - Error updating metadata: %1 - Üst veriler güncellenirken sorun çıktı: %1 - - - - The file %1 is currently in use - %1 dosyası şu anda kullanılıyor - - - - The local file was removed during sync. - Yerel dosya eşitleme sırasında silinmiş. - - - - ; Restoration Failed: %1 - ; Geri yüklenemedi: %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database Üst veri veritabanına yazılırken sorun çıktı @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Lütfen uçtan uca şifreleme parolasını yazın:<br><br>Kullanıcı:%2<br>Hesap:%3<br> - + Enter E2E passphrase Uçtan uca şifreleme parolasını yazın @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ Sunucu dosya tarama yanıtında veri eksik. - - + + Server error: PROPFIND reply is not XML formatted! Sunucu hatası: PROPFIND yanıtı XML biçiminde değil! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 %1 klasörü açılırken sorun çıktı - + Directory not accessible on client, permission denied İstemciden klasöre erişilemedi, izin verilmedi - + Directory not found: %1 Klasör bulunamadı: %1 - + Filename encoding is not valid Dosya adı kodlaması geçersiz - + Error while reading directory %1 %1 klasörü okunurken sorun çıktı @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> Sunucudan hata yanıtı alındı: <em>%1</em> @@ -1190,24 +1127,24 @@ - + There was an error accessing the "token" endpoint: <br><em>%1</em> "kod" uç noktasına erişilirken bir sorun çıktı: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Sunucudan alınan JSON işlenemedi: <br><em>%1</em> - + The reply from the server did not contain all expected fields Sunucudan alınan yanıtta beklenen tüm alanlar yok - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. Oturum açma adresi HTTPS ile başlamasına rağmen geri döndürülen sunucu adresi HTTPS ile başlamıyor. Bu bir güvenlik sorunu olabileceğinden oturum açılmayacak. Lütfen BT yöneticinize başvurun. @@ -1368,41 +1305,41 @@ Eşitleme işlemi - + Could not read system exclude file Sistem katılmayacaklar dosyası okunamadı - + A new folder larger than %1 MB has been added: %2. %1 MB boyutundan büyük yeni bir klasör eklendi: %2. - + A folder from an external storage has been added. Dış depolama alanından bir klasör eklendi. - + Please go in the settings to select it if you wish to download it. İndirmek istiyorsanız seçmek için lütfen ayarlar bölümüne gidin. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. %1 klasörü oluşturulmuş ancak daha önce eşitleme dışı bırakılmış. Bu klasördeki veriler eşitlenmeyecek. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. %1 dosyası oluşturulmuş ancak daha önce eşitleme dışı bırakılmış. Bu dosyadaki veriler eşitlenmeyecek. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1413,6 +1350,16 @@ Bunun sonucunda eşitleme istemcisi yerel değişiklikleri anında yükleyemez. Onun yerine yalnız yerel değişiklikleri tarar ve aralıklarla yükler (varsayılan olarak iki saatte bir). + + 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' eşitleme klasöründeki tüm dosyalar sunucudan silindi. +Silinen dosyalar eşitleme sırasında yerel eşitleme klasörünüzden de silinecek ve bu dosyaları geri yüklemedikçe göremeyeceksiniz. +Sunucuda bu eşitleme işlemlerinin yapılmasını istediğinizden emin misiniz? +Bu işlemi yanlışlıkla yaptıysanız ve dosyalarınızı korumak istiyorsanız dosyalar sunucudan yeniden eşitlenecek. + + All files in the sync folder '%1' 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. @@ -1472,28 +1419,7 @@ Çakıştığında yerel dosyalar korunsun - - 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 restore 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' eşitleme klasöründeki tüm dosyalar silinecek. -Silinen bu dosyalar yerel eşitleme klasörünüzden de silineceğinden, geri yükleme yetkiniz yoksa bu dosyaları kullanamayacaksınız. -Geri yükleme yetkiniz varsa ve geri yüklemeyi seçerseniz, dosyalar sunucu ile yeniden eşitlenir. -Silmeyi seçerseniz, sahibi değilseniz bu dosyaları artık kullanamazsınız. - - - - 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' eşitleme klasöründeki tüm dosyalar sunucudan silindi. -Silinen dosyalar eşitleme sırasında yerel eşitleme klasörünüzden de silinecek ve bu dosyaları geri yüklemedikçe göremeyeceksiniz. -Sunucuda bu eşitleme işlemlerinin yapılmasını istediğinizden emin misiniz? -Bu işlemi yanlışlıkla yaptıysanız ve dosyalarınızı korumak istiyorsanız dosyalar sunucudan yeniden eşitlenecek. - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1504,7 +1430,7 @@ Silmeyi seçerseniz, sahibi değilseniz bu dosyaları artık kullanamazsınız. - + 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. @@ -1514,17 +1440,28 @@ Bu işlemi yanlışlıkla yaptıysanız ve dosyalarınızı korumak istiyorsanız dosyalar sunucudan yeniden eşitlenecek. - + Remove All Files? Tüm dosyalar silinsin mi? - + Remove all files Tüm dosyalar silinsin - + + 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 restore 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' eşitleme klasöründeki tüm dosyalar silinecek. +Silinen bu dosyalar yerel eşitleme klasörünüzden de silineceğinden, geri yükleme yetkiniz yoksa bu dosyaları kullanamayacaksınız. +Geri yükleme yetkiniz varsa ve geri yüklemeyi seçerseniz, dosyalar sunucu ile yeniden eşitlenir. +Silmeyi seçerseniz, sahibi değilseniz bu dosyaları artık kullanamazsınız. + + + Keep files Dosyalar korunsun @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state Klasör durumu sıfırlanamadı @@ -1570,37 +1507,37 @@ Eski bir '%1' eşitleme günlüğü bulundu ancak kaldırılamadı. Günlüğün Başka bir uygulama tarafından kullanılmadığından emin olun. - + An old sync journal "%1" was found, but could not be removed. Please make sure that no application is currently using it. Eski bir "%1" eşitleme günlüğü bulundu ancak kaldırılamadı. Günlüğün 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şlatılması bekleniyor. - + Preparing for sync. Eşitleme için hazırlanılıyor. - + Sync is running. Eşitleme çalışıyor. @@ -1610,67 +1547,67 @@ Eşitlendi, çakışmalar çözülüyor. - + Sync finished with unresolved conflicts. Eşitleme çözülememiş çakışmalar ile tamamlandı. - + Last Sync was successful. Son eşitleme başarılıydı. - + Setup Error. Kurulum sorunu. - + User Abort. Kullanıcı iptal etti. - + Sync is paused. Eşitleme duraklatıldı. - + %1 (Sync is paused) %1 (eşitleme duraklatıldı) - + No valid folder selected! Geçerli bir klasör seçilmemiş! - + The selected path does not exist! Seçilmiş yol bulunamadı! - + The selected path is not a folder! Seçilmiş yol bir klasör değil! - + You have no permission to write to the selected folder! Seçilmiş klasöre yazma izniniz yok! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! %1 yerel klasöründe eşitleme için kullanılan bir klasör zaten var. Lütfen başka bir klasör seçin! - + 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 eşitleme için kullanılan bir klasörün içinde. Lütfen başka bir klasör seçin! - + There is already a sync from the server to this local folder. Please pick another local folder! Sunucu ile bu yerel klasör zaten eşitleniyor. Lütfen başka bir yerel klasör seçin! @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Klasör eşitleme bağlantısı ekle - + Add Sync Connection Eşitleme bağlantısı ekle @@ -1928,42 +1865,42 @@ "%1" altına eklenecek yeni klasörün adını yazın: - + Folder was successfully created on %1. Klasör %1 üzerine eklendi. - + Authentication failed accessing %1 %1 erişimi için kimlik doğrulanamadı - + Failed to create the folder on %1. Please check manually. %1 üzerine klasör eklenemedi. Lütfen el ile denetleyin. - + Failed to list a folder. Error: %1 Bir klasör listelenemedi. 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>%2</i> klasörünün üst klasörü olan <i>%1</i> zaten eşitleniyor. - + You are already syncing <i>%1</i>, which is a subfolder of <i>%2</i>. <i>%2</i> klasörünün alt klasörü olan <i>%1</i> zaten eşitleniyor. @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 İçerik hemen indirilmek yerine sanal dosyalar kullanılsın %1 - - + + (experimental) (deneysel) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Sanal dosyalar, yerel klasör olarak Windows bölümü kök klasörlerini desteklemez. Lütfen sürücü harfinin altında bulunan bir klasör seçin. - + Virtual files are not available for the selected folder Sanal dosyalar seçilmiş klasör için kullanılamaz @@ -2009,27 +1946,27 @@ OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Sunucudan herhangi bir E-Tag alınamadı, Vekil Sunucuyu/Ağ Geçidini denetleyin. - + We received a different E-Tag for resuming. Retrying next time. Devam etmek için farklı bir E-Tag alındı. Gelecek sefer yeniden denenecek. - + We received an unexpected download Content-Length. Beklenmeyen bir indirme içeriği uzunluğu alındı - + Server returned wrong content-range Sunucu yanlış bir içerik aralığı döndürdü - + Connection Timeout Bağlantı zaman aşımı @@ -2149,22 +2086,22 @@ Hata ayıklama arşivi oluştur … - + Server notifications that require attention. İlgilenmeniz gereken sunucu bildirimleri. - + You cannot disable autostart because system-wide autostart is enabled. Otomatik başlatma sistem genelinde etkinleştirilmiş olduğundan, otomatik başlatma devre dışı bırakılamaz. - + Change update channel? Güncelleme kanalı değiştirilsin mi? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ Bu seçenek yalnız güncellemelerin hangi havuzdan alınacağını belirler. Güncelleme sonrası önceki sürüme geri dönülemeyeceğini unutmayın. Bu nedenle, genellikle beta kanalından kararlı kanala geri dönmek için kurulu olan beta sürümünden daha yeni bir kararlı sürümün yayınlanmasını beklemeniz gerekeceğinden bu işlem hemen gerçekleşmez. - + Change update channel Güncelleme kanalını değiştir - + Cancel İptal - + Create Debug Archive Hata ayıklama arşivi oluştur - + Zip Archives Zip arşivleri - + Debug Archive Created Hata ayıklama arşivi oluşturuldu - + Debug archive is created at %1 %1 üzerinde hata ayıklama arşivi oluşturuldu @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Paylaşım parolası zorunludur - + Please enter a password for your link share: Lütfen bağlantı paylaşımınız için bir parola yazın: - + Sharing error Paylaşım sorunu - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error Hata @@ -2556,7 +2493,7 @@ <nobr>'%1' dosyası<br/>yazılmak üzere açılamadı.<br/><br/>Günlük çıktısı <b>kaydedilemez</b>!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>"%1" dosyası<br/>yazılmak üzere açılamadı.<br/><br/>Günlük çıktısı <b>kaydedilemez</b>!</nobr> @@ -2564,33 +2501,33 @@ OCC::NSISUpdater - + New Version Available Yeni bir sürüm yayınlanmış - + <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>Yeni bir %1 istemcisi sürümü yayınlanmış.</p><p><b>%2</b> 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 - + Update Failed Güncellenemedi @@ -2605,17 +2542,17 @@ <p>Yeni bir %1 istemcisi yayınlanmış ancak güncelleme işlemi yapılamadı.</p><p><b>%2</b> indirildi. Kurulu sürüm: %3. Yeniden başlatıp güncellemeyi onaylarsanız, kurulumu tamamlamak için bilgisayarınız yeniden başlatılabilir.</p> - + Ask again later Daha sonra yeniden sor - + Restart and update Yeniden başlat ve güncelle - + Update manually El ile güncelle @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Sunucudan hata yanıtı alındı: <em>%1</em> @@ -2736,32 +2673,32 @@ 'kod' uç noktasına erişilirken bir sorun çıktı: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> "kod" uç noktasına erişilirken bir sorun çıktı: <br><em>%1</em> - + Empty JSON from OAuth2 redirect OAuth2 yönlendirmesinden gelen JSON boş - + Could not parse the JSON returned from the server: <br><em>%1</em> Sunucudan alınan JSON işlenemedi: <br><em>%1</em> - + The reply from the server did not contain all expected fields Sunucudan alınan yanıtta beklenen tüm alanlar yok - + <h1>Login Error</h1><p>%1</p> <h1>Oturum açma sorunu</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>Kullanıcı yanlış</h1><p> <em>%1</em> kullanıcısı olarak oturum açmışsınız ancak <em>%2</em> kullanıcısı olarak oturum açmalısınız.<br> Lütfen başka bir sekmedeki %3 oturumunu kapatıp %2 kullanıcısı olarak oturum açmak için <a href='%4'>buraya tıklayın</a></p> @@ -2831,12 +2768,12 @@ Güncelleme indirilemedi. Lütfen güncellemeyi elle indirmek için <a href='%1'>%1</a> sitesini açın. - + Could not download update. Please open %1 to download the update manually. Güncelleme indirilemedi. Lütfen güncellemeyi el ile indirmek için %1 açın. - + Could not check for new updates. Güncellemeler denetlenemedi. @@ -2846,27 +2783,27 @@ Yeni %1 yayınlanmış. Lütfen güncellemeyi indirmek için <a href='%2'>%2</a> sitesini açın. - + New %1 is available. Please open %2 to download the update. Yeni %1 yayınlanmış. Lütfen güncellemeyi indirmek için %2 açı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. Herhangi bir güncelleme yok. Son sürümü kullanıyorsunuz. - + Update Check Güncelleme denetimi @@ -2894,14 +2831,14 @@ Bağlan … - - + + Use &virtual files instead of downloading content immediately %1 İçerik &hemen indirilmek yerine sanal dosyalar kullanılsın %1 - - + + (experimental) (deneysel) @@ -2926,49 +2863,49 @@ Boş alan: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Sanal dosyalar, yerel klasör olarak Windows bölümü kök klasörlerini desteklemez. Lütfen sürücü harfinin altında bulunan bir klasör seçin. - + %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 - + Warning: The local folder is not empty. Pick a resolution! Uyarı: Yerel klasör boş değil. Bir çözüm seçin! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 boş alan - + Virtual files are not available for the selected folder Sanal dosyalar seçilmiş klasör için kullanılamaz - + Local Sync Folder Yerel eşitleme klasörü - - + + (%1) (%1) - + There isn't enough free space in the local folder! Yerel klasörde yeterli boş alan yok! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3111,7 +3040,7 @@ &Sonraki > - + Server address does not seem to be valid Sunucu adresi geçersiz gibi görünüyor @@ -3121,7 +3050,7 @@ Adres geçersiz - + Could not load certificate. Maybe wrong password? Sertifika yüklenemedi. Parola yanlış olabilir mi? @@ -3219,54 +3148,54 @@ Nextcloud üzerinde klasör oluşturuluyor: %1 - + Remote folder %1 created successfully. %1 uzak klasörü oluşturuldu. - + The remote folder %1 already exists. Connecting it for syncing. Uzak klasör %1 zaten var. Eşitlemek için bağlantı kuruluyor. + - The folder creation resulted in HTTP error code %1 Klasör oluşturma işlemi %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> Geçersiz kimlik doğrulama bilgileri nedeniyle uzak klasör oluşturulamadı!<br/>Lütfen geri giderek kimlik doğrulama bilgilerinizi 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">Büyük olasılıkla belirtilen kimlik doğrulama bilgileri hatalı olduğundan uzak klasör oluşturulamadı.</font><br/>Lütfen geri giderek kimlik doğrulama bilgilerinizi doğrulayın.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. %1 uzak klasörü <tt>%2</tt> hatası nedeniyle oluşturulamadı. - + A sync connection from %1 to remote directory %2 was set up. %1 ile %2 uzak klasörü arasında bir eşitleme bağlantısı ayarlandı. - + Successfully connected to %1! %1 ile bağlantı kuruldu! - + Connection to %1 could not be established. Please check again. %1 ile bağlantı kurulamadı. Lütfen yeniden denetleyin. - + Folder rename failed Klasör yeniden adlandırılamadı @@ -3276,12 +3205,12 @@ Klasör ya da içindeki bir dosya başka bir program tarafından kullanıldığından, bu klasör üzerinde silme ya da yedekleme işlemleri yapılamıyor. Lütfen klasör ya da dosyayı kapatıp yeniden deneyin ya da kurulumu iptal edin. - + Cannot 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 ya da içindeki bir dosya başka bir program tarafından kullanıldığından, bu klasör üzerinde silme ya da yedekleme işlemleri yapılamıyor. Lütfen klasör ya da dosyayı kapatıp yeniden deneyin ya da kurulumu iptal edin. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>%1 yerel eşitleme klasörü oluşturuldu!</b></font> @@ -3289,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account %1 hesabı ekle @@ -3299,17 +3228,17 @@ %1 bağlantı yardımcısı - + Skip folders configuration Klasör yapılandırmasını atla - + Enable experimental feature? Deneysel özellikler etkinleştirilsin mi? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3326,12 +3255,12 @@ Bu yeni ve deneysel bir özelliktir. Kullanmaya karar verirseniz, lütfen karşılaşabileceğiniz sorunları bize bildirin. - + Enable experimental placeholder mode Deneysel yer belirteci kipi etkinleştirilsin - + Stay safe Güvende kalın @@ -3339,7 +3268,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Sorgu adresinden alınan JSON yanıtı geçersiz @@ -3357,17 +3286,17 @@ Dosya adının sonunda boşluklar bulunuyor ve yerel olarak aynı ada sahip bir dosya zaten var olduğundan yeniden adlandırılamadı. - + Symbolic links are not supported in syncing. Sembolik bağlantıların eşitlenmesi desteklenmiyor. - + File is listed on the ignore list. Dosya yok sayılanlar listesinde. - + File names ending with a period are not supported on this file system. Nokta ile biten dosya adları bu dosya sisteminde desteklenmiyor. @@ -3382,57 +3311,57 @@ "%1" karakterini içeren dosya adları bu sistemde desteklenmiyor. - + File name contains at least one invalid character Dosya adında en az bir geçersiz karakter var - + The file name is a reserved name on this file system. Bu dosya adı bu dosya sisteminde ayırtılmış bir ad olduğundan kullanılamaz. - + Filename contains trailing spaces. Dosya adının sonunda boşluklar var. - + Filename is too long. Dosya adı çok uzun. - + File/Folder is ignored because it's hidden. Dosya/klasör gizli olduğu için yok sayıldı. - + Stat failed. Durum alınamadı. - + Conflict: Server version downloaded, local copy renamed and not uploaded. Çakışma: Sunucu sürümü indirildi, yerel kopya yeniden adlandırıldı ve yüklenmedi. - + The filename cannot be encoded on your file system. Dosya adı dosya sisteminizde kodlanamıyor. - + The filename is blacklisted on the server. Dosya adı sunucu üzerinde kara listeye alınmış. - + File has extension reserved for virtual files. Dosyanın uzantısı sanal dosyalar için ayrılmış. - + size boyut @@ -3442,72 +3371,62 @@ izinler - - server reported no %1 - sunucu numarası %1 - - - - permission - izin - - - + file id dosya kodu - - Server reported no %1 - Sunucunun bildirilen numarası %1 + + server reported no %1 + sunucu numarası %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! Bazı dosyalar bir klasöre yüklenirken çalışma oldu. Çakışmalar temizlenecek! - + Conflict when uploading a folder. It's going to get cleared! Bir klasör yüklenirken çakışma oldu. Çakışma temizlenecek! - + Conflict when uploading a file. It's going to get removed! Bir dosya yüklenirken çakışma oldu. Çakışma temizlenecek! - + Ignored because of the "choose what to sync" blacklist "Eşitlenecek ögeleri seçin" kara listesinde olduğundan yok sayıldı - + Not allowed because you don't have permission to add subfolders to that folder Bu klasöre alt klasör ekleme izniniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme izniniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucu üzerinde salt okunur olduğundan, bu dosya yüklenemedi, geri yükleniyor - + Moved to invalid target, restoring Geçersiz bir hedefe taşındı, geri yükleniyor - + Not allowed to remove, restoring Silmeye izin verilmedi, geri yükleniyor - + Error while reading the database Veritabanı okunurken sorun çıktı @@ -3517,7 +3436,7 @@ !%1' klasörü okunurken sunucu bir hata yanıtı verdi: %2 - + Server replied with an error while reading directory "%1" : %2 "%1" klasörü okunurken sunucu bir hata yanıtı verdi: %2 @@ -3530,17 +3449,12 @@ Üst veri veritabanına yazılırken sorun çıktı - - Error updating metadata due to invalid modified time - Değiştirilme zamanı geçersiz olduğundan üst veriler yüklenirken sorun çıktı - - - + Error updating metadata: %1 Üst veriler güncellenirken sorun çıktı: %1 - + File is currently in use Dosya şu anda kullanılıyor @@ -3553,44 +3467,44 @@ %1 dosyası, adının şifreleme bilgilerinin eksik olması nedeniyle indirilemedi. - + File %1 cannot be downloaded because encryption information is missing. %1 dosyası, adının şifreleme bilgilerinin eksik olması nedeniyle indirilemedi. - - + + File has changed since discovery Dosya taramadan sonra değiştirilmiş - - + + File %1 cannot be downloaded because of a local file name clash! %1 dosyası, adının yerel bir dosya ile çakışması nedeniyle indirilemedi! - + File %1 can not be downloaded because of a local file name clash! %1 dosyası, adının yerel bir dosya ile çakışması nedeniyle indirilemedi! - + The download would reduce free local disk space below the limit İndirme sonucunda boş yerel disk alanı sınırın altına inebilir - + Free space on disk is less than %1 Boş disk alanı %1 değerinin altında - + File was deleted from server Dosya sunucudan silindi - + The file could not be downloaded completely. Dosya tam olarak indirilemedi. @@ -3600,12 +3514,12 @@ Sunucu tarafından boyutu %1 olarak bildirilmesine rağmen indirilen dosya boş. - + The downloaded file is empty, but the server said it should have been %1. İndirilen dosya boş. Ancak sunucu tarafından dosya boyutu %1 olarak bildirildi. - + File %1 cannot be saved because of a local file name clash! %1 dosyası, adının yerel bir dosya ile çakışması nedeniyle kaydedilemedi! @@ -3615,18 +3529,12 @@ Üst veri veritabanına yazılırken sorun çıktı - - - File %1 has invalid modified time reported by server. Do not save it. - Sunucu tarafından bildirilen %1 dosyasının değiştirilme tarihi geçersiz. Kaydedilmedi. - - - + Error updating metadata: %1 Üst veriler güncellenirken sorun çıktı: %1 - + The file %1 is currently in use %1 dosyası şu anda kullanılıyor @@ -3634,12 +3542,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Geri yüklenemedi: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Bir dosya ya da klasör salt okunur bir paylaşımdan kaldırılmış ancak geri yüklenemedi: %1 @@ -3713,12 +3621,12 @@ Yerel bir dosya adı ile çakışması nedeniyle %1 dosyası %2 olarak adlandırılamadı - + Error updating metadata: %1 Üst veriler güncellenirken sorun çıktı: %1 - + The file %1 is currently in use %1 dosyası şu anda kullanılıyor @@ -3729,12 +3637,12 @@ Üst veri veritabanına yazılırken sorun çıktı - + Failed to rename file Dosya yeniden adlandırılamadı - + Error setting pin state Sabitleme durumu ayarlanırken sorun çıktı @@ -3768,12 +3676,12 @@ Üst veri veritabanına yazılırken sorun çıktı - + Error writing metadata to the database: %1 Üst veriler veritabanına yazılırken sorun çıktı: %1 - + The file %1 is currently in use %1 dosyası şu anda kullanılıyor @@ -3791,22 +3699,22 @@ Sunucudan alınan HTTP kodu yanlış. 201 bekleniyordu, ancak "%1 %2" alındı. - + Error updating metadata: %1 Üst veriler güncellenirken sorun çıktı: %1 - + The file %1 is currently in use %1 dosyası şu anda kullanılıyor - + Error setting pin state Sabitleme durumu ayarlanırken sorun çıktı - + Error writing metadata to the database Üst veri veritabanına yazılırken sorun çıktı @@ -3814,46 +3722,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - %1 dosyasının değiştirilme zamanı geçersiz. Sunucuya yüklenmedi. - - - + Failed to upload encrypted file. Şifreli dosya yüklenemedi. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists %1 dosyası, adının başka bir dosya ile çakışması nedeniyle yüklenemedi, dosya adları arasında yalnız büyük küçük harf farkı var - - + + Upload of %1 exceeds the quota for the folder %1 yüklemesi klasörün kotasını aşıyor - + File Removed (start upload) %1 Dosya kaldırıldı (yüklemeyi başlat) %1 - + Local file changed during syncing. It will be resumed. Yerel dosya eşitleme sırasında değişmiş. Sürdürülecek. - + Local file changed during sync. Yerel dosya eşitleme sırasında değişti. - + Failed to unlock encrypted folder. Şifreli klasörün kilidi açılamadı. @@ -3863,12 +3763,12 @@ Üst veri veritabanına yazılırken sorun çıktı - + Error updating metadata: %1 Üst veriler güncellenirken sorun çıktı: %1 - + The file %1 is currently in use %1 dosyası şu anda kullanılıyor @@ -3876,32 +3776,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Yerel dosya eşitleme sırasında silinmiş. - + Local file changed during sync. Yerel dosya eşitleme sırasında değişmiş. - + Poll URL missing Anket adresi eksik - + Unexpected return code from server (%1) Sunucudan bilinmeyen bir yanıt kodu alındı (%1) - + Missing File ID from server Sunucudan Dosya Kodu alınamadı - + Missing ETag from server Sunucudan E-Tag alınamadı @@ -3909,22 +3809,22 @@ OCC::PropagateUploadFileV1 - + Poll URL missing Sorgu adresi eksik - + The local file was removed during sync. Yerel dosya eşitleme sırasında silinmiş. - + Local file changed during sync. Yerel dosya eşitleme sırasında değişmiş. - + The server did not acknowledge the last chunk. (No e-tag was present) Sunucu son yığını onaylamadı. (Herhangi bir e-tag bulunamadı) @@ -4002,7 +3902,7 @@ OCC::ServerNotificationHandler - + Dismiss Yok say @@ -4172,17 +4072,17 @@ Parola koruması - + Allow editing Düzenlenebilsin - + View only Yalnız görüntüleme - + Allow upload and editing Yüklenebilsin ve düzenlenebilsin @@ -4192,7 +4092,7 @@ Son kullanma tarihi - + File drop (upload only) Dosya bırakma (yalnız yükleme) @@ -4202,32 +4102,32 @@ Paylaşımdan kaldır - + Link name Bağlantı adı - + Note to recipient Alıcıya not - + Password protect Parola koruması - + Set expiration date Son kullanma tarihini ayarla - + Delete link Bağlantıyı sil - + Add another link Başka bir bağlantı ekle @@ -4237,27 +4137,27 @@ Paylaşım bağlantısını sil - + Confirm Link Share Deletion Bağlantı paylaşımını silmeyi onayla - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Gerçekten <i>%1</i> herkese açık bağlantısını silmek istiyor musunuz?</p><p><b>Not:</b> Bu işlem geri alınamaz.</p> - + Delete Sil - + Cancel İptal - + Public link Herkese açık bağlantı @@ -4270,12 +4170,12 @@ Kullanıcılar ya da gruplarla paylaş … - + Search globally Genel arama - + Copy link Bağlantıyı kopyala @@ -4285,22 +4185,22 @@ '%1' için bir sonuç bulunamadı - + No results for "%1" "%1" için bir sonuç bulunamadı - + Password for share required Paylaşım parolası zorunludur - + Please enter a password for your email share: Lütfen e-posta paylaşımınız için bir parola yazın: - + I shared something with you Sizinle bir şey paylaştım @@ -4338,42 +4238,42 @@ Sona erme: - + Can reshare Yeniden paylaşabilsin - + Note to recipient Alıcıya not - + Set expiration date Son kullanma tarihini ayarla - + Unshare Paylaşımdan kaldır - + Can create Ekleyebilsin - + Can change Değiştirebilsin - + Can delete Silebilsin - + Password protect Parola koruması @@ -4390,23 +4290,23 @@ OCC::SocketApi - + Context menu share Sağ tık menüsü paylaşımı - + Select new location … Yeni konum seçin … - + I shared something with you Sizinle bir şey paylaştım - - + + Share options Paylaşım seçenekleri @@ -4422,73 +4322,73 @@ İşlem - + Copy private link to clipboard Kişisel bağlantıyı panoya kopyala - + Send private link by email … Kişisel bağlantıyı e-posta ile paylaş … - + Resharing this file is not allowed Bu dosya yeniden paylaşılamaz - + Resharing this folder is not allowed Bu klasör yeniden paylaşılamaz - - + + Copy public link Herkese açık bağlantıyı kopyala - + Copy internal link İç bağlantıyı kopyala - + Edit Düzenle - + Open in browser Tarayıcıda aç - + Resolve conflict … Çakışmayı çöz … - + Move and rename … Taşı ve yeniden adlandır … - + Move, rename and upload … Taşı, yeniden adlandır ve yükle … - + Delete local changes Yerel değişiklikleri sil - + Move and upload … Taşı ve yükle … - + Delete Sil @@ -4634,77 +4534,77 @@ Bu sertifikaya yine de güven - + Untrusted Certificate Güvenilmeyen sertifika - + Cannot connect securely to <i>%1</i>: <i>%1</i> ile güvenli bağlantı kurulamadı: Additional errors: - Ek hatalar: + - + with Certificate %1 %1 sertifikası ile - - - + + + &lt;not specified&gt; &lt;belirtilmemiş&gt; - - + + Organization: %1 Kuruluş: %1 - - + + Unit: %1 Birim: %1 - - + + Country: %1 Ülke: %1 - + Fingerprint (SHA1): <tt>%1</tt> Parmak izi (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> Parmak izi (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> Parmak izi (SHA-512): <tt>%1</tt> - + Effective Date: %1 Geçerlilik tarihi: %1 - + Expiration Date: %1 Son kullanım tarihi: %1 - + Issuer: %1 Veren: %1 @@ -4797,33 +4697,33 @@ %1 numarasıyla bir iç sorun çıktı. - + %1 (skipped due to earlier error, trying again in %2) %1 (önceki bir sorun nedeniyle atlandı, %2 içinde yeniden denenecek) - + Could not update file: %1 Dosya güncellenemedi: %1 - + Could not update virtual file metadata: %1 Sanal dosya üst verileri güncellenemedi: %1 - + Unresolved conflict. Çözülmemiş çakışma. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Yalnız %1 kullanılabilir, başlatabilmek için en az %2 gerekli - + Aborted Vazgeçildi @@ -4900,16 +4800,16 @@ Nokta ile biten dosya adları bu dosya sisteminde desteklenmiyor. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Yerel eşitleme klasörü açılamadı ya da oluşturulamadı. Eşitleme klasörüne yazma izniniz olduğundan emin olun. + + File names containing the character '%1' are not supported on this file system. '%1' karakterini içeren dosya adları bu sistemde desteklenmiyor. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Yerel eşitleme klasörü açılamadı ya da oluşturulamadı. Eşitleme klasörüne yazma izniniz olduğundan emin olun. - - The file name is a reserved name on this file system. Bu dosya adı bu dosya sisteminde ayırtılmış bir ad olduğundan kullanılamaz. @@ -4930,7 +4830,7 @@ Dosya/Klasör gizli olduğu için yok sayıldı. - + Using virtual files with suffix, but suffix is not set Sanal dosyalar son ek ile kullanılıyor. Ancak son ek ayarlanmamış @@ -4945,7 +4845,7 @@ Dosya adı dosya sisteminizde kodlanamıyor. - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı @@ -4960,17 +4860,17 @@ Durum alınamadı. + + Unable to read from the sync journal. + Eşitleme günlüğü okunamadı. + + Filename encoding is not valid Dosya adı kodlaması geçersiz - - Unable to read from the sync journal. - Eşitleme günlüğü okunamadı. - - - + Cannot open the sync journal Eşitleme günlüğü açılamadı @@ -4980,22 +4880,22 @@ Karakterler geçersiz, lütfen "%1" ögesini yeniden adlandırın + + Synchronization will resume shortly. + Eşitleme kısa bir süre sonra sürdürülecek + + File name contains at least one invalid character Dosya adında en az bir geçersiz karakter var - - Synchronization will resume shortly. - Eşitleme kısa bir süre sonra sürdürülecek - - - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Disk alanı azaldı: Boş alanı %1 değerinin altına düşürecek indirmeler atlandı. - + There is insufficient space available on the server for some uploads. Sunucu üzerinde bazı yüklemeleri kaydetmek için yeterli alan yok. @@ -5064,49 +4964,49 @@ OCC::Systray - + Add account Hesap ekle - + Open main dialog Ana pencereyi aç + - Pause sync Eşitlemeyi duraklat - - + + Resume sync Eşitlemeyi sürdür - + Settings Ayarlar - + Exit %1 %1 uygulamasından çık - + Pause sync for all Tümü için eşitlemeyi duraklat - + Resume sync for all Tümü için eşitlemeyi sürdür - + %1: %2 %1: %2 @@ -5114,24 +5014,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 Masaüstü istemcisi</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>%1. sürüm. Ayrıntılı bilgi almak için <a href='%2'>buraya tıklayabilirsiniz</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>Sanal dosyalar eklentisi kullanılarak: %1</small></p> - + <p>This release was supplied by %1</p> <p>Bu sürüm %1 tarafından hazırlanmıştır</p> @@ -5139,22 +5039,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. Hizmet sağlayıcılar alınamadı. - + Failed to fetch search providers for '%1'. Error: %2 '%1' için hizmet sağlayıcılar alınamadı. Hata: %2 - + Search has failed for '%2'. '%2' için arama yapılamadı. - + Search has failed for '%1'. Error: %2 '%1' için arama yapılamadı. Hata: %2 @@ -5162,32 +5062,32 @@ OCC::User - + Retry all uploads Tüm yüklemeleri yinele - + Synced %1 %1 eşitlendi - + You renamed %1 %1 yeniden adlandırdınız - + You deleted %1 %1 sildiniz - + You created %1 %1 eklediniz - + You changed %1 %1 değiştirdiniz @@ -5195,22 +5095,22 @@ OCC::UserModel - + Confirm Account Removal Hesap silmeyi 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>Gerçekten <i>%1</i> hesabının bağlantısını silmeyi istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmez</b>.</p> - + Remove connection Bağlantıyı sil - + Cancel İptal @@ -5315,30 +5215,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 Sanal dosya sistemi özelliği için NTFS dosya sistemi gereklidir. %1, %2 kullanıyor - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - Değiştirilme zamanı geçersiz olduğundan üst veriler yüklenirken sorun çıktı - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - Değiştirilme zamanı geçersiz olduğundan üst veriler yüklenirken sorun çıktı - - - OCC::WebEnginePage @@ -5860,52 +5742,52 @@ Yeni klasör - + %n day ago %n gün önce%n gün önce - + %n days ago %n gün önce%n gün önce - + in the future gelecekte - + %n hour ago %n saat önce%n saat önce - + %n hours ago %n saat önce%n saat önce - + now şimdi - + Less than a minute ago 1 dakikadan kısa süre önce - + %n minute ago %n dakika önce%n dakika önce - + %n minutes ago %n dakika önce%n dakika önce - + Some time ago Bir süre önce @@ -5939,7 +5821,7 @@ SyncJournalDb - + Failed to connect database. Veritabanı bağlantısı kurulamadı. @@ -5947,7 +5829,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … Dosya, ileti, etkinlik arayın … @@ -5984,21 +5866,11 @@ Hesap kaydı - + Switch to account Şu hesaba geç - - Current user status is online - Geçerli kullanıcı durumu çevrimiçi - - - - Current user status is do not disturb - Geçerli kullanıcı durumu rahatsız etmeyin - - Account connected Hesap bağlandı @@ -6009,7 +5881,17 @@ Hesap bağlanmadı - + + Current user status is online + Geçerli kullanıcı durumu çevrimiçi + + + + Current user status is do not disturb + Geçerli kullanıcı durumu rahatsız etmeyin + + + Account actions Hesap işlemleri @@ -6019,24 +5901,24 @@ Hesabı sil - + Set status Durumu ayarla - - + + Log out Oturumu kapat - - + + Log in Oturum aç - + Remove account Hesabı sil @@ -6097,57 +5979,57 @@ 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 @@ -6155,7 +6037,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Sağlama üst bilgisi bozulmuş. @@ -6188,64 +6070,64 @@ Window - + Nextcloud desktop main dialog Nextcloud masaüstü ana penceresi - + Current account Geçerli hesap - - + + Resume sync for all Tümünü eşitlemeyi sürdür - - + + Pause sync for all Tümünü eşitlemeyi duraklat - + Set user status Kullanıcı durumunu ayarla - + Add account Hesap ekle - + Add new account Hesap ekle - + Settings Ayarlar - + Exit Çık - + Current user avatar Geçerli kullanıcı avatarı - + Current user status is online Geçerli kullanıcı durumu çevrimiçi - + Current user status is do not disturb Geçerli kullanıcı durumu rahatsız etmeyin @@ -6255,32 +6137,32 @@ %1 ögesini paylaş - + Account switcher and settings menu Hesap değiştirici ve ayarlar menüsü - + Connected Bağlantı kuruldu - + Disconnected Bağlantı kesildi - + Open local folder of current account Geçerli hesabın yerel klasörünü aç - + Open Nextcloud Talk in browser Web tarayıcıda Nextcloud Talk uygulamasını aç - + More apps Diğer uygulamalar @@ -6290,7 +6172,7 @@ Uygulamalar menüsü - + Open %1 in browser %1 ögesini tarayıcıda aç @@ -6310,7 +6192,7 @@ Paylaşma penceresini aç - + Unified search results list Birleşik arama sonuçları listesi @@ -6321,7 +6203,7 @@ Diğer işlemleri görüntüle - + %1 - File activity %1 - Dosya işlemi @@ -6329,7 +6211,7 @@ main.cpp - + System Tray not available Sistem tepsisi kullanılamıyor @@ -6339,7 +6221,7 @@ %1 için çalışan bir sistem tepsisi gerekir. XFCE kullanıyorsanız lütfen <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">bu yönergeleri</a> izleyin. Yoksa 'trayer' benzeri bir sistem tepsisi uygulaması kurarak yeniden deneyin. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 için çalışan bir sistem tepsisi gerekir. XFCE kullanıyorsanız lütfen <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">bu yönergeleri</a> izleyin. Yoksa "trayer" benzeri bir sistem tepsisi uygulaması kurarak yeniden deneyin. @@ -6347,7 +6229,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Git sürümü <a href="%1">%2</a> ile %3 zamanında, %4 Qt %5 kullanılarak, %6 hazırlandı</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_uk.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_uk.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_uk.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_uk.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally - + Open share dialog - + Share %1 - - + + Show more actions @@ -39,7 +39,7 @@ ActivityList - + Activity list @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out Час очікування з'єднання вичерпано - + Unknown error: network reply was deleted Незнайома помилка: відповідь мережі вилучено - + Server replied "%1 %2" to "%3 %4" Відповідь сервера: "%1 %2" до "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic Словникове шифрування end-to-end - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). Щоб захистити вашу криптографічну ідентичність, ми зашифруємо її мнемонікою з 12 словникових слів. Зверніть увагу на це та зберігайте їх у безпеці. Вони будуть потрібні для додавання інших пристроїв до вашого облікового запису (наприклад, мобільного телефону чи ноутбука). @@ -305,9 +305,9 @@ - - - + + + Cancel Скасувати @@ -495,52 +495,52 @@ Вилучити синхронізацію для цієї теки - + Disable virtual file support … - + Enable virtual file support %1 … - + (experimental) (експериментальна функція) - + Folder creation failed Не вдалося створити теку - + <p>Could not create local folder <i>%1</i>.</p> <p>Неможливо створити локальну теку <i>%1</i>.</p> - + Confirm Folder Sync Connection Removal Підтвердити скасування синхронізації для цієї теки - + <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> - + Remove Folder Sync Connection Вилучити синхронізацію для цієї теки - + Disable virtual file support? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ - + Disable support - + Sync Running Виконується синхронізація - + The syncing operation is running.<br/>Do you want to terminate it? Виконується процедура синхронізації.<br/>Бажаєте зупинити? - + %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. На даний час немає відомостей про наповнення сховища. - + %1 in use %1 використовується @@ -599,87 +599,87 @@ Увійти - + %1 as %2 - + The server version %1 is unsupported! Proceed at your own risk. - + 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. Відсутнє з'єднання між %2 та %1. - + Server configuration error: %1 at %2. - + No %1 connection configured. Жодного %1 підключення не налаштовано. - + 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 Вилучити з'єднання @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out Вийшов - + Disconnected Від'єднаний - + Connected З'єднаний - + Service unavailable Сервіс недоступний - + Maintenance mode Режим обслуговування - + Network error Помилка мережі - + Configuration error Помилка конфігурації - + Asking Credentials Запит на повноваження доступу - + Unknown account state Невідомий стан облікового запису @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. - + For more activities please open the Activity app. Для докладного перегляду змін, будь ласка, відкрийте застосунок Події. @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. - + Continuing will mean <b>ignoring these settings</b>. - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. - + Quit Вихід - + Continue Продовжити - + Error accessing the configuration file Помилка доступу до файлу конфігурації - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. Помилка з доступом до файлу налаштувань %1. Будь ласка, перевірте чи файл буде доступний для вашого користувача. - + Quit %1 Вийти %1 @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - - File Removed (start upload) %1 - - - - - Local file changed during syncing. It will be resumed. - - - - - - Local file changed during sync. - - - - - Error updating metadata: %1 - - - - - The file %1 is currently in use - - - - - The local file was removed during sync. - - - - - ; Restoration Failed: %1 - - - - OCC::CleanupPollsJob - + Error writing metadata to the database Помилка із записом метаданих до бази даних @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> Будь ласка, зазначте пароль для наскрізного шифрування:<br><br>Користувач: %2<br>Обліковий запис: %3<br> - + Enter E2E passphrase Зазначте пароль для наскрізного шифрування @@ -1099,19 +1049,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - - - - - Error while canceling delete of %1 - - - - OCC::DiscoverySingleDirectoryJob @@ -1119,8 +1056,8 @@ Служба виявлення файлів на сервері повідомила про відсутні дані. - - + + Server error: PROPFIND reply is not XML formatted! @@ -1128,27 +1065,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 - + Directory not accessible on client, permission denied - + Directory not found: %1 Теку не знайдено: %1 - + Filename encoding is not valid Некоректне кодування назви файлу - + Error while reading directory %1 @@ -1171,7 +1108,7 @@ - + Error returned from the server: <em>%1</em> Сервер повернув помилку: <em>%1</em> @@ -1183,24 +1120,24 @@ - + 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> Неможливо обробити JSON, який повернув сервер: <br><em>%1</em> - + The reply from the server did not contain all expected fields Відповідь сервера не містить всі очікувані поля - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. @@ -1361,41 +1298,41 @@ Журнал синхронізації - + 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. Будь ласка, перейдіть у налаштуваннях, щоб вибрати її для подальшого звантаження. - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. Теку %1 було створено, але раніше виключено з синхронізації. Дані всередині цієї теки не буде синхронізовано. - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. Файл %1 було створено, але раніше виключено з синхронізації. Цей файл не буде синхронізовано. - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1404,6 +1341,13 @@ + + 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. + + + All files in the sync folder '%1' 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. @@ -1456,22 +1400,7 @@ Зберегти локальні файли як конфлікт - - 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 restore 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. - - - - - 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. - - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1479,24 +1408,32 @@ - + 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 - + + 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 restore 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. + + + + Keep files @@ -1532,7 +1469,7 @@ OCC::FolderMan - + Could not reset folder state Не вдалося скинути стан теки @@ -1542,37 +1479,37 @@ Знайдено старий журнал синхронізації '%1', який неможливо вилучити. Будь ласка, впевніться що його не відкрито ув іншому застосунку. - + 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) (Резервна копія %1) - + Undefined State. Невизначений стан. - + Waiting to start syncing. Очікування початку синхронізації. - + Preparing for sync. Підготовка до синхронізації - + Sync is running. Синхронізація запущена. @@ -1582,67 +1519,67 @@ Успішно синхронізовано, нерозв'язані конфлікти. - + Sync finished with unresolved conflicts. - + Last Sync was successful. Остання синхронізація була успішною. - + Setup Error. Помилка встановлення. - + User Abort. Скасовано користувачем. - + Sync is paused. Синхронізація призупинена. - + %1 (Sync is paused) %1 (Синхронізація призупинена) - + No valid folder selected! Не вибрано прийнятної теки! - + The selected path does not exist! - + The selected path is not a folder! Вибраний шлях не є текою! - + You have no permission to write to the selected 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 вже у теці, яка використовується для синхронізації теки. Будь ласка, виберіть іншу! - + There is already a sync from the server to this local folder. Please pick another local folder! З цією локальною текою вже встановлено синхронізацію з боку сервера. Будь ласка, виберіть іншу! @@ -1854,12 +1791,12 @@ OCC::FolderWizard - + Add Folder Sync Connection Додати з'єднання для синхронізації теки - + Add Sync Connection Додайте з'єднання для синхронізації @@ -1900,42 +1837,42 @@ - + 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 <i>%1</i>, which is a subfolder of <i>%2</i>. @@ -1943,24 +1880,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 - - + + (experimental) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + Virtual files are not available for the selected folder @@ -1981,27 +1918,27 @@ 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 для відновлення. Спробуйте ще раз пізніше. - + We received an unexpected download Content-Length. - + Server returned wrong content-range Сервер повернув невірний content-range - + Connection Timeout Час з'єднання вичерпано @@ -2121,54 +2058,54 @@ - + Server notifications that require attention. Сповіщення сервера, на які треба звернути увагу. - + You cannot disable autostart because system-wide autostart is enabled. - + Change update channel? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. - + Change update channel - + Cancel - + Create Debug Archive - + Zip Archives - + Debug Archive Created - + Debug archive is created at %1 @@ -2176,22 +2113,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required Потрібний пароль на спільний ресурс - + Please enter a password for your link share: Будь ласка, зазначте пароль на спільний ресурс - + Sharing error Помилка під час надання доступу - + Could not retrieve or create the public link share. Error: %1 @@ -2509,7 +2446,7 @@ OCC::Logger - + Error Помилка @@ -2519,7 +2456,7 @@ <nobr>Файл '%1'<br/>не вдається відкрити на запис.<br/><br/>Журнал <b>не</b> можливо зберегти!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> @@ -2527,33 +2464,33 @@ 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 Отримати оновлення - + Update Failed @@ -2568,17 +2505,17 @@ - + Ask again later - + Restart and update - + Update manually @@ -2689,7 +2626,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> Сервер повернув помилку: <em>%1</em> @@ -2699,32 +2636,32 @@ Помилка доступу до токену кінцевої точки: <br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> - + Empty JSON from OAuth2 redirect - + 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> @@ -2793,12 +2730,12 @@ - + Could not download update. Please open %1 to download the update manually. - + Could not check for new updates. Не вдалося перевірити наявність оновлень. @@ -2808,27 +2745,27 @@ - + New %1 is available. Please open %2 to download the update. - + 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 Перевірити оновлення @@ -2856,14 +2793,14 @@ З'єднання... - - + + Use &virtual files instead of downloading content immediately %1 - - + + (experimental) @@ -2888,49 +2825,49 @@ Вільне місце: %1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. - + %1 folder "%2" is synced to local folder "%3" - + Sync the folder "%1" - + Warning: The local folder is not empty. Pick a resolution! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB - + Virtual files are not available for the selected folder - + Local Sync Folder Локальна Тека для Синхронізації - - + + (%1) (%1) - + There isn't enough free space in the local folder! Недостатньо вільного місця у локальній теці! @@ -3000,14 +2937,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3073,7 +3002,7 @@ &Наступний> - + Server address does not seem to be valid @@ -3083,7 +3012,7 @@ Недійсна URL адреса - + Could not load certificate. Maybe wrong password? Не вдалося завантажити сертифікат. Можливо був введений неправильний пароль? @@ -3181,54 +3110,54 @@ створення теки на Nextcloud: %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 Не вдалося перейменувати теку @@ -3238,12 +3167,12 @@ Неможливо вилучити теку та створити її резервну копію, оскільки тека або файли, що в ній розташовані, використовуються. Будь ласка, закрийте всі програми, що можуть використовувати цю теку та спробуйте ще раз, або скасуйте встановлення. - + Cannot 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> @@ -3251,7 +3180,7 @@ OCC::OwncloudWizard - + Add %1 account @@ -3261,17 +3190,17 @@ Майстер з'єднання %1 - + Skip folders configuration Пропустити налаштування теки - + Enable experimental feature? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3282,12 +3211,12 @@ - + Enable experimental placeholder mode - + Stay safe @@ -3295,7 +3224,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL Неправильна JSON відповідь на сформований URL @@ -3313,17 +3242,17 @@ - + 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. @@ -3338,57 +3267,57 @@ - + File name contains at least one invalid character - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + File/Folder is ignored because it's hidden. - + Stat failed. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + The filename cannot be encoded on your file system. - + The filename is blacklisted on the server. - + File has extension reserved for virtual files. - + size @@ -3398,72 +3327,62 @@ - - server reported no %1 - - - - - permission - - - - + file id - - Server reported no %1 + + server reported no %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! - + Conflict when uploading a folder. It's going to get cleared! - + Conflict when uploading a file. It's going to get removed! - + 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 because you don't have permission to add files in that folder - + Not allowed to upload this file because it is read-only on the server, restoring - + Moved to invalid target, restoring - + Not allowed to remove, restoring - + Error while reading the database @@ -3473,7 +3392,7 @@ - + Server replied with an error while reading directory "%1" : %2 @@ -3486,17 +3405,12 @@ Помилка із записом метаданих до бази даних - - Error updating metadata due to invalid modified time - - - - + Error updating metadata: %1 - + File is currently in use @@ -3509,44 +3423,44 @@ Неможливо звантажити файл %1 через відсутність інформації про шифрування. - + File %1 cannot be downloaded because encryption information is missing. - - + + File has changed since discovery Файл змінився з моменту знаходження - - + + File %1 cannot be downloaded because of a local file name clash! - + File %1 can not be downloaded because of a local file name clash! Файл %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. Файл не може бути завантажений повністю. @@ -3556,12 +3470,12 @@ Звантажений файл є порожнім незважаючи на те, що сервер повідомив, що файл мав бути %1. - + The downloaded file is empty, but the server said it should have been %1. - + File %1 cannot be saved because of a local file name clash! Файл %1 не збережено через локальний конфлікт назви файлу! @@ -3571,18 +3485,12 @@ Помилка із записом метаданих до бази даних - - - File %1 has invalid modified time reported by server. Do not save it. - - - - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3590,12 +3498,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Відновлення не вдалося: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Файл або теку було вилучено зі спільного ресурсу для читання, не вдалося відновити: %1 @@ -3669,12 +3577,12 @@ %1 не можна перейменувати на %2 через локальний конфлікт назви файлу - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3685,12 +3593,12 @@ Помилка із записом метаданих до бази даних - + Failed to rename file - + Error setting pin state @@ -3724,12 +3632,12 @@ Помилка із записом метаданих до бази даних - + Error writing metadata to the database: %1 - + The file %1 is currently in use @@ -3747,22 +3655,22 @@ Сервер відповів неправильним HTTP кодом. Очікувався 201, але отримано "%1 %2". - + Error updating metadata: %1 - + The file %1 is currently in use - + Error setting pin state - + Error writing metadata to the database Помилка із записом метаданих до бази даних @@ -3770,46 +3678,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - - - - + Failed to upload encrypted file. - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Файл %1 неможливо завантажити, оскільки існує інший файл з таким же ім'ям, але в іншому регістрі - - + + Upload of %1 exceeds the quota for the folder Завантаження %1 перевищує квоту цієї теки - + File Removed (start upload) %1 Файл вилучено (почніть завантаження) %1 - + Local file changed during syncing. It will be resumed. Локальний файл змінився під час синхронізації. Його буде відновлено. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + Failed to unlock encrypted folder. @@ -3819,12 +3719,12 @@ Помилка із записом метаданих до бази даних - + Error updating metadata: %1 - + The file %1 is currently in use @@ -3832,32 +3732,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. Локальний файл було вилучено під час синхронізації. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + Poll URL missing - + Unexpected return code from server (%1) Неочікуваний код повернення від сервера (%1) - + Missing File ID from server Відсутній ідентифікатор файлу на сервері - + Missing ETag from server @@ -3865,22 +3765,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3958,7 +3858,7 @@ OCC::ServerNotificationHandler - + Dismiss Припинити @@ -4128,17 +4028,17 @@ Захищено паролем - + Allow editing Може редагувати - + View only - + Allow upload and editing Може завантажувати та редагувати @@ -4148,7 +4048,7 @@ Дійсно до - + File drop (upload only) Сховище (тільки завантажування) @@ -4158,32 +4058,32 @@ Скасувати загальний доступ - + Link name - + Note to recipient Примітка для одержувача - + Password protect Захистити паролем - + Set expiration date Встановити термін дії - + Delete link - + Add another link Додати ще одне посилання @@ -4193,27 +4093,27 @@ Вилучити посилання для спільного використання - + Confirm Link Share Deletion Підтвердіть вилучення спільного ресурсу з посиланням - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>Дійсно вилучити спільний ресурс із публічним посиланням <i>%1</i>?</p><p>Примітка: цю дію неможливо буде повернути. - + Delete Вилучити - + Cancel Скасувати - + Public link Публічне посилання @@ -4226,12 +4126,12 @@ Поділитися з користувачами або групами... - + Search globally - + Copy link Скопіювати посилання @@ -4241,22 +4141,22 @@ Відсутні результати для '%1' - + No results for "%1" - + Password for share required - + Please enter a password for your email share: - + I shared something with you Я поділився з вами документами @@ -4294,42 +4194,42 @@ - + Can reshare Може ділитися з іншими - + Note to recipient - + Set expiration date - + Unshare Закрити спільний доступ - + Can create Може створювати - + Can change Може змінювати - + Can delete Може вилучати - + Password protect @@ -4346,23 +4246,23 @@ OCC::SocketApi - + Context menu share Контекстне мені спільного доступу - + Select new location … - + I shared something with you Я чимось поділив(ла)ся з вами - - + + Share options Параметри спільного доступу @@ -4378,73 +4278,73 @@ - + Copy private link to clipboard Копіювати приватне посилання - + Send private link by email … Надіслати приватне посилання електронною поштою - + Resharing this file is not allowed Надання цього файлу у спільний доступ іншим не дозволено - + Resharing this folder is not allowed - - + + Copy public link Копіювати публічне посилання - + Copy internal link Копіювати внутрішнє посилання - + Edit Редагувати - + Open in browser Відкрити у бравзері - + Resolve conflict … - + Move and rename … - + Move, rename and upload … - + Delete local changes - + Move and upload … - + Delete Вилучити @@ -4590,12 +4490,12 @@ Все одно довіряти цьому сертифікату - + Untrusted Certificate Недовірений сертифікат - + Cannot connect securely to <i>%1</i>: Неможливо встановити безпечне з'єднання з <i>%1</i>: @@ -4605,62 +4505,62 @@ - + with Certificate %1 з Сертифікатом %1 - - - + + + &lt;not specified&gt; &lt;не вказано&gt; - - + + Organization: %1 Організація: %1 - - + + Unit: %1 Підрозділ: %1 - - + + Country: %1 Країна: %1 - + Fingerprint (SHA1): <tt>%1</tt> Відбиток (SHA1): <tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> - + Effective Date: %1 Дата введення в дію: %1 - + Expiration Date: %1 Термін Дії: %1 - + Issuer: %1 Емітент: %1 @@ -4753,33 +4653,33 @@ Виникла внутрішня помилка за номером %1. - + %1 (skipped due to earlier error, trying again in %2) %1 (пропущено через попередню помилку, повторна спроба через %2) - + Could not update file: %1 - + Could not update virtual file metadata: %1 - + Unresolved conflict. Конфлікт, який неможна вирішити - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + Aborted @@ -4856,16 +4756,16 @@ Імена файлів, які закінчуються на кому, не підтримуються файловою системою. + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + Неможливо відкрити або створити локальну синхронізовану базу даних. Перевірте, що ви маєте доступ на запис у синхронізованій теці. + + File names containing the character '%1' are not supported on this file system. Імена файлів, що містять символ '%1' не підтримуються файловою системою. - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - Неможливо відкрити або створити локальну синхронізовану базу даних. Перевірте, що ви маєте доступ на запис у синхронізованій теці. - - The file name is a reserved name on this file system. Таке ім'я файлу є зарезервованим іменем файлової системи. @@ -4886,7 +4786,7 @@ Файл або теку проігноровано, оскільки є прихованим(ою). - + Using virtual files with suffix, but suffix is not set @@ -4901,7 +4801,7 @@ Неможливо зашифрувати ім'я файлу на файловій системі - + Unable to read the blacklist from the local database Неможливо прочитати чорний список з локальної бази даних @@ -4916,17 +4816,17 @@ + + Unable to read from the sync journal. + Неможливо прочитати з журналу синхронізації. + + Filename encoding is not valid Кодування файлу не припустиме - - Unable to read from the sync journal. - Неможливо прочитати з журналу синхронізації. - - - + Cannot open the sync journal Не вдається відкрити протокол синхронізації @@ -4936,22 +4836,22 @@ Помилкові символи, будь ласка, перейменуйте "%1" + + Synchronization will resume shortly. + + + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - Synchronization will resume shortly. - - - - + 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. Недостатньо місця на сервері для окремих завантажень. @@ -5020,49 +4920,49 @@ OCC::Systray - + Add account Додати обліковий запис - + Open main dialog Відкрити основне вікно діалогу + - Pause sync - - + + Resume sync - + Settings Налаштування - + Exit %1 Вийти %1 - + Pause sync for all - + Resume sync for all - + %1: %2 %1: %2 @@ -5070,24 +4970,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 клієнт для робочої істанції</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> - + <p><small>Using virtual files plugin: %1</small></p> - + <p>This release was supplied by %1</p> <p>Цю збірку поставлено %1</p> @@ -5095,22 +4995,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. - + Failed to fetch search providers for '%1'. Error: %2 - + Search has failed for '%2'. - + Search has failed for '%1'. Error: %2 @@ -5118,32 +5018,32 @@ OCC::User - + Retry all uploads Првторити усі завантаження - + Synced %1 - + You renamed %1 - + You deleted %1 - + You created %1 - + You changed %1 @@ -5151,22 +5051,22 @@ OCC::UserModel - + 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 Вилучити з'єднання - + Cancel Скасувати @@ -5271,30 +5171,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - - - - OCC::WebEnginePage @@ -5816,52 +5698,52 @@ - + %n day ago %n день тому%n дні тому%n днів тому%n днів тому - + %n days ago %n день тому%n дні тому%n днів тому%n днів тому - + in the future у майбутньому - + %n hour ago %n годину тому%n години тому%n годин тому%n годин тому - + %n hours ago %n годину тому%n години тому%n годин тому%n годин тому - + now зараз - + Less than a minute ago Менше хвилини тому - + %n minute ago %n хвилину тому%n хвилини тому%n хвилин тому%n хвилин тому - + %n minutes ago %n хвилину тому%n хвилини тому%n хвилин тому%n хвилин тому - + Some time ago Деякий час тому @@ -5895,7 +5777,7 @@ SyncJournalDb - + Failed to connect database. @@ -5903,7 +5785,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … @@ -5940,32 +5822,32 @@ - + Switch to account Перейти до облікового запису - - Current user status is online - + + Account connected + Обліковий запис під’єднано - - Current user status is do not disturb + + Account not connected - Account connected - Обліковий запис під’єднано + Current user status is online + - Account not connected + Current user status is do not disturb - + Account actions @@ -5975,24 +5857,24 @@ - + Set status - - + + Log out Вихід - - + + Log in Увійти - + Remove account Вилучити обліковий запис @@ -6053,57 +5935,57 @@ 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 місяці%n місяців%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 @@ -6111,7 +5993,7 @@ ValidateChecksumHeader - + The checksum header is malformed. Контрольна сума заголовку неправильно сформовано. @@ -6144,64 +6026,64 @@ Window - + Nextcloud desktop main dialog - + Current account Поточний обліковий запис - - + + Resume sync for all - - + + Pause sync for all - + Set user status - + Add account Додати обліковий запис - + Add new account - + Settings Налаштування - + Exit - + Current user avatar - + Current user status is online - + Current user status is do not disturb @@ -6211,32 +6093,32 @@ - + Account switcher and settings menu - + Connected З'єднаний - + Disconnected Від'єднаний - + Open local folder of current account - + Open Nextcloud Talk in browser - + More apps Більше застосунків @@ -6246,7 +6128,7 @@ - + Open %1 in browser Відкрити %1 в браузері @@ -6266,7 +6148,7 @@ - + Unified search results list @@ -6277,7 +6159,7 @@ - + %1 - File activity @@ -6285,7 +6167,7 @@ main.cpp - + System Tray not available Системний лоток недоступний @@ -6295,7 +6177,7 @@ %1 вимагає працюючий системний трей. Якщо ви використовуєте XFCE, будь ласка перегляньте <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">інструкцію</a>. В інакшому випадку, встановіть системний трей (наприклад trayer), та спробуйте ще раз. - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. @@ -6303,7 +6185,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_CN.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_CN.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_CN.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_CN.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,32 +1,32 @@ - + ActivityActionButton Activity action button - 动态操作按钮 + 动态操作按钮按钮 ActivityItem - + Open %1 locally 在本地打开 %1 - + Open share dialog 打开分享对话框 - + Share %1 共享 %1 - - + + Show more actions 显示更多操作 @@ -39,7 +39,7 @@ ActivityList - + Activity list 动态列表 @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out 连接超时 - + Unknown error: network reply was deleted 未知错误:网络回复被删除 - + Server replied "%1 %2" to "%3 %4" 服务器向 "%3 %4" 返回了 "%1 %2" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic 端到端加密助记词 - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). 为了保护您的加密身份,我们用 12 个助记词对其进行了加密。请将它们抄下来并妥善保管。在您向账号添加其他设备(手机或笔记本电脑)时需要用到。 @@ -305,9 +305,9 @@ - - - + + + Cancel 取消 @@ -495,52 +495,52 @@ 移除文件夹同步连接 - + Disable virtual file support … 禁用虚拟文件支持 ... - + Enable virtual file support %1 … 启用虚拟文件支持 %1 … - + (experimental) (实验性) - + Folder creation failed 文件夹创建失败 - + <p>Could not create local folder <i>%1</i>.</p> <p>无法新建本地文件夹 <i>%1</i>。</p> - + Confirm Folder Sync Connection Removal 确定移除文件夹同步连接 - + <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> - + Remove Folder Sync Connection 移除文件夹同步连接 - + Disable virtual file support? 禁用虚拟文件支持? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -549,37 +549,37 @@ 此操作将禁用虚拟文件支持。因此,当前标记为“仅在线可用”的文件夹的内容将被下载。禁用虚拟文件支持的唯一好处是选择性同步特性将再次可用。此操作将终止任何当前正在运行的同步。 - + Disable support 禁用支持 - + Sync Running 正在同步 - + The syncing operation is running.<br/>Do you want to terminate it? 同步操作正在进行。<br/>您确定要停止吗? - + %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. 目前没有储存使用量信息可用。 - + %1 in use 已使用 %1 @@ -599,87 +599,87 @@ 登录 - + %1 as %2 %1 作为 %2 - + The server version %1 is 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. 没有到位于%2中的%1的连接 - + Server configuration error: %1 at %2. 服务器配置错误:%1 于 %2. - + No %1 connection configured. 没有 %1 连接配置。 - + 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 移除连接 @@ -687,47 +687,47 @@ OCC::AccountState - + Signed out 已退出 - + Disconnected 连接已断开 - + Connected 已连接 - + Service unavailable 服务不可用 - + Maintenance mode 维护模式 - + Network error 网络错误 - + Configuration error 配置错误 - + Asking Credentials 凭证 - + Unknown account state 未知的账号状态 @@ -735,12 +735,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. 来自忽略列表的文件和符号链接不会被同步。 - + For more activities please open the Activity app. 有关更多动态,请打开 “动态” 应用。 @@ -801,42 +801,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. 继续意味着<b>删除这些设置</b> - + Continuing will mean <b>ignoring these settings</b>. 继续意味着<b>忽略这些设置</b> - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. 一些设置在此客户端的新版本中被配置,并使用了该版本中没有的功能。<br><br>%1<br><br>当前配置文件已经备份到<i>%2</i>。 - + Quit 退出 - + Continue 继续 - + Error accessing the configuration file 访问配置文件时发生错误 - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. 访问配置文件 %1 时发生错误。请检查是否有访问权限。 - + Quit %1 退出 %1 @@ -870,59 +870,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - 无法上传文件 %1,因为存在同名文件,文件名仅有大小写不同。 - - - - - File %1 has invalid modified time. Do not upload to the server. - 文件 %1 修改时间无效。不要上传到服务器。 - - - - File Removed (start upload) %1 - 文件已删除(开始上传)%1 - - - - Local file changed during syncing. It will be resumed. - 本地文件在同步时发生变化。将重新开始同步。 - - - - - Local file changed during sync. - 本地文件在同步时发生变化。 - - - - Error updating metadata: %1 - 更新元数据出错:%1 - - - - The file %1 is currently in use - 文件 %1 在使用中 - - - - The local file was removed during sync. - 本地文件在同步时被删除 - - - - ; Restoration Failed: %1 - ; 还原失败:%1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database 向数据库写入元数据错误 @@ -930,12 +880,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> 请输入端到端加密短语:<br><br>用户名:%2<br>账号:%3<br> - + Enter E2E passphrase 输入 E2E 密语 @@ -1101,19 +1051,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - 取消删除一个文件时出错 - - - - Error while canceling delete of %1 - 取消删除 %1 时发生错误 - - - OCC::DiscoverySingleDirectoryJob @@ -1121,8 +1058,8 @@ 服务器文件发现的应答缺少数据。 - - + + Server error: PROPFIND reply is not XML formatted! 服务器错误:PROPFIND 回复的格式不是 XML! @@ -1130,27 +1067,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 打开目录 %1 时出错 - + Directory not accessible on client, permission denied 目录在客户端上不可访问,权限被拒 - + Directory not found: %1 找不到目录:%1 - + Filename encoding is not valid 文件名编码无效 - + Error while reading directory %1 读取目录 %1 时出错 @@ -1174,7 +1111,7 @@ - + Error returned from the server: <em>%1</em> 服务器返回错误:<em>%i</em> @@ -1186,24 +1123,24 @@ - + 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 从服务器返回的应答没有包含所有预期的字段 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. 返回的服务器 URL 不以 HTTPS 开头,尽管登录 URL 以 HTTPS 开始。你将无法登录,因为这可能是一个安全问题。请与管理员联系。 @@ -1364,41 +1301,41 @@ 同步动态 - + 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. 如果您想下载,请到设置页面选择它。 - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. 文件夹 %1 已创建但之前被排除出同步过程。文件夹中的数据将不会被同步。 - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. 文件 %1 已创建但之前被排除出同步过程。这个文件将不会被同步。 - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1411,6 +1348,13 @@ %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”中的所有文件已被删除。这些删除将与您的服务器同步,使这些文件不可用,除非恢复。您确定要与服务器同步这些操作吗?如果这是一个意外,您决定保留您的文件,它们将从服务器重新同步。 + + All files in the sync folder '%1' 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. @@ -1470,22 +1414,7 @@ 保留本地文件为冲突文件 - - 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 restore 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”中的所有文件已被删除。这些删除将与您的服务器同步,使这些文件不可用,除非恢复。您确定要与服务器同步这些操作吗?如果这是一个意外,您决定保留您的文件,它们将从服务器重新同步。 - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1496,7 +1425,7 @@ 如果您决定删除文件,它们将对您不可用,除非您是所有者。 - + 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. @@ -1505,17 +1434,25 @@ 如果这是一次意外,而您决定保留您的文件,它们将从服务器重新同步。 - + Remove All Files? 移除所有文件? - + Remove all files 移除所有文件 - + + 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 restore 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' 文件夹中的所有文件已在服务器上被删除。这些删除将同步到您的本地同步文件夹,使这些文件不可用,除非您有权恢复。如果您决定恢复这些文件,它们将与服务器重新同步,前提是您有这么做的权利。如果您决定删除这些文件,它们对您将不可用,除非您是所有者。 + + + Keep files 保留文件 @@ -1551,7 +1488,7 @@ OCC::FolderMan - + Could not reset folder state 不能重置文件夹状态 @@ -1561,37 +1498,37 @@ 一个旧的同步日志 '%1' 被找到,但是不能被移除。请确定没有应用程序正在使用它。 - + 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. 同步正在运行。 @@ -1601,67 +1538,67 @@ 同步成功,冲突未解决。 - + Sync finished with unresolved conflicts. 同步已完成,但有未解决的冲突 - + Last Sync was successful. 最后一次同步成功。 - + Setup Error. 安装失败 - + User Abort. 用户撤销。 - + Sync is paused. 同步已暂停。 - + %1 (Sync is paused) %1(同步已暂停) - + No valid folder selected! 没有选择有效的文件夹! - + The selected path does not exist! 所选路径不存在! - + The selected path is not a folder! 选择的路径不是一个文件夹! - + You have no permission to write to the selected 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 是正在使用的同步文件夹,请选择另一个! - + There is already a sync from the server to this local folder. Please pick another local folder! 已经有一个从服务器到此文件夹的同步设置。请选择其他本地文件夹! @@ -1873,12 +1810,12 @@ OCC::FolderWizard - + Add Folder Sync Connection 添加同步文件夹 - + Add Sync Connection 添加同步连接 @@ -1919,42 +1856,42 @@ 输入要在"%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 <i>%1</i>, which is a subfolder of <i>%2</i>. 你已经在同步 <i>%1</i>,它是<i>%2</i>的一个子文件夹。 @@ -1962,24 +1899,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 使用虚拟文件而非立即下载内容 %1 - - + + (experimental) (实验性) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows分区根目录不支持虚拟文件作为本地文件夹。请在驱动器号下选择有效的子文件夹。 - + Virtual files are not available for the selected folder 虚拟文件对所选文件夹不可用 @@ -2000,27 +1937,27 @@ 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,将在下次尝试。 - + We received an unexpected download Content-Length. 我们收到一个意外的下载内容长度 - + Server returned wrong content-range 服务器返回了错误的内容长度 - + Connection Timeout 连接超时 @@ -2140,22 +2077,22 @@ 创建调试存档 ... - + Server notifications that require attention. 需要注意的服务器通知。 - + You cannot disable autostart because system-wide autostart is enabled. 你不能禁用自启动,因为系统级的自启动处于启用状态。 - + Change update channel? 更改更新频道? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2164,32 +2101,32 @@ 请注意,这只会选择从何种中池升级,并且没有降级:因此,通常无法立即从测试版通道返回到稳定版通道,这意味着您需要等待比当前安装的测试版更新的稳定版。 - + Change update channel 更改更新频道 - + Cancel 取消 - + Create Debug Archive 创建调试存档 - + Zip Archives Zip 归档 - + Debug Archive Created 调试存档已创建 - + Debug archive is created at %1 调试存档已创建于 %1 @@ -2197,22 +2134,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required 需要共享密码 - + Please enter a password for your link share: 请输入您的共享链接密码: - + Sharing error 共享错误 - + Could not retrieve or create the public link share. Error: %1 @@ -2534,7 +2471,7 @@ OCC::Logger - + Error 错误 @@ -2544,7 +2481,7 @@ <nobr>文件 '%1'<br/>不能写入。<br/><br/>将<b>不</b>能保存日志输出!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> 无法打开<nobr>文件 "%1"<br/>进行写入。<br/><br/>日志输出<b>无法</b>被保存!</nobr> @@ -2552,33 +2489,33 @@ 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 获取更新 - + Update Failed 更新失败 @@ -2593,17 +2530,17 @@ <p>%1 客户端有新版本可用但更新过程失败。</p><p><b>%2</b>已下载。已安装版本为 %3。如果您确认重新启动和更新,您的计算机可能需要重启以完成安装。</p> - + Ask again later 稍后再询问 - + Restart and update 重启并更新 - + Update manually 手动更新 @@ -2714,7 +2651,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> 服务器返回错误:<em>%1</em> @@ -2724,32 +2661,32 @@ 访问“token”端时出错:<br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> 访问 "token" 端点时出错:<br><em>%1</em> - + Empty JSON from OAuth2 redirect 来自 OAuth2 重定向的空 JSON - + 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>%2</em>,但您登录了用户<em>%1</em>。<br>请在另一个标签中登出 %3,然后<a href='%4'>点击这里</a>登录为用户 %2</p> @@ -2819,12 +2756,12 @@ 无法下载更新。请打开 <a href='%1'>%1</a>手动下载更新 - + Could not download update. Please open %1 to download the update manually. 无法下载更新。请打开 %1 手动下载更新。 - + Could not check for new updates. 无法检查新更新。 @@ -2834,27 +2771,27 @@ 有新的 %1 可用。请打开 <a href='%2'>%2</a>下载更新 - + New %1 is available. Please open %2 to download the update. 新的 %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 检查更新 @@ -2882,14 +2819,14 @@ 连接… - - + + Use &virtual files instead of downloading content immediately %1 使用 &虚拟文件,而非立即下载内容 %1 - - + + (experimental) (实验性) @@ -2914,49 +2851,49 @@ 可用空间:%1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows 分区根目录不支持虚拟文件作为本地文件夹。请在驱动器号下选择有效的子文件夹。 - + %1 folder "%2" is synced to local folder "%3" %1 文件夹 "%2" 已同步至本地文件夹 "%3" - + Sync the folder "%1" 同步文件夹 "%1" - + Warning: The local folder is not empty. Pick a resolution! 警告:本地文件夹不是空的。选择一个分辨率! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 剩余空间 - + Virtual files are not available for the selected folder 虚拟文件对所选文件夹不可用 - + Local Sync Folder 本地同步文件夹 - - + + (%1) (%1) - + There isn't enough free space in the local folder! 本地文件夹可用空间不足! @@ -3026,14 +2963,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3099,7 +3028,7 @@ 下一步(&N) > - + Server address does not seem to be valid 服务器地址似乎无效 @@ -3109,7 +3038,7 @@ 无效的链接 - + Could not load certificate. Maybe wrong password? 无法载入证书。是不是密码错了? @@ -3207,54 +3136,54 @@ 在 Nextcloud 上创建文件夹:%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 文件夹更名失败 @@ -3264,12 +3193,12 @@ 无法移除和备份文件夹,由于文件夹或文件正在被另一程序占用。请关闭程序后重试,或取消安装。 - + Cannot 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> @@ -3277,7 +3206,7 @@ OCC::OwncloudWizard - + Add %1 account 添加 %1 个账户 @@ -3287,17 +3216,17 @@ %1 链接向导 - + Skip folders configuration 跳过文件夹设置 - + Enable experimental feature? 启用实验性功能? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3308,12 +3237,12 @@ 当“虚拟文件”模式被启用时,最初不会下载任何文件,而是为服务器上存在的每个文件创建一个小的“%1”文件。内容可以通过运行这些文件或使用它们的上下文菜单来下载。虚拟文件模式与选择性同步是互斥的。当前未选择的文件夹将被翻译成“仅在线”的文件夹,并且您选择的同步设置将被重置。切换到此模式将中止任何当前正在运行的同步。这是一种新的实验性模式。如果您决定使用它,请报告出现的任何问题。 - + Enable experimental placeholder mode 启用实验占位符模式 - + Stay safe 保持安全 @@ -3321,7 +3250,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL 推送 URL 传来的 JSON 无效 @@ -3339,17 +3268,17 @@ 文件名包含尾随空格,无法重命名,因为本地已经存在同名文件。 - + 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. 此文件系统不支持以句点结尾的文件名。 @@ -3364,57 +3293,57 @@ 此文件系统不支持包含字符“%1”的文件名 - + File name contains at least one invalid character 文件名包含至少一个无效字符 - + The file name is a reserved name on this file system. 此文件名是这个文件系统上的保留名。 - + Filename contains trailing spaces. 文件名包含结尾空白 - + Filename is too long. 文件名太长 - + File/Folder is ignored because it's hidden. 文件/文件夹被忽略,因为它是隐藏的。 - + Stat failed. 由于排除或错误,项目被跳过。 - + Conflict: Server version downloaded, local copy renamed and not uploaded. 冲突:服务器版本已下载,本地副本已重命名,但未上传。 - + The filename cannot be encoded on your file system. 文件名无法在您的文件系统上被编码 - + The filename is blacklisted on the server. 该文件名在服务器上被列入黑名单 - + File has extension reserved for virtual files. 文件有为虚拟文件保留的扩展名 - + size 大小 @@ -3424,72 +3353,62 @@ 权限 - - server reported no %1 - 服务器报告无 %1 - - - - permission - 权限 - - - + file id 文件标识 - - Server reported no %1 + + server reported no %1 服务器报告无 %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! 上传文件到文件夹时发生冲突。那些冲突的会被清除! - + Conflict when uploading a folder. It's going to get cleared! 上传文件夹时发生冲突。它会被清除! - + Conflict when uploading a file. It's going to get removed! 上传时发生冲突。它将被移除! - + 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 because you don't have permission to add files in that folder 不被允许,因为您没有在该文件夹中添加文件的权限。 - + Not allowed to upload this file because it is read-only on the server, restoring 不允许上传这个文件,因为它在这台服务器上是只读的,恢复中。 - + Moved to invalid target, restoring 移动到无效目标,恢复中。 - + Not allowed to remove, restoring 不允许移除,恢复中。 - + Error while reading the database 读取数据库时出错 @@ -3499,7 +3418,7 @@ 服务器在读取目录 '%1' 时回复了一个错误:%2 - + Server replied with an error while reading directory "%1" : %2 服务器在读取目录 "%1" 时返回了一个错误: %2 @@ -3512,17 +3431,12 @@ 向数据库写入元数据错误 - - Error updating metadata due to invalid modified time - 由于修改时间无效,更新元数据时出错 - - - + Error updating metadata: %1 更新元数据出错:%1 - + File is currently in use 文件在使用中 @@ -3535,44 +3449,44 @@ 由于加密信息丢失,文件 %1 无法下载。 - + File %1 cannot be downloaded because encryption information is missing. 文件 %1 无法被下载,因为加密信息丢失。 - - + + File has changed since discovery 自从发现文件以来,它已经被修改了 - - + + File %1 cannot be downloaded because of a local file name clash! 文件 %1 无法被下载,因为一个本地文件名冲突! - + File %1 can not be downloaded because of a local file name clash! 由于本地文件名冲突,文件 %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. 文件无法完整下载。 @@ -3582,12 +3496,12 @@ 虽然服务器宣称已完成 %1,但实际下载文件为空。 - + The downloaded file is empty, but the server said it should have been %1. 已下载的文件为空,但是服务器说它应该是 %1 - + File %1 cannot be saved because of a local file name clash! 由于本地文件名冲突,文件 %1 无法保存。 @@ -3597,18 +3511,12 @@ 向数据库写入元数据错误 - - - File %1 has invalid modified time reported by server. Do not save it. - 服务器报告文件 %1 的修改时间无效。不要保存它。 - - - + Error updating metadata: %1 更新元数据出错:%1 - + The file %1 is currently in use 文件 %1 在使用中 @@ -3616,12 +3524,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ;恢复失败:%1 - + A file or folder was removed from a read only share, but restoring failed: %1 文件(夹)移除了只读共享,但恢复失败:%1 @@ -3695,12 +3603,12 @@ 由于本地文件名冲突,文件 %1 无法更名为 %2 - + Error updating metadata: %1 更新元数据出错:%1 - + The file %1 is currently in use 文件 %1 在使用中 @@ -3711,12 +3619,12 @@ 向数据库写入元数据错误 - + Failed to rename file 重命名文件失败 - + Error setting pin state 设置固定状态出错 @@ -3750,12 +3658,12 @@ 向数据库写入元数据错误 - + Error writing metadata to the database: %1 将元数据写入数据库出错:%1 - + The file %1 is currently in use 文件 %1 在使用中 @@ -3773,22 +3681,22 @@ 服务器返回的 HTTP 状态错误,应返回 201,但返回的是“%1 %2”。 - + Error updating metadata: %1 更新元数据出错:%1 - + The file %1 is currently in use 文件 %1 在使用中 - + Error setting pin state 设置固定状态出错 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -3796,46 +3704,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - 文件 %1 修改时间无效。不要上传到服务器。 - - - + Failed to upload encrypted file. 上传加密文件失败 - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists 文件 %1 无法上传,因为存在同名文件,文件名仅有大小写不同。 - - + + Upload of %1 exceeds the quota for the folder 上传 %1 超过文件夹的限额 - + File Removed (start upload) %1 文件已删除(开始上传)%1 - + Local file changed during syncing. It will be resumed. 本地文件在同步时已修改,完成后会再次同步 - + Local file changed during sync. 本地文件在同步时已修改。 - + Failed to unlock encrypted folder. 解锁加密文件夹失败 @@ -3845,12 +3745,12 @@ 向数据库写入元数据错误 - + Error updating metadata: %1 更新元数据出错:%1 - + The file %1 is currently in use 文件 %1 在使用中 @@ -3858,32 +3758,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. 本地文件在同步时已删除。 - + Local file changed during sync. 本地文件在同步时已修改。 - + Poll URL missing 投票 URL 缺失 - + Unexpected return code from server (%1) 从服务器得到了意外的返回值(%1) - + Missing File ID from server 服务器端文件 ID 缺失 - + Missing ETag from server 服务器端 ETag 缺失 @@ -3891,22 +3791,22 @@ OCC::PropagateUploadFileV1 - + 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) @@ -3984,7 +3884,7 @@ OCC::ServerNotificationHandler - + Dismiss 忽略 @@ -4154,17 +4054,17 @@ 密码保护 - + Allow editing 允许编辑 - + View only 仅查看 - + Allow upload and editing 允许上传和编辑 @@ -4174,7 +4074,7 @@ 有效期 - + File drop (upload only) 文件拖拽(仅上传) @@ -4184,32 +4084,32 @@ 取消共享 - + Link name 链接名称 - + Note to recipient 接收人备注 - + Password protect 密码保护 - + Set expiration date 设置过期日期 - + Delete link 删除链接 - + Add another link 添加其他链接 @@ -4219,27 +4119,27 @@ 删除共享链接 - + Confirm Link Share Deletion 确认删除共享链接 - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> 您真的想删除公开共享链接 <i>%1</i>?<p><p>注意:此操作无法撤销。</p> - + Delete 删除 - + Cancel 取消 - + Public link 公开链接 @@ -4252,12 +4152,12 @@ 与用户或分组共享... - + Search globally 全局搜索 - + Copy link 复制链接 @@ -4267,22 +4167,22 @@ 没有 '%1' 相关结果 - + No results for "%1" 没有 "%1"相关结果 - + Password for share required 需要共享密码 - + Please enter a password for your email share: 请为你的电邮共享输入一个密码: - + I shared something with you 我向您共享了一些东西 @@ -4320,42 +4220,42 @@ 过期: - + Can reshare 允许重新共享 - + Note to recipient 给收件人的备注 - + Set expiration date 设置到期日 - + Unshare 取消共享 - + Can create 可以创建 - + Can change 可以修改 - + Can delete 可以删除 - + Password protect 密码保护 @@ -4372,23 +4272,23 @@ OCC::SocketApi - + Context menu share 上下文目录共享 - + Select new location … 请选择新位置 ... - + I shared something with you 我向您共享了一些东西 - - + + Share options 共享选项 @@ -4404,73 +4304,73 @@ 动态 - + Copy private link to clipboard 复制私人链接到剪贴板 - + Send private link by email … 通过电子邮件发送私人链接… - + Resharing this file is not allowed 不允许再次分享此文件 - + Resharing this folder is not allowed 不允许重新分享这个文件夹 - - + + Copy public link 复制公开链接 - + Copy internal link 复制内部链接 - + Edit 编辑 - + Open in browser 在浏览器中打开 - + Resolve conflict … 解决冲突 ... - + Move and rename … 移动并重命名 ... - + Move, rename and upload … 移动,重命名并上传 ... - + Delete local changes 删除本地变更 - + Move and upload … 移动并上传 ... - + Delete 删除 @@ -4616,77 +4516,77 @@ 总是信任该证书 - + Untrusted Certificate 不被信任的证书 - + Cannot connect securely to <i>%1</i>: 无法安全连接到 <i>%1</i>: Additional errors: - 其他错误: + - + with Certificate %1 使用证书 %1 - - - + + + &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 组织:%1 - - + + Unit: %1 单位:%1 - - + + Country: %1 国家:%1 - + Fingerprint (SHA1): <tt>%1</tt> SHA1 指纹:<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> 指纹(SHA-256):<tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> 指纹(SHA-512):<tt>%1</tt> - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 过期日期:%1 - + Issuer: %1 签发人:%1 @@ -4779,33 +4679,33 @@ 发生内部错误 %1 - + %1 (skipped due to earlier error, trying again in %2) %1 (由于先前的错误而跳过,在%2中再次尝试 ) - + Could not update file: %1 无法上传文件:%1 - + Could not update virtual file metadata: %1 无法更新虚拟文件元数据:%1 - + Unresolved conflict. 未解决的冲突。 - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + Aborted 已中断 @@ -4882,16 +4782,16 @@ 文件名结尾不可以为“.”。 + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + 无法打开或创建本地同步数据库。请确保您在同步文件夹下有写入权限。 + + File names containing the character '%1' are not supported on this file system. 此文件系统不支持包含字符 '%1' 的文件名。 - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - 无法打开或创建本地同步数据库。请确保您在同步文件夹下有写入权限。 - - The file name is a reserved name on this file system. 文件名为系统保留文件名。 @@ -4912,7 +4812,7 @@ 已忽略隐藏的文件和文件夹。 - + Using virtual files with suffix, but suffix is not set 使用带后缀的虚拟文件,但未设置后缀。 @@ -4927,7 +4827,7 @@ 文件名在您的文件系统中不可编码。 - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 @@ -4942,17 +4842,17 @@ 状态失败。 + + Unable to read from the sync journal. + 无法读取同步日志。 + + Filename encoding is not valid 文件名编码无效 - - Unable to read from the sync journal. - 无法读取同步日志。 - - - + Cannot open the sync journal 无法打开同步日志 @@ -4962,22 +4862,22 @@ 无效的字符,请更改为 “%1” + + Synchronization will resume shortly. + 同步将很快恢复。 + + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - Synchronization will resume shortly. - 同步将很快恢复。 - - - + 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. 对于某些上传文件来说,服务器端的可用空间不足。 @@ -5046,49 +4946,49 @@ OCC::Systray - + Add account 添加账号 - + Open main dialog 打开主对话框 + - Pause sync 暂停同步 - - + + Resume sync 恢复同步 - + Settings 设置 - + Exit %1 退出 %1 - + Pause sync for all 全部暂停同步 - + Resume sync for all 全部恢复同步 - + %1: %2 %1:%2 @@ -5096,24 +4996,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 桌面客户端</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>版本 %1。详情请点击<a href='%2'>这里</a>。</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>正使用虚拟文件插件:%1</small></p> - + <p>This release was supplied by %1</p> <p>该版本由 %1 提供</p> @@ -5121,22 +5021,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. 获取提供商失败 - + Failed to fetch search providers for '%1'. Error: %2 未能获取 ''%1' 的搜索提供商。错误: %2 - + Search has failed for '%2'. 搜索 '%2' 失败 - + Search has failed for '%1'. Error: %2 搜索“%1”失败。错误:%2 @@ -5144,32 +5044,32 @@ OCC::User - + Retry all uploads 重试所有上传 - + Synced %1 已同步 %1 - + You renamed %1 您重命名了 %1 - + You deleted %1 您删除了 %1 - + You created %1 您创建了 %1 - + You changed %1 您修改了 %1 @@ -5177,22 +5077,22 @@ OCC::UserModel - + 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 移除连接 - + Cancel 取消 @@ -5297,30 +5197,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 虚拟文件系统特性需要一个NTFS文件系统,%1 正使用 %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - 由于修改时间无效,更新元数据时出错 - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - 由于修改时间无效,更新元数据时出错 - - - OCC::WebEnginePage @@ -5842,52 +5724,52 @@ 新文件夹 - + %n day ago %n 天以前 - + %n days ago %n 天以前 - + in the future 将来 - + %n hour ago %n 小时以前 - + %n hours ago %n 小时以前 - + now 现在 - + Less than a minute ago 刚刚 - + %n minute ago %n 分钟以前 - + %n minutes ago %n 分钟以前 - + Some time ago 之前 @@ -5921,7 +5803,7 @@ SyncJournalDb - + Failed to connect database. 未能连接至数据库 @@ -5929,7 +5811,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … 搜索文件、消息、事件... @@ -5966,21 +5848,11 @@ 账号输入 - + Switch to account 切换到账号 - - Current user status is online - 当前用户状态为“在线” - - - - Current user status is do not disturb - 当前用户状态为“请勿打扰” - - Account connected 账号已连接 @@ -5991,7 +5863,17 @@ 账号未连接 - + + Current user status is online + 当前用户状态为“在线” + + + + Current user status is do not disturb + 当前用户状态为“请勿打扰” + + + Account actions 账号操作 @@ -6001,24 +5883,24 @@ 移除账号 - + Set status 设置状态 - - + + Log out 登出 - - + + Log in 登录 - + Remove account 移除账号 @@ -6079,57 +5961,57 @@ 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 @@ -6137,7 +6019,7 @@ ValidateChecksumHeader - + The checksum header is malformed. 校验码头部无效。 @@ -6170,64 +6052,64 @@ Window - + Nextcloud desktop main dialog Nextcloud 桌面主对话框 - + Current account 当前账号 - - + + Resume sync for all 全部恢复同步 - - + + Pause sync for all 全部暂停同步 - + Set user status 设定用户状态 - + Add account 添加账号 - + Add new account 添加新账号 - + Settings 设置 - + Exit 退出 - + Current user avatar 当前用户头像 - + Current user status is online 当前用户状态为“在线” - + Current user status is do not disturb 当前用户状态为“请勿打扰” @@ -6237,32 +6119,32 @@ 共享 %1 - + Account switcher and settings menu 账号切换器和设置菜单 - + Connected 已连接 - + Disconnected 连接已断开 - + Open local folder of current account 打开当前账号的本地文件夹 - + Open Nextcloud Talk in browser 在浏览器中打开 Nextcloud Talk - + More apps 更多的应用程序 @@ -6272,7 +6154,7 @@ 应用菜单 - + Open %1 in browser 在浏览器中打开%1 @@ -6292,7 +6174,7 @@ 打开共享对话框 - + Unified search results list 统一的搜索结果列表 @@ -6303,7 +6185,7 @@ 显示更多操作 - + %1 - File activity %1 - 文件动态 @@ -6311,7 +6193,7 @@ main.cpp - + System Tray not available 系统托盘不可用 @@ -6321,7 +6203,7 @@ %1 依赖于系统托盘程序。如果您在运行 XFCE,请按 <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">这个指南</a> 来设置。否则,请安装一个系统托盘程序,比如 trayer,然后再试。 - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 需要一个工作的系统托盘。如果您正在运行XFCE,请遵照<a href="http://docs.xfce.org/xfce/xfce4-panel/systray">这些说明</a>操作。否则,请安装系统托盘应用程序,如“trayer”,然后重试。 @@ -6329,7 +6211,7 @@ nextcloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>使用Qt %5, %6,从 %3, %4 上的Git版本<a href="%1">%2</a>构建</small></p> diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_HK.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_HK.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_HK.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_HK.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally 在近端打開 %1 - + Open share dialog 開啟分享對話方塊 - + Share %1 分享 %1 - - + + Show more actions 顯示更多操作 @@ -39,7 +39,7 @@ ActivityList - + Activity list 活動紀錄清單 @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out 連線逾時 - + Unknown error: network reply was deleted 未知錯誤:網路回覆被刪除 - + Server replied "%1 %2" to "%3 %4" 伺服器回覆 "%1 %2" 到 "%3 %4" @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic 端到端加密助記碼 - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). 為了保護您的身分,我們將用含12個單詞的助記碼進行加密。請將這些單詞記在一個安全的地方。要將其他裝置(如手提電話或手提電腦)加入您的賬戶中,需用到此助記碼。 @@ -306,9 +306,9 @@ - - - + + + Cancel 取消 @@ -496,52 +496,52 @@ 移除資料夾同步連線 - + Disable virtual file support … 停用虛擬檔案支援... - + Enable virtual file support %1 … 啟用虛擬檔案支援 %1 … - + (experimental) (實驗性) - + Folder creation failed 資料夾建立失敗 - + <p>Could not create local folder <i>%1</i>.</p> <p>無法建立本機資料夾<i>%1</i>。</p> - + Confirm Folder Sync Connection Removal 確認移除資料夾同步連線 - + <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> - + Remove Folder Sync Connection 移除資料夾同步連線 - + Disable virtual file support? 停用虛擬檔案支援? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -554,37 +554,37 @@ 此操作將中止任何當前正在運行的同步。 - + Disable support 停用支援 - + Sync Running 正在同步中 - + The syncing operation is running.<br/>Do you want to terminate it? 正在同步中<br/>你真的想要中斷? - + %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. 目前無法查詢儲存空間使用資訊。 - + %1 in use %1 正在使用 @@ -604,87 +604,87 @@ 登入 - + %1 as %2 %1 為 %2 - + The server version %1 is 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 - + Server configuration error: %1 at %2. 伺服器設定錯誤:%1 在 %2。 - + No %1 connection configured. 沒有 %1 連線設置。 - + 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 移除連線 @@ -692,47 +692,47 @@ OCC::AccountState - + Signed out 已登出 - + Disconnected 已經離線 - + Connected 已連線 - + Service unavailable 服務無法使用 - + Maintenance mode 維護模式 - + Network error 網絡異常 - + Configuration error 設定錯誤 - + Asking Credentials 正在詢問憑證 - + Unknown account state 未知的帳號狀態 @@ -740,12 +740,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. 略過清單中的檔案以及符號連結不會同步。 - + For more activities please open the Activity app. 請開啟活動以檢視更多活動app @@ -806,42 +806,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. 繼續將意味著<b>刪除這些設置</b>。 - + Continuing will mean <b>ignoring these settings</b>. 繼續將意味著<b>略過這些設置</b>。 - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. 某些設置是在此客戶端的較新版本中配置的,並使用了此版本中不可用的功能。<br><br>%1<br><br> 當前配置檔案已備份到 <i>%2</i>。 - + Quit 結束 - + Continue 繼續 - + Error accessing the configuration file 存取配置文件時錯誤 - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. 存取設定檔%1時發生錯誤 請確定檔案可以被用戶存取 - + Quit %1 離開 %1 @@ -875,59 +875,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - %1檔案未能上傳,因為另一個同名(僅大小寫不同)的檔案已經存在 - - - - - File %1 has invalid modified time. Do not upload to the server. - 檔案 %1 的修改時間無效。 請勿上傳到伺服器。 - - - - File Removed (start upload) %1 - 檔案已移除(開始上傳)%1 - - - - Local file changed during syncing. It will be resumed. - 近端端的檔案在同步的過程中被更改。同步將會重新開始。 - - - - - Local file changed during sync. - 近端端的檔案在同步過程中被更改。 - - - - Error updating metadata: %1 - 更新元數據時出錯:%1 - - - - The file %1 is currently in use - 檔案 %1 正在使用中 - - - - The local file was removed during sync. - 近端的檔案在同步過程中被刪除。 - - - - ; Restoration Failed: %1 - ;復原失敗 %1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database 寫入後設資料(metadata)時發生錯誤 @@ -935,12 +885,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> 請輸入您端對端加密的密碼短語:<br><br>用戶:%2<br>賬戶:%3<br> - + Enter E2E passphrase 請輸入端到端密碼短語 @@ -1106,19 +1056,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - 取消刪除檔案時出錯 - - - - Error while canceling delete of %1 - 取消 %1 的刪除時出錯 - - - OCC::DiscoverySingleDirectoryJob @@ -1126,8 +1063,8 @@ 伺服器回報檔案遺失 - - + + Server error: PROPFIND reply is not XML formatted! 伺服器錯誤:PROPFIND回覆未採用XML格式! @@ -1135,27 +1072,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 開啟目錄 %1 發生錯誤 - + Directory not accessible on client, permission denied 用戶端無法存取目錄,權限被拒 - + Directory not found: %1 找不到目錄:%1 - + Filename encoding is not valid 檔案名稱編碼無效 - + Error while reading directory %1 讀取目錄 %1 發生錯誤 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> 伺服器發回錯誤訊息:<em>%1</em> @@ -1190,24 +1127,24 @@ - + 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 伺服器的回應沒有包含所有預期的欄位 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. 儘管登錄 URL 以 HTTPS 開頭,但返回的伺服器 URL 不以 HTTPS 開頭。 出於安全考慮,您將無法登錄。 請聯繫您的管理員。 @@ -1368,40 +1305,40 @@ 同步活動 - + Could not read system exclude file 無法讀取系統的排除檔案 - + A new folder larger than %1 MB has been added: %2. 一個大於%1MB的資料夾已被新增至:%2 - + A folder from an external storage has been added. 一個來自外部空間的資料夾已被新增 - + Please go in the settings to select it if you wish to download it. 若要下載此項目,請前往設定選擇它 - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. 已創建%1資料夾,但該資料夾已從要同步的檔案中剔除,因此不會被同步。 - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. 已新增%1檔案,但該檔案已從要同步的檔案中剔除,因此不會被同步。 - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1414,6 +1351,15 @@ %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'中的所有檔案都已刪除。這些刪除將與您的伺服器同步,除非恢復,否則此類檔案將不可用。 +您確定要與伺服器同步這些操作嗎? +如果您意外刪除了檔案並決定保留它們,則它們將從伺服器重新同步。 + + All files in the sync folder '%1' 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. @@ -1473,27 +1419,7 @@ 將近端檔案視為抵觸檔案 - - 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 restore 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'中的所有檔案都已刪除。這些刪除將與您的伺服器同步,除非恢復,否則此類檔案將不可用。 -您確定要與伺服器同步這些操作嗎? -如果您意外刪除了檔案並決定保留它們,則它們將從伺服器重新同步。 - - - + 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 restore the files, they will be re-synced with the server if you have rights to do so. @@ -1504,7 +1430,7 @@ 假如您決定刪除這些檔案,除非您是檔案的所有者,否則您將無法讀取這些檔案。 - + 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. @@ -1513,17 +1439,28 @@ 如果您意外地刪除了檔案並決定保留它們,則它們將從伺服器重新同步。 - + Remove All Files? 移除所有檔案? - + Remove all files 移除所有檔案 - + + 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 restore 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」資料夾中的所有檔案已從伺服器上移除。 +同步後,這些檔案也會從您的近端資料夾中移除。除非您有復原的權限,否則您將無法讀取這些檔案。 +假如您決定復原這些檔案,只要您擁有權限,這些檔案就會重新和伺服器同步。 +假如您決定移除這些檔案,除非您是檔案的所有者,否則您將無法讀取這些檔案。 + + + Keep files 保留檔案 @@ -1559,7 +1496,7 @@ OCC::FolderMan - + Could not reset folder state 無法重置資料夾狀態 @@ -1569,37 +1506,37 @@ 發現較舊的同步處理日誌'%1',但無法移除。請確認沒有應用程式正在使用它。 - + 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. 同步執行中 @@ -1609,67 +1546,67 @@ 同步成功,抵觸未解決 - + Sync finished with unresolved conflicts. 同步完成,但存在未解決的抵觸。 - + Last Sync was successful. 最後一次同步成功 - + Setup Error. 安裝失敗 - + User Abort. 用戶中斷。 - + Sync is paused. 同步已暫停 - + %1 (Sync is paused) %1(同步暫停) - + No valid folder selected! 沒有選擇有效的資料夾 - + The selected path does not exist! 所選的路徑不存在! - + The selected path is not a folder! 所選的路徑並非資料夾! - + You have no permission to write to the selected 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 是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! - + There is already a sync from the server to this local folder. Please pick another local folder! 此資料夾已與Server設定同步,請選擇其他資料夾 @@ -1881,12 +1818,12 @@ OCC::FolderWizard - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Add Sync Connection 新增同步連線 @@ -1927,42 +1864,42 @@ 請輸入欲創建在 "%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 <i>%1</i>, which is a subfolder of <i>%2</i>. 您已經同步了 <i>%1</i>, 這個資料夾是 <i>%2</i> 的子資料夾。 @@ -1970,24 +1907,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 使用虛擬檔案,而不是立即下載內容 %1 - - + + (experimental) (實驗性) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows分區根目錄不支持將虛擬文件作為近端資料夾使用。請在硬盤驅動器號下選擇一個有效的子資料夾。 - + Virtual files are not available for the selected folder 選擇的資料夾無法使用虛擬檔案 @@ -2008,27 +1945,27 @@ 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,將在下一次重新嘗試取得 - + We received an unexpected download Content-Length. 我們收到了意外的下載內容長度。 - + Server returned wrong content-range 伺服器回應錯誤的內容長度 - + Connection Timeout 連線逾時 @@ -2148,22 +2085,22 @@ 建立除錯壓縮檔... - + Server notifications that require attention. 伺服器公告,請注意 - + You cannot disable autostart because system-wide autostart is enabled. 您不可以停用自動啟動,因為已啟用系統廣域自動啟動。 - + Change update channel? 變更更新頻道? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2172,32 +2109,32 @@ 請注意,這僅選擇從哪個池升級中進行升級,並且沒有降級:因此通常無法立即從Beta通道返回到穩定通道,這意味著要等待比當前安裝的測試版本更新的穩定版本。 - + Change update channel 變更更新頻道 - + Cancel 取消 - + Create Debug Archive 建立除錯壓縮檔 - + Zip Archives ZIP 壓縮檔 - + Debug Archive Created 已建立除錯壓縮檔 - + Debug archive is created at %1 除錯壓縮檔已建立於在 %1 @@ -2205,22 +2142,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required 透過密碼保護分享連結 - + Please enter a password for your link share: 請輸入分享連結密碼: - + Sharing error 分享發生錯誤 - + Could not retrieve or create the public link share. Error: %1 @@ -2545,7 +2482,7 @@ OCC::Logger - + Error 錯誤 @@ -2555,7 +2492,7 @@ <nobr>檔案 '%1'<br/>無法開啟與寫入<br/><br/>記錄 <b>無法</b> 被儲存</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>檔案 "%1" <br/>無法開啟供寫入。<br/><br/>記錄<b>無法</b>保存!</nobr> @@ -2563,33 +2500,33 @@ 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 取得更新 - + Update Failed 更新失敗 @@ -2604,17 +2541,17 @@ <p>%1 客戶端有新版本可用,但更新過程失敗。</p><p><b>%2</b> 已下載。 目前安裝的版本是 %3。如果您確認重新啟動和更新,您的電腦可能會重新啟動以完成安裝。</p> - + Ask again later 稍後再問 - + Restart and update 重新啟動並更新 - + Update manually 手動更新 @@ -2725,7 +2662,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> 伺服器回覆錯誤:<em>%1</em> @@ -2735,32 +2672,32 @@ 存取權杖進入點發生錯誤:<br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> 存取權杖進入點發生錯誤:<br><em>%1</em> - + Empty JSON from OAuth2 redirect 收到來自OAuth2重定向的空JSON - + 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> @@ -2830,12 +2767,12 @@ 無法下載更新。 請打開 <a href='%1'>%1</a> 以手動下載更新。 - + Could not download update. Please open %1 to download the update manually. 無法下載更新檔,請打開 %1 手動下載更新檔。 - + Could not check for new updates. 無法檢查是否有新更新檔。 @@ -2845,27 +2782,27 @@ 新版本 %1 已可以更新,請點選 <a href='%2'>%2</a> 以下載更新。 - + New %1 is available. Please open %2 to download the update. 新版本 %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 更新檢查 @@ -2893,14 +2830,14 @@ 連線中... - - + + Use &virtual files instead of downloading content immediately %1 使用虛擬檔案(&v),而不是立即下載內容 %1 - - + + (experimental) (實驗性) @@ -2925,49 +2862,49 @@ 剩餘空間:%1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows分區根目錄不支持將虛擬文件作為近端資料夾使用。請在硬盤驅動器號下選擇一個有效的子資料夾。 - + %1 folder "%2" is synced to local folder "%3" %1 資料夾 "%2" 與近端資料夾 "%3" 同步 - + Sync the folder "%1" 同步資料夾 "%1" - + Warning: The local folder is not empty. Pick a resolution! 警告:近端資料夾不為空。選擇一個解決方案! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 剩餘空間 - + Virtual files are not available for the selected folder 選擇的資料夾無法使用虛擬檔案 - + Local Sync Folder 近端同步資料夾 - - + + (%1) (%1) - + There isn't enough free space in the local folder! 近端資料夾沒有足夠的剩餘空間! @@ -3037,14 +2974,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3110,7 +3039,7 @@ 下一步(&N)> - + Server address does not seem to be valid 伺服器地址似乎無效 @@ -3120,7 +3049,7 @@ 連結無效 - + Could not load certificate. Maybe wrong password? 無法載入憑證。可能密碼錯誤? @@ -3218,54 +3147,54 @@ 正在Nextcloud上新增資料夾:%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 重新命名資料夾失敗 @@ -3275,12 +3204,12 @@ 無法移除與備份此資料夾,因為有其他的程式正在使用其中的資料夾或者檔案。請關閉使用中的資料夾或檔案並重試或者取消設定。 - + Cannot 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> @@ -3288,7 +3217,7 @@ OCC::OwncloudWizard - + Add %1 account 新增 %1 賬戶 @@ -3298,17 +3227,17 @@ %1連線精靈 - + Skip folders configuration 忽略資料夾設定資訊 - + Enable experimental feature? 啟用實驗性功能? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3325,12 +3254,12 @@ 這是一種新的實驗模式。如果您決定使用它,請報告出現的任何問題。 - + Enable experimental placeholder mode 啟用實驗性佔位符模式 - + Stay safe 維持穩定 @@ -3338,7 +3267,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL 不合法的JSON資訊從URL中回傳 @@ -3356,17 +3285,17 @@ 檔案的名稱包含尾隨空格,無法重命名,因為近端上已存在相同名稱的檔案。 - + 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. 此檔案系統不支援以「。」結尾的檔案名。 @@ -3381,57 +3310,57 @@ 此檔案系統不支援含 "%1" 字元的檔案名稱。 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - + The file name is a reserved name on this file system. 此檔案名已被此檔案系統保留所用。 - + Filename contains trailing spaces. 檔案名的結尾為空白符。 - + Filename is too long. 檔案名稱太長。 - + File/Folder is ignored because it's hidden. 檔案或資料夾被隱藏,因此跳過 - + Stat failed. 狀態失敗。 - + Conflict: Server version downloaded, local copy renamed and not uploaded. 抵觸:已下載伺服器版本,近端版本已更名但並未上傳。 - + The filename cannot be encoded on your file system. 您的檔案系統無法對此檔案名進行編碼。 - + The filename is blacklisted on the server. 伺服器已將此檔名列為黑名單。 - + File has extension reserved for virtual files. 檔案名包含為虛擬檔案保留的擴展名。 - + size 大小 @@ -3441,72 +3370,62 @@ 權限 - - server reported no %1 - 伺服器報告沒有 %1 - - - - permission - 權限 - - - + file id 檔案 ID - - Server reported no %1 + + server reported no %1 伺服器報告沒有 %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! 將某些檔案上傳到資料夾時發生衝突。那些有衝突的檔案將被清除! - + Conflict when uploading a folder. It's going to get cleared! 上傳資料夾時發生衝突。將被清除! - + Conflict when uploading a file. It's going to get removed! 上傳檔案時發生衝突。將被清除! - + 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 because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 不允許上傳此檔案,因為它在伺服器上是唯讀的,正在還原 - + Moved to invalid target, restoring 已移至無效目標,正在還原 - + Not allowed to remove, restoring 不允許刪除,還原 - + Error while reading the database 讀取數據庫時發生錯誤。 @@ -3516,7 +3435,7 @@ 伺服器讀取目錄 '%1' 時發生錯誤:%2 - + Server replied with an error while reading directory "%1" : %2 伺服器在讀取目錄「%1」回覆錯誤:%2 @@ -3529,17 +3448,12 @@ 寫入後設資料(metadata)時發生錯誤 - - Error updating metadata due to invalid modified time - 由於修改時間無效,更新元數據時出錯。 - - - + Error updating metadata: %1 更新元數據時出錯:%1 - + File is currently in use 檔案正在使用中 @@ -3552,44 +3466,44 @@ %1檔案因缺乏加密資訊而未能下載。 - + File %1 cannot be downloaded because encryption information is missing. %1檔案因缺乏加密資訊而未能下載。 - - + + File has changed since discovery 尋找的過程中檔案已經被更改 - - + + File %1 cannot be downloaded because of a local file name clash! 檔案 %1 無法被下載,因為近端端的檔案名稱已毀損! - + File %1 can not be downloaded because of a local file name clash! 檔案 %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. 檔案下載無法完成。 @@ -3599,12 +3513,12 @@ 已下載的檔案為空,儘管伺服器所宣佈的檔案大小為%1。 - + The downloaded file is empty, but the server said it should have been %1. 已下載的檔案為空,儘管伺服器說檔案大小為%1。 - + File %1 cannot be saved because of a local file name clash! 檔案 %1 無法存檔,因為近端端的檔案名稱已毀損! @@ -3614,18 +3528,12 @@ 寫入後設資料(metadata)時發生錯誤 - - - File %1 has invalid modified time reported by server. Do not save it. - 伺服器報告檔案 %1 的修改時間無效。 不要保存它。 - - - + Error updating metadata: %1 更新元數據時出錯:%1 - + The file %1 is currently in use 檔案 %1 正在使用中 @@ -3633,12 +3541,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 重新儲存失敗 %1 - + A file or folder was removed from a read only share, but restoring failed: %1 檔案或目錄已經從只供讀取的分享中被移除,但是復原失敗: %1 @@ -3712,12 +3620,12 @@ 檔案 %1 無法更名成 %2,因為近端端的檔案名稱已毀損 - + Error updating metadata: %1 更新元數據時出錯:%1 - + The file %1 is currently in use 檔案 %1 正在使用中 @@ -3728,12 +3636,12 @@ 寫入後設資料(metadata)時發生錯誤 - + Failed to rename file 重新命名檔案失敗 - + Error setting pin state 設置PIN狀態時出錯 @@ -3767,12 +3675,12 @@ 寫入後設資料(metadata)時發生錯誤 - + Error writing metadata to the database: %1 將詮釋資料寫入到資料庫時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 正在使用中 @@ -3790,22 +3698,22 @@ 從伺服器端回傳錯誤的 HTTP 代碼, 預期是 201, 但是接收到的是 "%1 %2"。 - + Error updating metadata: %1 更新元數據時出錯:%1 - + The file %1 is currently in use 檔案 %1 正在使用中 - + Error setting pin state 設置PIN狀態時出錯 - + Error writing metadata to the database 寫入後設資料(metadata)時發生錯誤 @@ -3813,46 +3721,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - 檔案 %1 的修改時間無效。 請勿上傳到伺服器。 - - - + Failed to upload encrypted file. 上傳加密檔案失敗。 - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists %1檔案未能上傳,因為另一個同名(僅大小寫不同)的檔案已經存在 - - + + Upload of %1 exceeds the quota for the folder 上傳%1將會超過資料夾的大小限制 - + File Removed (start upload) %1 移除檔案(開始上傳)%1 - + Local file changed during syncing. It will be resumed. 近端端的檔案在同步的過程中被更改,此檔案將會被還原。 - + Local file changed during sync. 近端端的檔案在同步過程中被更改。 - + Failed to unlock encrypted folder. 無法解鎖加密資料夾。 @@ -3862,12 +3762,12 @@ 寫入後設資料(metadata)時發生錯誤 - + Error updating metadata: %1 更新元數據時出錯:%1 - + The file %1 is currently in use 檔案 %1 正在使用中 @@ -3875,32 +3775,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. 近端端的檔案在同步過程中被刪除。 - + Local file changed during sync. 近端端的檔案在同步過程中被更改。 - + Poll URL missing 遺失投票網址 - + Unexpected return code from server (%1) 伺服器回傳未知的錯誤碼(%1) - + Missing File ID from server 伺服器遺失檔案ID - + Missing ETag from server 伺服器遺失 ETag @@ -3908,22 +3808,22 @@ OCC::PropagateUploadFileV1 - + 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不存在) @@ -4001,7 +3901,7 @@ OCC::ServerNotificationHandler - + Dismiss 撤銷 @@ -4171,17 +4071,17 @@ 密碼保護 - + Allow editing 允許編輯 - + View only 僅檢視 - + Allow upload and editing 允許上傳及編輯 @@ -4191,7 +4091,7 @@ 有效期至 - + File drop (upload only) 拖曳檔案(僅供上傳) @@ -4201,32 +4101,32 @@ 取消分享 - + Link name 連結名稱 - + Note to recipient 給接收者的訊息 - + Password protect 密碼防護 - + Set expiration date 設定到期日 - + Delete link 刪除連結 - + Add another link 新增連結 @@ -4236,27 +4136,27 @@ 刪除分享連結 - + Confirm Link Share Deletion 確認移除連結分享 - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>您確定要移除公共連結分享<i>%1</i>嗎?</p><p>注意:此操作不可復原。</p> - + Delete 刪除 - + Cancel 取消 - + Public link 公共連結 @@ -4269,12 +4169,12 @@ 分享給適用者或群組 - + Search globally 全域搜尋 - + Copy link 複製連結 @@ -4284,22 +4184,22 @@ '%1' 沒有結果 - + No results for "%1" "%1" 沒有結果 - + Password for share required 透過密碼保護分享連結 - + Please enter a password for your email share: 請輸入分享電郵地址密碼: - + I shared something with you 我與你分享了檔案 @@ -4337,42 +4237,42 @@ 到期日: - + Can reshare 可以二次分享 - + Note to recipient 給接收者的訊息 - + Set expiration date 設定屆滿日期 - + Unshare 取消分享 - + Can create 可以新增 - + Can change 可以更改 - + Can delete 可以移除 - + Password protect 密碼防護 @@ -4389,23 +4289,23 @@ OCC::SocketApi - + Context menu share 分享內容選單 - + Select new location … 選擇新位址... - + I shared something with you 我與你分享了檔案 - - + + Share options 分享選項 @@ -4421,73 +4321,73 @@ 活動紀錄 - + Copy private link to clipboard 將私用連結複製至剪貼板 - + Send private link by email … 用電子郵件發送私人連結 - + Resharing this file is not allowed 此檔案不允許二次分享 - + Resharing this folder is not allowed 不允許重新分享此資料夾 - - + + Copy public link 複製公共連結 - + Copy internal link 複製內部連結 - + Edit 編輯 - + Open in browser 用瀏覽器打開 - + Resolve conflict … 解決抵觸 ... - + Move and rename … 移動並重新命名... - + Move, rename and upload … 移動、重新命名並上傳... - + Delete local changes 刪除近端變更 - + Move and upload … 移動並上傳... - + Delete 刪除 @@ -4633,77 +4533,77 @@ 信任此憑證 - + Untrusted Certificate 不信任的憑證 - + Cannot connect securely to <i>%1</i>: 無法安全的連線到 <i>%1</i>: Additional errors: - 附加錯誤: + - + with Certificate %1 與憑證 %1 - - - + + + &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 組織:%1 - - + + Unit: %1 單位:%1 - - + + Country: %1 國家:%1 - + Fingerprint (SHA1): <tt>%1</tt> 指紋(SHA1):&lt;tt&gt;%1&lt;/tt&gt; - + Fingerprint (SHA-256): <tt>%1</tt> SHA-256 數位指紋:<tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> SHA-512 數位指紋:<tt>%1</tt> - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 到期日:%1 - + Issuer: %1 簽發者:%1 @@ -4796,33 +4696,33 @@ 發生內部錯誤,錯誤代碼 %1。 - + %1 (skipped due to earlier error, trying again in %2) %1(因先前錯誤而跳過,%2後重試) - + Could not update file: %1 無法更新檔案:%1 - + Could not update virtual file metadata: %1 無法更新虛擬文件元數據:%1 - + Unresolved conflict. 未解決的抵觸。 - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Aborted 已放棄 @@ -4899,16 +4799,16 @@ 此檔案系統不支援以 "." 結尾的檔案名。 + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + 無法開啟或新增近端同步數據庫。請確保您有寫入同步資料夾的權限。 + + File names containing the character '%1' are not supported on this file system. 此檔案系統不支援含「%1」字符的檔案名。 - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - 無法開啟或新增近端同步數據庫。請確保您有寫入同步資料夾的權限。 - - The file name is a reserved name on this file system. 此檔案名已被此檔案系統保留所用。 @@ -4929,7 +4829,7 @@ 檔案或資料夾被隱藏,因此跳過 - + Using virtual files with suffix, but suffix is not set 使用帶後綴的虛擬文件,但未設置後綴 @@ -4944,7 +4844,7 @@ 您的檔案系統無法對此檔案名進行編碼。 - + Unable to read the blacklist from the local database 無法從近端數據庫讀取黑名單。 @@ -4959,17 +4859,17 @@ 狀態失敗。 + + Unable to read from the sync journal. + 無法讀取同步日誌。 + + Filename encoding is not valid 檔案名稱編碼是無效的 - - Unable to read from the sync journal. - 無法讀取同步日誌。 - - - + Cannot open the sync journal 同步處理日誌無法開啟 @@ -4979,22 +4879,22 @@ 無效的字元,請您重新命名 "%1" + + Synchronization will resume shortly. + 同步會很快恢復 + + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - Synchronization will resume shortly. - 同步會很快恢復 - - - + 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. 伺服器上的剩餘空間不足以容納某些要上載的檔案。 @@ -5063,49 +4963,49 @@ OCC::Systray - + Add account 新增賬戶 - + Open main dialog 開啟主對話方塊 + - Pause sync 暫停同步 - - + + Resume sync 繼續同步 - + Settings 設定 - + Exit %1 離開 %1 - + Pause sync for all 暫停所有同步 - + Resume sync for all 恢復所有同步 - + %1: %2 %1:%2 @@ -5113,24 +5013,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 桌面版用戶端</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>版本為%1。詳細資訊請<a href='%2'>點擊此處</a>。</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>使用虛擬文件插件:%1</small></p> - + <p>This release was supplied by %1</p> 此版本由%1發佈。 @@ -5138,22 +5038,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. 無法擷取提供者。 - + Failed to fetch search providers for '%1'. Error: %2 無法擷取 “%1” 的搜尋提供者。 錯誤:%2 - + Search has failed for '%2'. 搜尋 “%2” 失敗。 - + Search has failed for '%1'. Error: %2 搜尋 “%1” 失敗。 錯誤:%2 @@ -5161,32 +5061,32 @@ OCC::User - + Retry all uploads 重試所有上傳 - + Synced %1 已同步 %1 - + You renamed %1 您已將 %1 重新命名 - + You deleted %1 您刪除了 %1 - + You created %1 您新增了 %1 - + You changed %1 您改變了 %1 @@ -5194,22 +5094,22 @@ OCC::UserModel - + 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 移除連線 - + Cancel 取消 @@ -5314,30 +5214,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 虛擬檔案系統功能需要一個 NTFS 檔案系統,%1 正在使用 %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - 由於修改時間無效,更新元數據時出錯。 - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - 由於修改時間無效,更新元數據時出錯。 - - - OCC::WebEnginePage @@ -5859,52 +5741,52 @@ 新資料夾 - + %n day ago %n天前 - + %n days ago %n天前 - + in the future 未來 - + %n hour ago %n小時前 - + %n hours ago %n小時前 - + now 現在 - + Less than a minute ago 不到一分鐘前 - + %n minute ago %n分鐘前 - + %n minutes ago %n分鐘前 - + Some time ago 前一段時間 @@ -5938,7 +5820,7 @@ SyncJournalDb - + Failed to connect database. 連接數據庫失敗。 @@ -5946,7 +5828,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … 搜索檔案、訊息、活動 ... @@ -5983,21 +5865,11 @@ 賬戶條目 - + Switch to account 切換到帳號 - - Current user status is online - 目前用戶狀態為在線 - - - - Current user status is do not disturb - 目前用戶狀態為請勿打擾 - - Account connected 賬戶已連結 @@ -6008,7 +5880,17 @@ 未連接到賬戶 - + + Current user status is online + 目前用戶狀態為在線 + + + + Current user status is do not disturb + 目前用戶狀態為請勿打擾 + + + Account actions 賬戶操作 @@ -6018,24 +5900,24 @@ 移除帳號 - + Set status 設置狀態 - - + + Log out 登出 - - + + Log in 登入 - + Remove account 移除帳號 @@ -6096,57 +5978,57 @@ 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 @@ -6154,7 +6036,7 @@ ValidateChecksumHeader - + The checksum header is malformed. 檢查碼異常。 @@ -6187,64 +6069,64 @@ Window - + Nextcloud desktop main dialog Nextcloud 桌面版主對話框 - + Current account 目前賬戶 - - + + Resume sync for all 恢復所有同步 - - + + Pause sync for all 暫停所有同步 - + Set user status 設置用戶狀態 - + Add account 新增賬戶 - + Add new account 新增帳號 - + Settings 設定 - + Exit 離開 - + Current user avatar 當前用戶頭像 - + Current user status is online 目前用戶狀態為在線 - + Current user status is do not disturb 目前用戶狀態為請勿打擾 @@ -6254,32 +6136,32 @@ 分享 %1 - + Account switcher and settings menu 帳戶切換器和設置選項單 - + Connected 已連線 - + Disconnected 已經離線 - + Open local folder of current account 打開當前賬戶的近端資料夾 - + Open Nextcloud Talk in browser 瀏覽器中開啟 Nextclould Talk - + More apps 更多應用程式 @@ -6289,7 +6171,7 @@ 應用程式選單 - + Open %1 in browser 瀏覽器中開啟 %1 @@ -6309,7 +6191,7 @@ 開啟分享對話方塊 - + Unified search results list 統一搜索結果列表 @@ -6320,7 +6202,7 @@ 顯示更多操作 - + %1 - File activity %1 - 檔案活動紀錄 @@ -6328,7 +6210,7 @@ main.cpp - + System Tray not available 系統常駐程式無法使用 @@ -6338,7 +6220,7 @@ %1需要可運作的系統常駐程式區。若您正在執行XFCE,請參考 <a href="http://docs。xfce。org/xfce/xfce4-panel/systray">這份教學</a>。若非如此則請安裝一個系統常駐的應用程式,如'trayer',並再度嘗試。 - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1需要可運作的系統常駐程式區。若您正在執行XFCE,請參考 <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">這份教學</a>。若非如此則請安裝一個系統常駐的應用程式,如 "trayer",並再度嘗試。 @@ -6346,7 +6228,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_TW.ts nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_TW.ts --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/translations/client_zh_TW.ts 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/translations/client_zh_TW.ts 2022-01-03 12:25:12.000000000 +0000 @@ -1,4 +1,4 @@ - + ActivityActionButton @@ -10,23 +10,23 @@ ActivityItem - + Open %1 locally 在本機開啟 %1 - + Open share dialog 開啟分享對話方塊 - + Share %1 分享 %1 - - + + Show more actions 顯示更多動作 @@ -39,7 +39,7 @@ ActivityList - + Activity list 事件清單 @@ -255,17 +255,17 @@ OCC::AbstractNetworkJob - + Connection timed out 連線逾時 - + Unknown error: network reply was deleted 未知錯誤:網路回覆被刪除 - + Server replied "%1 %2" to "%3 %4" 伺服器回覆「%1 %2」到「%3 %4」 @@ -286,12 +286,12 @@ OCC::AccountManager - + End to end encryption mnemonic 端到端加密助記碼 - + To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. Please note these down and keep them safe. They will be needed to add other devices to your account (like your mobile phone or laptop). 為了保護您的身份,我們將用含 12 個單詞的助記碼進行加密。請將這些單詞記在一個安全的地方。要將其他裝置(如手機或筆記型電腦)加入您的帳號中,需用到此助記碼。 @@ -305,9 +305,9 @@ - - - + + + Cancel 取消 @@ -495,52 +495,52 @@ 移除資料夾同步連線 - + Disable virtual file support … 停用虛擬檔案支援…… - + Enable virtual file support %1 … 啟用虛擬檔案支援 %1…… - + (experimental) (實驗性) - + Folder creation failed 資料夾建立失敗 - + <p>Could not create local folder <i>%1</i>.</p> <p>無法建立本機資料夾<i>%1</i>。</p> - + Confirm Folder Sync Connection Removal 確認移除資料夾同步連線 - + <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> - + Remove Folder Sync Connection 移除資料夾同步連線 - + Disable virtual file support? 停用虛擬檔案支援? - + This action will disable virtual file support. As a consequence contents of folders that are currently marked as "available online only" will be downloaded. The only advantage of disabling virtual file support is that the selective sync feature will become available again. @@ -553,37 +553,37 @@ 此動作將會中止任何目前正在執行的同步。 - + Disable support 停用支援 - + Sync Running 正在執行同步 - + The syncing operation is running.<br/>Do you want to terminate it? 正在執行同步動作。<br/>您真的想要中斷嗎? - + %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. 目前無法查詢儲存空間使用資訊。 - + %1 in use %1 正在使用 @@ -603,87 +603,87 @@ 登入 - + %1 as %2 %1 作為 %2 - + The server version %1 is 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. 在 %2 沒有連線到 %1。 - + Server configuration error: %1 at %2. 伺服器設定錯誤:%1 於 %2。 - + No %1 connection configured. 未設定 %1 連線。 - + 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 移除連線 @@ -691,47 +691,47 @@ OCC::AccountState - + Signed out 已登出 - + Disconnected 已斷線 - + Connected 已連線 - + Service unavailable 服務無法使用 - + Maintenance mode 維護模式 - + Network error 網路錯誤 - + Configuration error 設定錯誤 - + Asking Credentials 正在詢問憑證 - + Unknown account state 未知的帳號狀態 @@ -739,12 +739,12 @@ OCC::ActivityListModel - + Files from the ignore list as well as symbolic links are not synced. 忽略列表中的檔案與符號連結不會同步。 - + For more activities please open the Activity app. 請開啟活動應用程式以檢視更多活動。 @@ -805,42 +805,42 @@ OCC::Application - + Continuing will mean <b>deleting these settings</b>. 繼續代表了<b>刪除這些設定</b>。 - + Continuing will mean <b>ignoring these settings</b>. 繼續代表了<b>忽略這些設定</b>。 - + Some settings were configured in newer versions of this client and use features that are not available in this version.<br><br>%1<br><br>The current configuration file was already backed up to <i>%2</i>. 部份設定是在此客戶端的較新版本中設定的,且使用了此版本不提供的功能。<br><br>%1<br><br>目前的設定檔已備份至 <i>%2</i>。 - + Quit 離開 - + Continue 繼續 - + Error accessing the configuration file 存取設定檔時發生錯誤 - + There was an error while accessing the configuration file at %1. Please make sure the file can be accessed by your user. 存取位於 %1 的設定檔時發生錯誤。請確保您的使用者可以存取該檔案。 - + Quit %1 離開 %1 @@ -874,59 +874,9 @@ - OCC::BulkPropagatorJob - - - File %1 cannot be uploaded because another file with the same name, differing only in case, exists - 無法上傳 %1 檔案,因為另一個僅有大小寫不同的相同名稱檔案已存在 - - - - - File %1 has invalid modified time. Do not upload to the server. - 檔案 %1 的修改時間無效。不要上傳到伺服器。 - - - - File Removed (start upload) %1 - 已移除檔案(開始上傳)%1 - - - - Local file changed during syncing. It will be resumed. - 本機檔案在同步的過程中被修改。其將會被復原。 - - - - - Local file changed during sync. - 本機檔案在同步的過程中被修改。 - - - - Error updating metadata: %1 - 更新詮釋資料時發生錯誤:%1 - - - - The file %1 is currently in use - 檔案 %1 目前使用中 - - - - The local file was removed during sync. - 本機檔案在同步的過程中被移除。 - - - - ; Restoration Failed: %1 - ;復原失敗:%1 - - - OCC::CleanupPollsJob - + Error writing metadata to the database 將詮釋資料寫入到資料庫時發生錯誤 @@ -934,12 +884,12 @@ OCC::ClientSideEncryption - + Please enter your end to end encryption passphrase:<br><br>User: %2<br>Account: %3<br> 請輸入您的端到端加密認證資訊:<br><br>使用者:%2<br>帳號:%3<br> - + Enter E2E passphrase 輸入端到端加密認證資訊 @@ -1105,19 +1055,6 @@ - OCC::DiscoveryPhase - - - Error while canceling delete of a file - 取消刪除檔案時發生錯誤 - - - - Error while canceling delete of %1 - 取消刪除 %1 時發生錯誤 - - - OCC::DiscoverySingleDirectoryJob @@ -1125,8 +1062,8 @@ 伺服器回報檔案遺失。 - - + + Server error: PROPFIND reply is not XML formatted! 伺服器錯誤:PROPFIND 回覆未使用 XML 格式! @@ -1134,27 +1071,27 @@ OCC::DiscoverySingleLocalDirectoryJob - + Error while opening directory %1 開啟目錄 %1 時發生錯誤 - + Directory not accessible on client, permission denied 客戶端無法存取目錄,權限被拒 - + Directory not found: %1 找不到目錄:%1 - + Filename encoding is not valid 檔案名稱編碼無效 - + Error while reading directory %1 讀取目錄 %1 時發生錯誤 @@ -1178,7 +1115,7 @@ - + Error returned from the server: <em>%1</em> 伺服器回傳錯誤訊息:<em>%1</em> @@ -1190,24 +1127,24 @@ - + 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 伺服器的回應並未包含所有預期的欄位 - + The returned server URL does not start with HTTPS despite the login URL started with HTTPS. Login will not be possible because this might be a security issue. Please contact your administrator. 雖然登入的 URL 是以 HTTPS 開頭,但回傳的 URL 不是。因為這可能是安全性問題,所以您無法登入。請聯絡您的管理員。 @@ -1368,41 +1305,41 @@ 同步活動 - + 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. 若要下載此項目,請前往設定選擇它。 - + The folder %1 was created but was excluded from synchronization previously. Data inside it will not be synchronized. 已建立 %1 資料夾,但先前已從同步中排除。因此其中的資料將不會被同步。 - + The file %1 was created but was excluded from synchronization previously. It will not be synchronized. 已建立 %1 檔案,但先前已從同步中排除。因此其中的資料將不會被同步。 - + Changes in synchronized folders could not be tracked reliably. This means that the synchronization client might not upload local changes immediately and will instead only scan for local changes and upload them occasionally (every two hours by default). @@ -1415,6 +1352,15 @@ %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」中的所有檔案都已刪除。這些刪除將會與您的伺服器同步,除非復原,否則這些檔案將不可用。 +您確定您想要與伺服器同步那些動作嗎? +如果這是意外,而且您決定保留您的檔案,它們將會自伺服器重新同步。 + + All files in the sync folder '%1' 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. @@ -1474,8 +1420,8 @@ 將本機檔案視為衝突檔案 - - All files in the sync folder '%1' folder were deleted on the server. + + 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 restore 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. @@ -1485,8 +1431,8 @@ 假如您決定移除這些檔案,除非您是檔案的所有者,否則您將無法讀取這些檔案。 - - 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. + + 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」中的所有檔案都已刪除。這些刪除將會與您的伺服器同步,除非復原,否則這些檔案將不可用。 @@ -1495,7 +1441,17 @@ - All files in the sync folder "%1" folder were deleted on the server. + Remove All Files? + 移除所有檔案? + + + + Remove all files + 移除所有檔案 + + + + 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 restore 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. @@ -1506,25 +1462,6 @@ - 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 保留檔案 @@ -1560,7 +1497,7 @@ OCC::FolderMan - + Could not reset folder state 無法重設資料夾狀態 @@ -1570,37 +1507,37 @@ 發現較舊的同步處理日誌「%1」,但無法移除。請確認沒有應用程式正在使用它。 - + 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. 正在執行同步。 @@ -1610,67 +1547,67 @@ 同步成功,但衝突未解決。 - + Sync finished with unresolved conflicts. 同步完成,但有未解決的衝突。 - + Last Sync was successful. 最後一次同步成功。 - + Setup Error. 安裝失敗。 - + User Abort. 使用者中斷。 - + Sync is paused. 同步已暫停。 - + %1 (Sync is paused) %1(同步已暫停) - + No valid folder selected! 未選取有效的資料夾! - + The selected path does not exist! 所選的路徑不存在! - + The selected path is not a folder! 所選的路徑並非資料夾! - + You have no permission to write to the selected 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 是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! - + There is already a sync from the server to this local folder. Please pick another local folder! 此本機資料夾已設定為從伺服器同步。請挑選其他本機資料夾! @@ -1882,12 +1819,12 @@ OCC::FolderWizard - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Add Sync Connection 新增同步連線 @@ -1928,42 +1865,42 @@ 請輸入要在「%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 <i>%1</i>, which is a subfolder of <i>%2</i>. 您已經同步了 <i>%1</i>,這個資料夾是 <i>%2</i> 的下層資料夾。 @@ -1971,24 +1908,24 @@ OCC::FolderWizardSelectiveSync - - + + Use virtual files instead of downloading content immediately %1 使用虛擬檔案而非立刻下載內容 %1 - - + + (experimental) (實驗性) - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows 分割區跟目錄不支援將虛擬檔案作為本機資料夾使用。請在磁碟區代號下選擇有效的子資料夾。 - + Virtual files are not available for the selected folder 選取的資料夾無法使用虛擬檔案 @@ -2009,27 +1946,27 @@ 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。將在下一次重新嘗試取得。 - + We received an unexpected download Content-Length. 我們收到了非預期的下載 Content-Length。 - + Server returned wrong content-range 伺服器回傳了錯誤的內容長度 - + Connection Timeout 連線逾時 @@ -2149,22 +2086,22 @@ 建立除錯壓縮檔…… - + Server notifications that require attention. 需要注意的伺服器通知。 - + You cannot disable autostart because system-wide autostart is enabled. 您無法停用自動啟動,因為已啟用系統層面的自動啟動。 - + Change update channel? 變更更新頻道? - + The update channel determines which client updates will be offered for installation. The "stable" channel contains only upgrades that are considered reliable, while the versions in the "beta" channel may contain newer features and bugfixes, but have not yet been tested thoroughly. Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version. @@ -2173,32 +2110,32 @@ 請注意,這只是選取從哪個軟體庫中取得升級,無法降級,因此通常無法立刻從測試頻道回到穩定頻道,這代表了要等到比目前測試版本還新的穩定版本才會切換成功。 - + Change update channel 變更更新頻道 - + Cancel 取消 - + Create Debug Archive 建立除錯壓縮檔 - + Zip Archives ZIP 壓縮檔 - + Debug Archive Created 已建立除錯壓縮檔 - + Debug archive is created at %1 除錯壓縮檔已在 %1 建立 @@ -2206,22 +2143,22 @@ OCC::GetOrCreatePublicLinkShare - + Password for share required 透過密碼保護分享連結 - + Please enter a password for your link share: 請輸入分享連結密碼: - + Sharing error 分享發生錯誤 - + Could not retrieve or create the public link share. Error: %1 @@ -2546,7 +2483,7 @@ OCC::Logger - + Error 錯誤 @@ -2556,7 +2493,7 @@ <nobr>檔案「%1」<br/>無法開啟與寫入。<br/><br/>紀錄<b>無法</b>被儲存!</nobr> - + <nobr>File "%1"<br/>cannot be opened for writing.<br/><br/>The log output <b>cannot</b> be saved!</nobr> <nobr>檔案「%1」<br/>無法開啟供寫入。<br/><br/>記錄<b>無法</b>被儲存!</nobr> @@ -2564,33 +2501,33 @@ 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 取得更新 - + Update Failed 更新失敗 @@ -2605,17 +2542,17 @@ <p>%1 客戶端有新版本可用,但更新過程失敗。</p><p><b>%2</b> 已下載。 目前安裝的版本是 %3。如果您確認重新啟動和更新,您的電腦可能會重新啟動以完成安裝。</p> - + Ask again later 稍後再問 - + Restart and update 重新啟動並更新 - + Update manually 手動更新 @@ -2726,7 +2663,7 @@ OCC::OAuth - + Error returned from the server: <em>%1</em> 伺服器回傳錯誤:<em>%1</em> @@ -2736,32 +2673,32 @@ 存取權杖進入點發生錯誤:<br><em>%1</em> - + There was an error accessing the "token" endpoint: <br><em>%1</em> 存取「權杖」進入點發生錯誤:<br><em>%1</em> - + Empty JSON from OAuth2 redirect 來自 OAuth2 重新導向的空 JSON - + 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> @@ -2831,12 +2768,12 @@ 無法下載更新。請開啟 <a href='%1'>%1</a> 手動下載更新。 - + Could not download update. Please open %1 to download the update manually. 無法下載更新。請開啟 %1 以手動下載更新。 - + Could not check for new updates. 無法檢查新更新。 @@ -2846,27 +2783,27 @@ 新版本 %1 可更新。請開啟 <a href='%2'>%2</a> 下載更新。 - + New %1 is available. Please open %2 to download the update. 新版本 %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 更新檢查 @@ -2894,14 +2831,14 @@ 連線…… - - + + Use &virtual files instead of downloading content immediately %1 使用虛擬檔案取代立即下載內容 %1 (&V) - - + + (experimental) (實驗性) @@ -2926,49 +2863,49 @@ 剩餘空間:%1 - + Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter. Windows 分割區跟目錄不支援將虛擬檔案作為本機資料夾使用。請在磁碟區代號下選擇有效的子資料夾。 - + %1 folder "%2" is synced to local folder "%3" %1 資料夾「%2」與本機資料夾「%3」同步 - + Sync the folder "%1" 同步資料夾「%1」 - + Warning: The local folder is not empty. Pick a resolution! 警告:本機的資料夾不是空的。請選擇解決方案! - + %1 free space %1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB %1 剩餘空間 - + Virtual files are not available for the selected folder 選取的資料夾無法使用虛擬檔案 - + Local Sync Folder 本機同步資料夾 - - + + (%1) (%1) - + There isn't enough free space in the local folder! 本機資料夾沒有足夠的剩餘空間! @@ -3038,14 +2975,6 @@ - OCC::OwncloudPropagator - - - Impossible to get modification time for file in conflict %1) - - - - OCC::OwncloudSetupPage @@ -3060,7 +2989,7 @@ Keep your data secure and under your control - 保障您的資料安全,且由您掌控 + 保障您資料的安全,讓您的資料在您自己的掌控之下 @@ -3111,7 +3040,7 @@ 下一步 (&N) > - + Server address does not seem to be valid 似乎是無效的伺服器地址 @@ -3121,7 +3050,7 @@ 連結無效 - + Could not load certificate. Maybe wrong password? 無法載入憑證。可能密碼錯誤? @@ -3219,54 +3148,54 @@ 正在 Nextcloud 上建立資料夾:%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 重新命名資料夾失敗 @@ -3276,12 +3205,12 @@ 無法移除與備份此資料夾,因為有其他的程式正在使用其中的資料夾或者檔案。請關閉使用中的資料夾或檔案並重試或者取消設定。 - + Cannot 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> @@ -3289,7 +3218,7 @@ OCC::OwncloudWizard - + Add %1 account 新增 %1 帳號 @@ -3299,17 +3228,17 @@ %1 連線精靈 - + Skip folders configuration 忽略資料夾設定資訊 - + Enable experimental feature? 啟用實驗性功能? - + When the "virtual files" mode is enabled no files will be downloaded initially. Instead, a tiny "%1" file will be created for each file that exists on the server. The contents can be downloaded by running these files or by using their context menu. The virtual files mode is mutually exclusive with selective sync. Currently unselected folders will be translated to online-only folders and your selective sync settings will be reset. @@ -3326,12 +3255,12 @@ 這是一種新的、實驗性的模式。如果您決定要使用它,請回報出現的任何問題。 - + Enable experimental placeholder mode 啟用實驗性的佔位模式 - + Stay safe 注意安全 @@ -3339,7 +3268,7 @@ OCC::PollJob - + Invalid JSON reply from the poll URL 來自輪詢 URL 的無效 JSON 回覆 @@ -3357,17 +3286,17 @@ 檔案名稱尾端包含空格,且無法重新命名,因為本機已有相同名稱的檔案存在。 - + 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. 此檔案系統不支援以「.」結尾的檔案名。 @@ -3382,57 +3311,57 @@ 此檔案系統不支援包含「%1」字元的檔案名稱。 - + File name contains at least one invalid character 檔案名稱包含至少一個無效的字元 - + The file name is a reserved name on this file system. 此檔案名稱為檔案系統的保留名稱。 - + Filename contains trailing spaces. 檔案名稱的結尾為空格。 - + Filename is too long. 檔案名稱太長。 - + File/Folder is ignored because it's hidden. 因為檔案或資料夾被隱藏,因此被忽略。 - + Stat failed. 統計失敗。 - + Conflict: Server version downloaded, local copy renamed and not uploaded. 衝突:已下載伺服器的版本,本機版本已更名但並未上傳。 - + The filename cannot be encoded on your file system. 您的檔案系統無法對此檔案名進行編碼。 - + The filename is blacklisted on the server. 伺服器已將此檔名列為黑名單。 - + File has extension reserved for virtual files. 檔案有為虛擬檔案保留的副檔名。 - + size 大小 @@ -3442,72 +3371,62 @@ 權限 - - server reported no %1 - 伺服器回報沒有 %1 - - - - permission - 權限 - - - + file id 檔案 ID - - Server reported no %1 + + server reported no %1 伺服器回報沒有 %1 - + Conflict when uploading some files to a folder. Those, conflicted, are going to get cleared! 將某些檔案上傳到資料夾時發生錯誤。衝突的檔案將會被清除! - + Conflict when uploading a folder. It's going to get cleared! 上傳資料夾時發生衝突。將會被清除! - + Conflict when uploading a file. It's going to get removed! 上傳檔案時發生衝突。其將會被移除! - + 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 because you don't have permission to add files in that folder 不允許,因為您無權新增檔案到該資料夾 - + Not allowed to upload this file because it is read-only on the server, restoring 不允許上傳此檔案,因為這在伺服器上是唯讀,正在復原 - + Moved to invalid target, restoring 移動至無效目標,正在復原 - + Not allowed to remove, restoring 不允許刪除,正在復原 - + Error while reading the database 讀取資料庫時發生錯誤 @@ -3517,7 +3436,7 @@ 伺服器在讀取目錄「%1」回覆錯誤:%2 - + Server replied with an error while reading directory "%1" : %2 伺服器在讀取目錄「%1」回覆錯誤:%2 @@ -3530,17 +3449,12 @@ 將詮釋資料寫入到資料庫時發生錯誤 - - Error updating metadata due to invalid modified time - 因為修改時間無效,所以更新詮釋資料時發生錯誤 - - - + Error updating metadata: %1 更新詮釋資料時發生錯誤:%1 - + File is currently in use 檔案目前正在使用中 @@ -3553,44 +3467,44 @@ %1 檔案因為缺少加密資訊而無法下載。 - + File %1 cannot be downloaded because encryption information is missing. %1 檔案因為缺少加密資訊而無法下載。 - - + + File has changed since discovery 尋找的過程中檔案已經被更改 - - + + File %1 cannot be downloaded because of a local file name clash! 檔案 %1 無法被下載,因為本機檔案名稱有衝突! - + File %1 can not be downloaded because of a local file name clash! 檔案 %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. 檔案下載無法完成。 @@ -3600,12 +3514,12 @@ 儘管伺服器宣告其應為 %1,但下載的檔案為空。 - + The downloaded file is empty, but the server said it should have been %1. 已下載的檔案為空,但伺服器表示其應為 %1。 - + File %1 cannot be saved because of a local file name clash! 檔案 %1 無法儲存,因為本機檔案名稱有衝突! @@ -3615,18 +3529,12 @@ 將詮釋資料寫入到資料庫時發生錯誤 - - - File %1 has invalid modified time reported by server. Do not save it. - 伺服器回報檔案 %1 的修改時間無效。不要儲存。 - - - + Error updating metadata: %1 更新詮釋資料時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 目前正在使用中 @@ -3634,12 +3542,12 @@ OCC::PropagateItemJob - + ; Restoration Failed: %1 ;復原失敗:%1 - + A file or folder was removed from a read only share, but restoring failed: %1 檔案或資料夾已被從唯讀分享移除,但復原失敗:%1 @@ -3713,12 +3621,12 @@ 檔案 %1 無法重新命名為 %2,因為本機檔案名稱有衝突 - + Error updating metadata: %1 更新詮釋資料時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 目前正在使用中 @@ -3729,12 +3637,12 @@ 將詮釋資料寫入到資料庫時發生錯誤 - + Failed to rename file 重新命名檔案失敗 - + Error setting pin state 設定釘選狀態時發生錯誤 @@ -3768,12 +3676,12 @@ 將詮釋資料寫入到資料庫時發生錯誤 - + Error writing metadata to the database: %1 將詮釋資料寫入到資料庫時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 目前正在使用中 @@ -3791,22 +3699,22 @@ 伺服器回傳錯誤的 HTTP 代碼。預期為 201,但收到的是「%1 %2」。 - + Error updating metadata: %1 更新詮釋資料時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 目前正在使用中 - + Error setting pin state 設定釘選狀態時發生錯誤 - + Error writing metadata to the database 將詮釋資料寫入到資料庫時發生錯誤 @@ -3814,46 +3722,38 @@ OCC::PropagateUploadFileCommon - - - - - File %1 has invalid modified time. Do not upload to the server. - 檔案 %1 的修改時間無效。不要上傳到伺服器。 - - - + Failed to upload encrypted file. 上傳已加密的檔案失敗。 - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists 無法上傳 %1 檔案,因為另一個僅有大小寫不同的相同名稱檔案已存在 - - + + Upload of %1 exceeds the quota for the folder 上傳 %1 將會超過資料夾的大小限制 - + File Removed (start upload) %1 檔案已移除(開始上傳)%1 - + Local file changed during syncing. It will be resumed. 本機檔案在同步的過程中被修改。其將會被復原。 - + Local file changed during sync. 本機檔案在同步的過程中被修改。 - + Failed to unlock encrypted folder. 解鎖已加密的資料夾失敗。 @@ -3863,12 +3763,12 @@ 將詮釋資料寫入到資料庫時發生錯誤 - + Error updating metadata: %1 更新詮釋資料時發生錯誤:%1 - + The file %1 is currently in use 檔案 %1 目前正在使用中 @@ -3876,32 +3776,32 @@ OCC::PropagateUploadFileNG - + The local file was removed during sync. 本機檔案在同步的過程中被移除。 - + Local file changed during sync. 本機檔案在同步的過程中被修改。 - + Poll URL missing 缺少輪詢的超連結 - + Unexpected return code from server (%1) 伺服器回傳未知的錯誤碼 (%1) - + Missing File ID from server 伺服器遺失檔案 ID - + Missing ETag from server 伺服器遺失 ETag @@ -3909,22 +3809,22 @@ OCC::PropagateUploadFileV1 - + 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不存在) @@ -4002,7 +3902,7 @@ OCC::ServerNotificationHandler - + Dismiss 我已了解 @@ -4172,17 +4072,17 @@ 密碼保護 - + Allow editing 允許編輯 - + View only 僅檢視 - + Allow upload and editing 允許上傳及編輯 @@ -4192,7 +4092,7 @@ 到期日 - + File drop (upload only) 檔案投放(僅上傳) @@ -4202,32 +4102,32 @@ 取消分享 - + Link name 連結名稱 - + Note to recipient 給收件者的訊息 - + Password protect 密碼防護 - + Set expiration date 設定到期日 - + Delete link 刪除連結 - + Add another link 新增其他連結 @@ -4237,27 +4137,27 @@ 刪除分享連結 - + Confirm Link Share Deletion 確認移除連結分享 - + <p>Do you really want to delete the public link share <i>%1</i>?</p><p>Note: This action cannot be undone.</p> <p>您確定要移除公開連結分享 <i>%1</i> 嗎?</p><p>注意:此動作無法復原。</p> - + Delete 刪除 - + Cancel 取消 - + Public link 公開連結 @@ -4270,12 +4170,12 @@ 與使用者或群組分享…… - + Search globally 全域搜尋 - + Copy link 複製連結 @@ -4285,22 +4185,22 @@ 「%1」沒有結果 - + No results for "%1" 「%1」沒有結果 - + Password for share required 透過密碼保護分享連結 - + Please enter a password for your email share: 請輸入您電子郵件分享的密碼: - + I shared something with you 我與您分享了一些東西 @@ -4338,42 +4238,42 @@ 到期: - + Can reshare 可以二次分享 - + Note to recipient 給收件人的說明 - + Set expiration date 設定到期日 - + Unshare 取消分享 - + Can create 可以新增 - + Can change 可以更改 - + Can delete 可以刪除 - + Password protect 密碼保護 @@ -4390,23 +4290,23 @@ OCC::SocketApi - + Context menu share 分享內容選單 - + Select new location … 選取新位置…… - + I shared something with you 我與您分享了一些東西 - - + + Share options 分享選項 @@ -4422,73 +4322,73 @@ 事件 - + Copy private link to clipboard 將私人連結複製到剪貼簿 - + Send private link by email … 用電子郵件發送私人連結…… - + Resharing this file is not allowed 此檔案不允許二次分享 - + Resharing this folder is not allowed 此資料夾不允許二次分享 - - + + Copy public link 複製公開連結 - + Copy internal link 複製內部連結 - + Edit 編輯 - + Open in browser 用瀏覽器打開 - + Resolve conflict … 解決衝突…… - + Move and rename … 移動並重新命名…… - + Move, rename and upload … 移動、重新命名並上傳…… - + Delete local changes 刪除本機變更 - + Move and upload … 移動並上傳…… - + Delete 刪除 @@ -4634,77 +4534,77 @@ 信任此憑證 - + Untrusted Certificate 不信任的憑證 - + Cannot connect securely to <i>%1</i>: 無法安全地連線到 <i>%1</i>: Additional errors: - 其他錯誤: + - + with Certificate %1 與憑證 %1 - - - + + + &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 組織:%1 - - + + Unit: %1 單位:%1 - - + + Country: %1 國家:%1 - + Fingerprint (SHA1): <tt>%1</tt> 指紋 (SHA1):<tt>%1</tt> - + Fingerprint (SHA-256): <tt>%1</tt> 指紋 (SHA-256):<tt>%1</tt> - + Fingerprint (SHA-512): <tt>%1</tt> 指紋 (SHA-512):<tt>%1</tt> - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 到期日:%1 - + Issuer: %1 簽發者:%1 @@ -4797,33 +4697,33 @@ 發生內部錯誤,錯誤代碼 %1。 - + %1 (skipped due to earlier error, trying again in %2) %1(因先前錯誤而跳過,%2 後重試) - + Could not update file: %1 無法更新檔案:%1 - + Could not update virtual file metadata: %1 無法更新虛擬檔案詮釋資料:%1 - + Unresolved conflict. 未解決的衝突。 - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Aborted 已中止 @@ -4900,16 +4800,16 @@ 此檔案系統不支援以「.」結尾的檔案名稱。 + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + 無法開啟或建立本機同步資料庫。請確保您有寫入同步資料夾的權限。 + + File names containing the character '%1' are not supported on this file system. 此檔案系統不支援包含「%1」字元的檔案名稱。 - - Unable to open or create the local sync database. Make sure you have write access in the sync folder. - 無法開啟或建立本機同步資料庫。請確保您有寫入同步資料夾的權限。 - - The file name is a reserved name on this file system. 此檔案名稱為檔案系統的保留名稱。 @@ -4930,7 +4830,7 @@ 因為檔案或資料夾被隱藏,因此被忽略。 - + Using virtual files with suffix, but suffix is not set 正在使用有後綴的虛擬檔案,但未設定後綴 @@ -4945,7 +4845,7 @@ 您的檔案系統無法對此檔案名進行編碼。 - + Unable to read the blacklist from the local database 無法從本機資料庫讀取黑名單 @@ -4960,17 +4860,17 @@ 統計失敗。 + + Unable to read from the sync journal. + 無法讀取同步日誌。 + + Filename encoding is not valid 檔案名稱編碼無效 - - Unable to read from the sync journal. - 無法讀取同步日誌。 - - - + Cannot open the sync journal 無法開啟同步日誌 @@ -4980,22 +4880,22 @@ 無效的字元,請重新命名為「%1」 + + Synchronization will resume shortly. + 同步會很快恢復 + + File name contains at least one invalid character 檔案名稱包含至少一個無效的字元 - - Synchronization will resume shortly. - 同步會很快恢復 - - - + 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. 伺服器上的剩餘空間不足以容納某些要上傳的檔案。 @@ -5064,49 +4964,49 @@ OCC::Systray - + Add account 新增帳號 - + Open main dialog 開啟主對話框 + - Pause sync 暫停同步 - - + + Resume sync 繼續同步 - + Settings 設定 - + Exit %1 離開 %1 - + Pause sync for all 暫停所有同步 - + Resume sync for all 恢復所有同步 - + %1: %2 %1:%2 @@ -5114,24 +5014,24 @@ OCC::Theme - + <p>%1 Desktop Client</p> Example text: "<p>Nextcloud Desktop Client</p>" (%1 is the application name) <p>%1 桌面版客戶端</p> - - + + <p>Version %1. For more information please click <a href='%2'>here</a>.</p> <p>版本為 %1。詳細資訊請點擊<a href='%2'>此處</a>。</p> - + <p><small>Using virtual files plugin: %1</small></p> <p><small>正在使用虛擬檔案外掛程式:%1</small></p> - + <p>This release was supplied by %1</p> <p>此版本由 %1 提供</p> @@ -5139,22 +5039,22 @@ OCC::UnifiedSearchResultsListModel - + Failed to fetch providers. 擷取提供者失敗。 - + Failed to fetch search providers for '%1'. Error: %2 擷取「%1」的搜尋提供者失敗。錯誤:%2 - + Search has failed for '%2'. 搜尋「%2」失敗。 - + Search has failed for '%1'. Error: %2 搜尋「%1」失敗。錯誤:%2 @@ -5162,32 +5062,32 @@ OCC::User - + Retry all uploads 重試所有上傳 - + Synced %1 已同步 %1 - + You renamed %1 您重新命名了 %1 - + You deleted %1 您刪除了 %1 - + You created %1 您建立了 %1 - + You changed %1 您變更了 %1 @@ -5195,22 +5095,22 @@ OCC::UserModel - + 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 移除連線 - + Cancel 取消 @@ -5315,30 +5215,12 @@ OCC::Vfs - + The Virtual filesystem feature requires a NTFS file system, %1 is using %2 虛擬檔案系統功能需要 NTFS 檔案系統,%1 正在使用 %2 - OCC::VfsSuffix - - - - Error updating metadata due to invalid modified time - 因為修改時間無效,所以更新詮釋資料時發生錯誤 - - - - OCC::VfsXAttr - - - - Error updating metadata due to invalid modified time - 因為修改時間無效,所以更新詮釋資料時發生錯誤 - - - OCC::WebEnginePage @@ -5390,7 +5272,7 @@ Keep your data secure and under your control - 保障您的資料安全,且由您掌控 + 確保您的資料安全且在您的掌控之下 @@ -5860,52 +5742,52 @@ 新資料夾 - + %n day ago %n天前 - + %n days ago %n天前 - + in the future 未來 - + %n hour ago %n小時前 - + %n hours ago %n小時前 - + now 現在 - + Less than a minute ago 不到一分鐘前 - + %n minute ago %n分鐘前 - + %n minutes ago %n分鐘前 - + Some time ago 前一段時間 @@ -5939,7 +5821,7 @@ SyncJournalDb - + Failed to connect database. 連結資料庫失敗。 @@ -5947,7 +5829,7 @@ UnifiedSearchInputContainer - + Search files, messages, events … 搜尋檔案、訊息、事件…… @@ -5984,21 +5866,11 @@ 帳號輸入 - + Switch to account 切換到帳號 - - Current user status is online - 目前的使用者狀態為在線上 - - - - Current user status is do not disturb - 目前的使用者狀態為請勿打擾 - - Account connected 帳號已連結 @@ -6009,7 +5881,17 @@ 未連線帳號 - + + Current user status is online + 目前的使用者狀態為在線上 + + + + Current user status is do not disturb + 目前的使用者狀態為請勿打擾 + + + Account actions 帳號動作 @@ -6019,24 +5901,24 @@ 移除帳號 - + Set status 設定狀態 - - + + Log out 登出 - - + + Log in 登入 - + Remove account 移除帳號 @@ -6097,57 +5979,57 @@ 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 @@ -6155,7 +6037,7 @@ ValidateChecksumHeader - + The checksum header is malformed. 檢查碼標頭異常。 @@ -6188,64 +6070,64 @@ Window - + Nextcloud desktop main dialog Nextcloud 桌面版主要對話框 - + Current account 目前帳號 - - + + Resume sync for all 恢復所有同步 - - + + Pause sync for all 暫停所有同步 - + Set user status 設定使用者狀態 - + Add account 新增帳號 - + Add new account 新增帳號 - + Settings 設定 - + Exit 離開 - + Current user avatar 目前使用者的大頭照 - + Current user status is online 目前的使用者狀態為在線上 - + Current user status is do not disturb 目前的使用者狀態為請勿打擾 @@ -6255,32 +6137,32 @@ 分享 %1 - + Account switcher and settings menu 帳號切換器與設定選單 - + Connected 已連線 - + Disconnected 已斷線 - + Open local folder of current account 開啟目前帳號的本機資料夾 - + Open Nextcloud Talk in browser 在瀏覽器中開啟 Nextcloud Talk - + More apps 更多應用程式 @@ -6290,7 +6172,7 @@ 應用程式選單 - + Open %1 in browser 在瀏覽器中開啟 %1 @@ -6310,7 +6192,7 @@ 開啟分享對話框 - + Unified search results list 統一搜尋結果清單 @@ -6321,7 +6203,7 @@ 顯示更多動作 - + %1 - File activity %1 - 檔案事件 @@ -6329,7 +6211,7 @@ main.cpp - + System Tray not available 系統匣不可用 @@ -6339,7 +6221,7 @@ %1 需要可運作的系統匣。如果您正在執行 XFCE,請遵循<a href="http://docs.xfce.org/xfce/xfce4-panel/systray">這些介紹</a>。否則請安裝如「trayer」等系統匣應用程式並再試一次。 - + %1 requires on a working system tray. If you are running XFCE, please follow <a href="http://docs.xfce.org/xfce/xfce4-panel/systray">these instructions</a>. Otherwise, please install a system tray application such as "trayer" and try again. %1 需要可運作的系統匣。如果您正在執行 XFCE,請遵循<a href="http://docs.xfce.org/xfce/xfce4-panel/systray">這些介紹</a>。否則請安裝如「trayer」等系統匣應用程式並再試一次。 @@ -6347,7 +6229,7 @@ nextcloudTheme::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 -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/cy_GB_translation nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/cy_GB_translation --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/cy_GB_translation 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/cy_GB_translation 2022-01-03 12:25:12.000000000 +0000 @@ -22,6 +22,5 @@ # Translations Icon[cy_GB]=@APPLICATION_ICON_NAME@ -Name[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith GenericName[cy_GB]=Cydweddu Ffolder diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/ko_translation nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/ko_translation --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/ko_translation 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/ko_translation 2022-01-03 12:25:12.000000000 +0000 @@ -22,6 +22,5 @@ # Translations Icon[ko]=@APPLICATION_ICON_NAME@ -Name[ko]=@APPLICATION_NAME@ 데스크탑 Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트 GenericName[ko]=폴더 동기화 diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/nb_translation nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/nb_translation --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/.tx/nextcloud.client-desktop/nb_translation 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/.tx/nextcloud.client-desktop/nb_translation 2022-01-03 12:25:12.000000000 +0000 @@ -22,6 +22,5 @@ # Translations Icon[nb_NO]=@APPLICATION_ICON_NAME@ -Name[nb_NO]=@APPLICATION_NAME@ skrivebord Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering GenericName[nb_NO]=Mappe synkroinisering diff -Nru nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/VERSION.cmake nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/VERSION.cmake --- nextcloud-desktop-3.4.1-20211227.062515.fa32c1001/VERSION.cmake 2021-12-27 06:24:54.000000000 +0000 +++ nextcloud-desktop-3.3.6-20220103.122531.6d3270dd2/VERSION.cmake 2022-01-03 12:25:12.000000000 +0000 @@ -1,6 +1,6 @@ set( MIRALL_VERSION_MAJOR 3 ) -set( MIRALL_VERSION_MINOR 4 ) -set( MIRALL_VERSION_PATCH 1 ) +set( MIRALL_VERSION_MINOR 3 ) +set( MIRALL_VERSION_PATCH 6 ) set( MIRALL_VERSION_YEAR 2021 ) set( MIRALL_SOVERSION 0 )