nextcloud-desktop/src/libsync/propagatorjobs.h
Kevin Ottens 3182c613ac Take care of mangled paths on download as well
This means adjusting PropagateDownloadEncrypted so that it knows where
the file will end (otherwise it would create temporary files in non
existant paths for instance).
In turn we have to adjust PropagateDownloadFile accordingly so that it
resolves the local folder the file will end up in.
And last we adjust PropagateLocalMkdir to resolve paths as well and
demangle as needed.

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
2020-06-30 11:29:08 +02:00

95 lines
2.4 KiB
C++

/*
* Copyright (C) by Olivier Goffart <ogoffart@owncloud.com>
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
#pragma once
#include "owncloudpropagator.h"
#include <QFile>
namespace OCC {
/**
* Tags for checksum header.
* It's here for being shared between Upload- and Download Job
*/
static const char checkSumHeaderC[] = "OC-Checksum";
static const char contentMd5HeaderC[] = "Content-MD5";
/**
* @brief Declaration of the other propagation jobs
* @ingroup libsync
*/
class PropagateLocalRemove : public PropagateItemJob
{
Q_OBJECT
public:
PropagateLocalRemove(OwncloudPropagator *propagator, const SyncFileItemPtr &item)
: PropagateItemJob(propagator, item)
{
}
void start() override;
private:
bool removeRecursively(const QString &path);
QString _error;
bool _moveToTrash;
};
/**
* @brief The PropagateLocalMkdir class
* @ingroup libsync
*/
class PropagateLocalMkdir : public PropagateItemJob
{
Q_OBJECT
public:
PropagateLocalMkdir(OwncloudPropagator *propagator, const SyncFileItemPtr &item)
: PropagateItemJob(propagator, item)
, _deleteExistingFile(false)
{
}
void start() override;
/**
* Whether an existing file with the same name may be deleted before
* creating the directory.
*
* Default: false.
*/
void setDeleteExistingFile(bool enabled);
private:
void startLocalMkdir();
void startDemanglingName(const QString &parentPath);
bool _deleteExistingFile;
};
/**
* @brief The PropagateLocalRename class
* @ingroup libsync
*/
class PropagateLocalRename : public PropagateItemJob
{
Q_OBJECT
public:
PropagateLocalRename(OwncloudPropagator *propagator, const SyncFileItemPtr &item)
: PropagateItemJob(propagator, item)
{
}
void start() override;
JobParallelism parallelism() override { return _item->isDirectory() ? WaitForFinished : FullParallelism; }
};
}