X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/546ff9a19e17c60209ab2cdc814ff9fb85a19342..681d8bb6c:/src/kitemviews/private/kbaloorolesprovider.cpp diff --git a/src/kitemviews/private/kbaloorolesprovider.cpp b/src/kitemviews/private/kbaloorolesprovider.cpp index 469f07915..8a2a64b31 100644 --- a/src/kitemviews/private/kbaloorolesprovider.cpp +++ b/src/kitemviews/private/kbaloorolesprovider.cpp @@ -56,18 +56,34 @@ QHash KBalooRolesProvider::roleValues(const Baloo::File& f { QHash values; - QMapIterator it(file.properties()); - while (it.hasNext()) { - it.next(); + using entry = std::pair; + + const auto& propMap = file.properties(); + auto rangeBegin = propMap.constKeyValueBegin(); + + while (rangeBegin != propMap.constKeyValueEnd()) { + auto key = (*rangeBegin).first; + const KFileMetaData::PropertyInfo propertyInfo(key); + const QByteArray role = roleForProperty(propertyInfo.name()); + + auto rangeEnd = std::find_if(rangeBegin, propMap.constKeyValueEnd(), + [key](const entry& e) { return e.first != key; }); - const KFileMetaData::PropertyInfo pi(it.key()); - const QString property = pi.name(); - const QByteArray role = roleForProperty(property); if (role.isEmpty() || !roles.contains(role)) { + rangeBegin = rangeEnd; continue; } - values.insert(role, pi.formatAsDisplayString(it.value())); + auto distance = std::distance(rangeBegin, rangeEnd); + if (distance > 1) { + QVariantList list; + list.reserve(static_cast(distance)); + std::for_each(rangeBegin, rangeEnd, [&list](const entry& s) { list.append(s.second); }); + values.insert(role, propertyInfo.formatAsDisplayString(list)); + } else { + values.insert(role, propertyInfo.formatAsDisplayString((*rangeBegin).second)); + } + rangeBegin = rangeEnd; } KFileMetaData::UserMetaData md(file.path()); @@ -139,5 +155,5 @@ QString KBalooRolesProvider::tagsFromValues(const QStringList& values) const QCollator coll; coll.setNumericMode(true); std::sort(alphabeticalOrderTags.begin(), alphabeticalOrderTags.end(), [&](const QString& s1, const QString& s2){ return coll.compare(s1, s2) < 0; }); - return alphabeticalOrderTags.join(QStringLiteral(", ")); + return alphabeticalOrderTags.join(QLatin1String(", ")); }