Baloo

firstrunindexer.cpp
1 /*
2  SPDX-FileCopyrightText: 2015 Vishesh Handa <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6 
7 #include "firstrunindexer.h"
8 #include "basicindexingjob.h"
9 #include "fileindexerconfig.h"
10 #include "filtereddiriterator.h"
11 
12 #include "baloodebug.h"
13 #include "database.h"
14 #include "transaction.h"
15 
16 #include <QMimeDatabase>
17 
18 using namespace Baloo;
19 
20 FirstRunIndexer::FirstRunIndexer(Database* db, FileIndexerConfig* config, const QStringList& folders)
21  : m_db(db)
22  , m_config(config)
23  , m_folders(folders)
24 {
25  Q_ASSERT(m_db);
26  Q_ASSERT(m_config);
27  Q_ASSERT(!m_folders.isEmpty());
28 }
29 
30 void FirstRunIndexer::run()
31 {
32  QMimeDatabase mimeDb;
33  BasicIndexingJob::IndexingLevel level = m_config->onlyBasicIndexing() ? BasicIndexingJob::NoLevel
34  : BasicIndexingJob::MarkForContentIndexing;
35 
36  for (const QString& folder : std::as_const(m_folders)) {
37  Transaction tr(m_db, Transaction::ReadWrite);
38  int transactionDocumentCount = 0;
39 
40  FilteredDirIterator it(m_config, folder);
41  while (!it.next().isEmpty()) {
43  if (it.fileInfo().isDir()) {
44  mimetype = QStringLiteral("inode/directory");
45  } else {
47  }
48 
49  BasicIndexingJob job(it.filePath(), mimetype, level);
50  if (!job.index()) {
51  continue;
52  }
53 
54  // Even though this is the first run, because 2 hard links will resolve to the same id,
55  // we land up crashing (due to the asserts in addDocument).
56  // Hence we are checking before.
57  // FIXME: Silently ignore hard links!
58  //
59  if (tr.hasDocument(job.document().id())) {
60  continue;
61  }
62  tr.addDocument(job.document());
63 
64  transactionDocumentCount++;
65  if (transactionDocumentCount > 20000) {
66  qCDebug(BALOO) << "Commit";
67  tr.commit();
68  tr.reset(Transaction::ReadWrite);
69  transactionDocumentCount = 0;
70  }
71  }
72 
73  // FIXME: This would consume too much memory. We should make some more commits
74  // based on how much memory we consume
75  tr.commit();
76  }
77 
78  Q_EMIT done();
79 }
80 
81 #include "moc_firstrunindexer.cpp"
QStringView level(QStringView ifopt)
KIOCORE_EXPORT MimetypeJob * mimetype(const QUrl &url, JobFlags flags=DefaultFlags)
Implements storage for docIds without any associated data Instantiated for:
Definition: coding.cpp:11
Active config class which emits signals if the config was changed, for example if the KCM saved the c...
KSharedConfigPtr config()
QMimeType mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Nov 29 2023 03:56:26 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.