diff --git a/libsearch/filesystemwatcher/file-system-watcher.cpp b/libsearch/filesystemwatcher/file-system-watcher.cpp index 39bf4f8..c47beea 100644 --- a/libsearch/filesystemwatcher/file-system-watcher.cpp +++ b/libsearch/filesystemwatcher/file-system-watcher.cpp @@ -139,15 +139,17 @@ void FileSystemWatcherPrivate::addWatchWithBlackList(const QStringList &pathList QStringList FileSystemWatcherPrivate::removeWatch(const QString &path) { QStringList paths; - for(int wd : m_watchPathHash.keys()) { - QString tmpPath = m_watchPathHash.value(wd); - if(tmpPath.length() >= path.length()) { - if(FileUtils::isOrUnder(tmpPath, path)) { - //fix me:This function can be slow (O(n)) - paths.append(removeWatch(m_watchPathHash.key(path))); - } + QHash::iterator iter = m_watchPathHash.begin(); + while(iter != m_watchPathHash.end()) { + if(iter.value().length() >= path.length() && FileUtils::isOrUnder(iter.value(), path)) { + paths.append(iter.value()); + inotify_rm_watch(m_inotifyFd, iter.key()); + iter = m_watchPathHash.erase(iter); + } else { + ++iter; } } + m_watchPathHash.squeeze(); return paths; } diff --git a/libsearch/index/index-scheduler.cpp b/libsearch/index/index-scheduler.cpp index 6fd2b51..9a7dada 100644 --- a/libsearch/index/index-scheduler.cpp +++ b/libsearch/index/index-scheduler.cpp @@ -61,6 +61,7 @@ void IndexScheduler::addNewPath(const QString &folders, const QStringList &black FirstRunIndexer *indexer = new FirstRunIndexer(QStringList(folders), blackList, m_stop, FirstRunIndexer::WorkMode::Add, target); connect(indexer, &FirstRunIndexer::done, this, &IndexScheduler::addNewPathFinished, Qt::QueuedConnection); m_threadPool.start(indexer); + m_fileWatcher.addWatch(folders, blackList); } }