1
0
mirror of https://github.com/chylex/Nextcloud-Desktop.git synced 2025-05-12 05:34:09 +02:00

Merge branch 'master' into tuchfarber/fix_empty_file_error_wording

This commit is contained in:
Camila Ayres 2019-04-12 16:51:36 +02:00 committed by GitHub
commit 4d61a7c263
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
69 changed files with 10073 additions and 1383 deletions

View File

@ -1,228 +1,347 @@
clone:
git:
image: plugins/git
tags: true
depth: 1
kind: pipeline
name: qt-5.7
pipeline:
qt-5.7:
image: nextcloudci/client-5.7:client-5.7-4
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.7
qt-5.8:
image: nextcloudci/client-5.8:client-5.8-4
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.8
qt-5.9:
image: nextcloudci/client-5.9:client-5.9-5
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.9
qt-5.10:
image: nextcloudci/client-5.10:client-5.10-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt510/bin/qt510-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt510/bin/qt510-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.10
qt-5.11:
image: nextcloudci/client-5.11:client-5.11-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt511/bin/qt511-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt511/bin/qt511-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.11
steps:
- name: build and test
image: nextcloudci/client-5.7:client-5.7-4
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt57/bin/qt57-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
qt-5.11-clang:
image: nextcloudci/client-5.11:client-5.11-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt511/bin/qt511-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt511/bin/qt511-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
when:
matrix:
TESTS: qt-5.11-clang
---
kind: pipeline
name: qt-5.8
AppImage:
image: nextcloudci/client-5.11:client-5.11-3
commands:
- /bin/bash -c "./admin/linux/build-appimage.sh"
when:
matrix:
BUILD: AppImage
steps:
- name: build and test
image: nextcloudci/client-5.8:client-5.8-4
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt58/bin/qt58-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
Debian:
image: nextcloudci/client-debian-ci:client-debian-ci-2
commands:
- /bin/bash -c "./admin/linux/debian/drone-build.sh"
secrets: [ DEBIAN_SECRET_KEY, DEBIAN_SECRET_IV ]
when:
matrix:
BUILD: Debian
---
kind: pipeline
name: qt-5.9
documentation:
image: nextcloudci/documentation:documentation-5
commands:
- cd doc
- make html
when:
matrix:
TESTS: documentation
steps:
- name: build and test
image: nextcloudci/client-5.9:client-5.9-5
commands:
# Install QtKeyChain
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
source /opt/qt59/bin/qt59-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
matrix:
include:
- TESTS: qt-5.7
- TESTS: qt-5.8
- TESTS: qt-5.9
- TESTS: qt-5.10
- TESTS: qt-5.11
- TESTS: qt-5.11-clang
- BUILD: AppImage
- BUILD: Debian
- TESTS: documentation
---
kind: pipeline
name: qt-5.10
branches: [ master, 2.* ]
steps:
- name: build and test
image: nextcloudci/client-5.10:client-5.10-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt510/bin/qt510-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt510/bin/qt510-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: qt-5.11
steps:
- name: build and test
image: nextcloudci/client-5.11:client-5.11-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt511/bin/qt511-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt511/bin/qt511-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: qt-5.11-clang
steps:
- name: build and test
image: nextcloudci/client-5.11:client-5.11-3
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt511/bin/qt511-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt511/bin/qt511-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: qt-5.12
steps:
- name: build and test
image: nextcloudci/client-5.12:client-5.12-2
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt512/bin/qt512-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=gcc-7 &&
export CXX=g++-7 &&
source /opt/qt512/bin/qt512-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: qt-5.12-clang
steps:
- name: build and test
image: nextcloudci/client-5.12:client-5.12-2
commands:
# Install QtKeyChain
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt512/bin/qt512-env.sh &&
cd /tmp &&
git clone https://github.com/frankosterfeld/qtkeychain.git &&
cd qtkeychain &&
git checkout v0.9.1 &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
make install"
# Build client
- /bin/bash -c "
export CC=clang-6.0 &&
export CXX=clang++-6.0 &&
source /opt/qt512/bin/qt512-env.sh &&
mkdir build &&
cd build &&
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
make &&
useradd -m -s /bin/bash test &&
chown -R test:test . &&
su -c 'ctest --output-on-failure' test"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: AppImage
steps:
- name: build
image: nextcloudci/client-5.12:client-5.12-2
commands:
- /bin/bash -c "./admin/linux/build-appimage.sh"
trigger:
branch:
- master
event:
- pull_request
- push
---
kind: pipeline
name: Documentation
steps:
- name: build
image: nextcloudci/documentation:documentation-5
commands:
- cd doc
- make html
trigger:
branch:
- master
event:
- pull_request
- push

View File

@ -0,0 +1,201 @@
[Desktop Entry]
Categories=Utility;X-SuSE-SyncUtility;
Type=Application
Exec=@APPLICATION_EXECUTABLE@
Name=@APPLICATION_NAME@ desktop sync client
Comment=@APPLICATION_NAME@ desktop synchronization client
GenericName=Folder Sync
Icon=@APPLICATION_ICON_NAME@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
GenericName[ar]=مزامنة المجلد

View File

@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Icon[ca]=@APPLICATION_ICON_NAME@
Name[ca]=@APPLICATION_NAME@ client de sincro d'escriptori
Name[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
GenericName[ca]=Directori de sincronització

View File

@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
Icon[da]=@APPLICATION_ICON_NAME@
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
GenericName[da]=Mappe sync
GenericName[da]=Mappesynkronisering

View File

@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
# Translations
Icon[de_DE]=@APPLICATION_ICON_NAME@
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
GenericName[de_DE]=Synchronisationsordner
Icon[de]=@APPLICATION_ICON_NAME@
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
GenericName[de]=Synchronisationsordner

View File

@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
# Translations
Icon[hu_HU]=@APPLICATION_ICON_NAME@
Name[hu_HU]=@APPLICATION_NAME@ Asztali szinkronizáló kliens
Comment[hu_HU]=@APPLICATION_NAME@ Asztali szinkronizáló kliens
GenericName[hu_HU]=Mappa szinkronizálás
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
GenericName[hu_HU]=Mappaszinkronizálás

View File

@ -5,8 +5,8 @@ set -xe
mkdir /app
mkdir /build
#Set Qt-5.11
export QT_BASE_DIR=/opt/qt511
#Set Qt-5.12
export QT_BASE_DIR=/opt/qt512
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

View File

@ -37,6 +37,7 @@
<file>resources/confirm.svg</file>
<file>resources/copy.svg</file>
<file>resources/state-sync.svg</file>
<file>resources/add.png</file>
</qresource>
<qresource prefix="/"/>
</RCC>

BIN
resources/add.png Normal file

Binary file not shown.

After

(image error) Size: 16 KiB

View File

@ -41,6 +41,7 @@ macro(libcloudproviders_add_config _sources)
endmacro(libcloudproviders_add_config _sources)
find_package(Qt5 5.6 COMPONENTS DBus)
IF (UNIX AND Qt5DBus_FOUND AND LIBCLOUDPROVIDERS_FOUND)
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")

View File

@ -24,7 +24,7 @@ extern "C" {
CloudProvidersProviderExporter *_providerExporter;
void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data)
void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data)
{
Q_UNUSED(name);
CloudProviderManager *self;
@ -34,6 +34,14 @@ void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer u
self->registerSignals();
}
void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data)
{
Q_UNUSED(connection);
Q_UNUSED(name);
Q_UNUSED(user_data);
g_clear_object (&_providerExporter);
}
void CloudProviderManager::registerSignals()
{
OCC::FolderMan *folderManager = OCC::FolderMan::instance();
@ -45,7 +53,7 @@ CloudProviderManager::CloudProviderManager(QObject *parent) : QObject(parent)
{
_map = new QMap<QString, CloudProviderWrapper*>();
QString busName = QString(LIBCLOUDPROVIDERS_DBUS_BUS_NAME);
g_bus_own_name (G_BUS_TYPE_SESSION, busName.toAscii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, nullptr, nullptr, this, nullptr);
g_bus_own_name (G_BUS_TYPE_SESSION, busName.toAscii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, nullptr, on_name_acquired, nullptr, this, nullptr);
}
void CloudProviderManager::slotFolderListChanged(const Folder::Map &folderMap)

View File

@ -33,33 +33,25 @@ using namespace OCC;
GSimpleActionGroup *actionGroup = nullptr;
static
gchar* qstring_to_gchar(const QString &string)
{
QByteArray ba = string.toUtf8();
char* data = ba.data();
return g_strdup(data);
}
CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, CloudProvidersProviderExporter* cloudprovider) : QObject(parent)
, _folder(folder)
{
GMenuModel *model;
GActionGroup *action_group;
_recentlyChanged = new QList<QPair<QString, QString>>();
gchar *accountName = g_strdup_printf ("Account%sFolder%s",
qstring_to_gchar(folder->alias()),
qstring_to_gchar(folder->accountState()->account()->id()));
QString accountName = QString("Account%1Folder%2").arg(folder->alias(), folder->accountState()->account()->id());
_cloudProvider = CLOUD_PROVIDERS_PROVIDER_EXPORTER(cloudprovider);
_cloudProviderAccount = cloud_providers_account_exporter_new(_cloudProvider, accountName);
_cloudProviderAccount = cloud_providers_account_exporter_new(_cloudProvider, accountName.toUtf8().data());
gchar* folderName = qstring_to_gchar(folder->shortGuiLocalPath());
gchar* folderPath = qstring_to_gchar(folder->cleanPath());
cloud_providers_account_exporter_set_name (_cloudProviderAccount, folderName);
cloud_providers_account_exporter_set_name (_cloudProviderAccount, folder->shortGuiLocalPath().toUtf8().data());
cloud_providers_account_exporter_set_icon (_cloudProviderAccount, g_icon_new_for_string(APPLICATION_ICON_NAME, nullptr));
cloud_providers_account_exporter_set_path (_cloudProviderAccount, folderPath);
cloud_providers_account_exporter_set_path (_cloudProviderAccount, folder->cleanPath().toUtf8().data());
cloud_providers_account_exporter_set_status (_cloudProviderAccount, CLOUD_PROVIDERS_ACCOUNT_STATUS_IDLE);
cloud_providers_account_exporter_set_menu_model (_cloudProviderAccount, getMenuModel());
cloud_providers_account_exporter_set_action_group (_cloudProviderAccount, getActionGroup());
model = getMenuModel();
cloud_providers_account_exporter_set_menu_model (_cloudProviderAccount, model);
action_group = getActionGroup();
cloud_providers_account_exporter_set_action_group (_cloudProviderAccount, action_group);
connect(ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, ProgressInfo)), this, SLOT(slotUpdateProgress(QString, ProgressInfo)));
connect(_folder, SIGNAL(syncStarted()), this, SLOT(slotSyncStarted()));
@ -68,10 +60,8 @@ CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, Clou
_paused = _folder->syncPaused();
updatePauseStatus();
g_free(accountName);
g_free(folderName);
g_free(folderPath);
g_clear_object (&model);
g_clear_object (&action_group);
}
CloudProviderWrapper::~CloudProviderWrapper()
@ -93,6 +83,16 @@ static bool shouldShowInRecentsMenu(const SyncFileItem &item)
&& item._instruction != CSYNC_INSTRUCTION_NONE;
}
static GMenuItem *menu_item_new(const QString &label, const gchar *detailed_action)
{
return g_menu_item_new(label.toUtf8 ().data(), detailed_action);
}
static GMenuItem *menu_item_new_submenu(const QString &label, GMenuModel *submenu)
{
return g_menu_item_new_submenu(label.toUtf8 ().data(), submenu);
}
void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const ProgressInfo &progress)
{
// Only update progress for the current folder
@ -154,30 +154,25 @@ void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const Progr
if(!_recentlyChanged->isEmpty()) {
QList<QPair<QString, QString>>::iterator i;
for (i = _recentlyChanged->begin(); i != _recentlyChanged->end(); i++) {
gchar *file;
QString label = i->first;
QString fullPath = i->second;
file = g_strdup(qstring_to_gchar(label));
item = g_menu_item_new(file, "cloudprovider.showfile");
g_menu_item_set_action_and_target_value(item, "cloudprovider.showfile", g_variant_new_string(qstring_to_gchar(fullPath)));
item = menu_item_new(label, "cloudprovider.showfile");
g_menu_item_set_action_and_target_value(item, "cloudprovider.showfile", g_variant_new_string(fullPath.toUtf8().data()));
g_menu_append_item(_recentMenu, item);
g_clear_object (&item);
}
} else {
item = g_menu_item_new("No recently changed files", nullptr);
item = menu_item_new(tr("No recently changed files"), nullptr);
g_menu_append_item(_recentMenu, item);
g_clear_object (&item);
}
}
}
void CloudProviderWrapper::updateStatusText(QString statusText)
{
char* state = qstring_to_gchar(_folder->accountState()->stateString(_folder->accountState()->state()));
char* statusChar = qstring_to_gchar(statusText);
char* status = g_strdup_printf("%s - %s", state, statusChar);
cloud_providers_account_exporter_set_status_details(_cloudProviderAccount, status);
g_free(state);
g_free(statusChar);
g_free(status);
QString status = QString("%1 - %2").arg(_folder->accountState()->stateString(_folder->accountState()->state()), statusText);
cloud_providers_account_exporter_set_status_details(_cloudProviderAccount, status.toUtf8().data());
}
void CloudProviderWrapper::updatePauseStatus()
@ -217,38 +212,53 @@ GMenuModel* CloudProviderWrapper::getMenuModel() {
GMenu* section;
GMenuItem* item;
QString item_label;
_mainMenu = g_menu_new();
section = g_menu_new();
item = g_menu_item_new("Open website", "cloudprovider.openwebsite");
item = menu_item_new(tr("Open website"), "cloudprovider.openwebsite");
g_menu_append_item(section, item);
g_clear_object (&item);
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
g_clear_object (&section);
_recentMenu = g_menu_new();
item = g_menu_item_new("No recently changed files", nullptr);
item = menu_item_new(tr("No recently changed files"), nullptr);
g_menu_append_item(_recentMenu, item);
section = g_menu_new();
item = g_menu_item_new_submenu("Recently changed", G_MENU_MODEL(_recentMenu));
g_menu_append_item(section, item);
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
g_clear_object (&item);
section = g_menu_new();
item = g_menu_item_new("Pause synchronization", "cloudprovider.pause");
item = menu_item_new_submenu(tr("Recently changed"), G_MENU_MODEL(_recentMenu));
g_menu_append_item(section, item);
g_clear_object (&item);
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
g_clear_object (&section);
section = g_menu_new();
item = g_menu_item_new("Help", "cloudprovider.openhelp");
g_menu_append_item(section, item);
item = g_menu_item_new("Settings", "cloudprovider.opensettings");
g_menu_append_item(section, item);
item = g_menu_item_new("Log out", "cloudprovider.logout");
g_menu_append_item(section, item);
item = g_menu_item_new("Quit sync client", "cloudprovider.quit");
item = menu_item_new(tr("Pause synchronization"), "cloudprovider.pause");
g_menu_append_item(section, item);
g_clear_object (&item);
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
g_clear_object (&section);
section = g_menu_new();
item = menu_item_new(tr("Help"), "cloudprovider.openhelp");
g_menu_append_item(section, item);
g_clear_object (&item);
item = menu_item_new(tr("Settings"), "cloudprovider.opensettings");
g_menu_append_item(section, item);
g_clear_object (&item);
item = menu_item_new(tr("Log out"), "cloudprovider.logout");
g_menu_append_item(section, item);
g_clear_object (&item);
item = menu_item_new(tr("Quit sync client"), "cloudprovider.quit");
g_menu_append_item(section, item);
g_clear_object (&item);
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
g_clear_object (&section);
g_clear_object (&_recentMenu);
return G_MENU_MODEL(_mainMenu);
}
@ -277,11 +287,10 @@ activate_action_open (GSimpleAction *action, GVariant *parameter, gpointer user_
}
if(g_str_equal(name, "showfile")) {
gchar *path;
g_variant_get (parameter, "s", &path);
g_print("showfile => %s\n", path);
showInFileManager(QString(path));
}
const gchar *path = g_variant_get_string (parameter, NULL);
g_print("showfile => %s\n", path);
showInFileManager(QString(path));
}
if(g_str_equal(name, "logout")) {
self->folder()->accountState()->signOutByUi();
@ -331,12 +340,13 @@ static GActionEntry actions[] = {
GActionGroup* CloudProviderWrapper::getActionGroup()
{
g_clear_object (&actionGroup);
actionGroup = g_simple_action_group_new ();
g_action_map_add_action_entries (G_ACTION_MAP (actionGroup), actions, G_N_ELEMENTS (actions), this);
bool state = _folder->syncPaused();
GAction *pause = g_action_map_lookup_action(G_ACTION_MAP(actionGroup), "pause");
g_simple_action_set_state(G_SIMPLE_ACTION(pause), g_variant_new_boolean(state));
return G_ACTION_GROUP (actionGroup);
return G_ACTION_GROUP (g_object_ref (actionGroup));
}
void CloudProviderWrapper::slotSyncPausedChanged(Folder *folder, bool state)

View File

@ -18,6 +18,8 @@
#include "sharelinkwidget.h"
#include "shareusergroupwidget.h"
#include "sharemanager.h"
#include "account.h"
#include "accountstate.h"
#include "configfile.h"
@ -49,7 +51,8 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
, _maxSharingPermissions(maxSharingPermissions)
, _privateLinkUrl(accountState->account()->deprecatedPrivateLinkUrl(numericFileId).toString(QUrl::FullyEncoded))
, _startPage(startPage)
, _linkWidget(nullptr)
, _linkWidgetList({})
, _emptyShareLinkWidget(nullptr)
, _userGroupWidget(nullptr)
, _progressIndicator(nullptr)
{
@ -101,11 +104,6 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
this->setWindowTitle(tr("%1 Sharing").arg(Theme::instance()->appNameGUI()));
if (!accountState->account()->capabilities().shareAPI()) {
// TODO do we want to display it?
//auto label = new QLabel(tr("The server does not allow sharing"));
//label->setWordWrap(true);
//label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
//layout()->replaceWidget(_ui->shareWidgets, label);
return;
}
@ -115,14 +113,6 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
job->start();
}
//TODO Progress Indicator where should it go?
// _progressIndicator = new QProgressIndicator(this);
// _progressIndicator->startAnimation();
// _progressIndicator->setToolTip(tr("Retrieving maximum possible sharing permissions from server..."));
// _ui->buttonBoxLayout->insertWidget(0, _progressIndicator);
// Server versions >= 9.1 support the "share-permissions" property
// older versions will just return share-permissions: ""
auto job = new PropfindJob(accountState->account(), _sharePath);
job->setProperties(
QList<QByteArray>()
@ -133,10 +123,103 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
connect(job, &PropfindJob::result, this, &ShareDialog::slotPropfindReceived);
connect(job, &PropfindJob::finishedWithError, this, &ShareDialog::slotPropfindError);
job->start();
bool sharingPossible = true;
if (!accountState->account()->capabilities().sharePublicLink()) {
qCWarning(lcSharing) << "Link shares have been disabled";
sharingPossible = false;
} else if (!(maxSharingPermissions & SharePermissionShare)) {
qCWarning(lcSharing) << "The file can not be shared because it was shared without sharing permission.";
sharingPossible = false;
}
if (sharingPossible) {
_manager = new ShareManager(accountState->account(), this);
connect(_manager, &ShareManager::sharesFetched, this, &ShareDialog::slotSharesFetched);
connect(_manager, &ShareManager::linkShareCreated, this, &ShareDialog::slotAddLinkShareWidget);
}
}
void ShareDialog::addLinkShareWidget(const QSharedPointer<LinkShare> &linkShare){
_linkWidgetList.append(new ShareLinkWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, this));
int index = _linkWidgetList.size()-1;
_linkWidgetList.at(index)->setLinkShare(linkShare);
connect(linkShare.data(), &Share::serverError, _linkWidgetList.at(index), &ShareLinkWidget::slotServerError);
connect(linkShare.data(), &Share::shareDeleted, _linkWidgetList.at(index), &ShareLinkWidget::slotDeleteShareFetched);
connect(_manager, &ShareManager::linkShareRequiresPassword, _linkWidgetList.at(index), &ShareLinkWidget::slotCreateShareRequiresPassword);
connect(_manager, &ShareManager::serverError, _linkWidgetList.at(index), &ShareLinkWidget::slotServerError);
// Connect all shares signals to gui slots
connect(this, &ShareDialog::toggleAnimation, _linkWidgetList.at(index), &ShareLinkWidget::slotToggleAnimation);
connect(_linkWidgetList.at(index), &ShareLinkWidget::createLinkShare, this, &ShareDialog::slotCreateLinkShare);
connect(_linkWidgetList.at(index), &ShareLinkWidget::deleteLinkShare, this, &ShareDialog::slotDeleteShare);
//connect(_linkWidgetList.at(index), &ShareLinkWidget::resizeRequested, this, &ShareDialog::slotAdjustScrollWidgetSize);
_ui->verticalLayout->insertWidget(_linkWidgetList.size()+1, _linkWidgetList.at(index));
_linkWidgetList.at(index)->setupUiOptions();
}
void ShareDialog::initLinkShareWidget(){
if(_linkWidgetList.size() == 0){
_emptyShareLinkWidget = new ShareLinkWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, this);
_linkWidgetList.append(_emptyShareLinkWidget);
// connect(_emptyShareLinkWidget, &ShareLinkWidget::resizeRequested, this, &ShareDialog::slotAdjustScrollWidgetSize);
// connect(this, &ShareDialog::toggleAnimation, _emptyShareLinkWidget, &ShareLinkWidget::slotToggleAnimation);
connect(_emptyShareLinkWidget, &ShareLinkWidget::createLinkShare, this, &ShareDialog::slotCreateLinkShare);
_ui->verticalLayout->insertWidget(_linkWidgetList.size()+1, _emptyShareLinkWidget);
_emptyShareLinkWidget->show();
} else if(_emptyShareLinkWidget) {
_emptyShareLinkWidget->hide();
_ui->verticalLayout->removeWidget(_emptyShareLinkWidget);
_linkWidgetList.removeAll(_emptyShareLinkWidget);
_emptyShareLinkWidget = nullptr;
}
}
void ShareDialog::slotAddLinkShareWidget(const QSharedPointer<LinkShare> &linkShare){
emit toggleAnimation(true);
addLinkShareWidget(linkShare);
initLinkShareWidget();
emit toggleAnimation(false);
}
void ShareDialog::slotSharesFetched(const QList<QSharedPointer<Share>> &shares)
{
emit toggleAnimation(true);
const QString versionString = _accountState->account()->serverVersion();
qCInfo(lcSharing) << versionString << "Fetched" << shares.count() << "shares";
foreach (auto share, shares) {
if (share->getShareType() != Share::TypeLink) {
continue;
}
QSharedPointer<LinkShare> linkShare = qSharedPointerDynamicCast<LinkShare>(share);
addLinkShareWidget(linkShare);
}
initLinkShareWidget();
emit toggleAnimation(false);
}
// TODO
void ShareDialog::slotAdjustScrollWidgetSize()
{
int count = this->findChildren<ShareLinkWidget *>().count();
_ui->scrollArea->setVisible(count > 0);
if (count > 0 && count <= 3) {
_ui->scrollArea->setFixedHeight(_ui->scrollArea->widget()->sizeHint().height());
}
_ui->scrollArea->setFrameShape(count > 3 ? QFrame::StyledPanel : QFrame::NoFrame);
}
ShareDialog::~ShareDialog()
{
_linkWidgetList.clear();
delete _ui;
}
@ -178,8 +261,6 @@ void ShareDialog::slotPropfindError()
void ShareDialog::showSharingUi()
{
//_progressIndicator->stopAnimation();
auto theme = Theme::instance();
// There's no difference between being unable to reshare and
@ -205,15 +286,25 @@ void ShareDialog::showSharingUi()
}
if (theme->linkSharing()) {
_linkWidget = new ShareLinkWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, this);
_ui->verticalLayout->insertWidget(2, _linkWidget);
_linkWidget->getShares();
if (_startPage == ShareDialogStartPage::PublicLinks)
_ui->verticalLayout->insertWidget(3, _linkWidget);
_manager->fetchShares(_sharePath);
}
}
void ShareDialog::slotCreateLinkShare()
{
_manager->createLinkShare(_sharePath, QString(), QString());
}
void ShareDialog::slotDeleteShare()
{
auto sharelinkWidget = dynamic_cast<ShareLinkWidget*>(sender());
sharelinkWidget->hide();
_ui->verticalLayout->removeWidget(sharelinkWidget);
_linkWidgetList.removeAll(sharelinkWidget);
initLinkShareWidget();
}
void ShareDialog::slotThumbnailFetched(const int &statusCode, const QByteArray &reply)
{
if (statusCode != 200) {
@ -237,8 +328,10 @@ void ShareDialog::slotAccountStateChanged(int state)
_userGroupWidget->setEnabled(enabled);
}
if (_linkWidget != nullptr) {
_linkWidget->setEnabled(enabled);
if(_linkWidgetList.size() > 0){
foreach(ShareLinkWidget *widget, _linkWidgetList){
widget->setEnabled(state);
}
}
}
}

View File

@ -19,6 +19,7 @@
#include "sharepermissions.h"
#include "owncloudgui.h"
#include <QSharedPointer>
#include <QPointer>
#include <QString>
#include <QDialog>
@ -34,6 +35,9 @@ namespace Ui {
class ShareLinkWidget;
class ShareUserGroupWidget;
class ShareManager;
class LinkShare;
class Share;
class ShareDialog : public QDialog
{
@ -56,8 +60,19 @@ private slots:
void slotThumbnailFetched(const int &statusCode, const QByteArray &reply);
void slotAccountStateChanged(int state);
void slotSharesFetched(const QList<QSharedPointer<Share>> &shares);
void slotAddLinkShareWidget(const QSharedPointer<LinkShare> &linkShare);
void slotDeleteShare();
void slotCreateLinkShare();
void slotAdjustScrollWidgetSize();
signals:
void toggleAnimation(bool);
private:
void showSharingUi();
void addLinkShareWidget(const QSharedPointer<LinkShare> &linkShare);
void initLinkShareWidget();
Ui::ShareDialog *_ui;
@ -68,8 +83,10 @@ private:
QByteArray _numericFileId;
QString _privateLinkUrl;
ShareDialogStartPage _startPage;
ShareManager *_manager;
ShareLinkWidget *_linkWidget;
QList<ShareLinkWidget*> _linkWidgetList;
ShareLinkWidget* _emptyShareLinkWidget;
ShareUserGroupWidget *_userGroupWidget;
QProgressIndicator *_progressIndicator;
};

View File

@ -17,9 +17,8 @@
#include "sharelinkwidget.h"
#include "account.h"
#include "capabilities.h"
#include "sharemanager.h"
#include "guiutility.h"
#include "sharemanager.h"
#include "QProgressIndicator.h"
#include <QBuffer>
@ -29,9 +28,12 @@
#include <QMessageBox>
#include <QMenu>
#include <QToolButton>
#include <QPropertyAnimation>
namespace OCC {
Q_LOGGING_CATEGORY(lcShareLink, "nextcloud.gui.sharelink", QtInfoMsg)
ShareLinkWidget::ShareLinkWidget(AccountPtr account,
const QString &sharePath,
const QString &localPath,
@ -42,13 +44,11 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
, _account(account)
, _sharePath(sharePath)
, _localPath(localPath)
, _manager(nullptr)
, _linkShare(nullptr)
, _passwordRequired(false)
, _expiryRequired(false)
, _namesSupported(true)
, _linkContextMenu(nullptr)
, _copyLinkAction(nullptr)
, _readOnlyLinkAction(nullptr)
, _allowEditingLinkAction(nullptr)
, _allowUploadEditingLinkAction(nullptr)
@ -68,26 +68,26 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
QFileInfo fi(localPath);
_isFile = fi.isFile();
connect(_ui->enableShareLink, &QCheckBox::toggled, this, &ShareLinkWidget::slotCreateOrDeleteShareLink);
connect(_ui->enableShareLink, &QPushButton::clicked, this, &ShareLinkWidget::slotCreateShareLink);
connect(_ui->lineEdit_password, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotCreatePassword);
connect(_ui->confirmPassword, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCreatePassword);
connect(_ui->confirmExpirationDate, &QAbstractButton::clicked, this, &ShareLinkWidget::slotSetExpireDate);
connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotExpireDateChanged);
connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotSetExpireDate);
_ui->errorLabel->hide();
bool sharingPossible = true;
if (!_account->capabilities().sharePublicLink()) {
qCWarning(lcSharing) << "Link shares have been disabled";
qCWarning(lcShareLink) << "Link shares have been disabled";
sharingPossible = false;
} else if (!(maxSharingPermissions & SharePermissionShare)) {
qCWarning(lcSharing) << "The file can not be shared because it was shared without sharing permission.";
qCWarning(lcShareLink) << "The file can not be shared because it was shared without sharing permission.";
sharingPossible = false;
}
_ui->createShareButton->setVisible(sharingPossible);
_ui->enableShareLink->setVisible(sharingPossible);
_ui->shareLinkToolButton->setVisible(sharingPossible);
_ui->enableShareLink->setChecked(false);
_ui->shareLinkToolButton->setEnabled(false);
_ui->shareLinkToolButton->hide();
// Older servers don't support multiple public link shares
if (!_account->capabilities().sharePublicLinkMultiple()) {
@ -100,34 +100,9 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
// check if the file is already inside of a synced folder
if (sharePath.isEmpty()) {
// The file is not yet in an ownCloud synced folder. We could automatically
// copy it over, but that is skipped as not all questions can be answered that
// are involved in that, see https://github.com/owncloud/client/issues/2732
//
// _ui->checkBox_shareLink->setEnabled(false);
// uploadExternalFile();
qCWarning(lcSharing) << "Unable to share files not in a sync folder.";
qCWarning(lcShareLink) << "Unable to share files not in a sync folder.";
return;
}
// TODO File Drop
// File can't have public upload set; we also hide it if the capability isn't there
// _ui->widget_editing->setVisible(
// !_isFile && _account->capabilities().sharePublicLinkAllowUpload());
//_ui->radio_uploadOnly->setVisible(
//_account->capabilities().sharePublicLinkSupportsUploadOnly());
/*
* Create the share manager and connect it properly
*/
if (sharingPossible) {
_manager = new ShareManager(_account, this);
connect(_manager, &ShareManager::sharesFetched, this, &ShareLinkWidget::slotSharesFetched);
connect(_manager, &ShareManager::linkShareCreated, this, &ShareLinkWidget::slotCreateShareFetched);
connect(_manager, &ShareManager::linkShareRequiresPassword, this, &ShareLinkWidget::slotCreateShareRequiresPassword);
connect(_manager, &ShareManager::serverError, this, &ShareLinkWidget::slotServerError);
}
}
ShareLinkWidget::~ShareLinkWidget()
@ -135,7 +110,7 @@ ShareLinkWidget::~ShareLinkWidget()
delete _ui;
}
void ShareLinkWidget::toggleAnimation(bool start){
void ShareLinkWidget::slotToggleAnimation(bool start){
if (start) {
if (!_ui->progressIndicator->isAnimated())
_ui->progressIndicator->startAnimation();
@ -144,218 +119,170 @@ void ShareLinkWidget::toggleAnimation(bool start){
}
}
void ShareLinkWidget::getShares()
{
if (_manager) {
toggleAnimation(true);
_manager->fetchShares(_sharePath);
}
void ShareLinkWidget::setLinkShare(QSharedPointer<LinkShare> linkShare){
_linkShare = linkShare;
}
void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shares)
{
const QString versionString = _account->serverVersion();
qCInfo(lcSharing) << versionString << "Fetched" << shares.count() << "shares";
foreach (auto share, shares) {
if (share->getShareType() != Share::TypeLink) {
continue;
}
_linkShare = qSharedPointerDynamicCast<LinkShare>(share);
// Connect all shares signals to gui slots
connect(share.data(), &Share::serverError, this, &ShareLinkWidget::slotServerError);
connect(share.data(), &Share::shareDeleted, this, &ShareLinkWidget::slotDeleteShareFetched);
connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireDateSet);
connect(_linkShare.data(), &LinkShare::passwordSet, this, &ShareLinkWidget::slotPasswordSet);
connect(_linkShare.data(), &LinkShare::passwordSetError, this, &ShareLinkWidget::slotPasswordSetError);
// Prepare permissions check and create group action
bool checked = false;
SharePermissions perm = _linkShare->getPermissions();
QActionGroup *permissionsGroup = new QActionGroup(this);
// Prepare sharing menu
_linkContextMenu = new QMenu(this);
// radio button style
permissionsGroup->setExclusive(true);
if(_isFile){
checked = perm & (SharePermissionRead & SharePermissionUpdate);
_allowEditingLinkAction = _linkContextMenu->addAction(tr("Allow Editing"));
_allowEditingLinkAction->setCheckable(true);
_allowEditingLinkAction->setChecked(checked);
} else {
checked = perm & SharePermissionRead;
_readOnlyLinkAction = permissionsGroup->addAction(tr("Read only"));
_readOnlyLinkAction->setCheckable(true);
_readOnlyLinkAction->setChecked(checked);
checked = perm & (SharePermissionRead &
SharePermissionCreate &
SharePermissionUpdate &
SharePermissionDelete);
_allowUploadEditingLinkAction = permissionsGroup->addAction(tr("Allow Upload && Editing"));
_allowUploadEditingLinkAction->setCheckable(true);
_allowUploadEditingLinkAction->setChecked(checked);
checked = perm & SharePermissionCreate;
_allowUploadLinkAction = permissionsGroup->addAction(tr("File Drop (Upload Only)"));
_allowUploadLinkAction->setCheckable(true);
_allowUploadLinkAction->setChecked(checked);
}
// Add copy action (icon only)
_copyLinkAction = _linkContextMenu->addAction(QIcon(":/client/resources/copy.svg"),
tr("Copy link"));
// Adds permissions actions (radio button style)
if(_isFile){
_linkContextMenu->addAction(_allowEditingLinkAction);
} else {
_linkContextMenu->addAction(_readOnlyLinkAction);
_linkContextMenu->addAction(_allowUploadEditingLinkAction);
_linkContextMenu->addAction(_allowUploadLinkAction);
}
// Adds action to display password widget (check box)
_passwordProtectLinkAction = _linkContextMenu->addAction(tr("Password Protect"));
_passwordProtectLinkAction->setCheckable(true);
if(_linkShare->isPasswordSet()){
_passwordProtectLinkAction->setChecked(true);
_ui->lineEdit_password->setPlaceholderText("********");
showPasswordOptions(true);
}
// If password is enforced then don't allow users to disable it
if (_account->capabilities().sharePublicLinkEnforcePassword()) {
_passwordProtectLinkAction->setChecked(true);
_passwordProtectLinkAction->setEnabled(false);
_passwordRequired = true;
}
// Adds action to display expiration date widget (check box)
_expirationDateLinkAction = _linkContextMenu->addAction(tr("Expiration Date"));
_expirationDateLinkAction->setCheckable(true);
if(_linkShare->getExpireDate().isValid()){
_ui->calendar->setDate(_linkShare->getExpireDate());
_expirationDateLinkAction->setChecked(true);
showExpireDateOptions(true);
}
// If expiredate is enforced do not allow disable and set max days
if (_account->capabilities().sharePublicLinkEnforceExpireDate()) {
_ui->calendar->setMaximumDate(QDate::currentDate().addDays(
_account->capabilities().sharePublicLinkExpireDateDays()));
_expirationDateLinkAction->setChecked(true);
_expirationDateLinkAction->setEnabled(false);
_expiryRequired = true;
}
// Adds action to unshare widget (check box)
_unshareLinkAction = _linkContextMenu->addAction(QIcon(":/client/resources/delete.png"),
tr("Unshare"));
connect(_linkContextMenu, &QMenu::triggered,
this, &ShareLinkWidget::slotLinkContextMenuActionTriggered);
_ui->shareLinkToolButton->setMenu(_linkContextMenu);
_ui->shareLinkToolButton->setEnabled(true);
_ui->enableShareLink->setEnabled(true);
_ui->enableShareLink->setChecked(true);
// show sharing options
_ui->shareLinkToolButton->show();
}
toggleAnimation(false);
QSharedPointer<LinkShare> ShareLinkWidget::getLinkShare(){
return _linkShare;
}
void ShareLinkWidget::setExpireDate(const QDate &date)
{
if (_linkShare) {
toggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setExpireDate(date);
void ShareLinkWidget::setupUiOptions(){
connect(_linkShare.data(), &LinkShare::expireDateSet, this, &ShareLinkWidget::slotExpireDateSet);
connect(_linkShare.data(), &LinkShare::passwordSet, this, &ShareLinkWidget::slotPasswordSet);
connect(_linkShare.data(), &LinkShare::passwordSetError, this, &ShareLinkWidget::slotPasswordSetError);
// Prepare permissions check and create group action
const QDate expireDate = _linkShare.data()->getExpireDate().isValid()? _linkShare.data()->getExpireDate() : QDate();
const SharePermissions perm = _linkShare.data()->getPermissions();
bool checked = false;
QActionGroup *permissionsGroup = new QActionGroup(this);
// Prepare sharing menu
_linkContextMenu = new QMenu(this);
// radio button style
permissionsGroup->setExclusive(true);
if(_isFile){
checked = perm & (SharePermissionRead & SharePermissionUpdate);
_allowEditingLinkAction = _linkContextMenu->addAction(tr("Allow Editing"));
_allowEditingLinkAction->setCheckable(true);
_allowEditingLinkAction->setChecked(checked);
} else {
checked = perm & SharePermissionRead;
_readOnlyLinkAction = permissionsGroup->addAction(tr("Read only"));
_readOnlyLinkAction->setCheckable(true);
_readOnlyLinkAction->setChecked(checked);
checked = perm & (SharePermissionRead &
SharePermissionCreate &
SharePermissionUpdate &
SharePermissionDelete);
_allowUploadEditingLinkAction = permissionsGroup->addAction(tr("Allow Upload && Editing"));
_allowUploadEditingLinkAction->setCheckable(true);
_allowUploadEditingLinkAction->setChecked(checked);
checked = perm & SharePermissionCreate;
_allowUploadLinkAction = permissionsGroup->addAction(tr("File Drop (Upload Only)"));
_allowUploadLinkAction->setCheckable(true);
_allowUploadLinkAction->setChecked(checked);
}
// Adds permissions actions (radio button style)
if(_isFile){
_linkContextMenu->addAction(_allowEditingLinkAction);
} else {
_linkContextMenu->addAction(_readOnlyLinkAction);
_linkContextMenu->addAction(_allowUploadEditingLinkAction);
_linkContextMenu->addAction(_allowUploadLinkAction);
}
// Adds action to display password widget (check box)
_passwordProtectLinkAction = _linkContextMenu->addAction(tr("Password Protect"));
_passwordProtectLinkAction->setCheckable(true);
if(_linkShare.data()->isPasswordSet()){
_passwordProtectLinkAction->setChecked(true);
_ui->lineEdit_password->setPlaceholderText("********");
showPasswordOptions(true);
}
// If password is enforced then don't allow users to disable it
if (_account->capabilities().sharePublicLinkEnforcePassword()) {
_passwordProtectLinkAction->setChecked(true);
_passwordProtectLinkAction->setEnabled(false);
_passwordRequired = true;
}
// Adds action to display expiration date widget (check box)
_expirationDateLinkAction = _linkContextMenu->addAction(tr("Expiration Date"));
_expirationDateLinkAction->setCheckable(true);
if(!expireDate.isNull()){
_ui->calendar->setDate(expireDate);
_expirationDateLinkAction->setChecked(true);
showExpireDateOptions(true);
}
// If expiredate is enforced do not allow disable and set max days
if (_account->capabilities().sharePublicLinkEnforceExpireDate()) {
_ui->calendar->setMaximumDate(QDate::currentDate().addDays(
_account->capabilities().sharePublicLinkExpireDateDays()));
_expirationDateLinkAction->setChecked(true);
_expirationDateLinkAction->setEnabled(false);
_expiryRequired = true;
}
// Adds action to unshare widget (check box)
_unshareLinkAction = _linkContextMenu->addAction(QIcon(":/client/resources/delete.png"),
tr("Unshare"));
_linkContextMenu->addSeparator();
_addAnotherLinkAction = _linkContextMenu->addAction(QIcon(":/client/resources/add.png"),
tr("Add another link"));
_ui->enableShareLink->setIcon(QIcon(":/client/resources/copy.svg"));
disconnect(_ui->enableShareLink, &QPushButton::clicked, this, &ShareLinkWidget::slotCreateShareLink);
connect(_ui->enableShareLink, &QPushButton::clicked, this, &ShareLinkWidget::slotCopyLinkShare);
connect(_linkContextMenu, &QMenu::triggered,
this, &ShareLinkWidget::slotLinkContextMenuActionTriggered);
_ui->shareLinkToolButton->setMenu(_linkContextMenu);
_ui->shareLinkToolButton->setEnabled(true);
_ui->enableShareLink->setEnabled(true);
_ui->enableShareLink->setChecked(true);
// show sharing options
_ui->shareLinkToolButton->show();
//TO DO
//startAnimation(0, height());
}
void ShareLinkWidget::slotCopyLinkShare(bool clicked){
Q_UNUSED(clicked);
QApplication::clipboard()->setText(_linkShare->getLink().toString());
}
void ShareLinkWidget::slotExpireDateSet()
{
toggleAnimation(false);
}
void ShareLinkWidget::slotExpireDateChanged(const QDate &date)
{
setExpireDate(date);
slotToggleAnimation(false);
}
void ShareLinkWidget::slotSetExpireDate()
{
slotExpireDateChanged(_ui->calendar->date());
if(!_linkShare){
return;
}
slotToggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setExpireDate(_ui->calendar->date());
}
void ShareLinkWidget::slotCreatePassword()
{
if (!_manager) {
return;
}
toggleAnimation(true);
if (!_linkShare) {
// If share creation requires a password, we'll be in this case
if (_ui->lineEdit_password->text().isEmpty()) {
_ui->lineEdit_password->setFocus();
return;
}
_manager->createLinkShare(_sharePath, QString(), _ui->lineEdit_password->text());
} else {
setPassword(_ui->lineEdit_password->text());
}
}
void ShareLinkWidget::slotCreateOrDeleteShareLink(bool checked)
{
if (!_manager) {
qCWarning(lcSharing) << "No share manager set.";
return;
}
toggleAnimation(true);
if(checked){
_manager->createLinkShare(_sharePath, QString(), QString());
} else {
if (!_linkShare) {
qCWarning(lcSharing) << "No public link set.";
return;
}
confirmAndDeleteShare();
}
slotToggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setPassword(_ui->lineEdit_password->text());
}
void ShareLinkWidget::setPassword(const QString &password)
void ShareLinkWidget::slotCreateShareLink(bool clicked)
{
if (_linkShare) {
toggleAnimation(true);
_ui->errorLabel->hide();
_linkShare->setPassword(password);
}
slotToggleAnimation(true);
emit createLinkShare();
}
void ShareLinkWidget::slotPasswordSet()
{
if (!_linkShare)
return;
_ui->lineEdit_password->setText(QString());
if (_linkShare->isPasswordSet()) {
_ui->lineEdit_password->setPlaceholderText("********");
@ -364,39 +291,55 @@ void ShareLinkWidget::slotPasswordSet()
_ui->lineEdit_password->setPlaceholderText(QString());
}
toggleAnimation(false);
slotToggleAnimation(false);
}
/*
* When setting/deleting a password from a share the old share is
* deleted and a new one is created. So we need to refetch the shares
* at this point.
*
* NOTE: I don't see this happening with oC > 10
*/
getShares();
void ShareLinkWidget::startAnimation(const int start, const int end){
QPropertyAnimation *animation = new QPropertyAnimation(this, "maximumHeight", this);
animation->setDuration(500);
animation->setStartValue(start);
animation->setEndValue(end);
connect(animation, &QAbstractAnimation::finished, this, &ShareLinkWidget::slotAnimationFinished);
if(end < start) // that is to remove the widget, not to show it
connect(animation, &QAbstractAnimation::finished, this, &ShareLinkWidget::slotDeleteAnimationFinished);
connect(animation, &QVariantAnimation::valueChanged, this, &ShareLinkWidget::resizeRequested);
animation->start();
}
void ShareLinkWidget::slotDeleteShareFetched()
{
toggleAnimation(true);
slotToggleAnimation(false);
// TODO
//startAnimation(height(), 0);
_linkShare.clear();
_ui->enableShareLink->setChecked(false);
_ui->shareLinkToolButton->setEnabled(false);
_ui->shareLinkToolButton->hide();
togglePasswordOptions(false);
toggleExpireDateOptions(false);
getShares();
emit deleteLinkShare();
}
void ShareLinkWidget::slotCreateShareFetched()
void ShareLinkWidget::slotAnimationFinished()
{
toggleAnimation(true);
getShares();
emit resizeRequested();
deleteLater();
}
void ShareLinkWidget::slotDeleteAnimationFinished()
{
// There is a painting bug where a small line of this widget isn't
// properly cleared. This explicit repaint() call makes sure any trace of
// the share widget is removed once it's destroyed. #4189
connect(this, SIGNAL(destroyed(QObject *)), parentWidget(), SLOT(repaint()));
}
void ShareLinkWidget::slotCreateShareRequiresPassword(const QString &message)
{
toggleAnimation(true);
slotToggleAnimation(true);
showPasswordOptions(true);
if (!message.isEmpty()) {
@ -468,8 +411,10 @@ void ShareLinkWidget::confirmAndDeleteShare()
connect(messageBox, &QMessageBox::finished, this,
[messageBox, yesButton, this]() {
if (messageBox->clickedButton() == yesButton)
if (messageBox->clickedButton() == yesButton) {
this->slotToggleAnimation(true);
this->_linkShare->deleteShare();
}
});
messageBox->open();
}
@ -495,8 +440,8 @@ void ShareLinkWidget::slotLinkContextMenuActionTriggered(QAction *action)
bool state = action->isChecked();
SharePermissions perm = SharePermissionRead;
if (action == _copyLinkAction) {
QApplication::clipboard()->setText(_linkShare->getLink().toString());
if(action == _addAnotherLinkAction){
emit createLinkShare();
} else if (action == _readOnlyLinkAction && state) {
_linkShare->setPermissions(perm);
@ -520,13 +465,13 @@ void ShareLinkWidget::slotLinkContextMenuActionTriggered(QAction *action)
toggleExpireDateOptions(state);
} else if (action == _unshareLinkAction) {
slotCreateOrDeleteShareLink(state);
confirmAndDeleteShare();
}
}
void ShareLinkWidget::slotServerError(int code, const QString &message)
{
toggleAnimation(false);
slotToggleAnimation(false);
qCWarning(lcSharing) << "Error from server" << code << message;
displayError(message);

View File

@ -37,7 +37,6 @@ class QuotaInfo;
class SyncResult;
class LinkShare;
class Share;
class ShareManager;
/**
* @brief The ShareDialog class
@ -54,44 +53,51 @@ public:
SharePermissions maxSharingPermissions,
QWidget *parent = nullptr);
~ShareLinkWidget();
void getShares();
void toggleButton(bool show);
void setupUiOptions();
void setLinkShare(QSharedPointer<LinkShare> linkShare);
QSharedPointer<LinkShare> getLinkShare();
public slots:
void slotDeleteShareFetched();
void slotToggleAnimation(bool start);
void slotServerError(int code, const QString &message);
void slotCreateShareRequiresPassword(const QString &message);
private slots:
void slotSharesFetched(const QList<QSharedPointer<Share>> &shares);
//void slotShareSelectionChanged();
void slotCreateShareLink(bool clicked);
void slotCreateOrDeleteShareLink(bool checked);
void slotCreatePassword();
void slotPasswordSet();
void slotPasswordSetError(int code, const QString &message);
void slotExpireDateChanged(const QDate &date);
void slotSetExpireDate();
void slotExpireDateSet();
void slotContextMenuButtonClicked();
void slotLinkContextMenuActionTriggered(QAction *action);
void slotDeleteShareFetched();
void slotCreateShareFetched();
void slotCreateShareRequiresPassword(const QString &message);
void slotDeleteAnimationFinished();
void slotAnimationFinished();
void slotPasswordSet();
void slotExpireDateSet();
void slotServerError(int code, const QString &message);
void slotPasswordSetError(int code, const QString &message);
signals:
void createLinkShare();
void deleteLinkShare();
void resizeRequested();
void visualDeletionDone();
private:
void displayError(const QString &errMsg);
void showPasswordOptions(bool show);
void togglePasswordOptions(bool enable);
void setPassword(const QString &password);
void showExpireDateOptions(bool show);
void toggleExpireDateOptions(bool enable);
void setExpireDate(const QDate &date);
void copyShareLink(const QUrl &url);
void slotCopyLinkShare(bool clicked);
/** Confirm with the user and then delete the share */
void confirmAndDeleteShare();
@ -99,7 +105,7 @@ private:
/** Retrieve a share's name, accounting for _namesSupported */
QString shareName() const;
void toggleAnimation(bool start);
void startAnimation(const int start, const int end);
Ui::ShareLinkWidget *_ui;
AccountPtr _account;
@ -107,7 +113,6 @@ private:
QString _localPath;
QString _shareUrl;
ShareManager *_manager;
QSharedPointer<LinkShare> _linkShare;
bool _isFile;
@ -116,7 +121,6 @@ private:
bool _namesSupported;
QMenu *_linkContextMenu;
QAction *_copyLinkAction;
QAction *_readOnlyLinkAction;
QAction *_allowEditingLinkAction;
QAction *_allowUploadEditingLinkAction;
@ -124,6 +128,7 @@ private:
QAction *_passwordProtectLinkAction;
QAction *_expirationDateLinkAction;
QAction *_unshareLinkAction;
QAction *_addAnotherLinkAction;
};
}

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>350</width>
<height>126</height>
<height>136</height>
</rect>
</property>
<property name="sizePolicy">
@ -68,7 +68,7 @@
</spacer>
</item>
<item>
<widget class="QProgressIndicator" name="progressIndicator"/>
<widget class="QProgressIndicator" name="progressIndicator" native="true"/>
</item>
<item>
<spacer name="horizontalSpacer_2">
@ -84,9 +84,19 @@
</spacer>
</item>
<item>
<widget class="QCheckBox" name="enableShareLink">
<widget class="QPushButton" name="enableShareLink">
<property name="text">
<string>Enable</string>
<string/>
</property>
<property name="icon">
<iconset resource="../../client.qrc">
<normaloff>:/client/resources/add.png</normaloff>:/client/resources/add.png</iconset>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>

View File

@ -382,7 +382,7 @@ qint64 OwncloudAdvancedSetupPage::availableLocalSpace() const
QString OwncloudAdvancedSetupPage::checkLocalSpace(qint64 remoteSize) const
{
return (availableLocalSpace()>remoteSize) ? QString() : tr("There is no enough free space in the local folder!");
return (availableLocalSpace()>remoteSize) ? QString() : tr("There isn't enough free space in the local folder!");
}
} // namespace OCC

View File

@ -750,7 +750,7 @@ void ConfigFile::setMoveToTrash(bool isChecked)
bool ConfigFile::promptDeleteFiles() const
{
QSettings settings(configFile(), QSettings::IniFormat);
return settings.value(QLatin1String(promptDeleteC), true).toBool();
return settings.value(QLatin1String(promptDeleteC), false).toBool();
}
void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles)

View File

@ -26,6 +26,8 @@
#include "propagateremotedelete.h"
#include "propagatedownload.h"
#include "common/asserts.h"
#include "configfile.h"
#ifdef Q_OS_WIN
#include <windows.h>
@ -1035,7 +1037,8 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
}
}
if (!_hasNoneFiles && _hasRemoveFile) {
ConfigFile cfgFile;
if (!_hasNoneFiles && _hasRemoveFile && cfgFile.promptDeleteFiles()) {
qCInfo(lcEngine) << "All the files are going to be changed, asking the user";
bool cancel = false;
emit aboutToRemoveAllFiles(syncItems.first()->_direction, &cancel);

View File

@ -8,6 +8,7 @@
#include <QtTest>
#include "syncenginetestutils.h"
#include <syncengine.h>
#include <configfile.h>
using namespace OCC;
@ -48,6 +49,8 @@ private slots:
{
QFETCH(bool, deleteOnRemote);
FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
ConfigFile config;
config.setPromptDeleteFiles(true);
//Just set a blacklist so we can check it is still there. This directory does not exists but
// that does not matter for our purposes.

View File

@ -1871,8 +1871,8 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>В локалната папка няма достатъчно свободно място!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
<context>
@ -2563,7 +2563,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/settingsdialogmac.cpp" line="155"/>
<source>Activity</source>
<translation>Активности</translation>
<translation>Активност</translation>
</message>
<message>
<location filename="../src/gui/settingsdialogmac.cpp" line="106"/>
@ -3760,7 +3760,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Адрес на сървъра</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

File diff suppressed because it is too large Load Diff

View File

@ -1886,7 +1886,7 @@ můžete být požádáni o dodatečná oprávnění.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>V místní složce není dostatek volného místa!</translation>
</message>
</context>

4124
translations/client_da.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1886,7 +1886,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Nicht genug freier Platz im lokalen Verzeichnis vorhanden!</translation>
</message>
</context>

View File

@ -1876,7 +1876,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1893,7 +1893,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -1887,8 +1887,8 @@ for additional privileges during the process.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>There is no enough free space in the local folder!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
<context>

View File

@ -298,7 +298,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="931"/>
<source>%1 as &lt;i&gt;%2&lt;/i&gt;</source>
<translation>%1 kun la konto &lt;i&gt;%2&lt;/i&gt;</translation>
<translation>%1 per la konto &lt;i&gt;%2&lt;/i&gt;</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="937"/>
@ -1329,7 +1329,7 @@ Se vi plu sinkronigas, la sinkronigo anstataŭigos ĉiujn viajn dosierojn per an
<message>
<location filename="../src/gui/generalsettings.ui" line="75"/>
<source>Use &amp;Monochrome Icons</source>
<translation>&amp;Uzu unukolorajn piktogramojn</translation>
<translation>&amp;Uzi unukolorajn piktogramojn</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="171"/>
@ -1886,7 +1886,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Ne estas sufiĉe da libera spaco en la loka dosierujo!</translation>
</message>
</context>
@ -3379,7 +3379,7 @@ Uzi ĝin ne konsilindas.</translation>
<message>
<location filename="../src/gui/creds/webflowcredentials.cpp" line="124"/>
<source>You have been logged out of %1 as user %2. Please login again</source>
<translation>Vi estis ensalutita de %1 kiel uzanto %2. Bv. re-ensaluti.</translation>
<translation>Vi estis elsalutita de %1 kiel uzanto %2. Bv. re-ensaluti.</translation>
</message>
<message>
<location filename="../src/gui/creds/webflowcredentials.cpp" line="141"/>
@ -3991,7 +3991,7 @@ Uzi ĝin ne konsilindas.</translation>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="37"/>
<source>Server version downloaded, copied changed local file into conflict file</source>
<translation>Servila versio elŝutita, la ŝanĝita loka dosiero estis kopiita en konfliktan dosieron</translation>
<translation>Servila versio elŝutita; la ŝanĝita loka dosiero estis kopiita en konfliktan dosieron</translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="39"/>

View File

@ -1886,8 +1886,8 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>No hay suficiente espacio libre en la carpeta local!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>¡No hay suficiente espacio libre en la carpeta local!</translation>
</message>
</context>
<context>

View File

@ -1867,7 +1867,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,7 +1877,7 @@ mas privilegios durante el proceso.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1867,7 +1867,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1871,7 +1871,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1874,7 +1874,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -4,12 +4,12 @@
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="107"/>
<source>%1 (%2, %3)</source>
<translation type="unfinished"/>
<translation>%1 (%2, %3)</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="124"/>
<source>Checking for changes in &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Tarkistetaan muutoksia kohteessa &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="129"/>
@ -39,7 +39,7 @@
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="189"/>
<source>Syncing</source>
<translation type="unfinished"/>
<translation>Synkronoidaan</translation>
</message>
</context>
<context>
@ -66,7 +66,7 @@
<location filename="../src/common/filesystembase.cpp" line="459"/>
<location filename="../src/common/filesystembase.cpp" line="465"/>
<source>Could not move &apos;%1&apos; to &apos;%2&apos;</source>
<translation type="unfinished"/>
<translation>&apos;%1&apos; siirtäminen kohteeseen &apos;%2&apos; ei onnistunut</translation>
</message>
<message>
<location filename="../src/common/filesystembase.cpp" line="502"/>
@ -1507,7 +1507,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam
<message>
<location filename="../src/gui/legalnotice.cpp" line="30"/>
<source>&lt;p&gt;Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;Lisensoitu GNU General Public -lisenssin (GPL) versiolla 2.0 tai uudemmalla.&lt;/p&gt;</translation>
</message>
</context>
<context>
@ -1871,7 +1871,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
@ -2670,7 +2670,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="205"/>
<source>File Drop (Upload Only)</source>
<translation type="unfinished"/>
<translation>Tiedoston pudotus (Vain lähetys)</translation>
</message>
<message>
<location filename="../src/gui/sharelinkwidget.cpp" line="212"/>
@ -3761,7 +3761,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Palvelimen osoite</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

View File

@ -1889,7 +1889,7 @@ L&apos;assistant de mise à jour peut vous demandez des autorisations supplémen
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>L&apos;espace libre dans le dossier local est insuffisant !</translation>
</message>
</context>

View File

@ -176,7 +176,7 @@
<message>
<location filename="../src/gui/accountsettings.ui" line="152"/>
<source>Unchecked folders will be &lt;b&gt;removed&lt;/b&gt; from your local file system and will not be synchronized to this computer anymore</source>
<translation>Os cartafoles non seleccionados van seren &lt;b&gt;eliminados&lt;/b&gt; do seu sistema de ficheiros local e non volverán sincronizarse con esta computadora</translation>
<translation>Os cartafoles non seleccionados van seren &lt;b&gt;eliminados&lt;/b&gt; do seu sistema de ficheiros local e non volverán sincronizarse con este computador</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.ui" line="198"/>
@ -1888,7 +1888,7 @@ actualización pode pedir privilexios adicionais durante o procedemento.</transl
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Non hai espazo libre abondo no cartafol local!</translation>
</message>
</context>
@ -2127,7 +2127,7 @@ Recomendámoslle que non o use.</translation>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="532"/>
<source>The remote folder creation failed because the provided credentials are wrong!&lt;br/&gt;Please go back and check your credentials.&lt;/p&gt;</source>
<translation>A creación do cartafol remoto fracasou por por de seren incorrectas as credenciais!&lt;br/&gt;Volva atrás e comprobe as súas credenciais.&lt;/p&gt;</translation>
<translation>A creación do cartafol remoto fracasou por mor de seren incorrectas as credenciais!&lt;br/&gt;Volva atrás e comprobe as súas credenciais.&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="536"/>
@ -2243,7 +2243,7 @@ Recomendámoslle que non o use.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="602"/>
<source>File was deleted from server</source>
<translation>O ficheiro vai seren eliminado do servidor</translation>
<translation>O ficheiro vai ser eliminado do servidor</translation>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="655"/>
@ -2263,7 +2263,7 @@ Recomendámoslle que non o use.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="882"/>
<source>File has changed since discovery</source>
<translation>O ficheiro cambiou após seren atopado</translation>
<translation>O ficheiro cambiou após ser atopado</translation>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="938"/>
@ -3825,22 +3825,22 @@ Recomendámoslle que non o use.</translation>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="437"/>
<source>%n day ago</source>
<translation><numerusform>vai %n día</numerusform><numerusform>vai %n días</numerusform></translation>
<translation><numerusform>hai %n día</numerusform><numerusform>hai %n días</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="439"/>
<source>%n days ago</source>
<translation><numerusform>vai %n día</numerusform><numerusform>vai %n días</numerusform></translation>
<translation><numerusform>hai %n día</numerusform><numerusform>hai %n días</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="449"/>
<source>%n hour ago</source>
<translation><numerusform>vai %n hora</numerusform><numerusform>vai %n horas</numerusform></translation>
<translation><numerusform>hai %n hora</numerusform><numerusform>hai %n horas</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="451"/>
<source>%n hours ago</source>
<translation><numerusform>vai %n hora</numerusform><numerusform>vai %n horas</numerusform></translation>
<translation><numerusform>hai %n hora</numerusform><numerusform>hai %n horas</numerusform></translation>
</message>
<message>
<location filename="../src/common/utility.cpp" line="458"/>
@ -3850,22 +3850,22 @@ Recomendámoslle que non o use.</translation>
<message>
<location filename="../src/common/utility.cpp" line="460"/>
<source>Less than a minute ago</source>
<translation>Vai menos dun minuto</translation>
<translation>Hai menos dun minuto</translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="464"/>
<source>%n minute ago</source>
<translation><numerusform>vai %n minuto</numerusform><numerusform>vai %n minutos</numerusform></translation>
<translation><numerusform>hai %n minuto</numerusform><numerusform>hai %n minutos</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="466"/>
<source>%n minutes ago</source>
<translation><numerusform>vai %n minuto</numerusform><numerusform>vai %n minutos</numerusform></translation>
<translation><numerusform>hai %n minuto</numerusform><numerusform>hai %n minutos</numerusform></translation>
</message>
<message>
<location filename="../src/common/utility.cpp" line="470"/>
<source>Some time ago</source>
<translation>Vai algún tempo</translation>
<translation>Hai algún tempo</translation>
</message>
<message>
<location filename="../src/libsync/syncresult.cpp" line="145"/>
@ -3899,32 +3899,32 @@ Recomendámoslle que non o use.</translation>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="310"/>
<source>%n year(s)</source>
<translation><numerusform>vai %n ano</numerusform><numerusform>vai %n anos</numerusform></translation>
<translation><numerusform>vai %n ano</numerusform><numerusform>hai %n anos</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="311"/>
<source>%n month(s)</source>
<translation><numerusform>vai %n mes</numerusform><numerusform>vai %n meses</numerusform></translation>
<translation><numerusform>vai %n mes</numerusform><numerusform>hai %n meses</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="312"/>
<source>%n day(s)</source>
<translation><numerusform>vai %n día</numerusform><numerusform>vai %n días</numerusform></translation>
<translation><numerusform>vai %n día</numerusform><numerusform>hai %n días</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="313"/>
<source>%n hour(s)</source>
<translation><numerusform>vai %n hora</numerusform><numerusform>vai %n horas</numerusform></translation>
<translation><numerusform>vai %n hora</numerusform><numerusform>hai %n horas</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="314"/>
<source>%n minute(s)</source>
<translation><numerusform>vai %n minuto</numerusform><numerusform>vai %n minutos</numerusform></translation>
<translation><numerusform>vai %n minuto</numerusform><numerusform>hai %n minutos</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="315"/>
<source>%n second(s)</source>
<translation><numerusform>vai %n segundo</numerusform><numerusform>vai %n segundos</numerusform></translation>
<translation><numerusform>vai %n segundo</numerusform><numerusform>hai %n segundos</numerusform></translation>
</message>
<message>
<location filename="../src/common/utility.cpp" line="339"/>

4126
translations/client_he.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1886,8 +1886,8 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Nincs elég szabad hely a helyi mappában.</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
<context>
@ -3776,7 +3776,7 @@ Használata nem ajánlott.</translation>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Kiszolgálócím</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

View File

@ -525,7 +525,7 @@ skráakerfið eða sameignarmöppur, gætu verið með önnur takmörk.</transla
<message>
<location filename="../src/gui/activitywidget.cpp" line="183"/>
<source>Synced</source>
<translation type="unfinished"/>
<translation>Samstillt</translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="218"/>
@ -1880,7 +1880,7 @@ aðgerð til að leysa málið!&lt;/small&gt;&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1888,8 +1888,8 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Non c&apos;è spazio sufficiente nella cartella locale!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Non c&apos;è spazio libero sufficiente nella cartella locale!</translation>
</message>
</context>
<context>

View File

@ -519,7 +519,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="183"/>
<source>Synced</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="218"/>
@ -1289,7 +1289,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.ui" line="89"/>
<source>Show Server &amp;Notifications</source>
<translation></translation>
<translation>(&amp;N)</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="163"/>
@ -1299,7 +1299,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.ui" line="195"/>
<source>Ask for confirmation before synchronizing folders larger than</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="215"/>
@ -1310,7 +1310,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.ui" line="239"/>
<source>Ask for confirmation before synchronizing external storages</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="82"/>
@ -1873,7 +1873,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
@ -2379,7 +2379,7 @@ It is not advisable to use it.</source>
<location filename="../src/libsync/propagateupload.cpp" line="225"/>
<location filename="../src/libsync/propagateupload.cpp" line="602"/>
<source>Upload of %1 exceeds the quota for the folder</source>
<translation>%1 </translation>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="334"/>
@ -3194,7 +3194,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="483"/>
<source>Symbolic links are not supported in syncing.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="486"/>
@ -3646,7 +3646,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="148"/>
<source>Ask for confirmation before synchroni&amp;zing folders larger than</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="165"/>
@ -3657,7 +3657,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="174"/>
<source>Ask for confirmation before synchronizing e&amp;xternal storages</source>
<translation>(&amp;X)</translation>
<translation>(&amp;X)</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="198"/>

File diff suppressed because it is too large Load Diff

View File

@ -1869,7 +1869,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1877,8 +1877,8 @@ kan be om flere rettigheter under behandlingen.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Det er ikke nok ledig plass i den lokale mappen!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
<context>
@ -3505,7 +3505,7 @@ Det er ikke tilrådelig å bruke den.</translation>
<location filename="../src/gui/owncloudgui.cpp" line="308"/>
<location filename="../src/gui/owncloudgui.cpp" line="361"/>
<source>Synchronization is paused</source>
<translation type="unfinished"/>
<translation>Synkronisering er satt pause</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="356"/>
@ -3566,7 +3566,7 @@ Det er ikke tilrådelig å bruke den.</translation>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="841"/>
<source>Apps</source>
<translation type="unfinished"/>
<translation>Apper</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="898"/>

View File

@ -1891,8 +1891,8 @@ vragen om extra autorisaties tijdens installatie.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Er is niet genoeg vrije ruimte in de lokale map!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Er is niet genoeg ruimte beschikbaar in de lokale map!</translation>
</message>
</context>
<context>
@ -3781,7 +3781,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Serveradres</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

View File

@ -1460,9 +1460,9 @@ Kontynuacja synchronizacji w normalny sposób spowoduje, że wszystkie twoje pli
<source>Files or folders matching a pattern will not be synchronized.
Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data.</source>
<translation>Pliki lub foldery pasujące do szablonu nie będą zsynchronizowane.
<translation>Pliki lub katalogi pasujące do szablonu nie będą zsynchronizowane.
Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawnienia katalogu dopuszczają usuwanie.</translation>
Elementy, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawnienia katalogu dopuszczają usuwanie. Jest to przydatne dla metadanych.</translation>
</message>
<message>
<location filename="../src/gui/ignorelisteditor.cpp" line="133"/>
@ -1887,8 +1887,8 @@ o dodatkowe uprawnienia podczas procesu aktualizacji.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Brakuje wolnego miejsca w folderze lokalnym!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>W katalogu lokalnym nie ma wystarczającej ilości wolnego miejsca!</translation>
</message>
</context>
<context>
@ -2105,7 +2105,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="508"/>
<source>creating folder on Nextcloud: %1</source>
<translation>tworzenie folderu w usłudze NextCloud: %1</translation>
<translation>tworzenie katalogu w Nextcloud: %1</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="524"/>
@ -3316,7 +3316,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1482"/>
<source>Move not allowed, item restored</source>
<translation>Przenoszenie niedozwolone, obiekt przywrócony</translation>
<translation>Przenoszenie niedozwolone, element przywrócony</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1493"/>
@ -4137,7 +4137,7 @@ Kliknij</translation>
<message>
<location filename="../src/gui/guiutility.cpp" line="58"/>
<source>Could not open email client</source>
<translation>Nie można uruchomić klienta email</translation>
<translation>Nie można uruchomić klienta e-mail</translation>
</message>
<message>
<location filename="../src/gui/guiutility.cpp" line="59"/>

View File

@ -1876,7 +1876,7 @@ poderá pedir por privilégios adicionais durante o processo.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -233,7 +233,7 @@
<message>
<location filename="../src/gui/accountsettings.cpp" line="234"/>
<source>Show E2E mnemonic</source>
<translation>Mostrar mnemônico E2E</translation>
<translation>Exibir mnemônico E2E</translation>
</message>
<message>
<location filename="../src/gui/accountsettings.cpp" line="542"/>
@ -1298,7 +1298,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej
<message>
<location filename="../src/gui/generalsettings.ui" line="89"/>
<source>Show Server &amp;Notifications</source>
<translation>Mostrar &amp;Notificações do Servidor</translation>
<translation>Exibir &amp;Notificações do Servidor</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="163"/>
@ -1339,7 +1339,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej
<message>
<location filename="../src/gui/generalsettings.ui" line="250"/>
<source>Show sync folders in &amp;Explorer&apos;s Navigation Pane</source>
<translation>Mostrar pastas de sincronização no &amp;Painel de Navegação do Explorer</translation>
<translation>Exibir pastas de sincronização no Painel de Navegação do &amp;Explorer</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="267"/>
@ -1887,8 +1887,8 @@ pode solicitar por privilégios adicionais durante o processo.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Não espaço suficiente na pasta local!</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Não espaço livre na pasta local!</translation>
</message>
</context>
<context>

View File

@ -102,7 +102,7 @@
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="131"/>
<source>Select a remote destination folder</source>
<translation>Выберите папку на сервере, с которой выполняться синхронизация</translation>
<translation>Выберите папку на сервере, с которой будет выполняться синхронизация</translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="143"/>
@ -1881,8 +1881,8 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<translation>Недостаточно свободного места в локальной папке.</translation>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
<context>
@ -3362,12 +3362,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/webview.cpp" line="199"/>
<source>Invalid certificate detected</source>
<translation type="unfinished"/>
<translation>Обнаружен недействительный сертификат</translation>
</message>
<message>
<location filename="../src/gui/wizard/webview.cpp" line="200"/>
<source>The host &quot;%1&quot; provided an invalid certitiface. Continue?</source>
<translation type="unfinished"/>
<translation>Хост «%1» предоставил недействительный сертификат. Продолжить?</translation>
</message>
</context>
<context>
@ -3771,7 +3771,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Адрес сервера</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

View File

@ -9,27 +9,27 @@
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="124"/>
<source>Checking for changes in &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Kontrolujú sa zmeny v %1</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="129"/>
<source>Syncing %1 of %2 (%3 left)</source>
<translation type="unfinished"/>
<translation>Synchronizuje sa %1 z %2 (zostáva %3)</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="134"/>
<source>Syncing %1 of %2</source>
<translation type="unfinished"/>
<translation>Synchronizuje sa %1 z %2</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="141"/>
<source>Syncing %1 (%2 left)</source>
<translation type="unfinished"/>
<translation>Synchronizuje sa %1 (zostáva %2)</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="144"/>
<source>Syncing %1</source>
<translation type="unfinished"/>
<translation>Synchronizuje sa %1</translation>
</message>
<message>
<location filename="../src/gui/cloudproviders/cloudproviderwrapper.cpp" line="186"/>
@ -47,7 +47,7 @@
<message>
<location filename="../src/gui/mnemonicdialog.ui" line="23"/>
<source>Dialog</source>
<translation type="unfinished"/>
<translation>Dialóg</translation>
</message>
<message>
<location filename="../src/gui/mnemonicdialog.ui" line="58"/>
@ -1876,7 +1876,7 @@ môžu byť vyžadované dodatočné oprávnenia.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>
@ -3766,7 +3766,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Adresa servera</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>
@ -3813,22 +3813,22 @@ Nie je vhodné ju používať.</translation>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="437"/>
<source>%n day ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n dňom</numerusform><numerusform>pred %n dňami</numerusform><numerusform>pred %n dňami</numerusform><numerusform>pred %n dňami</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="439"/>
<source>%n days ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n dňom</numerusform><numerusform>pred %n dňami</numerusform><numerusform>pred %n dňami</numerusform><numerusform>pred %n dňami</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="449"/>
<source>%n hour ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n hodinou</numerusform><numerusform>pred %n hodinami</numerusform><numerusform>pred %n hodinami</numerusform><numerusform>pred %n hodinami</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="451"/>
<source>%n hours ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n hodinou</numerusform><numerusform>pred %n hodinami</numerusform><numerusform>pred %n hodinami</numerusform><numerusform>pred %n hodinami</numerusform></translation>
</message>
<message>
<location filename="../src/common/utility.cpp" line="458"/>
@ -3843,12 +3843,12 @@ Nie je vhodné ju používať.</translation>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="464"/>
<source>%n minute ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n minútou</numerusform><numerusform>pred %n minútami</numerusform><numerusform>pred %n minútami</numerusform><numerusform>pred %n minútami</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/common/utility.cpp" line="466"/>
<source>%n minutes ago</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>pred %n minútou</numerusform><numerusform>pred %n minútami</numerusform><numerusform>pred %n minútami</numerusform><numerusform>pred %n minútami</numerusform></translation>
</message>
<message>
<location filename="../src/common/utility.cpp" line="470"/>
@ -3925,17 +3925,17 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/common/checksums.cpp" line="233"/>
<source>The checksum header is malformed.</source>
<translation type="unfinished"/>
<translation>Hlavička kontrolného súčtu je poškodená.</translation>
</message>
<message>
<location filename="../src/common/checksums.cpp" line="248"/>
<source>The checksum header contained an unknown checksum type &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Hlavička kontrolného súčtu obsahovala neznámy typ kontrolného súčtu %1</translation>
</message>
<message>
<location filename="../src/common/checksums.cpp" line="252"/>
<source>The downloaded file does not match the checksum, it will be resumed.</source>
<translation type="unfinished"/>
<translation>Stiahnutý súbor nemá správny kontrolný súčet, bude stiahnutý znovu.</translation>
</message>
</context>
<context>
@ -3964,7 +3964,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/libsync/theme.cpp" line="328"/>
<source>&lt;p&gt;&lt;small&gt;Built from Git revision &lt;a href=&quot;%1&quot;&gt;%2&lt;/a&gt; on %3, %4 using Qt %5, %6&lt;/small&gt;&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;&lt;small&gt;Zostavené z Git revízie &lt;a href=&quot;%1&quot;&gt;%2&lt;/a&gt; na %3, %4 s použitím Qt %5, %6&lt;/small&gt;&lt;/p&gt;</translation>
</message>
</context>
<context>
@ -4120,7 +4120,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/guiutility.cpp" line="35"/>
<source>There was an error when launching the browser to go to URL %1. Maybe no default browser is configured?</source>
<translation type="unfinished"/>
<translation>Pri spustení prehliadača sa vyskytla chyba, keď sa prejsť na adresu URL %1. Možno nie je nakonfigurovaný žiadny predvolený prehliadač?</translation>
</message>
<message>
<location filename="../src/gui/guiutility.cpp" line="58"/>
@ -4130,7 +4130,7 @@ Nie je vhodné ju používať.</translation>
<message>
<location filename="../src/gui/guiutility.cpp" line="59"/>
<source>There was an error when launching the email client to create a new message. Maybe no default email client is configured?</source>
<translation type="unfinished"/>
<translation>Pri vytváraní novej správy sa pri spustení e-mailového klienta vyskytla chyba. Možno nie je nakonfigurovaný žiadny predvolený e-mailový klient?</translation>
</message>
</context>
</TS>

View File

@ -1876,7 +1876,7 @@ zahteva skrbniška dovoljenja za dokončanje opravila.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -830,7 +830,10 @@ This means that the synchronization client might not upload local changes immedi
These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore.
If you decide to keep the files, they will be re-synced with the server if you have rights to do so.
If you decide to delete the files, they will be unavailable to you, unless you are the owner.</source>
<translation type="unfinished"/>
<translation>Сви фајлови из синхронизационе фасцикле &apos;%1&apos; су избрисани на серверу.
Ово брисање ће бити синхронизовано са локалном синхронизационом фасциклом и тиме ће ови фајлови постати недоступни, осим ако немате право њиховог враћања.
Ако одлучите да задржите фајлове, они ће бити опет синхронизовани назад са сервером, уколико имате права то да урадите.
Ако одлучите да обришете фајлове, они ће Вам постати недоступни, осим ако нисте власник.</translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="1080"/>
@ -1392,7 +1395,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="114"/>
<source>Reading from keychain failed with error: &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Читање са привеска неуспело уз грешку: &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="120"/>
@ -1457,7 +1460,9 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<source>Files or folders matching a pattern will not be synchronized.
Items where deletion is allowed will be deleted if they prevent a directory from being removed. This is useful for meta data.</source>
<translation type="unfinished"/>
<translation>Фајлови или фасцикле које одговарају шаблону неће бити синхронизоване.
Ставке над којима је дозвољено брисања ће бити избрисане уколико ометају да се директоријум избрише. Ово је корисно за мета податке.</translation>
</message>
<message>
<location filename="../src/gui/ignorelisteditor.cpp" line="133"/>
@ -1510,12 +1515,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<message>
<location filename="../src/gui/legalnotice.cpp" line="27"/>
<source>&lt;p&gt;Copyright 2017-2018 Nextcloud GmbH&lt;br /&gt;Copyright 2012-2018 ownCloud GmbH&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;Ауторска права 2017-2018 Nextcloud GmbH&lt;br /&gt;Ауторска права 2012-2018 ownCloud GmbH&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/gui/legalnotice.cpp" line="30"/>
<source>&lt;p&gt;Licensed under the GNU General Public License (GPL) Version 2.0 or any later version.&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;Објављено под ГНУ општом јавном лиценцом (ОЈЛ) верзија 2.0 или било која новија верзија.&lt;/p&gt;</translation>
</message>
</context>
<context>
@ -1550,7 +1555,9 @@ Items where deletion is allowed will be deleted if they prevent a directory from
<source>When this option is enabled and no other logging is configured, logs will be written to a temporary folder and expire after a few hours. This setting persists across client restarts.
Logs will be written to %1</source>
<translation type="unfinished"/>
<translation>Када је ова опција укључена, и ниједно друго логовање није подешено, логови ће бити уписани у привремену фасциклу и истицаће после неколико сати. Ово подешавање се задржава након поновних стартовања клијента.
Логови ће бити уписани у %1</translation>
</message>
<message>
<location filename="../src/gui/logbrowser.cpp" line="115"/>
@ -1880,7 +1887,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Нема довољно слободног места у локалној фасцикли!</translation>
</message>
</context>
@ -3262,7 +3269,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="862"/>
<source>Unable to read the blacklist from the local database</source>
<translation type="unfinished"/>
<translation>Не могу да читам листу ставки игнорисаних за синхронизацију из локалне базе</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="903"/>
@ -3361,12 +3368,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/webview.cpp" line="199"/>
<source>Invalid certificate detected</source>
<translation type="unfinished"/>
<translation>Детектован неисправан сертификат</translation>
</message>
<message>
<location filename="../src/gui/wizard/webview.cpp" line="200"/>
<source>The host &quot;%1&quot; provided an invalid certitiface. Continue?</source>
<translation type="unfinished"/>
<translation>Сервер %1 је понудио неисправан сертификат. Наставити?</translation>
</message>
</context>
<context>
@ -3472,7 +3479,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="234"/>
<source>The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk.</source>
<translation type="unfinished"/>
<translation>Сервер на налогу %1 ради са старом и неподржаном верзијом %2. Коришћење овог клијента са неподржаном серверском верзијом није тестирано и може потенцијално бити опасно. Настављате на сопствену одговорност.</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="273"/>
@ -3770,7 +3777,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="288"/>
<source>Server Address</source>
<translation type="unfinished"/>
<translation>Адреса сервера</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudsetupnocredspage.ui" line="304"/>

View File

@ -1887,7 +1887,7 @@ ytterligare rättigheter under processen.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Det finns inte tillräckligt med ledigt utrymme i den lokala mappen!</translation>
</message>
</context>

View File

@ -1876,7 +1876,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -1886,7 +1886,7 @@ güncelleyici başka izinler isteyebilir.</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation>Yerel klasörde yeterli boş alan yok!</translation>
</message>
</context>

View File

@ -1867,7 +1867,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>

View File

@ -181,7 +181,7 @@
<message>
<location filename="../src/gui/accountsettings.ui" line="198"/>
<source>Synchronize all</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/gui/accountsettings.ui" line="205"/>
@ -1886,7 +1886,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation></translation>
</message>
</context>

View File

@ -1870,7 +1870,7 @@ for additional privileges during the process.</source>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="385"/>
<source>There is no enough free space in the local folder!</source>
<source>There isn&apos;t enough free space in the local folder!</source>
<translation type="unfinished"/>
</message>
</context>