mirror of
https://github.com/nextcloud/desktop.git
synced 2024-12-22 21:50:30 +03:00
99117078f3
If the code was not complex enough syncing two tables already started to give UNIQUE constrains errors on simple sync operations, this also adds initial support remote delete of an encrypted file
154 lines
3.8 KiB
C++
154 lines
3.8 KiB
C++
/*
|
|
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef SYNCJOURNALFILERECORD_H
|
|
#define SYNCJOURNALFILERECORD_H
|
|
|
|
#include <QString>
|
|
#include <QDateTime>
|
|
|
|
#include "csync.h"
|
|
#include "ocsynclib.h"
|
|
#include "remotepermissions.h"
|
|
#include "common/utility.h"
|
|
|
|
namespace OCC {
|
|
|
|
class SyncFileItem;
|
|
|
|
/**
|
|
* @brief The SyncJournalFileRecord class
|
|
* @ingroup libsync
|
|
*/
|
|
class OCSYNC_EXPORT SyncJournalFileRecord
|
|
{
|
|
public:
|
|
SyncJournalFileRecord();
|
|
|
|
bool isValid() const
|
|
{
|
|
return !_path.isEmpty();
|
|
}
|
|
|
|
/** Returns the numeric part of the full id in _fileId.
|
|
*
|
|
* On the server this is sometimes known as the internal file id.
|
|
*
|
|
* It is used in the construction of private links.
|
|
*/
|
|
QByteArray numericFileId() const;
|
|
QDateTime modDateTime() const { return Utility::qDateTimeFromTime_t(_modtime); }
|
|
|
|
QByteArray _path;
|
|
quint64 _inode;
|
|
qint64 _modtime;
|
|
ItemType _type;
|
|
QByteArray _etag;
|
|
QByteArray _fileId;
|
|
qint64 _fileSize;
|
|
RemotePermissions _remotePerm;
|
|
bool _serverHasIgnoredFiles;
|
|
QByteArray _checksumHeader;
|
|
QByteArray _e2eMangledName;
|
|
};
|
|
|
|
bool OCSYNC_EXPORT
|
|
operator==(const SyncJournalFileRecord &lhs,
|
|
const SyncJournalFileRecord &rhs);
|
|
|
|
class OCSYNC_EXPORT SyncJournalErrorBlacklistRecord
|
|
{
|
|
public:
|
|
enum Category {
|
|
/// Normal errors have no special behavior
|
|
Normal = 0,
|
|
/// These get a special summary message
|
|
InsufficientRemoteStorage
|
|
};
|
|
|
|
SyncJournalErrorBlacklistRecord()
|
|
: _retryCount(0)
|
|
, _errorCategory(Category::Normal)
|
|
, _lastTryModtime(0)
|
|
, _lastTryTime(0)
|
|
, _ignoreDuration(0)
|
|
{
|
|
}
|
|
|
|
/// The number of times the operation was unsuccessful so far.
|
|
int _retryCount;
|
|
|
|
/// The last error string.
|
|
QString _errorString;
|
|
/// The error category. Sometimes used for special actions.
|
|
Category _errorCategory;
|
|
|
|
qint64 _lastTryModtime;
|
|
QByteArray _lastTryEtag;
|
|
|
|
/// The last time the operation was attempted (in s since epoch).
|
|
qint64 _lastTryTime;
|
|
|
|
/// The number of seconds the file shall be ignored.
|
|
qint64 _ignoreDuration;
|
|
|
|
QString _file;
|
|
QString _renameTarget;
|
|
|
|
bool isValid() const;
|
|
};
|
|
|
|
/** Represents a conflict in the conflicts table.
|
|
*
|
|
* In the following the "conflict file" is the file with the "_conflict-"
|
|
* tag and the base file is the file that its a conflict for. So if
|
|
* a/foo.txt is the base file, its conflict file could be
|
|
* a/foo_conflict-1234.txt.
|
|
*/
|
|
class OCSYNC_EXPORT ConflictRecord
|
|
{
|
|
public:
|
|
/** Path to the _conflict- file
|
|
*
|
|
* So if a/foo.txt has a conflict, this path would point to
|
|
* a/foo_conflict-1234.txt.
|
|
*
|
|
* The path is sync-folder relative.
|
|
*/
|
|
QByteArray path;
|
|
|
|
/// File id of the base file
|
|
QByteArray baseFileId;
|
|
|
|
/** Modtime of the base file
|
|
*
|
|
* may not be available and be -1
|
|
*/
|
|
qint64 baseModtime = -1;
|
|
|
|
/** Etag of the base file
|
|
*
|
|
* may not be available and empty
|
|
*/
|
|
QByteArray baseEtag;
|
|
|
|
bool isValid() const { return !path.isEmpty(); }
|
|
};
|
|
}
|
|
|
|
#endif // SYNCJOURNALFILERECORD_H
|