]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[BalooRolesProvider] Reduce number of XAttr reads
authorStefan Brüns <stefan.bruens@rwth-aachen.de>
Mon, 28 Dec 2020 00:07:52 +0000 (01:07 +0100)
committerStefan Brüns <stefan.bruens@rwth-aachen.de>
Mon, 11 Jan 2021 11:28:38 +0000 (12:28 +0100)
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.

src/kitemviews/private/kbaloorolesprovider.cpp

index ed79a79f87df664ff4ea675d9168fd28151fc1b5..df60a2533a173146db6438e6dff60ab6e51107e8 100644 (file)
@@ -91,17 +91,37 @@ QHash<QByteArray, QVariant> 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());
     }