Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 3bb364980c |
@@ -2,7 +2,7 @@
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar las notas de la versión"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "El/los proceso/s ${APPLICATION_EXECUTABLE} debe/n ser detenidos.$\n¿Quiere que el instalador lo haga por usted?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Deteniendo el/los proceso/s ${APPLICATION_EXECUTABLE}."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "¡Proceso a finalizar no encontrado!"
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "¡Proceso para finalizar no encontrado!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda de instalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
|
||||
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
||||
|
||||
+1
-2
@@ -42,8 +42,7 @@ repositories`_ to see all the Linux client repos.
|
||||
echo 'deb-src
|
||||
http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud-client.list
|
||||
|
||||
2. Install the dependencies using the following commands for your specific Linux
|
||||
distribution. Make sure the repositories for source packages are enabled.
|
||||
2. Install the dependencies using the following commands for your specific Linux distribution:
|
||||
|
||||
* Debian/Ubuntu: ``apt-get update; apt-get build-dep owncloud-client``
|
||||
* openSUSE/SLES: ``zypper ref; zypper si -d owncloud-client``
|
||||
|
||||
@@ -355,66 +355,6 @@ 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
|
||||
Comment[oc]=@APPLICATION_NAME@ sincronizacion del client
|
||||
GenericName[oc]=Dorsièr de Sincronizacion
|
||||
|
||||
@@ -4,7 +4,6 @@ if( UNIX AND NOT APPLE )
|
||||
|
||||
configure_file(syncstate.py syncstate.py COPYONLY)
|
||||
configure_file(syncstate.py syncstate_nemo.py COPYONLY)
|
||||
configure_file(syncstate.py syncstate_caja.py COPYONLY)
|
||||
|
||||
# Call the setupappname.sh script to set the custom app name.
|
||||
set (cmd "${CMAKE_CURRENT_SOURCE_DIR}/setappname.sh")
|
||||
@@ -19,17 +18,9 @@ if( UNIX AND NOT APPLE )
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ERROR_VARIABLE errors OUTPUT_VARIABLE out)
|
||||
|
||||
# Create a caja plugin script from the nautilus one.
|
||||
# cajacmd copies the syncstate.py and performs string replacement.
|
||||
set (cajacmd "${CMAKE_CURRENT_SOURCE_DIR}/createcajaplugin.sh")
|
||||
execute_process(COMMAND ${cajacmd}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ERROR_VARIABLE errors OUTPUT_VARIABLE out)
|
||||
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${DATADIR}/nautilus-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${DATADIR}/nemo-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_caja.py DESTINATION ${DATADIR}/caja-python/extensions RENAME syncstate-${APPLICATION_SHORTNAME}.py)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# this script creates a plugin for caja, just by replacing
|
||||
# all occurences of Nautilus with Caja (case sensitive).
|
||||
|
||||
sed -i.org -e 's/Nautilus/Caja/g' syncstate_caja.py
|
||||
sed -i.org -e 's/nautilus/caja/g' syncstate_caja.py
|
||||
+161
-17
@@ -1,21 +1,165 @@
|
||||
The MIT License (MIT)
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (c) 2011 Morgan Leborgne
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
+20
-23
@@ -1,27 +1,24 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2011 Morgan Leborgne
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
*
|
||||
* This file is part of QProgressIndicator,
|
||||
* an open-source recent files menu widget
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Morgan Leborgne
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with QRecentFilesMenu. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#include "QProgressIndicator.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
+24
-27
@@ -1,27 +1,24 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2011 Morgan Leborgne
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
*
|
||||
* This file is part of QProgressIndicator,
|
||||
* an open-source recent files menu widget
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Morgan Leborgne
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with QRecentFilesMenu. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#ifndef QPROGRESSINDICATOR_H
|
||||
#define QPROGRESSINDICATOR_H
|
||||
|
||||
@@ -67,8 +64,8 @@ public:
|
||||
*/
|
||||
const QColor & color() const { return m_color; }
|
||||
|
||||
virtual QSize sizeHint() const;
|
||||
int heightForWidth(int w) const;
|
||||
virtual QSize sizeHint() const Q_DECL_OVERRIDE;
|
||||
int heightForWidth(int w) const Q_DECL_OVERRIDE;
|
||||
public slots:
|
||||
/*! Starts the spin animation.
|
||||
\sa stopAnimation isAnimated
|
||||
@@ -98,8 +95,8 @@ public slots:
|
||||
*/
|
||||
void setColor(const QColor & color);
|
||||
protected:
|
||||
virtual void timerEvent(QTimerEvent * event);
|
||||
virtual void paintEvent(QPaintEvent * event);
|
||||
virtual void timerEvent(QTimerEvent * event) Q_DECL_OVERRIDE;
|
||||
virtual void paintEvent(QPaintEvent * event) Q_DECL_OVERRIDE;
|
||||
private:
|
||||
int m_angle;
|
||||
int m_timerId;
|
||||
|
||||
+1
-1
@@ -11,4 +11,4 @@ Qt 4.4.x.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
LGPL
|
||||
|
||||
@@ -343,7 +343,7 @@ void Application::slotownCloudWizardDone( int res )
|
||||
shouldSetAutoStart = shouldSetAutoStart
|
||||
&& QCoreApplication::applicationDirPath().startsWith("/Applications/");
|
||||
#endif
|
||||
Utility::setLaunchOnStartup(_theme->appName(), _theme->appNameGUI(), shouldSetAutoStart);
|
||||
Utility::setLaunchOnStartup(_theme->appName(), _theme->appNameGUI(), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -188,7 +188,7 @@ QString Folder::shortGuiLocalPath() const
|
||||
}
|
||||
|
||||
|
||||
bool Folder::ignoreHiddenFiles()
|
||||
bool Folder::ignoreHiddenFiles() const
|
||||
{
|
||||
bool re(_definition.ignoreHiddenFiles);
|
||||
return re;
|
||||
@@ -758,6 +758,8 @@ void Folder::startSync(const QStringList &pathList)
|
||||
|
||||
QMetaObject::invokeMethod(_engine.data(), "startSync", Qt::QueuedConnection);
|
||||
|
||||
// disable events until syncing is done
|
||||
// _watcher->setEventsEnabled(false);
|
||||
emit syncStarted();
|
||||
}
|
||||
|
||||
@@ -821,6 +823,9 @@ void Folder::slotSyncFinished(bool success)
|
||||
bubbleUpSyncResult();
|
||||
|
||||
bool anotherSyncNeeded = _engine->isAnotherSyncNeeded();
|
||||
// _watcher->setEventsEnabledDelayed(2000);
|
||||
|
||||
|
||||
|
||||
if (_csyncError) {
|
||||
_syncResult.setStatus(SyncResult::Error);
|
||||
|
||||
+1
-1
@@ -167,7 +167,7 @@ public:
|
||||
* Ignore syncing of hidden files or not. This is defined in the
|
||||
* folder definition
|
||||
*/
|
||||
bool ignoreHiddenFiles();
|
||||
bool ignoreHiddenFiles() const;
|
||||
void setIgnoreHiddenFiles(bool ignore);
|
||||
|
||||
// Used by the Socket API
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <QStringList>
|
||||
#include <QObject>
|
||||
#include <QVarLengthArray>
|
||||
#include <syncengine.h>
|
||||
|
||||
namespace OCC {
|
||||
|
||||
@@ -48,31 +49,6 @@ FolderWatcherPrivate::~FolderWatcherPrivate()
|
||||
|
||||
}
|
||||
|
||||
// attention: result list passed by reference!
|
||||
bool FolderWatcherPrivate::findFoldersBelow( const QDir& dir, QStringList& fullList )
|
||||
{
|
||||
bool ok = true;
|
||||
if( !(dir.exists() && dir.isReadable()) ) {
|
||||
qDebug() << "Non existing path coming in: " << dir.absolutePath();
|
||||
ok = false;
|
||||
} else {
|
||||
QStringList nameFilter;
|
||||
nameFilter << QLatin1String("*");
|
||||
QDir::Filters filter = QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden;
|
||||
const QStringList pathes = dir.entryList(nameFilter, filter);
|
||||
|
||||
QStringList::const_iterator constIterator;
|
||||
for (constIterator = pathes.constBegin(); constIterator != pathes.constEnd();
|
||||
++constIterator) {
|
||||
const QString fullPath(dir.path()+QLatin1String("/")+(*constIterator));
|
||||
fullList.append(fullPath);
|
||||
ok = findFoldersBelow(QDir(fullPath), fullList);
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
void FolderWatcherPrivate::inotifyRegisterPath(const QString& path)
|
||||
{
|
||||
if( !path.isEmpty()) {
|
||||
@@ -88,41 +64,47 @@ void FolderWatcherPrivate::inotifyRegisterPath(const QString& path)
|
||||
|
||||
void FolderWatcherPrivate::slotAddFolderRecursive(const QString &path)
|
||||
{
|
||||
int subdirs = 0;
|
||||
qDebug() << "(+) Watcher:" << path;
|
||||
|
||||
QDir inPath(path);
|
||||
inotifyRegisterPath(inPath.absolutePath());
|
||||
|
||||
const QStringList watchedFolders = _watches.values();
|
||||
|
||||
QStringList allSubfolders;
|
||||
if( !findFoldersBelow(QDir(path), allSubfolders)) {
|
||||
qDebug() << "Could not traverse all sub folders";
|
||||
}
|
||||
// qDebug() << "currently watching " << watchedFolders;
|
||||
QStringListIterator subfoldersIt(allSubfolders);
|
||||
while (subfoldersIt.hasNext()) {
|
||||
QString subfolder = subfoldersIt.next();
|
||||
// qDebug() << " (**) subfolder: " << subfolder;
|
||||
QDir folder (subfolder);
|
||||
if (folder.exists() && !watchedFolders.contains(folder.absolutePath())) {
|
||||
subdirs++;
|
||||
if( _parent->pathIsIgnored(subfolder) ) {
|
||||
qDebug() << "* Not adding" << folder.path();
|
||||
continue;
|
||||
}
|
||||
inotifyRegisterPath(folder.absolutePath());
|
||||
} else {
|
||||
qDebug() << " `-> discarded:" << folder.path();
|
||||
}
|
||||
}
|
||||
|
||||
int subdirs = addFolderRecursiveHelper(path, watchedFolders.toSet());
|
||||
if (subdirs >0) {
|
||||
qDebug() << " `-> and" << subdirs << "subdirectories";
|
||||
}
|
||||
}
|
||||
|
||||
int FolderWatcherPrivate::addFolderRecursiveHelper(const QString &path, const QSet<QString> &watchedFolders)
|
||||
{
|
||||
QDir dir(path);
|
||||
if( !(dir.exists() && dir.isReadable()) ) {
|
||||
qDebug() << "Non existing path coming in: " << dir.absolutePath();
|
||||
return 0;
|
||||
}
|
||||
int subdirs = 1;
|
||||
|
||||
inotifyRegisterPath(dir.absolutePath());
|
||||
|
||||
QDir::Filters filter = QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden;
|
||||
const QStringList pathes = dir.entryList(filter);
|
||||
for (auto constIterator = pathes.constBegin(); constIterator != pathes.constEnd(); ++constIterator) {
|
||||
const QString subfolder = path + QLatin1String("/") + (*constIterator);
|
||||
QDir folder(subfolder);
|
||||
if (folder.exists() && !watchedFolders.contains(subfolder)) {
|
||||
#ifndef OWNCLOUD_TEST // InotifyWatcherTest is not interested in ignored files and does not link against the folder
|
||||
if( _parent->_folder->syncEngine().excludedFiles().isExcluded(
|
||||
subfolder, path, _parent->_folder->ignoreHiddenFiles())) {
|
||||
qDebug() << "* Not adding" << folder.path();
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
subdirs += addFolderRecursiveHelper(subfolder, watchedFolders);
|
||||
} else {
|
||||
qDebug() << " `-> discarded:" << folder.path();
|
||||
}
|
||||
}
|
||||
return subdirs;
|
||||
}
|
||||
|
||||
|
||||
void FolderWatcherPrivate::slotReceivedNotification(int fd)
|
||||
{
|
||||
int len;
|
||||
|
||||
@@ -33,7 +33,6 @@ class FolderWatcherPrivate : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FolderWatcherPrivate() { }
|
||||
FolderWatcherPrivate(FolderWatcher *p, const QString &path);
|
||||
~FolderWatcherPrivate();
|
||||
|
||||
@@ -45,10 +44,9 @@ protected slots:
|
||||
void slotAddFolderRecursive(const QString &path);
|
||||
|
||||
protected:
|
||||
bool findFoldersBelow( const QDir& dir, QStringList& fullList );
|
||||
int addFolderRecursiveHelper(const QString &path, const QSet<QString> &watchedFolders);
|
||||
void inotifyRegisterPath(const QString& path);
|
||||
|
||||
private:
|
||||
FolderWatcher *_parent;
|
||||
|
||||
QString _folder;
|
||||
|
||||
@@ -611,12 +611,7 @@ void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles)
|
||||
bool ConfigFile::monoIcons() const
|
||||
{
|
||||
QSettings settings(configFile(), QSettings::IniFormat);
|
||||
bool monoDefault = false; // On Mac we want bw by default
|
||||
#ifdef Q_OS_MAC
|
||||
// OEM themes are not obliged to ship mono icons
|
||||
monoDefault = (0 == (strcmp("ownCloud",APPLICATION_NAME)));
|
||||
#endif
|
||||
return settings.value(QLatin1String(monoIconsC), monoDefault).toBool();
|
||||
return settings.value(QLatin1String(monoIconsC), false).toBool();
|
||||
}
|
||||
|
||||
void ConfigFile::setMonoIcons(bool useMonoIcons)
|
||||
|
||||
@@ -384,8 +384,6 @@ void OwncloudPropagator::start(const SyncFileItemVector& items)
|
||||
// will delete directories, so defer execution
|
||||
directoriesToRemove.prepend(current);
|
||||
removedDirectory = item->_file + "/";
|
||||
} else if (item->_instruction == CSYNC_INSTRUCTION_NEW || item->_instruction == CSYNC_INSTRUCTION_SYNC){
|
||||
directories.top().second->appendSyncJob(current);
|
||||
} else {
|
||||
directories.top().second->append(current);
|
||||
}
|
||||
@@ -531,7 +529,7 @@ void OwncloudPropagator::scheduleNextJob()
|
||||
}
|
||||
}
|
||||
if (_activeJobList.count() < maximumActiveJob() + likelyFinishedQuicklyCount) {
|
||||
qDebug() << "Can pump in another request! activeJobs =" << _activeJobList.count();
|
||||
qDebug() << "Can pump in another request!";
|
||||
if (_rootJob->scheduleNextJob()) {
|
||||
QTimer::singleShot(0, this, SLOT(scheduleNextJob()));
|
||||
}
|
||||
@@ -595,11 +593,7 @@ bool PropagateDirectory::scheduleNextJob()
|
||||
_state = Running;
|
||||
|
||||
if (!_firstJob && _subJobs.isEmpty()) {
|
||||
if (!_scheduledSyncJobs && _syncJobsScheduler) {
|
||||
scheduleSyncJobs();
|
||||
} else {
|
||||
finalize();
|
||||
}
|
||||
finalize();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -663,23 +657,12 @@ void PropagateDirectory::slotSubJobFinished(SyncFileItem::Status status)
|
||||
// check if we finished
|
||||
if (_jobsFinished >= totalJobs) {
|
||||
Q_ASSERT(!_runningNow); // how can we be finished if there are still jobs running now
|
||||
if (!_scheduledSyncJobs && _syncJobsScheduler) {
|
||||
scheduleSyncJobs();
|
||||
} else {
|
||||
finalize();
|
||||
}
|
||||
finalize();
|
||||
} else {
|
||||
emit ready();
|
||||
}
|
||||
}
|
||||
|
||||
void PropagateDirectory::scheduleSyncJobs() {
|
||||
_scheduledSyncJobs = true;
|
||||
//at this point, scheduler will be destroyed together with _subJobs
|
||||
_subJobs.append(_syncJobsScheduler.data());
|
||||
emit ready();
|
||||
}
|
||||
|
||||
void PropagateDirectory::finalize()
|
||||
{
|
||||
bool ok = true;
|
||||
@@ -728,80 +711,6 @@ qint64 PropagateDirectory::committedDiskSpace() const
|
||||
return needed;
|
||||
}
|
||||
|
||||
// ================================================================================
|
||||
|
||||
PropagatorJob::JobParallelism PropagateSyncItems::parallelism()
|
||||
{
|
||||
return FullParallelism;
|
||||
}
|
||||
|
||||
|
||||
bool PropagateSyncItems::scheduleNextJob()
|
||||
{
|
||||
if (_state == Finished) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_state == NotYetStarted) {
|
||||
_state = Running;
|
||||
|
||||
if (_syncJobs.isEmpty()) {
|
||||
finalize();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
while (!_syncJobs.isEmpty()) {
|
||||
PropagatorJob *next = _syncJobs.takeFirst();
|
||||
if (next->_state == Finished) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (possiblyRunNextJob(next)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Q_ASSERT(next->_state == Running);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PropagateSyncItems::slotSubJobFinished(SyncFileItem::Status status)
|
||||
{
|
||||
if (status == SyncFileItem::FatalError) {
|
||||
abort();
|
||||
_hasError = status;
|
||||
finalize();
|
||||
return;
|
||||
} else if (status == SyncFileItem::NormalError || status == SyncFileItem::SoftError) {
|
||||
_hasError = status;
|
||||
}
|
||||
|
||||
_jobsFinished++;
|
||||
// We finished processing all the jobs
|
||||
// check if we finished
|
||||
if (_syncJobs.isEmpty() && (_syncJobsCount == _jobsFinished)) {
|
||||
finalize();
|
||||
} else {
|
||||
emit ready();
|
||||
}
|
||||
}
|
||||
|
||||
void PropagateSyncItems::finalize()
|
||||
{
|
||||
_state = Finished;
|
||||
emit finished(_hasError == SyncFileItem::NoStatus ? SyncFileItem::Success : _hasError);
|
||||
}
|
||||
|
||||
qint64 PropagateSyncItems::committedDiskSpace() const
|
||||
{
|
||||
qint64 needed = 0;
|
||||
foreach (PropagatorJob* job, _syncJobs) {
|
||||
needed += job->committedDiskSpace();
|
||||
}
|
||||
return needed;
|
||||
}
|
||||
|
||||
CleanupPollsJob::~CleanupPollsJob()
|
||||
{}
|
||||
|
||||
|
||||
@@ -176,59 +176,6 @@ public slots:
|
||||
virtual void start() = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Propagate sync items within a specific folder, and all its sub entries.
|
||||
* @ingroup libsync
|
||||
*/
|
||||
class PropagateSyncItems : public PropagatorJob {
|
||||
Q_OBJECT
|
||||
public:
|
||||
// all the sub files or sub directories.
|
||||
QList<PropagatorJob *> _syncJobs;
|
||||
|
||||
int _jobsFinished; // number of jobs that have completed
|
||||
int _syncJobsCount; // number of subJobs running right now
|
||||
SyncFileItem::Status _hasError; // NoStatus, or NormalError / SoftError if there was an error
|
||||
|
||||
PropagateSyncItems(OwncloudPropagator *propagator)
|
||||
: PropagatorJob(propagator)
|
||||
, _jobsFinished(0), _syncJobsCount(0), _hasError(SyncFileItem::NoStatus)
|
||||
{ }
|
||||
|
||||
virtual ~PropagateSyncItems() {
|
||||
qDeleteAll(_syncJobs);
|
||||
}
|
||||
|
||||
void append(PropagatorJob *subJob) {
|
||||
_syncJobs.append(subJob);
|
||||
_syncJobsCount++;
|
||||
}
|
||||
|
||||
virtual bool scheduleNextJob() Q_DECL_OVERRIDE;
|
||||
virtual JobParallelism parallelism() Q_DECL_OVERRIDE;
|
||||
virtual void abort() Q_DECL_OVERRIDE {
|
||||
foreach (PropagatorJob *j, _syncJobs)
|
||||
j->abort();
|
||||
}
|
||||
|
||||
void finalize();
|
||||
|
||||
qint64 committedDiskSpace() const Q_DECL_OVERRIDE;
|
||||
|
||||
private slots:
|
||||
bool possiblyRunNextJob(PropagatorJob *next) {
|
||||
if (next->_state == NotYetStarted) {
|
||||
connect(next, SIGNAL(finished(SyncFileItem::Status)), this, SLOT(slotSubJobFinished(SyncFileItem::Status)), Qt::QueuedConnection);
|
||||
connect(next, SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)),
|
||||
this, SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)));
|
||||
connect(next, SIGNAL(progress(const SyncFileItem &,quint64)), this, SIGNAL(progress(const SyncFileItem &,quint64)));
|
||||
connect(next, SIGNAL(ready()), this, SIGNAL(ready()));
|
||||
}
|
||||
return next->scheduleNextJob();
|
||||
}
|
||||
|
||||
void slotSubJobFinished(SyncFileItem::Status status);
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Propagate a directory, and all its sub entries.
|
||||
@@ -240,12 +187,7 @@ public:
|
||||
// e.g: create the directory
|
||||
QScopedPointer<PropagateItemJob>_firstJob;
|
||||
|
||||
// all the new and changed files without conflicts scheduler class
|
||||
// remark: do not QScopedPointer, since this class is either deleted via qDeleteAll(_subJobs) or usual delete,
|
||||
// depending on ownership determined by flag _scheduledSyncJobs
|
||||
QPointer<PropagateSyncItems> _syncJobsScheduler;
|
||||
|
||||
// all the other file operation or sub directories.
|
||||
// all the sub files or sub directories.
|
||||
QVector<PropagatorJob *> _subJobs;
|
||||
|
||||
SyncFileItemPtr _item;
|
||||
@@ -253,18 +195,13 @@ public:
|
||||
int _jobsFinished; // number of jobs that have completed
|
||||
int _runningNow; // number of subJobs running right now
|
||||
SyncFileItem::Status _hasError; // NoStatus, or NormalError / SoftError if there was an error
|
||||
bool _scheduledSyncJobs; // verify if already scheduled execution of files sync jobs
|
||||
|
||||
explicit PropagateDirectory(OwncloudPropagator *propagator, const SyncFileItemPtr &item = SyncFileItemPtr(new SyncFileItem))
|
||||
: PropagatorJob(propagator)
|
||||
, _firstJob(0), _syncJobsScheduler(0), _item(item), _jobsFinished(0), _runningNow(0), _hasError(SyncFileItem::NoStatus), _scheduledSyncJobs(false)
|
||||
, _firstJob(0), _item(item), _jobsFinished(0), _runningNow(0), _hasError(SyncFileItem::NoStatus)
|
||||
{ }
|
||||
|
||||
virtual ~PropagateDirectory() {
|
||||
// check whether the owner of the pointer is _subJobs or PropagateDirectory class
|
||||
if (!_scheduledSyncJobs){
|
||||
delete _syncJobsScheduler;
|
||||
}
|
||||
qDeleteAll(_subJobs);
|
||||
}
|
||||
|
||||
@@ -272,20 +209,11 @@ public:
|
||||
_subJobs.append(subJob);
|
||||
}
|
||||
|
||||
void appendSyncJob(PropagatorJob *subJob) {
|
||||
if (!_syncJobsScheduler) {
|
||||
_syncJobsScheduler = new PropagateSyncItems(_propagator);
|
||||
}
|
||||
_syncJobsScheduler->append(subJob);
|
||||
}
|
||||
|
||||
virtual bool scheduleNextJob() Q_DECL_OVERRIDE;
|
||||
virtual JobParallelism parallelism() Q_DECL_OVERRIDE;
|
||||
virtual void abort() Q_DECL_OVERRIDE {
|
||||
if (_firstJob)
|
||||
_firstJob->abort();
|
||||
if (_syncJobsScheduler)
|
||||
_syncJobsScheduler->abort();
|
||||
foreach (PropagatorJob *j, _subJobs)
|
||||
j->abort();
|
||||
}
|
||||
@@ -296,8 +224,6 @@ public:
|
||||
|
||||
void finalize();
|
||||
|
||||
void scheduleSyncJobs();
|
||||
|
||||
qint64 committedDiskSpace() const Q_DECL_OVERRIDE;
|
||||
|
||||
private slots:
|
||||
@@ -316,6 +242,7 @@ private slots:
|
||||
void slotSubJobFinished(SyncFileItem::Status status);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief Dummy job that just mark it as completed and ignored
|
||||
* @ingroup libsync
|
||||
|
||||
@@ -147,7 +147,6 @@ void ProgressInfo::reset()
|
||||
_maxBytesPerSecond = 100000.0;
|
||||
_maxFilesPerSecond = 2.0;
|
||||
_updateEstimatesTimer.stop();
|
||||
_lastCompletedItem = SyncFileItem();
|
||||
}
|
||||
|
||||
void ProgressInfo::startEstimateUpdates()
|
||||
|
||||
@@ -195,8 +195,6 @@ public:
|
||||
: PropagateItemJob(propagator, item), _startChunk(0), _currentChunk(0), _chunkCount(0), _transferId(0), _finished(false), _deleteExisting(false) {}
|
||||
void start() Q_DECL_OVERRIDE;
|
||||
|
||||
bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return _item->_size < 100*1024; }
|
||||
|
||||
/**
|
||||
* Whether an existing entity with the same name may be deleted before
|
||||
* the upload.
|
||||
|
||||
@@ -1163,7 +1163,7 @@ void SyncEngine::checkForPermission()
|
||||
qDebug() << "Moving of " << (*it)->_file << " canceled because no permission to add parent folder";
|
||||
}
|
||||
(*it)->_instruction = CSYNC_INSTRUCTION_ERROR;
|
||||
(*it)->_status = SyncFileItem::SoftError;
|
||||
(*it)->_status = SyncFileItem::NormalError;
|
||||
(*it)->_errorString = tr("Not allowed because you don't have permission to add parent folder");
|
||||
}
|
||||
|
||||
|
||||
@@ -331,15 +331,6 @@ bool SyncJournalDb::checkConnect()
|
||||
qDebug() << Q_FUNC_INFO << "possibleUpgradeFromMirall_1_8_0_or_1 detected!";
|
||||
forceRemoteDiscovery = true;
|
||||
}
|
||||
|
||||
// There was a bug in versions <2.3.0 that could lead to stale
|
||||
// local files and a remote discovery will fix them.
|
||||
// See #5190 #5242.
|
||||
if( major == 2 && minor < 3) {
|
||||
qDebug() << Q_FUNC_INFO << "upgrade form client < 2.3.0 detected! forcing remote discovery";
|
||||
forceRemoteDiscovery = true;
|
||||
}
|
||||
|
||||
// Not comparing the BUILD id here, correct?
|
||||
if( !(major == MIRALL_VERSION_MAJOR && minor == MIRALL_VERSION_MINOR && patch == MIRALL_VERSION_PATCH) ) {
|
||||
createQuery.prepare("UPDATE version SET major=?1, minor=?2, patch =?3, custom=?4 "
|
||||
|
||||
@@ -27,9 +27,7 @@ ENDIF()
|
||||
|
||||
owncloud_add_test(FolderWatcher "${FolderWatcher_SRC}")
|
||||
if( UNIX AND NOT APPLE )
|
||||
if(HAVE_QT5 AND NOT BUILD_WITH_QT4)
|
||||
owncloud_add_test(InotifyWatcher "${FolderWatcher_SRC}")
|
||||
endif(HAVE_QT5 AND NOT BUILD_WITH_QT4)
|
||||
endif(UNIX AND NOT APPLE)
|
||||
|
||||
owncloud_add_test(CSyncSqlite "")
|
||||
|
||||
@@ -11,18 +11,23 @@
|
||||
|
||||
using namespace OCC;
|
||||
|
||||
class TestInotifyWatcher: public FolderWatcherPrivate
|
||||
|
||||
struct FriendlyFolderWatcherPrivate : FolderWatcherPrivate
|
||||
{
|
||||
using FolderWatcherPrivate::FolderWatcherPrivate;
|
||||
friend class TestInotifyWatcher;
|
||||
};
|
||||
|
||||
|
||||
class TestInotifyWatcher : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
QString _root;
|
||||
|
||||
private slots:
|
||||
void initTestCase() {
|
||||
qsrand(QTime::currentTime().msec());
|
||||
// Test the recursive path listing function lists everything
|
||||
void testAddFolderRecursiveHelper() {
|
||||
QTemporaryDir tmpDir;
|
||||
|
||||
_root = QDir::tempPath() + "/" + "test_" + QString::number(qrand());
|
||||
QString _root = tmpDir.path();
|
||||
qDebug() << "creating test directory tree in " << _root;
|
||||
QDir rootDir(_root);
|
||||
|
||||
@@ -32,13 +37,13 @@ private slots:
|
||||
rootDir.mkpath(_root + "/a1/b3/c3");
|
||||
rootDir.mkpath(_root + "/a2/b3/c3");
|
||||
|
||||
}
|
||||
FriendlyFolderWatcherPrivate watcher(0, _root);
|
||||
QVERIFY(watcher._fd >= 0);
|
||||
QCoreApplication::processEvents(); // Let the slotAddFolderRecursive slot run;
|
||||
QStringList dirs = watcher._watches.values();
|
||||
|
||||
// Test the recursive path listing function findFoldersBelow
|
||||
void testDirsBelowPath() {
|
||||
QStringList dirs;
|
||||
QVERIFY( dirs.indexOf(_root)>-1);
|
||||
|
||||
bool ok = findFoldersBelow(QDir(_root), dirs);
|
||||
QVERIFY( dirs.indexOf(_root + "/a1")>-1);
|
||||
QVERIFY( dirs.indexOf(_root + "/a1/b1")>-1);
|
||||
QVERIFY( dirs.indexOf(_root + "/a1/b1/c1")>-1);
|
||||
@@ -53,20 +58,13 @@ private slots:
|
||||
QVERIFY( dirs.indexOf(_root + "/a1/b3")>-1);
|
||||
QVERIFY( dirs.indexOf(_root + "/a1/b3/c3")>-1);
|
||||
|
||||
QVERIFY( dirs.indexOf(_root + "/a2"));
|
||||
QVERIFY( dirs.indexOf(_root + "/a2/b3"));
|
||||
QVERIFY( dirs.indexOf(_root + "/a2/b3/c3"));
|
||||
QVERIFY( dirs.contains(_root + "/a2"));
|
||||
QVERIFY( dirs.contains(_root + "/a2/b3"));
|
||||
QVERIFY( dirs.contains(_root + "/a2/b3/c3"));
|
||||
|
||||
QVERIFY2(dirs.count() == 11, "Directory count wrong.");
|
||||
|
||||
QVERIFY2(ok, "findFoldersBelow failed.");
|
||||
QCOMPARE(dirs.count(), 12);
|
||||
}
|
||||
|
||||
void cleanupTestCase() {
|
||||
if( _root.startsWith(QDir::tempPath() )) {
|
||||
system( QString("rm -rf %1").arg(_root).toLocal8Bit() );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_APPLESS_MAIN(TestInotifyWatcher)
|
||||
|
||||
+18
-18
@@ -724,7 +724,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1006"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Copia de seguretat detectada</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1008"/>
|
||||
@@ -734,7 +734,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1009"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Manté els fitxers locals com a conflicte</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -817,7 +817,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1190"/>
|
||||
<source>The selected path is not a folder!</source>
|
||||
<translation>La ruta seleccionada no és un directori!</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderman.cpp" line="1194"/>
|
||||
@@ -904,7 +904,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/folderstatusmodel.cpp" line="170"/>
|
||||
<source>Fetching folder list from server...</source>
|
||||
<translation>Obtenint la llista de carpetes del servidor...</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderstatusmodel.cpp" line="841"/>
|
||||
@@ -1006,7 +1006,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/folderwizard.cpp" line="544"/>
|
||||
<source>Add Sync Connection</source>
|
||||
<translation>Afegir una connexió de sincronització</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1521,7 +1521,7 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car
|
||||
<message>
|
||||
<location filename="../src/gui/notificationwidget.cpp" line="50"/>
|
||||
<source>Created at %1</source>
|
||||
<translation>Creat el %1</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/notificationwidget.cpp" line="99"/>
|
||||
@@ -1626,12 +1626,12 @@ privilegis addicionals durant el procés.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="142"/>
|
||||
<source>Sync the folder '%1'</source>
|
||||
<translation>Sincronitzar el directori '%1'</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="147"/>
|
||||
<source><p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p></source>
|
||||
<translation><p><small><strong>Atenció:</strong> La carpeta local no està buida. Trieu una resolució!</small></p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="246"/>
|
||||
@@ -1741,7 +1741,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="181"/>
|
||||
<source>Timeout while trying to connect to %1 at %2.</source>
|
||||
<translation>S'ha esgotat el temps d'espera mentres es conectava a %1 a les %2.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="192"/>
|
||||
@@ -1931,12 +1931,12 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="376"/>
|
||||
<source>The download would reduce free disk space below %1</source>
|
||||
<translation>La descàrrega reduïrà l'espai lliure al disc per sota de %1</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="381"/>
|
||||
<source>Free space on disk is less than %1</source>
|
||||
<translation>L'espai lliure del disc dur es inferior a %1</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="496"/>
|
||||
@@ -1946,7 +1946,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="545"/>
|
||||
<source>The file could not be downloaded completely.</source>
|
||||
<translation>No es pot descarregar el fitxer completament.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="552"/>
|
||||
@@ -2363,7 +2363,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/sharedialog.cpp" line="98"/>
|
||||
<source>%1 Sharing</source>
|
||||
<translation>Compartint amb %1</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/sharedialog.cpp" line="73"/>
|
||||
@@ -2378,7 +2378,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/sharedialog.cpp" line="101"/>
|
||||
<source>The server does not allow sharing</source>
|
||||
<translation>El servidor no permet la compartició de fitxers</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/sharedialog.cpp" line="113"/>
|
||||
@@ -3048,7 +3048,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/synclogdialog.ui" line="14"/>
|
||||
<source>Synchronisation Log</source>
|
||||
<translation>Registre de sincronització</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -3069,7 +3069,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="289"/>
|
||||
<source><p>Copyright ownCloud GmbH</p></source>
|
||||
<translation><p>Copyright ownCloud GmbH</p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="290"/>
|
||||
@@ -3215,7 +3215,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="296"/>
|
||||
<source>Account synchronization is disabled</source>
|
||||
<translation>La sincronització del compte està deshabilitada</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="379"/>
|
||||
@@ -3642,7 +3642,7 @@ No és aconsellada usar-la.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/progressdispatcher.cpp" line="37"/>
|
||||
<source>Server version downloaded, copied changed local file into conflict file</source>
|
||||
<translation>S'ha baixat la versió del servidor i s'ha renomenat el fitxer local com a fitxer de conflicte</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/progressdispatcher.cpp" line="39"/>
|
||||
|
||||
@@ -3071,7 +3071,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="289"/>
|
||||
<source><p>Copyright ownCloud GmbH</p></source>
|
||||
<translation><p>Copyright ownCloud, Inc.</p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="290"/>
|
||||
@@ -3296,7 +3296,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudtheme.cpp" line="47"/>
|
||||
<source><p>Version %2. For more information visit <a href="%3">%4</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud, Inc. in the United States, other countries, or both.</p></source>
|
||||
<translation><p>Version %2. Pour plus d'informations, consultez <a href="%3">%4</a></p><p><small>Par Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz et autres.</small></p><p>Copyright ownCloud GmbH</p><p>Sous licence GNU General Public License (GPL) Version 2.0<br/>ownCloud et le logo ownCloud sont des marques déposées de ownCloud, Inc. aux Etats-Unis, dans d'autres pays, ou dans les deux.</p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
@@ -3601,7 +3601,7 @@ We adviseren deze site niet te gebruiken.</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="324"/>
|
||||
<source>%n second(s)</source>
|
||||
<translation><numerusform>%n seconde</numerusform><numerusform>%n seconde(n)</numerusform></translation>
|
||||
<translation><numerusform>%n seconde</numerusform><numerusform>%n seconden</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="348"/>
|
||||
|
||||
+13
-13
@@ -631,17 +631,17 @@
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="489"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 i %n inny plik został usunięty.</numerusform><numerusform>%1 i %n inne pliki zostały usunięte.</numerusform><numerusform>%1 i %n innych plików zostało usuniętych.</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="496"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 i %n inny plik został pobrany.</numerusform><numerusform>%1 i %n inne pliki zostały pobrane.</numerusform><numerusform>%1 i %n innych plików zostało pobranych.</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="503"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 i %n inny plik został zaktualizowany.</numerusform><numerusform>%1 i %n inne pliki zostały zaktualizowane.</numerusform><numerusform>%1 i %n innych plików zostało zaktualizowanych.</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="510"/>
|
||||
@@ -1156,7 +1156,7 @@ Jeśli kontynuujesz synchronizację, pliki zostaną nadpisane przez swój pierwo
|
||||
<message>
|
||||
<location filename="../src/gui/generalsettings.ui" line="26"/>
|
||||
<source>&Launch on System Startup</source>
|
||||
<translation>&Uruchamiaj podczas startu systemu</translation>
|
||||
<translation>&Uruchamiaj podczas startu systemu Windows</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/generalsettings.ui" line="33"/>
|
||||
@@ -1933,7 +1933,7 @@ Niezalecane jest jego użycie.</translation>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="376"/>
|
||||
<source>The download would reduce free disk space below %1</source>
|
||||
<translation>Pobranie zmniejszy ilość wolnego miejsca poniżej %1.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagatedownload.cpp" line="381"/>
|
||||
@@ -3523,12 +3523,12 @@ Kliknij</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="469"/>
|
||||
<source>%n day(s) ago</source>
|
||||
<translation><numerusform>%n dzień temu</numerusform><numerusform>%n dni temu</numerusform><numerusform>%n dni temu</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="477"/>
|
||||
<source>%n hour(s) ago</source>
|
||||
<translation><numerusform>%n godzinę temu</numerusform><numerusform>%n godziny temu</numerusform><numerusform>%n godzin temu</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="482"/>
|
||||
@@ -3543,7 +3543,7 @@ Kliknij</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="487"/>
|
||||
<source>%n minute(s) ago</source>
|
||||
<translation><numerusform>%n minutę temu</numerusform><numerusform>%n minuty temu</numerusform><numerusform>%n minut temu</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/utility.cpp" line="490"/>
|
||||
@@ -3576,27 +3576,27 @@ Kliknij</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="319"/>
|
||||
<source>%n year(s)</source>
|
||||
<translation><numerusform>%n rok</numerusform><numerusform>%n lata</numerusform><numerusform>%n lat</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="320"/>
|
||||
<source>%n month(s)</source>
|
||||
<translation><numerusform>%n miesiąc</numerusform><numerusform>%n miesiące</numerusform><numerusform>%n miesięcy</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="321"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation><numerusform>%n dzień</numerusform><numerusform>%n dni</numerusform><numerusform>%n dni</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="322"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation><numerusform>%n godzina</numerusform><numerusform>%n godziny</numerusform><numerusform>%n godzin</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="323"/>
|
||||
<source>%n minute(s)</source>
|
||||
<translation><numerusform>%n minuta</numerusform><numerusform>%n minuty</numerusform><numerusform>%n minut</numerusform></translation>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libsync/utility.cpp" line="324"/>
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="346"/>
|
||||
<source><p>Do you really want to stop syncing the folder <i>%1</i>?</p><p><b>Note:</b> This will <b>not</b> delete any files.</p></source>
|
||||
<translation><p>Deseja mesmo parar a sincronização da pasta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar qualquer ficheiro.</p></translation>
|
||||
<translation><p>Deseja mesmo parar a sincronização da pasta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar quaisquer ficheiros.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="488"/>
|
||||
|
||||
@@ -3070,7 +3070,7 @@ It is not advisable to use it.</source>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="289"/>
|
||||
<source><p>Copyright ownCloud GmbH</p></source>
|
||||
<translation><p>Все права принадлежат ownCloud GmbH</p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/theme.cpp" line="290"/>
|
||||
@@ -3295,7 +3295,7 @@ It is not advisable to use it.</source>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudtheme.cpp" line="47"/>
|
||||
<source><p>Version %2. For more information visit <a href="%3">%4</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud, Inc. in the United States, other countries, or both.</p></source>
|
||||
<translation><p>Версия %2. Дополнительная информация доступна по ссылке <a href="%3">%4</a></p><p><small>Авторы: Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz, и другие.</small></p><p>Авторские права принадлежат ownCloud GmbH</p><p>Лицензировано под GNU General Public License (GPL) Версии 2.0<br/>ownCloud и логотип ownCloud - зарегистрированные торговые марки ownCloud, Inc. в Соединенных Штатах, и/или других странах</p></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
@@ -2550,7 +2550,7 @@ It is not advisable to use it.</source>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="91"/>
|
||||
<source>SSL Chipher Debug View</source>
|
||||
<translation>查看SSL加密调试信息</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/shibboleth/shibbolethwebview.cpp" line="99"/>
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário