diff --git a/src/file/extractor/CMakeLists.txt b/src/file/extractor/CMakeLists.txt --- a/src/file/extractor/CMakeLists.txt +++ b/src/file/extractor/CMakeLists.txt @@ -12,6 +12,7 @@ ../storagedevices.cpp ../regexpcache.cpp ../fileexcludefilters.cpp + ../propertydata.cpp ) ecm_qt_declare_logging_category(EXTRACTOR_SRCS HEADER baloodebug.h IDENTIFIER BALOO CATEGORY_NAME org.kde.baloo) diff --git a/src/file/extractor/result.h b/src/file/extractor/result.h --- a/src/file/extractor/result.h +++ b/src/file/extractor/result.h @@ -86,7 +86,7 @@ /** * Contains all indexed property data from the extractors. */ - QVariantMap m_map; + KFileMetaData::PropertyMap m_map; }; #endif // EXTRACTIONRESULT_H diff --git a/src/file/extractor/result.cpp b/src/file/extractor/result.cpp --- a/src/file/extractor/result.cpp +++ b/src/file/extractor/result.cpp @@ -21,6 +21,7 @@ */ #include "result.h" +#include "propertydata.h" #include #include @@ -46,25 +47,16 @@ 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)); + if (value.type() == QVariant::StringList) { + const auto valueList = value.toStringList(); + for (const auto& val : valueList) { + m_map.insertMulti(property, val); } + } else { + m_map.insertMulti(property, value); } + int propNum = static_cast(property); QByteArray prefix = 'X' + QByteArray::number(propNum) + '-'; if (value.type() == QVariant::Bool) { @@ -92,7 +84,6 @@ m_termGen.indexText(val, prefix); if (shouldBeIndexed) m_termGen.indexText(val); - } } else { @@ -125,7 +116,7 @@ m_doc.setData(QByteArray()); return; } - QJsonObject jo = QJsonObject::fromVariantMap(m_map); + QJsonObject jo = Baloo::propertyMapToJson(m_map); QJsonDocument jdoc; jdoc.setObject(jo); m_doc.setData(jdoc.toJson(QJsonDocument::JsonFormat::Compact)); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -22,6 +22,7 @@ ../file/storagedevices.cpp ../file/regexpcache.cpp ../file/fileexcludefilters.cpp + ../file/propertydata.cpp searchstore.cpp diff --git a/src/lib/file.cpp b/src/lib/file.cpp --- a/src/lib/file.cpp +++ b/src/lib/file.cpp @@ -25,6 +25,7 @@ #include "database.h" #include "transaction.h" #include "idutils.h" +#include "propertydata.h" #include #include @@ -117,8 +118,7 @@ } const QJsonDocument jdoc = QJsonDocument::fromJson(arr); - const QVariantMap varMap = jdoc.object().toVariantMap(); - d->propertyMap = KFileMetaData::toPropertyMap(varMap); + d->propertyMap = Baloo::jsonToPropertyMap(jdoc.object()); return true; }