diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ project(baloo-widgets VERSION ${KDE_APPLICATIONS_VERSION}) set(QT_MIN_VERSION "5.8.0") -set(KF5_MIN_VERSION "5.57.0") +set(KF5_MIN_VERSION "5.58.0") find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) diff --git a/src/filemetadatautil.cpp b/src/filemetadatautil.cpp --- a/src/filemetadatautil.cpp +++ b/src/filemetadatautil.cpp @@ -21,6 +21,8 @@ #include #include +#include + namespace Baloo { namespace Private @@ -56,10 +58,31 @@ QVariantMap toNamedVariantMap(const KFileMetaData::PropertyMap& propMap) { QVariantMap map; - KFileMetaData::PropertyMap::const_iterator it = propMap.constBegin(); - for (; it != propMap.constEnd(); it++) { - KFileMetaData::PropertyInfo pi(it.key()); - map.insertMulti(pi.name(), it.value()); + if (propMap.isEmpty()) { + return map; + } + + using entry = std::pair; + + auto begin = propMap.constKeyValueBegin(); + auto rangeEnd = propMap.constKeyValueEnd(); + + while (begin != propMap.constKeyValueEnd()) { + auto key = (*begin).first; + KFileMetaData::PropertyInfo property(key); + rangeEnd = std::find_if(begin, propMap.constKeyValueEnd(), + [key](const entry& e) { return e.first != key; }); + + auto distance = std::distance(begin, rangeEnd); + if (distance > 1) { + QVariantList list; + list.reserve(static_cast(distance)); + std::for_each(begin, rangeEnd, [&list](const entry& s) { list.append(s.second); }); + map.insert(property.name(), list); + } else { + map.insert(property.name(), (*begin).second); + } + begin = rangeEnd; } return map; diff --git a/src/filemetadatautil_p.h b/src/filemetadatautil_p.h --- a/src/filemetadatautil_p.h +++ b/src/filemetadatautil_p.h @@ -34,8 +34,10 @@ QVariantMap convertUserMetaData(const KFileMetaData::UserMetaData& metaData); /** - * Converts the property map into a variant map - * using the property name as key. + * Converts the property map into a variant map using the + * property name as key. In case a key has multiple values, + * all its values are collected in a QVariantList that is + * stored as a single entry. */ QVariantMap toNamedVariantMap(const KFileMetaData::PropertyMap& propMap);