From: Stefan BrĂ¼ns Date: Mon, 28 Dec 2020 00:07:52 +0000 (+0100) Subject: [BalooRolesProvider] Reduce number of XAttr reads X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/dcdf4b01c8b0517ad23b420316e27c8dce9cef82 [BalooRolesProvider] Reduce number of XAttr reads Typically most of the extended attributes are not set for a file. Instead of trying to fetch each attribute individually check which attributes exist first. --- diff --git a/src/kitemviews/private/kbaloorolesprovider.cpp b/src/kitemviews/private/kbaloorolesprovider.cpp index ed79a79f8..df60a2533 100644 --- a/src/kitemviews/private/kbaloorolesprovider.cpp +++ b/src/kitemviews/private/kbaloorolesprovider.cpp @@ -91,17 +91,37 @@ QHash KBalooRolesProvider::roleValues(const Baloo::File& f rangeBegin = rangeEnd; } - KFileMetaData::UserMetaData md(file.path()); + KFileMetaData::UserMetaData::Attributes attributes; if (roles.contains("tags")) { - values.insert("tags", tagsFromValues(md.tags())); + attributes |= KFileMetaData::UserMetaData::Tags; } if (roles.contains("rating")) { - values.insert("rating", QString::number(md.rating())); + attributes |= KFileMetaData::UserMetaData::Rating; } if (roles.contains("comment")) { - values.insert("comment", md.userComment()); + attributes |= KFileMetaData::UserMetaData::Comment; } if (roles.contains("originUrl")) { + attributes |= KFileMetaData::UserMetaData::OriginUrl; + } + + if (attributes == KFileMetaData::UserMetaData::None) { + return values; + } + + KFileMetaData::UserMetaData md(file.path()); + attributes = md.queryAttributes(attributes); + + if (attributes & KFileMetaData::UserMetaData::Tags) { + values.insert("tags", tagsFromValues(md.tags())); + } + if (attributes & KFileMetaData::UserMetaData::Rating) { + values.insert("rating", QString::number(md.rating())); + } + if (attributes & KFileMetaData::UserMetaData::Comment) { + values.insert("comment", md.userComment()); + } + if (attributes & KFileMetaData::UserMetaData::OriginUrl) { values.insert("originUrl", md.originUrl()); }