Index: src/file/fileindexscheduler.h =================================================================== --- src/file/fileindexscheduler.h +++ src/file/fileindexscheduler.h @@ -74,6 +74,7 @@ void handleFileRemoved(const QString& file); + void updateConfig(); void scheduleIndexing(); void scheduleCheckUnindexedFiles(); void scheduleCheckStaleIndexEntries(); Index: src/file/fileindexscheduler.cpp =================================================================== --- src/file/fileindexscheduler.cpp +++ src/file/fileindexscheduler.cpp @@ -122,6 +122,19 @@ return; } + // This should be above content indexing, because there can be files that should not be indexed in the DB + // (i.e. if config was changed) + if (m_checkStaleIndexEntries) { + auto runnable = new IndexCleaner(m_db, m_config); + connect(runnable, &IndexCleaner::done, this, &FileIndexScheduler::scheduleIndexing); + + m_threadPool.start(runnable); + m_checkStaleIndexEntries = false; + m_indexerState = StaleIndexEntriesClean; + Q_EMIT stateChanged(m_indexerState); + return; + } + if (m_provider.size() && !m_powerMonitor.isOnBattery()) { m_threadPool.start(m_contentIndexer); m_indexerState = ContentIndexing; @@ -140,16 +153,6 @@ return; } - if (m_checkStaleIndexEntries) { - auto runnable = new IndexCleaner(m_db, m_config); - connect(runnable, &IndexCleaner::done, this, &FileIndexScheduler::scheduleIndexing); - - m_threadPool.start(runnable); - m_checkStaleIndexEntries = false; - m_indexerState = StaleIndexEntriesClean; - Q_EMIT stateChanged(m_indexerState); - return; - } m_indexerState = Idle; Q_EMIT stateChanged(m_indexerState); } @@ -163,6 +166,30 @@ list.erase(tail, list.end()); } +static void removeShouldNotIndex(QStringList& list, FileIndexerConfig* config) +{ + const auto tail = std::remove_if(list.begin(), list.end(), + [config](const QString& file) { + return !config->shouldBeIndexed(file); + }); + list.erase(tail, list.end()); +} + +void FileIndexScheduler::updateConfig() +{ + // Rescheduling content indexer + // (so we won't keep indexing files that should not be, bug 373430) + if (m_indexerState == ContentIndexing) { + m_contentIndexer->quit(); + m_indexerState = Idle; + } + removeShouldNotIndex(m_newFiles, m_config); + removeShouldNotIndex(m_modifiedFiles, m_config); + removeShouldNotIndex(m_xattrFiles, m_config); + checkStaleIndexEntries(); + checkUnindexedFiles(); +} + void FileIndexScheduler::handleFileRemoved(const QString& file) { if (!file.endsWith(QLatin1Char('/'))) { Index: src/file/indexcleaner.cpp =================================================================== --- src/file/indexcleaner.cpp +++ src/file/indexcleaner.cpp @@ -70,12 +70,7 @@ return false; }; - - const auto includeFolders = m_config->includeFolders(); - for (const QString& folder : includeFolders) { - quint64 id = filePathToId(QFile::encodeName(folder)); - tr.removeRecursively(id, shouldDelete); - } + tr.removeRecursively(0, shouldDelete); tr.commit(); Q_EMIT done(); Index: src/file/mainhub.cpp =================================================================== --- src/file/mainhub.cpp +++ src/file/mainhub.cpp @@ -66,9 +66,8 @@ void MainHub::updateConfig() { m_config->forceConfigUpdate(); - // FIXME!! - //m_fileIndexer.updateConfig(); m_fileWatcher.updateIndexedFoldersWatches(); + m_fileIndexScheduler.updateConfig(); } void MainHub::registerBalooWatcher(const QString &service)