diff --git a/src/file/filecontentindexer.h b/src/file/filecontentindexer.h --- a/src/file/filecontentindexer.h +++ b/src/file/filecontentindexer.h @@ -40,7 +40,7 @@ Q_PROPERTY(QString currentFile READ currentFile NOTIFY startedIndexingFile) public: - FileContentIndexer(FileIndexerConfig* config, FileContentIndexerProvider* provider, QObject* parent = nullptr); + FileContentIndexer(FileIndexerConfig* config, FileContentIndexerProvider* provider, uint& finishedCount, QObject* parent = nullptr); QString currentFile() { return m_currentFile; } @@ -74,6 +74,7 @@ FileIndexerConfig *m_config; uint m_batchSize; FileContentIndexerProvider* m_provider; + uint& m_finishedCount; QAtomicInt m_stop; diff --git a/src/file/filecontentindexer.cpp b/src/file/filecontentindexer.cpp --- a/src/file/filecontentindexer.cpp +++ b/src/file/filecontentindexer.cpp @@ -27,11 +27,14 @@ using namespace Baloo; -FileContentIndexer::FileContentIndexer(FileIndexerConfig* config, FileContentIndexerProvider* provider, QObject* parent) +FileContentIndexer::FileContentIndexer(FileIndexerConfig* config, + FileContentIndexerProvider* provider, + uint& finishedCount, QObject* parent) : QObject(parent) , m_config(config) , m_batchSize(config->maxUncomittedFiles()) , m_provider(provider) + , m_finishedCount(finishedCount) , m_stop(0) { Q_ASSERT(provider); @@ -76,6 +79,9 @@ bool hadErrors = false; connect(&process, &ExtractorProcess::failed, &loop, [&hadErrors, &loop]() { hadErrors = true; loop.quit(); }); + uint batchStartCount = m_finishedCount; + connect(&process, &ExtractorProcess::finishedIndexingFile, &loop, [this]() { m_finishedCount++; }); + QElapsedTimer timer; timer.start(); @@ -95,6 +101,8 @@ } else { batchSize /= 2; } + // reset to old value - nothing comitted + m_finishedCount = batchStartCount; process.start(); } else { auto elapsed = timer.elapsed(); diff --git a/src/file/fileindexscheduler.h b/src/file/fileindexscheduler.h --- a/src/file/fileindexscheduler.h +++ b/src/file/fileindexscheduler.h @@ -127,6 +127,8 @@ IndexerState m_indexerState; TimeEstimator m_timeEstimator; + uint m_indexPendingFiles = 0; + uint m_indexFinishedFiles = 0; bool m_checkUnindexedFiles; bool m_checkStaleIndexEntries; diff --git a/src/file/fileindexscheduler.cpp b/src/file/fileindexscheduler.cpp --- a/src/file/fileindexscheduler.cpp +++ b/src/file/fileindexscheduler.cpp @@ -64,7 +64,7 @@ m_indexerState = LowPowerIdle; } - m_contentIndexer = new FileContentIndexer(m_config, &m_provider, this); + m_contentIndexer = new FileContentIndexer(m_config, &m_provider, m_indexFinishedFiles, this); m_contentIndexer->setAutoDelete(false); connect(m_contentIndexer, &FileContentIndexer::done, this, &FileIndexScheduler::runnerFinished); @@ -179,7 +179,9 @@ return; } - if (m_provider.size()) { + m_indexPendingFiles = m_provider.size(); + m_indexFinishedFiles = 0; + if (m_indexPendingFiles) { m_threadPool.start(m_contentIndexer); m_indexerState = ContentIndexing; Q_EMIT stateChanged(m_indexerState); @@ -283,7 +285,8 @@ if (m_indexerState != ContentIndexing) { return 0; } - return m_timeEstimator.calculateTimeLeft(m_provider.size()); + uint remainingFiles = m_indexPendingFiles - m_indexFinishedFiles; + return m_timeEstimator.calculateTimeLeft(remainingFiles); } void FileIndexScheduler::scheduleCheckUnindexedFiles()