diff --git a/src/file/extractor/result.cpp b/src/file/extractor/result.cpp index f99fb185..8040e45b 100644 --- a/src/file/extractor/result.cpp +++ b/src/file/extractor/result.cpp @@ -1,146 +1,141 @@ /* * This file is part of the KDE Baloo Project * Copyright (C) 2013-2015 Vishesh Handa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #include "result.h" #include #include #include #include #include // In order to use it in a vector Result::Result() : ExtractionResult(QString(), QString()) , m_termGen(nullptr) , m_termGenForText(nullptr) { } Result::Result(const QString& url, const QString& mimetype, const Flags& flags) : KFileMetaData::ExtractionResult(url, mimetype, flags) , m_termGen(nullptr) , m_termGenForText(nullptr) { } void Result::add(KFileMetaData::Property::Property property, const QVariant& value) { int propNum = static_cast(property); if (!value.isNull()) { QString p = QString::number(propNum); if (!m_map.contains(p)) { m_map.insert(p, value); } else { QVariant prev = m_map.value(p); QVariantList list; if (prev.type() == QVariant::List) { list = prev.toList(); } else { list << prev; } list << value; m_map.insert(p, QVariant(list)); } } QByteArray prefix = 'X' + QByteArray::number(propNum) + '-'; if (value.type() == QVariant::Bool) { m_doc.addTerm(prefix); } else if (value.type() == QVariant::Int || value.type() == QVariant::UInt) { const QByteArray term = prefix + value.toString().toUtf8(); m_doc.addTerm(term); } else if (value.type() == QVariant::Date) { const QByteArray term = prefix + value.toDate().toString(Qt::ISODate).toUtf8(); m_doc.addTerm(term); } else if (value.type() == QVariant::DateTime) { const QByteArray term = prefix + value.toDateTime().toString(Qt::ISODate).toUtf8(); m_doc.addTerm(term); } else if (value.type() == QVariant::StringList) { bool shouldBeIndexed = KFileMetaData::PropertyInfo(property).shouldBeIndexed(); const auto valueList = value.toStringList(); for (const auto& val : valueList) { if (val.isEmpty()) continue; m_termGen.indexText(val, prefix); if (shouldBeIndexed) m_termGen.indexText(val); } } else { const QString val = value.toString(); if (val.isEmpty()) return; m_termGen.indexText(val, prefix); KFileMetaData::PropertyInfo pi(property); if (pi.shouldBeIndexed()) m_termGen.indexText(val); } } void Result::append(const QString& text) { m_termGenForText.indexText(text); } void Result::addType(KFileMetaData::Type::Type type) { KFileMetaData::TypeInfo ti(type); const QString t = QLatin1Char('T') + ti.name().toLower(); m_doc.addTerm(t.toUtf8()); } void Result::finish() { QJsonObject jo = QJsonObject::fromVariantMap(m_map); QJsonDocument jdoc; jdoc.setObject(jo); m_doc.setData(jdoc.toJson()); } void Result::setDocument(const Baloo::Document& doc) { m_doc = doc; // All document metadata are indexed from position 1000 m_termGen.setDocument(&m_doc); m_termGen.setPosition(1000); // All document plain text starts from 10000. This is done to avoid // clashes with the term positions m_termGenForText.setDocument(&m_doc); m_termGenForText.setPosition(10000); } - -QVariantMap Result::map() const -{ - return m_map; -} diff --git a/src/file/extractor/result.h b/src/file/extractor/result.h index f0f92b7c..2fa62d2f 100644 --- a/src/file/extractor/result.h +++ b/src/file/extractor/result.h @@ -1,63 +1,61 @@ /* * This file is part of the KDE Baloo Project * Copyright (C) 2013 Vishesh Handa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #ifndef EXTRACTIONRESULT_H #define EXTRACTIONRESULT_H #include #include "document.h" #include "termgenerator.h" class Result : public KFileMetaData::ExtractionResult { public: Result(); Result(const QString& url, const QString& mimetype, const Flags& flags = ExtractEverything); void add(KFileMetaData::Property::Property property, const QVariant& value) override; void append(const QString& text) override; void addType(KFileMetaData::Type::Type type) override; void setDocument(const Baloo::Document& doc); - QVariantMap map() const; - Baloo::Document& document() { return m_doc; } /** * Applies the finishing touches on the document, and makes * it ready to be pushed into the db */ void finish(); private: Baloo::Document m_doc; Baloo::TermGenerator m_termGen; Baloo::TermGenerator m_termGenForText; QVariantMap m_map; }; #endif // EXTRACTIONRESULT_H