┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodelrolesupdater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp')
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index 7b0d75dba..efcf6b4cc 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -33,6 +33,10 @@
#include <QElapsedTimer>
#include <QTimer>
+#ifdef HAVE_NEPOMUK
+ #include "knepomukrolesprovider_p.h"
+#endif
+
// Required includes for subItemsCount():
#ifdef Q_WS_WIN
#include <QDir>
@@ -74,6 +78,10 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
m_previewJobs(),
m_changedItemsTimer(0),
m_changedItems()
+ #ifdef HAVE_NEPOMUK
+ , m_resolveNepomukRoles(false)
+ #endif
+
{
Q_ASSERT(model);
@@ -219,6 +227,23 @@ void KFileItemModelRolesUpdater::setRoles(const QSet<QByteArray>& roles)
if (m_roles != roles) {
m_roles = roles;
+#ifdef HAVE_NEPOMUK
+ // Check whether there is at least one role that must be resolved
+ // with the help of Nepomuk. If this is the case, m_resolveNepomukRoles
+ // will be set to true and the (quite expensive) resolving will be done
+ // in KFileItemModelRolesUpdater::rolesData().
+ const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance();
+ m_resolveNepomukRoles = false;
+ QSetIterator<QByteArray> it(roles);
+ while (it.hasNext()) {
+ const QByteArray& role = it.next();
+ if (rolesProvider.isNepomukRole(role)) {
+ m_resolveNepomukRoles = true;
+ break;
+ }
+ }
+#endif
+
if (m_paused) {
m_rolesChangedDuringPausing = true;
} else {
@@ -754,6 +779,17 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
data.insert("iconOverlays", item.overlays());
+#ifdef HAVE_NEPOMUK
+ if (m_resolveNepomukRoles) {
+ const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance();
+ QHashIterator<QByteArray, QVariant> it(rolesProvider.roleValues(item.url(), m_roles));
+ while (it.hasNext()) {
+ it.next();
+ data.insert(it.key(), it.value());
+ }
+ }
+#endif
+
return data;
}