From e0200fbbd29629a852114e9700a6a928c77f948d Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 22 Jan 2019 11:29:03 +0100 Subject: [PATCH] Discovery: Add signal for silentlyExcluded files This allows SyncFileStatusTracker to also know about these. After all its information is used to provide icons for them too. --- src/libsync/discovery.cpp | 1 + src/libsync/discoveryphase.h | 7 +++++++ src/libsync/syncengine.cpp | 2 ++ src/libsync/syncfilestatustracker.cpp | 8 ++++++++ src/libsync/syncfilestatustracker.h | 2 ++ 5 files changed, 20 insertions(+) diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index 5c4210a056..47c7d06e9c 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -195,6 +195,7 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const QString &loc if (excluded == CSYNC_NOT_EXCLUDED && !isSymlink) { return false; } else if (excluded == CSYNC_FILE_SILENTLY_EXCLUDED || excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) { + emit _discoveryData->silentlyExcluded(path); return true; } diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index 0bdf4cc63e..54dd38783a 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -99,6 +99,7 @@ signals: void firstDirectoryPermissions(RemotePermissions); void etag(const QString &); void finished(const HttpResult> &result); + private slots: void directoryListingIteratedSlot(QString, const QMap &); void lsJobFinishedWithoutErrorSlot(); @@ -195,6 +196,12 @@ signals: // A new folder was discovered and was not synced because of the confirmation feature void newBigFolder(const QString &folder, bool isExternal); + + /** For excluded items that don't show up in itemDiscovered() + * + * The path is relative to the sync folder, similar to item->_file + */ + void silentlyExcluded(const QString &folderPath); }; /// Implementation of DiscoveryPhase::adjustRenamedPath diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 6fd996d506..d3e5942e06 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -565,6 +565,8 @@ void SyncEngine::startSync() finalize(false); }); connect(_discoveryPhase.data(), &DiscoveryPhase::finished, this, &SyncEngine::slotDiscoveryFinished); + connect(_discoveryPhase.data(), &DiscoveryPhase::silentlyExcluded, + _syncFileStatusTracker.data(), &SyncFileStatusTracker::slotAddSilentlyExcluded); auto discoveryJob = new ProcessDirectoryJob(SyncFileItemPtr(), ProcessDirectoryJob::NormalQuery, ProcessDirectoryJob::NormalQuery, _discoveryPhase.data(), _discoveryPhase.data()); diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 93a472e42a..d958669407 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -136,6 +136,8 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString &relativePath) // update the exclude list at runtime and doing it statically here removes // our ability to notify changes through the fileStatusChanged signal, // it's an acceptable compromize to treat all exclude types the same. + // Update: This extra check shouldn't hurt even though silently excluded files + // are now available via slotAddSilentlyExcluded(). if (_syncEngine->excludedFiles().isExcluded(_syncEngine->localPath() + relativePath, _syncEngine->localPath(), _syncEngine->ignoreHiddenFiles())) { @@ -166,6 +168,12 @@ void SyncFileStatusTracker::slotPathTouched(const QString &fileName) emit fileStatusChanged(fileName, SyncFileStatus::StatusSync); } +void SyncFileStatusTracker::slotAddSilentlyExcluded(const QString &folderPath) +{ + _syncProblems[folderPath] = SyncFileStatus::StatusWarning; + emit fileStatusChanged(getSystemDestination(folderPath), resolveSyncAndErrorStatus(folderPath, NotShared)); +} + void SyncFileStatusTracker::incSyncCountAndEmitStatusChanged(const QString &relativePath, SharedFlag sharedFlag) { // Will return 0 (and increase to 1) if the path wasn't in the map yet diff --git a/src/libsync/syncfilestatustracker.h b/src/libsync/syncfilestatustracker.h index 2ee803f6dc..929cf2d6e6 100644 --- a/src/libsync/syncfilestatustracker.h +++ b/src/libsync/syncfilestatustracker.h @@ -40,6 +40,8 @@ public: public slots: void slotPathTouched(const QString &fileName); + // path relative to folder + void slotAddSilentlyExcluded(const QString &folderPath); signals: void fileStatusChanged(const QString &systemFileName, SyncFileStatus fileStatus);