mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
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:
parent
d25d87e92c
commit
52dcfcb166
@ -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) {
|
||||
|
||||
@ -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; }
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -107,5 +107,7 @@ private:
|
||||
|
||||
signals:
|
||||
void finished();
|
||||
// The root etag of this directory was fetched
|
||||
void etag(const QString &);
|
||||
};
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user