New Propagation algorithm: Fetch, and emit, the root etag

Remove the feature to concatenate etags as servers that don't
have a root etag are no longer suported
This commit is contained in:
Olivier Goffart 2018-10-09 15:12:02 +02:00 committed by Kevin Ottens
parent d25d87e92c
commit 52dcfcb166
No known key found for this signature in database
GPG Key ID: 074BBBCB8DECC9E2
8 changed files with 5 additions and 34 deletions

View File

@ -513,11 +513,6 @@ void Account::setServerVersion(const QString &version)
emit serverVersionChanged(this, oldServerVersion, version);
}
bool Account::rootEtagChangesNotOnlySubFolderEtags()
{
return (serverVersionInt() >= makeServerVersion(8, 1, 0));
}
void Account::setNonShib(bool nonShib)
{
if (nonShib) {

View File

@ -219,10 +219,6 @@ public:
*/
bool serverVersionUnsupported() const;
// Fixed from 8.1 https://github.com/owncloud/client/issues/3730
/** Detects a specific bug in older server versions */
bool rootEtagChangesNotOnlySubFolderEtags();
/** True when the server connection is using HTTP2 */
bool isHttp2Supported() { return _http2Supported; }
void setHttp2Supported(bool value) { _http2Supported = value; }

View File

@ -37,6 +37,7 @@ void ProcessDirectoryJob::start()
if (_queryServer == NormalQuery) {
serverJob = new DiscoverySingleDirectoryJob(_discoveryData->_account,
_discoveryData->_remoteFolder + _currentFolder._server, this);
connect(serverJob, &DiscoverySingleDirectoryJob::etag, this, &ProcessDirectoryJob::etag);
connect(serverJob, &DiscoverySingleDirectoryJob::finished, this, [this, serverJob](const auto &results) {
if (results) {
_serverEntries = *results;

View File

@ -107,5 +107,7 @@ private:
signals:
void finished();
// The root etag of this directory was fetched
void etag(const QString &);
};
}

View File

@ -311,8 +311,6 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con
//This works in concerto with the RequestEtagJob and the Folder object to check if the remote folder changed.
if (map.contains("getetag")) {
_etagConcatenation += map.value("getetag");
if (_firstEtag.isEmpty()) {
_firstEtag = map.value("getetag"); // for directory itself
}
@ -333,7 +331,6 @@ void DiscoverySingleDirectoryJob::lsJobFinishedWithoutErrorSlot()
return;
}
emit etag(_firstEtag);
emit etagConcatenation(_etagConcatenation);
emit finished(_results);
deleteLater();
}

View File

@ -92,7 +92,6 @@ public:
// This is not actually a network job, it is just a job
signals:
void firstDirectoryPermissions(RemotePermissions);
void etagConcatenation(const QString &);
void etag(const QString &);
void finished(const Result<QVector<RemoteInfo>> &result);
private slots:
@ -103,7 +102,6 @@ private slots:
private:
QVector<RemoteInfo> _results;
QString _subPath;
QString _etagConcatenation;
QString _firstEtag;
AccountPtr _account;
// The first result is for the directory itself and need to be ignored.

View File

@ -62,16 +62,7 @@ RequestEtagJob::RequestEtagJob(AccountPtr account, const QString &path, QObject
void RequestEtagJob::start()
{
QNetworkRequest req;
if (_account && _account->rootEtagChangesNotOnlySubFolderEtags()) {
// Fixed from 8.1 https://github.com/owncloud/client/issues/3730
req.setRawHeader("Depth", "0");
} else {
// Let's always request all entries inside a directory. There are/were bugs in the server
// where a root or root-folder ETag is not updated when its contents change. We work around
// this by concatenating the ETags of the root and its contents.
req.setRawHeader("Depth", "1");
// See https://github.com/owncloud/core/issues/5255 and others
}
req.setRawHeader("Depth", "0");
QByteArray xml("<?xml version=\"1.0\" ?>\n"
"<d:propfind xmlns:d=\"DAV:\">\n"

View File

@ -618,16 +618,7 @@ void SyncEngine::slotStartDiscovery()
auto discoveryJob = new ProcessDirectoryJob(SyncFileItemPtr(), ProcessDirectoryJob::NormalQuery, ProcessDirectoryJob::NormalQuery,
_discoveryPhase.data(), _discoveryPhase.data());
_discoveryPhase->startJob(discoveryJob);
/*
* FIXME
if (account()->rootEtagChangesNotOnlySubFolderEtags()) {
connect(_discoveryMainThread.data(), &DiscoveryMainThread::etag, this, &SyncEngine::slotRootEtagReceived);
} else {
connect(_discoveryMainThread.data(), &DiscoveryMainThread::etagConcatenation, this, &SyncEngine::slotRootEtagReceived);
}
*/
connect(discoveryJob, &ProcessDirectoryJob::etag, this, &SyncEngine::slotRootEtagReceived);
}
void SyncEngine::slotFolderDiscovered(bool local, const QString &folder)