1
0
mirror of https://github.com/chylex/Nextcloud-Desktop.git synced 2026-04-07 09:46:48 +02:00

Compare commits

..

17 Commits

Author SHA1 Message Date
Klaas Freitag
38ef525d5e Push version to final 1.8.0 2015-03-16 15:28:58 +01:00
Jenkins for ownCloud
367b1fcc33 [tx-robot] updated from transifex 2015-03-16 02:18:44 -04:00
Jenkins for ownCloud
f5c930968e [tx-robot] updated from transifex 2015-03-14 02:18:44 -04:00
Jocelyn Turcotte
5264a8c7f6 shell_integration: Fix disappearing context menus on Windows #2898
Since each new connection to the socket API would trigger a broadcast
of REGISTER_PATH to all existing connections, opening the context menu
would trigger a SHChangeNotify call of the root directory through
the overlay icon extension, which is currently also connected to the
socket API, waiting for changes.

Fix the issue by sending the initial REGISTER_PATH automatic response
only to the connecting socket.
2015-03-13 20:53:59 +01:00
Markus Goetz
6c4b7f1479 OS X: Always return 0 from pre_install.sh 2015-03-13 16:35:44 +01:00
Markus Goetz
c42c9f0002 Propagator: Add comment 2015-03-13 15:48:35 +01:00
Christian Kamm
95f299f865 Remote folder wizard: Add optional manual entry #2613 2015-03-13 09:52:21 +01:00
Jenkins for ownCloud
09749e2c7f [tx-robot] updated from transifex 2015-03-13 02:18:46 -04:00
Carla Schroder
dc33784a76 spelling corrections 2015-03-12 09:48:00 -07:00
Carla Schroder
961df1fc44 fix server side permissions table 2015-03-12 09:46:27 -07:00
Jocelyn Turcotte
e93c1ccb73 Install the crash handler earlier during startup
This moves the crash handler installation during the OCC::Application
contruction. This still leaves a window where crashes wouldn't be
caught, leaving the QtSingleApplication and theme initialization
code unreported, but isn't requiring any refactoring for now.

Issue #2952
2015-03-12 17:16:05 +01:00
Klaas Freitag
286ad0c478 Doc: Formatting fixes 2015-03-12 16:59:12 +01:00
Klaas Freitag
e30970ff90 Some ChangeLog corrections. 2015-03-12 16:49:41 +01:00
Daniel Molkentin
14e0e4a072 Win32: More reserved file names to ignore, including Recycle Bin
Addresses #2955
2015-03-12 16:25:32 +01:00
Jocelyn Turcotte
60da0a15e6 shell_integration: Remove the incorrect usage of the MIIM_BITMAP flag
This flag should only be specified if the hbmpItem member of the
MENUITEMINFO has been set.
2015-03-12 15:22:29 +01:00
Jocelyn Turcotte
0f84510e6f Fix the build with GCC 4.7
Disable bitfields completely in SyncFileItem with that compiler.
2015-03-12 14:54:11 +01:00
Christian Kamm
1dd3488973 Uploads: Fix big seeks on Windows. #2954 2015-03-12 13:18:08 +01:00
21 changed files with 341 additions and 216 deletions

View File

@@ -1,6 +1,6 @@
ChangeLog
=========
version 1.8.0 (release 2015-02-xx)
version 1.8.0 (release 2015-03-xx)
* Mac OS: HIDPI support
* Support Sharing from desktop: Added a share dialog that can be
opened by context menu in the file managers (Win, Mac, Nautilus)
@@ -12,7 +12,7 @@ version 1.8.0 (release 2015-02-xx)
* Added ability to build on Windows utilizing MingGW
* SQLite database fixes if running on FAT filesystems
* Improved detection of changing files to upload from local
* Preparations for the muli-account feature
* Preparations for the multi-account feature
* Fixed experience for Window manager without system tray
* Build with Qt 5.4
* Dropped libneon dependency if Qt 5.4 is available
@@ -24,8 +24,7 @@ version 1.8.0 (release 2015-02-xx)
* Prepared direct download
* Added Crashreporter feature to be switched on on demand
* A huge amount of bug fixes in all areas of the client.
* more than 7000 commits since 1.7.0
* almost 700 commits since 1.7.1
version 1.7.1 (release 2014-12-18)
* Documentation fixes and updates

View File

@@ -4,7 +4,7 @@ set( MIRALL_VERSION_PATCH 0 )
set( MIRALL_SOVERSION 0 )
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
set( MIRALL_VERSION_SUFFIX "rc1") #e.g. beta1, beta2, rc1
set( MIRALL_VERSION_SUFFIX "") #e.g. beta1, beta2, rc1
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
if( NOT DEFINED MIRALL_VERSION_BUILD )

View File

@@ -6,3 +6,4 @@ killall @APPLICATION_EXECUTABLE@
# Unload the Finder plugin. see issue #2105
killall Finder
exit 0

View File

@@ -151,11 +151,12 @@ CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype) {
return match;
}
// See http://support.microsoft.com/kb/74496
static const char *win_reserved_words[] = {"CON","PRN","AUX", "NUL",
"COM1", "COM2", "COM3", "COM4",
"LPT1", "LPT2", "LPT3", "CLOCK$" };
// See http://support.microsoft.com/kb/74496 and
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
// Additionally, we ignore '$Recycle.Bin', see https://github.com/owncloud/client/issues/2955
static const char* win_reserved_words[] = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5",
"COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4",
"LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "CLOCK$", "$Recycle.Bin" };
bool csync_is_windows_reserved_word(const char* filename) {

View File

@@ -151,9 +151,9 @@ ownCloud Client provides the ability to add custom patterns.
By default, the ownCloud Client ignores the following files:
- Files matched by one of the patterns defined in :ref:`ignoredFilesEditor-label`.
- Files containing characters that do not work on certain file systems (`\, /, :, ?, *, ", >, <, |`).
* Files starting in ``.csync_journal.db*``, as these files are reserved for journalling.
* Files matched by one of the patterns defined in the Ignored Files Editor
* Files containing characters that do not work on certain file systems ``(`\, /, :, ?, *, ", >, <, |`)``.
* Files starting in ``.csync_journal.db``, as these files are reserved for journalling.
If a pattern selected using a checkbox in the `ignoredFilesEditor-label` (or if
a line in the exclude file starts with the character `]` directly followed by
@@ -212,62 +212,61 @@ In the communication between client and server a couple of custom WebDAV propert
were introduced. They are either needed for sync functionality or help have a positive
effect on synchronization performance.
This chapter describes additional xml elemeents which the server returns in response
to a successful PROPFIND request on a file or directory. The elemnts are returned in
This chapter describes additional xml elements which the server returns in response
to a successful PROPFIND request on a file or directory. The elements are returned in
the namespace oc.
###Server Side Permissions
Server Side Permissions
------------------------
The XML element <oc:permissions> represents the permission- and sharing state of the
The XML element ``<oc:permissions>`` represents the permission- and sharing state of the
item. It is a list of characters, and each of the chars has a meaning as outlined
in the table below:
+------+-------------+-------------------------------------------+
| Code | Resource | Description |
|======+=============+===========================================|
| S | File or Folder | is shared |
+---+----------------+-------------------------------------------|
| R | File or Folder | can share (includes reshare) |
+---+----------------+-------------------------------------------|
| M | File or Folder | is mounted (like on DropBox, Samba, etc.) |
+---+----------------+-------------------------------------------|
| W | File | can write file |
+---+----------------+-------------------------------------------|
| C | Folder |can create file in folder |
+---+----------------+-------------------------------------------|
| K | Folder | can create folder (mkdir) |
+---+----------------+-------------------------------------------|
| D | File or Folder |can delete file or folder |
+---+----------------+-------------------------------------------|
| N | File or Folder | can rename file or folder |
+---+----------------+-------------------------------------------|
| V | File or Folder | can move file or folder |
+---+----------------+-------------------------------------------|
+----+----------------+-------------------------------------------+
|Code| Resource | Description |
+----+----------------+-------------------------------------------+
| S | File or Folder | is shared |
+----+----------------+-------------------------------------------+
| R | File or Folder | can share (includes reshare) |
+----+----------------+-------------------------------------------+
| M | File or Folder | is mounted (like on DropBox, Samba, etc.) |
+----+----------------+-------------------------------------------+
| W | File | can write file |
+----+----------------+-------------------------------------------+
| C | Folder |can create file in folder |
+----+----------------+-------------------------------------------+
| K | Folder | can create folder (mkdir) |
+----+----------------+-------------------------------------------+
| D | File or Folder |can delete file or folder |
+----+----------------+-------------------------------------------+
| N | File or Folder | can rename file or folder |
+----+----------------+-------------------------------------------+
| V | File or Folder | can move file or folder |
+----+----------------+-------------------------------------------+
Example:
```
<oc:permissions>RDNVCK</oc:permissions>
```
###File- or Directory Size
<oc:permissions>RDNVCK</oc:permissions>
The XML element <oc:size> represents the file- or directory size in bytes. For
File- or Directory Size
-----------------------
The XML element ``<oc:size>`` represents the file- or directory size in bytes. For
directories, the size of the whole file tree underneath the directory is accumulated.
Example:
```
<oc:size>2429176697</oc:size>
```
###FileID
<oc:size>2429176697</oc:size>
FileID
------
The XML element <oc:id> represents the so called file ID. It is a non volatile string id
The XML element ``<oc:id>`` represents the so called file ID. It is a non volatile string id
that stays constant as long as the file exists. It is not changed if the file changes or
is renamed or moved.
Example:
```
<oc:id>00000020oc5cfy6qqizm</oc:id>
```
<oc:id>00000020oc5cfy6qqizm</oc:id>

View File

@@ -168,7 +168,7 @@ IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
assert(!info.shareMenuTitle.empty());
MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_BITMAP | MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.wID = idCmdFirst + IDM_SHARE;
mii.fType = MFT_STRING;
mii.dwTypeData = &info.shareMenuTitle[0];

View File

@@ -42,6 +42,10 @@
#include <windows.h>
#endif
#if defined(WITH_CRASHREPORTER)
#include <libcrashreporter-handler/Handler.h>
#endif
#include <QTranslator>
#include <QMenu>
#include <QMessageBox>
@@ -106,6 +110,11 @@ Application::Application(int &argc, char **argv) :
if (isRunning())
return;
#if defined(WITH_CRASHREPORTER)
if (ConfigFile().crashReporter())
_crashHandler.reset(new CrashReporter::Handler( QDir::tempPath(), true, CRASHREPORTER_EXECUTABLE ));
#endif
setupLogging();
setupTranslations();

View File

@@ -34,6 +34,10 @@ class QMessageBox;
class QSystemTrayIcon;
class QSocket;
namespace CrashReporter {
class Handler;
}
namespace OCC {
class Theme;
class Folder;
@@ -109,6 +113,9 @@ private:
QTimer _checkConnectionTimer;
#if defined(WITH_CRASHREPORTER)
QScopedPointer<CrashReporter::Handler> _crashHandler;
#endif
QScopedPointer<FolderMan> _folderManager;
friend class ownCloudGui; // for _startupNetworkError

View File

@@ -239,10 +239,13 @@ FolderWizardRemotePath::FolderWizardRemotePath(AccountPtr account)
connect(_ui.addFolderButton, SIGNAL(clicked()), SLOT(slotAddRemoteFolder()));
connect(_ui.refreshButton, SIGNAL(clicked()), SLOT(slotRefreshFolders()));
connect(_ui.folderTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SIGNAL(completeChanged()));
connect(_ui.folderTreeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), SIGNAL(completeChanged()));
connect(_ui.folderTreeWidget, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotItemExpanded(QTreeWidgetItem*)));
connect(_ui.folderTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(slotCurrentItemChanged(QTreeWidgetItem*)));
connect(_ui.folderEntry, SIGNAL(textEdited(QString)), SLOT(slotFolderEntryEdited(QString)));
_lscolTimer.setInterval(500);
_lscolTimer.setSingleShot(true);
connect(&_lscolTimer, SIGNAL(timeout()), SLOT(slotLsColFolderEntry()));
}
void FolderWizardRemotePath::slotAddRemoteFolder()
@@ -315,27 +318,58 @@ static QTreeWidgetItem* findFirstChild(QTreeWidgetItem *parent, const QString& t
void FolderWizardRemotePath::recursiveInsert(QTreeWidgetItem *parent, QStringList pathTrail, QString path)
{
QFileIconProvider prov;
QIcon folderIcon = prov.icon(QFileIconProvider::Folder);
if (pathTrail.size() == 0) {
if (path.endsWith('/')) {
path.chop(1);
}
parent->setToolTip(0, path);
parent->setData(0, Qt::UserRole, path);
} else {
QTreeWidgetItem *item = findFirstChild(parent, pathTrail.first());
if (!item) {
item = new QTreeWidgetItem(parent);
item->setIcon(0, folderIcon);
item->setText(0, pathTrail.first());
item->setData(0, Qt::UserRole, pathTrail.first());
item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
}
if (pathTrail.isEmpty())
return;
pathTrail.removeFirst();
recursiveInsert(item, pathTrail, path);
const QString parentPath = parent->data(0, Qt::UserRole).toString();
const QString folderName = pathTrail.first();
QString folderPath;
if (parentPath == QLatin1String("/")) {
folderPath = folderName;
} else {
folderPath = parentPath + "/" + folderName;
}
QTreeWidgetItem *item = findFirstChild(parent, folderName);
if (!item) {
item = new QTreeWidgetItem(parent);
QFileIconProvider prov;
QIcon folderIcon = prov.icon(QFileIconProvider::Folder);
item->setIcon(0, folderIcon);
item->setText(0, folderName);
item->setData(0, Qt::UserRole, folderPath);
item->setToolTip(0, folderPath);
item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
}
pathTrail.removeFirst();
recursiveInsert(item, pathTrail, path);
}
bool FolderWizardRemotePath::selectByPath(QString path)
{
if (path.startsWith(QLatin1Char('/'))) {
path = path.mid(1);
}
if (path.endsWith(QLatin1Char('/'))) {
path.chop(1);
}
QTreeWidgetItem *it = _ui.folderTreeWidget->topLevelItem(0);
if (!path.isEmpty()) {
const QStringList pathTrail = path.split(QLatin1Char('/'));
foreach (const QString& path, pathTrail) {
if (!it) {
return false;
}
it = findFirstChild(it, path);
}
}
if (!it) {
return false;
}
_ui.folderTreeWidget->setCurrentItem(it);
return true;
}
void FolderWizardRemotePath::slotUpdateDirectories(const QStringList &list)
@@ -367,6 +401,7 @@ void FolderWizardRemotePath::slotRefreshFolders()
SLOT(slotUpdateDirectories(QStringList)));
job->start();
_ui.folderTreeWidget->clear();
_ui.folderEntry->clear();
}
void FolderWizardRemotePath::slotItemExpanded(QTreeWidgetItem *item)
@@ -379,6 +414,49 @@ void FolderWizardRemotePath::slotItemExpanded(QTreeWidgetItem *item)
job->start();
}
void FolderWizardRemotePath::slotCurrentItemChanged(QTreeWidgetItem *item)
{
if (item) {
QString dir = item->data(0, Qt::UserRole).toString();
if (!dir.startsWith(QLatin1Char('/'))) {
dir.prepend(QLatin1Char('/'));
}
_ui.folderEntry->setText(dir);
}
emit completeChanged();
}
void FolderWizardRemotePath::slotFolderEntryEdited(const QString& text)
{
if (selectByPath(text)) {
_lscolTimer.stop();
return;
}
_ui.folderTreeWidget->setCurrentItem(0);
_lscolTimer.start(); // avoid sending a request on each keystroke
}
void FolderWizardRemotePath::slotLsColFolderEntry()
{
QString path = _ui.folderEntry->text();
if (path.startsWith(QLatin1Char('/')))
path = path.mid(1);
LsColJob *job = new LsColJob(_account, path, this);
job->setProperties(QList<QByteArray>() << "resourcetype");
connect(job, SIGNAL(directoryListingSubfolders(QStringList)),
SLOT(slotTypedPathFound(QStringList)));
job->start();
}
void FolderWizardRemotePath::slotTypedPathFound(const QStringList& subpaths)
{
slotUpdateDirectories(subpaths);
selectByPath(_ui.folderEntry->text());
}
FolderWizardRemotePath::~FolderWizardRemotePath()
{
}

View File

@@ -86,11 +86,17 @@ protected slots:
void slotUpdateDirectories(const QStringList&);
void slotRefreshFolders();
void slotItemExpanded(QTreeWidgetItem*);
void slotCurrentItemChanged(QTreeWidgetItem*);
void slotFolderEntryEdited(const QString& text);
void slotLsColFolderEntry();
void slotTypedPathFound(const QStringList& subpaths);
private:
void recursiveInsert(QTreeWidgetItem *parent, QStringList pathTrail, QString path);
bool selectByPath(QString path);
Ui_FolderWizardTargetPage _ui;
bool _warnWasVisible;
AccountPtr _account;
QTimer _lscolTimer;
};

View File

@@ -14,7 +14,10 @@
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="3" column="0">
<item row="1" column="0">
<widget class="QLineEdit" name="folderEntry"/>
</item>
<item row="2" column="0">
<widget class="QFrame" name="warnFrame">
<property name="palette">
<palette>
@@ -179,7 +182,7 @@
</layout>
</widget>
</item>
<item row="4" column="0">
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>

View File

@@ -28,13 +28,6 @@
#include "updater/updater.h"
#include "config.h"
#ifdef WITH_CRASHREPORTER
#include "configfile.h"
#include <libcrashreporter-handler/Handler.h>
#endif
#include <QTimer>
#include <QMessageBox>
@@ -59,12 +52,6 @@ int main(int argc, char **argv)
#endif
OCC::Application app(argc, argv);
#ifdef WITH_CRASHREPORTER
if (ConfigFile().crashReporter())
new CrashReporter::Handler( QDir::tempPath(), true, CRASHREPORTER_EXECUTABLE );
#endif
#ifndef Q_OS_WIN
signal(SIGPIPE, SIG_IGN);
#endif

View File

@@ -185,8 +185,9 @@ void SocketApi::slotNewConnection()
broadcastMessage(QLatin1String("ICON_PATH"), iconPath );
#endif
foreach( QString alias, FolderMan::instance()->map().keys() ) {
slotRegisterPath(alias);
foreach( Folder *f, FolderMan::instance()->map() ) {
QString message = buildRegisterPathMessage(f->path());
sendMessage(socket, message);
}
}
@@ -226,7 +227,10 @@ void SocketApi::slotRegisterPath( const QString& alias )
{
Folder *f = FolderMan::instance()->folder(alias);
if (f) {
broadcastMessage(QLatin1String("REGISTER_PATH"), f->path() );
QString message = buildRegisterPathMessage(f->path());
foreach(SocketType *socket, _listeners) {
sendMessage(socket, message);
}
}
}
@@ -449,6 +453,14 @@ void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketType* socket)
sendMessage(socket, QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()));
}
QString SocketApi::buildRegisterPathMessage(const QString& path)
{
QFileInfo fi(path);
QString message = QLatin1String("REGISTER_PATH:");
message.append(QDir::toNativeSeparators(fi.absoluteFilePath()));
return message;
}
SqlQuery* SocketApi::getSqlQuery( Folder *folder )
{
if( !folder ) {

View File

@@ -82,6 +82,7 @@ private:
Q_INVOKABLE void command_VERSION(const QString& argument, SocketType* socket);
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, SocketType* socket);
QString buildRegisterPathMessage(const QString& path);
#ifdef SOCKETAPI_TCP
QTcpServer _localServer;

View File

@@ -204,12 +204,12 @@ bool FileSystem::renameReplace(const QString& originFileName, const QString& des
return true;
}
bool FileSystem::openFileSharedRead(QFile* file, QString* error)
bool FileSystem::openAndSeekFileSharedRead(QFile* file, QString* errorOrNull, qint64 seek)
{
bool ok = false;
if (error) {
error->clear();
}
QString errorDummy;
// avoid many if (errorOrNull) later.
QString& error = errorOrNull ? *errorOrNull : errorDummy;
error.clear();
#ifdef Q_OS_WIN
//
@@ -236,9 +236,7 @@ bool FileSystem::openFileSharedRead(QFile* file, QString* error)
// Bail out on error.
if (fileHandle == INVALID_HANDLE_VALUE) {
if (error) {
*error = qt_error_string();
}
error = qt_error_string();
return false;
}
@@ -247,19 +245,34 @@ bool FileSystem::openFileSharedRead(QFile* file, QString* error)
// the fd the handle will be closed too.
int fd = _open_osfhandle((intptr_t)fileHandle, _O_RDONLY);
if (fd == -1) {
if (error) {
*error = "could not make fd from handle";
}
error = "could not make fd from handle";
return false;
}
ok = file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle);
#else
ok = file->open(QFile::ReadOnly);
#endif
if (! ok && error) {
*error = file->errorString();
if (!file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle)) {
error = file->errorString();
return false;
}
return ok;
// Seek to the right spot
LARGE_INTEGER *li = reinterpret_cast<LARGE_INTEGER*>(&seek);
DWORD newFilePointer = SetFilePointer(fileHandle, li->LowPart, &li->HighPart, FILE_BEGIN);
if (newFilePointer == 0xFFFFFFFF && GetLastError() != NO_ERROR) {
error = qt_error_string();
return false;
}
return true;
#else
if (!file->open(QFile::ReadOnly)) {
error = file->errorString();
return false;
}
if (!file->seek(seek)) {
error = file->errorString();
return false;
}
return true;
#endif
}
#ifdef Q_OS_WIN

View File

@@ -75,13 +75,13 @@ bool renameReplace(const QString &originFileName, const QString &destinationFile
QString *errorString);
/**
* Replacement for QFile::open(ReadOnly) that sets a more permissive sharing mode
* on Windows.
* Replacement for QFile::open(ReadOnly) followed by a seek().
* This version sets a more permissive sharing mode on Windows.
*
* Warning: The resuting file may have an empty fileName and be unsuitable for use
* with QFileInfo!
* with QFileInfo! Calling seek() on the QFile with >32bit signed values will fail!
*/
bool openFileSharedRead(QFile* file, QString* error);
bool openAndSeekFileSharedRead(QFile* file, QString* error, qint64 seek);
#ifdef Q_OS_WIN
/**

View File

@@ -232,17 +232,13 @@ bool UploadDevice::prepareAndOpen(const QString& fileName, qint64 start, qint64
QFile file(fileName);
QString openError;
if (!FileSystem::openFileSharedRead(&file, &openError)) {
if (!FileSystem::openAndSeekFileSharedRead(&file, &openError, start)) {
setErrorString(openError);
return false;
}
size = qMin(FileSystem::getSize(fileName), size);
size = qBound(0ll, size, FileSystem::getSize(fileName) - start);
_data.resize(size);
if (!file.seek(start)) {
setErrorString(file.errorString());
return false;
}
auto read = file.read(_data.data(), size);
if (read != size) {
setErrorString(file.errorString());
@@ -406,6 +402,7 @@ void PropagateUploadFileQNAM::startNextChunk()
return;
}
// job takes ownership of device via a QScopedPointer. Job deletes itself when finishing
PUTFileJob* job = new PUTFileJob(_propagator->account(), _propagator->_remoteFolder + path, device, headers, _currentChunk);
_jobs.append(job);
connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished()));

View File

@@ -21,6 +21,13 @@
#include <csync.h>
#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) && (__GNUC__ * 100 + __GNUC_MINOR__ < 408)
// openSuse 12.3 didn't like enum bitfields.
#define BITFIELD(size)
#else
#define BITFIELD(size) :size
#endif
namespace OCC {
class SyncFileItem {
@@ -114,19 +121,19 @@ public:
// Variables usefull for everybody
QString _file;
QString _renameTarget;
Type _type:3;
Direction _direction:2;
bool _isDirectory:1;
Type _type BITFIELD(3);
Direction _direction BITFIELD(2);
bool _isDirectory BITFIELD(1);
/// Whether there's an entry in the blacklist table.
/// Note: that entry may have retries left, so this can be true
/// without the status being FileIgnored.
bool _hasBlacklistEntry:1;
bool _hasBlacklistEntry BITFIELD(1);
// Variables usefull to report to the user
Status _status:4;
bool _isRestoration:1; // The original operation was forbidden, and this is a restoration
bool _should_update_etag:1;
Status _status BITFIELD(4);
bool _isRestoration BITFIELD(1); // The original operation was forbidden, and this is a restoration
bool _should_update_etag BITFIELD(1);
quint16 _httpErrorCode;
QString _errorString; // Contains a string only in case of error
QByteArray _responseTimeStamp;
@@ -155,8 +162,8 @@ public:
time_t _other_modtime;
QByteArray _other_etag;
QByteArray _other_fileId;
enum csync_instructions_e _instruction:16;
enum csync_instructions_e _other_instruction:16;
enum csync_instructions_e _instruction BITFIELD(16);
enum csync_instructions_e _other_instruction BITFIELD(16);
} log;
};

View File

@@ -1783,7 +1783,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.ui" line="75"/>
<source>OwnCloud Path:</source>
<translation type="unfinished"/>
<translation>Διαδρομή ownCloud:</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="89"/>
@@ -1909,7 +1909,7 @@ It is not advisable to use it.</source>
<location filename="../src/gui/socketapi.cpp" line="431"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
<translation>Διαμοιρασμός με %1</translation>
</message>
</context>
<context>
@@ -2218,7 +2218,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="156"/>
<source>The mounted directory is temporarily not available on the server</source>
<translation type="unfinished"/>
<translation>Ο προσαρτημένος κατάλογος δεν είναι προσωρινά διαθέσιμος στον δικομιστή</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="159"/>

View File

@@ -244,27 +244,27 @@ Total tid kvar %5</translation>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
<source>Certificate :</source>
<translation type="unfinished"/>
<translation>Certifikat :</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
<source>Browse...</source>
<translation type="unfinished"/>
<translation>Bläddra...</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="60"/>
<source>Certificate password :</source>
<translation type="unfinished"/>
<translation>Certifikatlösenord :</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.cpp" line="23"/>
<source>Select a certificate</source>
<translation type="unfinished"/>
<translation>Välj ett certifikat</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.cpp" line="23"/>
<source>Certificate files (*.p12 *.pfx)</source>
<translation type="unfinished"/>
<translation>Certifikatfiler (*.p12 *.pfx)</translation>
</message>
</context>
<context>
@@ -329,7 +329,7 @@ Total tid kvar %5</translation>
<message>
<location filename="../src/libsync/propagateremotedelete.cpp" line="41"/>
<source>Connection timed out</source>
<translation type="unfinished"/>
<translation>Tidsgräns för anslutningen överskreds</translation>
</message>
</context>
<context>
@@ -898,7 +898,7 @@ Valda objekt kommer också att raderas om dom hindrar en mapp från att tas bort
<message>
<location filename="../src/libsync/propagateremotemove.cpp" line="45"/>
<source>Connection timed out</source>
<translation type="unfinished"/>
<translation>Tidsgräns för anslutningen överskreds</translation>
</message>
</context>
<context>
@@ -1131,7 +1131,7 @@ efter ytterligare privilegier under processen.</translation>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="297"/>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="318"/>
<source>(%1)</source>
<translation type="unfinished"/>
<translation>(%1)</translation>
</message>
</context>
<context>
@@ -1535,7 +1535,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="156"/>
<source>File Removed</source>
<translation type="unfinished"/>
<translation>Filen Raderad</translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="171"/>
@@ -1792,12 +1792,12 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.ui" line="127"/>
<source>Set password</source>
<translation type="unfinished"/>
<translation>Ange lösenord</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="149"/>
<source>Set expiry date</source>
<translation type="unfinished"/>
<translation>Sätt utgångsdatum</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="67"/>
@@ -1813,7 +1813,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="141"/>
<source>Password Protected</source>
<translation type="unfinished"/>
<translation>Lösenordsskyddad</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="299"/>
@@ -1858,7 +1858,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="453"/>
<source>The file can not be synced.</source>
<translation type="unfinished"/>
<translation>Filen kan inte synkas.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="463"/>
@@ -1908,7 +1908,7 @@ Det är inte lämpligt använda den.</translation>
<location filename="../src/gui/socketapi.cpp" line="431"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
<translation>Dela med %1</translation>
</message>
</context>
<context>

View File

@@ -32,27 +32,27 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="107"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="110"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="128"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="131"/>
<source>Select a remote destination folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="140"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="143"/>
<source>Create Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="160"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="163"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="174"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="177"/>
<source>Folders</source>
<translation type="unfinished"></translation>
</message>
@@ -476,62 +476,62 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderMan</name>
<message>
<location filename="../src/gui/folderman.cpp" line="234"/>
<location filename="../src/gui/folderman.cpp" line="233"/>
<source>Could not reset folder state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="235"/>
<location filename="../src/gui/folderman.cpp" line="234"/>
<source>An old sync journal &apos;%1&apos; was found, but could not be removed. Please make sure that no application is currently using it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1013"/>
<location filename="../src/gui/folderman.cpp" line="1012"/>
<source>Undefined State.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1016"/>
<location filename="../src/gui/folderman.cpp" line="1015"/>
<source>Waits to start syncing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1019"/>
<location filename="../src/gui/folderman.cpp" line="1018"/>
<source>Preparing for sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1022"/>
<location filename="../src/gui/folderman.cpp" line="1021"/>
<source>Sync is running.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1025"/>
<location filename="../src/gui/folderman.cpp" line="1024"/>
<source>Last Sync was successful.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1030"/>
<location filename="../src/gui/folderman.cpp" line="1029"/>
<source>Last Sync was successful, but with warnings on individual files.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1033"/>
<location filename="../src/gui/folderman.cpp" line="1032"/>
<source>Setup Error.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1036"/>
<location filename="../src/gui/folderman.cpp" line="1035"/>
<source>User Abort.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1039"/>
<location filename="../src/gui/folderman.cpp" line="1038"/>
<source>Sync is paused.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1045"/>
<location filename="../src/gui/folderman.cpp" line="1044"/>
<source>%1 (Sync is paused)</source>
<translation type="unfinished"></translation>
</message>
@@ -558,8 +558,8 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizard</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="509"/>
<location filename="../src/gui/folderwizard.cpp" line="511"/>
<location filename="../src/gui/folderwizard.cpp" line="587"/>
<location filename="../src/gui/folderwizard.cpp" line="589"/>
<source>Add Folder</source>
<translation type="unfinished"></translation>
</message>
@@ -635,47 +635,47 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizardRemotePath</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="259"/>
<location filename="../src/gui/folderwizard.cpp" line="262"/>
<source>Create Remote Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="260"/>
<location filename="../src/gui/folderwizard.cpp" line="263"/>
<source>Enter the name of the new folder to be created below &apos;%1&apos;:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="289"/>
<location filename="../src/gui/folderwizard.cpp" line="292"/>
<source>Folder was successfully created on %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="298"/>
<location filename="../src/gui/folderwizard.cpp" line="301"/>
<source>Authentication failed accessing %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="300"/>
<location filename="../src/gui/folderwizard.cpp" line="303"/>
<source>Failed to create the folder on %1. Please check manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="350"/>
<location filename="../src/gui/folderwizard.cpp" line="384"/>
<source>Choose this to sync the entire account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="407"/>
<location filename="../src/gui/folderwizard.cpp" line="485"/>
<source>This folder is already being synced.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="409"/>
<location filename="../src/gui/folderwizard.cpp" line="487"/>
<source>You are already syncing &lt;i&gt;%1&lt;/i&gt;, which is a parent folder of &lt;i&gt;%2&lt;/i&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="413"/>
<location filename="../src/gui/folderwizard.cpp" line="491"/>
<source>You are already syncing all your files. Syncing another folder is &lt;b&gt;not&lt;/b&gt; supported. If you want to sync multiple folders, please remove the currently configured root folder sync.</source>
<translation type="unfinished"></translation>
</message>
@@ -683,7 +683,7 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizardSelectiveSync</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="451"/>
<location filename="../src/gui/folderwizard.cpp" line="529"/>
<source>Choose What to Sync: You can optionally deselect remote subfolders you do not wish to synchronize.</source>
<translation type="unfinished"></translation>
</message>
@@ -1561,27 +1561,27 @@ It is not advisable to use it.</source>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="188"/>
<location filename="../src/libsync/propagateupload.cpp" line="549"/>
<location filename="../src/libsync/propagateupload.cpp" line="546"/>
<source>Local file changed during sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="474"/>
<location filename="../src/libsync/propagateupload.cpp" line="471"/>
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="508"/>
<location filename="../src/libsync/propagateupload.cpp" line="505"/>
<source>Poll URL missing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="531"/>
<location filename="../src/libsync/propagateupload.cpp" line="528"/>
<source>The local file was removed during sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="564"/>
<location filename="../src/libsync/propagateupload.cpp" line="561"/>
<source>The server did not acknowledge the last chunk. (No e-tag were present)</source>
<translation type="unfinished"></translation>
</message>
@@ -1649,12 +1649,12 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="258"/>
<location filename="../src/gui/protocolwidget.cpp" line="253"/>
<source>Currently no files are ignored because of previous errors and no downloads are in progress.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/protocolwidget.cpp" line="261"/>
<location filename="../src/gui/protocolwidget.cpp" line="256"/>
<source>%n files are ignored because of previous errors.
</source>
<translation type="unfinished">
@@ -1663,7 +1663,7 @@ It is not advisable to use it.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../src/gui/protocolwidget.cpp" line="262"/>
<location filename="../src/gui/protocolwidget.cpp" line="257"/>
<source>%n files are partially downloaded.
</source>
<translation type="unfinished">
@@ -1672,7 +1672,7 @@ It is not advisable to use it.</source>
</translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="263"/>
<location filename="../src/gui/protocolwidget.cpp" line="258"/>
<source>Try to sync these again.</source>
<translation type="unfinished"></translation>
</message>
@@ -1975,7 +1975,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="449"/>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"></translation>
@@ -2348,59 +2348,59 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="937"/>
<location filename="../src/libsync/syncengine.cpp" line="944"/>
<location filename="../src/libsync/syncengine.cpp" line="938"/>
<location filename="../src/libsync/syncengine.cpp" line="945"/>
<source>Ignored because of the &quot;choose what to sync&quot; blacklist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="962"/>
<location filename="../src/libsync/syncengine.cpp" line="963"/>
<source>Not allowed because you don&apos;t have permission to add sub-directories in that directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="968"/>
<location filename="../src/libsync/syncengine.cpp" line="969"/>
<source>Not allowed because you don&apos;t have permission to add parent directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="975"/>
<location filename="../src/libsync/syncengine.cpp" line="976"/>
<source>Not allowed because you don&apos;t have permission to add files in that directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="995"/>
<location filename="../src/libsync/syncengine.cpp" line="996"/>
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1012"/>
<location filename="../src/libsync/syncengine.cpp" line="1032"/>
<location filename="../src/libsync/syncengine.cpp" line="1013"/>
<location filename="../src/libsync/syncengine.cpp" line="1033"/>
<source>Not allowed to remove, restoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1045"/>
<location filename="../src/libsync/syncengine.cpp" line="1046"/>
<source>Local files and share folder removed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1100"/>
<location filename="../src/libsync/syncengine.cpp" line="1101"/>
<source>Move not allowed, item restored</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1109"/>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<source>Move not allowed because %1 is read-only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<location filename="../src/libsync/syncengine.cpp" line="1111"/>
<source>the destination</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<location filename="../src/libsync/syncengine.cpp" line="1111"/>
<source>the source</source>
<translation type="unfinished"></translation>
</message>
@@ -2852,12 +2852,12 @@ It is not advisable to use it.</source>
<context>
<name>main.cpp</name>
<message>
<location filename="../src/gui/main.cpp" line="45"/>
<location filename="../src/gui/main.cpp" line="38"/>
<source>System Tray not available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/main.cpp" line="46"/>
<location filename="../src/gui/main.cpp" line="39"/>
<source>%1 requires on a working system tray. If you are running XFCE, please follow &lt;a href=&quot;http://docs.xfce.org/xfce/xfce4-panel/systray&quot;&gt;these instructions&lt;/a&gt;. Otherwise, please install a system tray application such as &apos;trayer&apos; and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -2873,74 +2873,79 @@ It is not advisable to use it.</source>
<context>
<name>progress</name>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="32"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="31"/>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="34"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="33"/>
<source>Uploaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="37"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="36"/>
<source>Downloaded, renamed conflicting file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="38"/>
<source>Deleted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="40"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="41"/>
<source>Moved to %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="42"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="43"/>
<source>Ignored</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="44"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="45"/>
<source>Filesystem access error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="46"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="47"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="49"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="52"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="50"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="53"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="62"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="63"/>
<source>downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="64"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="65"/>
<source>uploading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="66"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="67"/>
<source>deleting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="69"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="70"/>
<source>moving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="71"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="72"/>
<source>ignoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="73"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="75"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="74"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="76"/>
<source>error</source>
<translation type="unfinished"></translation>
</message>