From d5a481f13240b50ff3993184152d3d4145ebfde0 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 12 Sep 2016 14:03:11 +0200 Subject: [PATCH] FolderWatcher: Act on relative paths #5116 (#5153) --- src/gui/folder.cpp | 5 ----- src/gui/folder.h | 5 ----- src/gui/folderwatcher.cpp | 17 +++++++++++++---- src/gui/folderwatcher.h | 1 + 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index f94ba71b4..532c38de5 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -621,11 +621,6 @@ void Folder::removeFromSettings() const settings->remove(FolderMan::escapeAlias(_definition.alias)); } -bool Folder::isFileExcludedAbsolute(const QString& fullPath) const -{ - return _engine->excludedFiles().isExcluded(fullPath, path(), _definition.ignoreHiddenFiles); -} - bool Folder::isFileExcludedRelative(const QString& relativePath) const { return _engine->excludedFiles().isExcluded(path() + relativePath, path(), _definition.ignoreHiddenFiles); diff --git a/src/gui/folder.h b/src/gui/folder.h index 40ff6deb1..762ea52b1 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -184,11 +184,6 @@ public: /// Removes the folder from the account's settings. void removeFromSettings() const; - /** - * Returns whether a file inside this folder should be excluded. - */ - bool isFileExcludedAbsolute(const QString& fullPath) const; - /** * Returns whether a file inside this folder should be excluded. */ diff --git a/src/gui/folderwatcher.cpp b/src/gui/folderwatcher.cpp index 30809c82f..c115611bb 100644 --- a/src/gui/folderwatcher.cpp +++ b/src/gui/folderwatcher.cpp @@ -41,7 +41,9 @@ FolderWatcher::FolderWatcher(const QString &root, Folder* folder) : QObject(folder), _folder(folder) { - _d.reset(new FolderWatcherPrivate(this, root)); + _canonicalFolderPath = QFileInfo(root).canonicalFilePath(); + + _d.reset(new FolderWatcherPrivate(this, _canonicalFolderPath)); _timer.start(); } @@ -55,10 +57,17 @@ bool FolderWatcher::pathIsIgnored( const QString& path ) if( !_folder ) return false; #ifndef OWNCLOUD_TEST - if (_folder->isFileExcludedAbsolute(path)) { - qDebug() << "* Ignoring file" << path; - return true; + QString relPath = path; + if (relPath.startsWith(_canonicalFolderPath)) { + relPath = relPath.remove(0, _canonicalFolderPath.length()+1); + if (_folder->isFileExcludedRelative(relPath)) { + qDebug() << "* Ignoring file" << relPath << "in" << _canonicalFolderPath; + return true; + } } + // there could be an odd watch event not being inside the _canonicalFolderPath + // We will just not ignore it then, who knows. + #endif return false; } diff --git a/src/gui/folderwatcher.h b/src/gui/folderwatcher.h index 15fe223a4..9b0d17471 100644 --- a/src/gui/folderwatcher.h +++ b/src/gui/folderwatcher.h @@ -89,6 +89,7 @@ private: QTime _timer; QSet _lastPaths; Folder* _folder; + QString _canonicalFolderPath; friend class FolderWatcherPrivate; };