diff --git a/src/file/basicindexingjob.h b/src/file/basicindexingjob.h --- a/src/file/basicindexingjob.h +++ b/src/file/basicindexingjob.h @@ -23,7 +23,6 @@ #ifndef BASICINDEXINGJOB_H #define BASICINDEXINGJOB_H -#include #include "document.h" namespace Baloo { @@ -45,8 +44,6 @@ Document document() { return m_doc; } private: - static QVector typesForMimeType(const QString& mimeType); - QString m_filePath; QString m_mimetype; IndexingLevel m_indexingLevel; diff --git a/src/file/basicindexingjob.cpp b/src/file/basicindexingjob.cpp --- a/src/file/basicindexingjob.cpp +++ b/src/file/basicindexingjob.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -64,63 +65,12 @@ tg.indexXattrText(comment, QByteArray("C")); } } -} // namespace - -BasicIndexingJob::~BasicIndexingJob() -{ -} - -bool BasicIndexingJob::index() -{ - const QByteArray url = QFile::encodeName(m_filePath); - - QT_STATBUF statBuf; - if (filePathToStat(url, statBuf) != 0) { - return false; - } - - Document doc; - doc.setId(statBufToId(statBuf)); - doc.setUrl(url); - - QString fileName = url.mid(url.lastIndexOf('/') + 1); - - TermGenerator tg(doc); - tg.indexFileNameText(fileName); - tg.indexFileNameText(fileName, QByteArray("F")); - tg.indexText(m_mimetype, QByteArray("M")); - - // (Content) Modification time, Metadata (e.g. XAttr) change time - doc.setMTime(statBuf.st_mtime); - doc.setCTime(statBuf.st_ctime); - - // Types - QVector tList = typesForMimeType(m_mimetype); - for (KFileMetaData::Type::Type type : tList) { - QByteArray num = QByteArray::number(static_cast(type)); - doc.addTerm(QByteArray("T") + num); - } - - if (S_ISDIR(statBuf.st_mode)) { - static const QByteArray type = QByteArray("T") + QByteArray::number(static_cast(KFileMetaData::Type::Folder)); - doc.addTerm(type); - // For folders we do not need to go through file indexing, so we do not set contentIndexing - } - else if (m_indexingLevel == MarkForContentIndexing) { - doc.setContentIndexing(true); - } - - indexXAttr(m_filePath, doc); - - m_doc = doc; - return true; -} - -QVector BasicIndexingJob::typesForMimeType(const QString& mimeType) +QVector typesForMimeType(const QString& mimeType) { using namespace KFileMetaData; QVector types; + types.reserve(2); // Basic types if (mimeType.startsWith(QLatin1String("audio/"))) @@ -214,8 +164,61 @@ {"application/x-lyx", Type::Document} }; + auto hashIt = typeMapper.find(mimeType); + while (hashIt != typeMapper.end() && hashIt.key() == mimeType) { + types.append(hashIt.value()); + } - types << typeMapper.values(mimeType).toVector(); return types; } +} // namespace + +BasicIndexingJob::~BasicIndexingJob() +{ +} + +bool BasicIndexingJob::index() +{ + const QByteArray url = QFile::encodeName(m_filePath); + + QT_STATBUF statBuf; + if (filePathToStat(url, statBuf) != 0) { + return false; + } + + Document doc; + doc.setId(statBufToId(statBuf)); + doc.setUrl(url); + + QString fileName = url.mid(url.lastIndexOf('/') + 1); + + TermGenerator tg(doc); + tg.indexFileNameText(fileName); + tg.indexFileNameText(fileName, QByteArray("F")); + tg.indexText(m_mimetype, QByteArray("M")); + // (Content) Modification time, Metadata (e.g. XAttr) change time + doc.setMTime(statBuf.st_mtime); + doc.setCTime(statBuf.st_ctime); + + // Types + QVector tList = typesForMimeType(m_mimetype); + for (KFileMetaData::Type::Type type : tList) { + QByteArray num = QByteArray::number(static_cast(type)); + doc.addTerm(QByteArray("T") + num); + } + + if (S_ISDIR(statBuf.st_mode)) { + static const QByteArray type = QByteArray("T") + QByteArray::number(static_cast(KFileMetaData::Type::Folder)); + doc.addTerm(type); + // For folders we do not need to go through file indexing, so we do not set contentIndexing + } + else if (m_indexingLevel == MarkForContentIndexing) { + doc.setContentIndexing(true); + } + + indexXAttr(m_filePath, doc); + + m_doc = doc; + return true; +}