From: Joshua Sterner Date: Thu, 9 May 2019 08:05:49 +0000 (-0700) Subject: Fixed Issue #1000 - Subfolders of moved folders not synced X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~279^2^2~32^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b6ff17c50be2339ba1dcfa9a8b0afeccacd6d6e5;p=nextcloud-desktop.git Fixed Issue #1000 - Subfolders of moved folders not synced Signed-off-by: Joshua Sterner --- diff --git a/src/gui/folderwatcher.cpp b/src/gui/folderwatcher.cpp index d8136ff36..65e68cb36 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 a6cf006e2..b07c33a10 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 d90856828..b5dba5fbc 100644 --- a/test/testfolderwatcher.cpp +++ b/test/testfolderwatcher.cpp @@ -140,6 +140,19 @@ 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); + QString cmd = QString("mv " + _rootPath + "/a0 " + _rootPath + "/a"); + qDebug() << "Command: " << cmd; + system(cmd.toLocal8Bit()); + QVERIFY(waitForPathChanged(_rootPath + "/a/b/c/empty.txt")); + } + + void testCreateADir() { QString file(_rootPath+"/a1/b1/new_dir"); mkdir(file);