diff --git a/src/gui/folderwatcher.cpp b/src/gui/folderwatcher.cpp index d8136ff361..65e68cb36f 100644 --- a/src/gui/folderwatcher.cpp +++ b/src/gui/folderwatcher.cpp @@ -75,9 +75,27 @@ bool FolderWatcher::isReliable() const return _isReliable; } +void FolderWatcher::appendSubPaths(QDir dir, QStringList& subPaths) { + QStringList newSubPaths = dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); + for (int i = 0; i < newSubPaths.size(); i++) { + QString path = dir.path() + "/" + newSubPaths[i]; + QFileInfo fileInfo(path); + subPaths.append(path); + if (fileInfo.isDir()) { + QDir dir(path); + appendSubPaths(dir, subPaths); + } + } +} + void FolderWatcher::changeDetected(const QString &path) { + QFileInfo fileInfo(path); QStringList paths(path); + if (fileInfo.isDir()) { + QDir dir(path); + appendSubPaths(dir, paths); + } changeDetected(paths); } diff --git a/src/gui/folderwatcher.h b/src/gui/folderwatcher.h index a6cf006e20..b07c33a100 100644 --- a/src/gui/folderwatcher.h +++ b/src/gui/folderwatcher.h @@ -26,6 +26,7 @@ #include #include #include +#include class QTimer; @@ -120,6 +121,8 @@ private: Folder *_folder; bool _isReliable = true; + void appendSubPaths(QDir dir, QStringList& subPaths); + friend class FolderWatcherPrivate; }; } diff --git a/test/testfolderwatcher.cpp b/test/testfolderwatcher.cpp index d908568282..fdd97701db 100644 --- a/test/testfolderwatcher.cpp +++ b/test/testfolderwatcher.cpp @@ -140,6 +140,17 @@ private slots: QVERIFY(waitForPathChanged(file)); } + void testMove3LevelDirWithFile() { + QString file(_rootPath + "/a0/b/c/empty.txt"); + mkdir(_rootPath + "/a0"); + mkdir(_rootPath + "/a0/b"); + mkdir(_rootPath + "/a0/b/c"); + touch(file); + mv(_rootPath + "/a0 ", _rootPath + "/a"); + QVERIFY(waitForPathChanged(_rootPath + "/a/b/c/empty.txt")); + } + + void testCreateADir() { QString file(_rootPath+"/a1/b1/new_dir"); mkdir(file);