Prechádzať zdrojové kódy

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
Olivier Goffart 7 rokov pred
rodič
commit
52dcfcb166

+ 0 - 5
src/libsync/account.cpp

@@ -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) {

+ 0 - 4
src/libsync/account.h

@@ -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; }

+ 1 - 0
src/libsync/discovery.cpp

@@ -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;

+ 2 - 0
src/libsync/discovery.h

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

+ 0 - 3
src/libsync/discoveryphase.cpp

@@ -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();
 }

+ 0 - 2
src/libsync/discoveryphase.h

@@ -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.

+ 1 - 10
src/libsync/networkjobs.cpp

@@ -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"

+ 1 - 10
src/libsync/syncengine.cpp

@@ -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)