From 22d989e27262b0f4c60f18d785ccff5d75fb7431 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 17 Jul 2018 10:09:57 +0200 Subject: [PATCH] New discovery algorithm: Fix directory deletion TestAllFilesDeleted passes --- src/libsync/discovery.h | 3 ++- src/libsync/syncengine.cpp | 14 +++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/libsync/discovery.h b/src/libsync/discovery.h index 727c44b23..79b244317 100644 --- a/src/libsync/discovery.h +++ b/src/libsync/discovery.h @@ -85,6 +85,8 @@ public: void start(); void abort(); + SyncFileItemPtr _dirItem; + private: struct PathTuple { @@ -121,7 +123,6 @@ private: QPointer _serverJob; std::deque _queuedJobs; QVector _runningJobs; - SyncFileItemPtr _dirItem; QueryMode _queryServer; QueryMode _queryLocal; DiscoveryPhase *_discoveryData; diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 56130442e..74d1c82ca 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -925,7 +925,9 @@ void SyncEngine::slotStartDiscovery() _discoveryPhase.data(), this); // FIXME! this sucks auto runQueuedJob = [this](ProcessDirectoryJob *job, const auto &runQueuedJob) -> void { - connect(job, &ProcessDirectoryJob::finished, this, [this, runQueuedJob] { + connect(job, &ProcessDirectoryJob::finished, this, [this, job, runQueuedJob] { + if (job->_dirItem) + job->itemDiscovered(job->_dirItem); sender()->deleteLater(); if (!_discoveryPhase->_queuedDeletedDirectories.isEmpty()) { auto job = qobject_cast(_discoveryPhase->_queuedDeletedDirectories.take(_discoveryPhase->_queuedDeletedDirectories.firstKey()).data()); @@ -1012,18 +1014,11 @@ void SyncEngine::slotDiscoveryJobFinished() // qCInfo(lcEngine) << "Permissions of the root folder: " << _csync_ctx->remote.root_perms.toString(); - /* - - // Adjust the paths for the renames. - for (const auto &syncItem : qAsConst(syncItems)) { - syncItem->_file = adjustRenamedPath(syncItem->_file); - } - ConfigFile cfgFile; if (!_hasNoneFiles && _hasRemoveFile && cfgFile.promptDeleteFiles()) { qCInfo(lcEngine) << "All the files are going to be changed, asking the user"; bool cancel = false; - emit aboutToRemoveAllFiles(syncItems.first()->_direction, &cancel); + emit aboutToRemoveAllFiles(_syncItems.first()->_direction, &cancel); if (cancel) { qCInfo(lcEngine) << "User aborted sync"; finalize(false); @@ -1031,6 +1026,7 @@ void SyncEngine::slotDiscoveryJobFinished() } } + /* auto databaseFingerprint = _journal->dataFingerprint(); // If databaseFingerprint is empty, this means that there was no information in the database // (for example, upgrading from a previous version, or first sync, or server not supporting fingerprint)