Commit 17e127ed authored by Robert Hoffmann's avatar Robert Hoffmann
Browse files

Add only canonical paths to dirWatcher

Summary: KDirWatch only works correctly with canonical paths, i.e. symbolic links resolved.

Test Plan:
1. Create dirs:
$ mkdir test1
$ mkdir test1/subdir
$ ln -s test1 test2

2. Start dolphin, navigate to test2/subdir, then in terminal:
$ echo test > test2/subdir/test

Without the patch, test2/subdir/test won't be shown automatically, only after reload (F5).
With the patch applied, test2/subdir/test will be shown automatically.

3. Restart dolphin, navigate to test2/subdir, then in terminal:
$ echo test >> test2/subdir/test

Without the patch, the increased size of test2/subdir/test won't be shown automatically,
only after reload (F5). With the patch applied, it will be shown automatically.

4. Restart dolphin, navigate to test2/subdir, then in terminal:
$ rm test2/subdir/test

Without the patch, test2/subdir/test stays visible, will only disappear after reload (F5).
With the patch applied, it will disappear automatically.

Reviewers: dfaure, #dolphin, elvisangelaccio

Reviewed By: dfaure, #dolphin, elvisangelaccio

Subscribers: ngraham, elvisangelaccio, kfm-devel

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D25732
parent 09e215be
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <KDirWatch> #include <KDirWatch>
#include <QFileInfo>
#include <QThread> #include <QThread>
KDirectoryContentsCounter::KDirectoryContentsCounter(KFileItemModel* model, QObject* parent) : KDirectoryContentsCounter::KDirectoryContentsCounter(KFileItemModel* model, QObject* parent) :
...@@ -85,9 +86,11 @@ void KDirectoryContentsCounter::addDirectory(const QString& path) ...@@ -85,9 +86,11 @@ void KDirectoryContentsCounter::addDirectory(const QString& path)
int KDirectoryContentsCounter::countDirectoryContentsSynchronously(const QString& path) int KDirectoryContentsCounter::countDirectoryContentsSynchronously(const QString& path)
{ {
if (!m_dirWatcher->contains(path)) { const QString resolvedPath = QFileInfo(path).canonicalFilePath();
m_dirWatcher->addDir(path);
m_watchedDirs.insert(path); if (!m_dirWatcher->contains(resolvedPath)) {
m_dirWatcher->addDir(resolvedPath);
m_watchedDirs.insert(resolvedPath);
} }
KDirectoryContentsCounterWorker::Options options; KDirectoryContentsCounterWorker::Options options;
...@@ -107,9 +110,11 @@ void KDirectoryContentsCounter::slotResult(const QString& path, int count) ...@@ -107,9 +110,11 @@ void KDirectoryContentsCounter::slotResult(const QString& path, int count)
{ {
m_workerIsBusy = false; m_workerIsBusy = false;
if (!m_dirWatcher->contains(path)) { const QString resolvedPath = QFileInfo(path).canonicalFilePath();
m_dirWatcher->addDir(path);
m_watchedDirs.insert(path); if (!m_dirWatcher->contains(resolvedPath)) {
m_dirWatcher->addDir(resolvedPath);
m_watchedDirs.insert(resolvedPath);
} }
if (!m_queue.isEmpty()) { if (!m_queue.isEmpty()) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment