┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private
diff options
context:
space:
mode:
authorVishesh Handa <[email protected]>2014-02-06 20:29:09 +0100
committerVishesh Handa <[email protected]>2014-02-06 20:29:09 +0100
commit64afe7b22622f79b34aafd54501b08120ab2fc5c (patch)
tree125752b2bc33c5e9db84f197dced5d61a7d46e94 /src/kitemviews/private
parent2c20502c346d975bff854567c038bf0b78c3b857 (diff)
Port Dolphin to Baloo
Nepomuk is being replaced with Baloo
Diffstat (limited to 'src/kitemviews/private')
-rw-r--r--src/kitemviews/private/kbaloorolesprovider.cpp184
-rw-r--r--src/kitemviews/private/kbaloorolesprovider.h (renamed from src/kitemviews/private/knepomukrolesprovider.h)30
-rw-r--r--src/kitemviews/private/knepomukrolesprovider.cpp201
3 files changed, 199 insertions, 216 deletions
diff --git a/src/kitemviews/private/kbaloorolesprovider.cpp b/src/kitemviews/private/kbaloorolesprovider.cpp
new file mode 100644
index 000000000..c0ae0c544
--- /dev/null
+++ b/src/kitemviews/private/kbaloorolesprovider.cpp
@@ -0,0 +1,184 @@
+/***************************************************************************
+ * Copyright (C) 2012 by Peter Penz <[email protected]> *
+ * Copyright (C) 2013 by Vishesh Handa <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "kbaloorolesprovider.h"
+
+#include <KDebug>
+#include <KGlobal>
+#include <KLocale>
+
+#include <baloo/file.h>
+#include <kfilemetadata/propertyinfo.h>
+
+#include <QTime>
+#include <QMap>
+
+struct KBalooRolesProviderSingleton
+{
+ KBalooRolesProvider instance;
+};
+K_GLOBAL_STATIC(KBalooRolesProviderSingleton, s_balooRolesProvider)
+
+
+KBalooRolesProvider& KBalooRolesProvider::instance()
+{
+ return s_balooRolesProvider->instance;
+}
+
+KBalooRolesProvider::~KBalooRolesProvider()
+{
+}
+
+QSet<QByteArray> KBalooRolesProvider::roles() const
+{
+ return m_roles;
+}
+
+QHash<QByteArray, QVariant> KBalooRolesProvider::roleValues(const Baloo::File& file,
+ const QSet<QByteArray>& roles) const
+{
+ QHash<QByteArray, QVariant> values;
+
+ int width = -1;
+ int height = -1;
+
+ QMapIterator<KFileMetaData::Property::Property, QVariant> it(file.properties());
+ while (it.hasNext()) {
+ it.next();
+
+ const KFileMetaData::PropertyInfo pi(it.key());
+ const QString property = pi.name();
+ const QByteArray role = roleForProperty(property);
+ if (role.isEmpty() || !roles.contains(role)) {
+ continue;
+ }
+
+ const QVariant value = it.value();
+
+ if (role == "imageSize") {
+ // Merge the two properties for width and height
+ // as one string into the "imageSize" role
+ if (property == QLatin1String("width")) {
+ width = value.toInt();
+ }
+ else if (property == QLatin1String("height")) {
+ height = value.toInt();
+ }
+
+ if (width >= 0 && height >= 0) {
+ QString widthAndHeight = QString::number(width);
+ widthAndHeight += QLatin1String(" x ");
+ widthAndHeight += QString::number(height);
+ values.insert(role, widthAndHeight);
+ }
+ } else if (role == "orientation") {
+ const QString orientation = orientationFromValue(value.toInt());
+ values.insert(role, orientation);
+ } else if (role == "duration") {
+ const QString duration = durationFromValue(value.toInt());
+ values.insert(role, duration);
+ } else {
+ values.insert(role, value.toString());
+ }
+ }
+
+ if (roles.contains("tags")) {
+ values.insert("tags", tagsFromValues(file.tags()));
+ }
+ if (roles.contains("rating")) {
+ values.insert("rating", QString::number(file.rating()));
+ }
+ if (roles.contains("comment")) {
+ values.insert("comment", file.userComment());
+ }
+
+ return values;
+}
+
+QByteArray KBalooRolesProvider::roleForProperty(const QString& property) const
+{
+ return m_roleForProperty.value(property);
+}
+
+KBalooRolesProvider::KBalooRolesProvider() :
+ m_roles(),
+ m_roleForProperty()
+{
+ struct PropertyInfo
+ {
+ const char* const property;
+ const char* const role;
+ };
+
+ // Mapping from the URIs to the KFileItemModel roles. Note that this must not be
+ // a 1:1 mapping: One role may contain several URI-values (e.g. the URIs for height and
+ // width of an image are mapped to the role "imageSize")
+ static const PropertyInfo propertyInfoList[] = {
+ { "rating", "rating" },
+ { "tag", "tags" },
+ { "comment", "comment" },
+ { "wordCount", "wordCount" },
+ { "lineCount", "lineCount" },
+ { "width", "imageSize" },
+ { "height", "imageSize" },
+ { "nexif.orientation", "orientation", },
+ { "artist", "artist" },
+ { "album", "album" },
+ { "duration", "duration" },
+ { "trackNumber", "track" }
+ // { "http://www.semanticdesktop.org/ontologies/2010/04/30/ndo#copiedFrom", "copiedFrom" }
+ };
+
+ for (unsigned int i = 0; i < sizeof(propertyInfoList) / sizeof(PropertyInfo); ++i) {
+ m_roleForProperty.insert(propertyInfoList[i].property, propertyInfoList[i].role);
+ m_roles.insert(propertyInfoList[i].role);
+ }
+}
+
+QString KBalooRolesProvider::tagsFromValues(const QStringList& values) const
+{
+ return values.join(", ");
+}
+
+QString KBalooRolesProvider::orientationFromValue(int value) const
+{
+ QString string;
+ switch (value) {
+ case 1: string = i18nc("@item:intable Image orientation", "Unchanged"); break;
+ case 2: string = i18nc("@item:intable Image orientation", "Horizontally flipped"); break;
+ case 3: string = i18nc("@item:intable image orientation", "180° rotated"); break;
+ case 4: string = i18nc("@item:intable image orientation", "Vertically flipped"); break;
+ case 5: string = i18nc("@item:intable image orientation", "Transposed"); break;
+ case 6: string = i18nc("@item:intable image orientation", "90° rotated"); break;
+ case 7: string = i18nc("@item:intable image orientation", "Transversed"); break;
+ case 8: string = i18nc("@item:intable image orientation", "270° rotated"); break;
+ default:
+ break;
+ }
+ return string;
+}
+
+QString KBalooRolesProvider::durationFromValue(int value) const
+{
+ QTime duration;
+ duration = duration.addSecs(value);
+ return duration.toString("hh:mm:ss");
+}
+
diff --git a/src/kitemviews/private/knepomukrolesprovider.h b/src/kitemviews/private/kbaloorolesprovider.h
index 68a4027e1..f1ad5c740 100644
--- a/src/kitemviews/private/knepomukrolesprovider.h
+++ b/src/kitemviews/private/kbaloorolesprovider.h
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (C) 2012 by Peter Penz <[email protected]> *
+ * Copyright (C) 2013 by Vishesh Handa <[email protected]> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -17,8 +18,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#ifndef KNEPOMUKROLESPROVIDER_H
-#define KNEPOMUKROLESPROVIDER_H
+#ifndef KBALOO_ROLESPROVIDER_H
+#define KBALOO_ROLESPROVIDER_H
#include <libdolphin_export.h>
@@ -26,25 +27,24 @@
#include <QSet>
#include <QUrl>
-namespace Nepomuk2
-{
- class Resource;
+namespace Baloo {
+ class File;
}
/**
* @brief Allows accessing metadata of a file by providing KFileItemModel roles.
*
* Is a helper class for KFileItemModelRolesUpdater to retrieve roles that
- * are only accessible with Nepomuk.
+ * are only accessible with Baloo.
*/
-class LIBDOLPHINPRIVATE_EXPORT KNepomukRolesProvider
+class LIBDOLPHINPRIVATE_EXPORT KBalooRolesProvider
{
public:
- static KNepomukRolesProvider& instance();
- virtual ~KNepomukRolesProvider();
+ static KBalooRolesProvider& instance();
+ virtual ~KBalooRolesProvider();
/**
- * @return Roles that can be provided by KNepomukRolesProvider.
+ * @return Roles that can be provided by KBalooRolesProvider.
*/
QSet<QByteArray> roles() const;
@@ -52,13 +52,13 @@ public:
* @return Values for the roles \a roles that can be determined from the file
* with the URL \a url.
*/
- QHash<QByteArray, QVariant> roleValues(const Nepomuk2::Resource& resource,
+ QHash<QByteArray, QVariant> roleValues(const Baloo::File& file,
const QSet<QByteArray>& roles) const;
- QByteArray roleForPropertyUri(const QUrl& uri) const;
+ QByteArray roleForProperty(const QString& property) const;
protected:
- KNepomukRolesProvider();
+ KBalooRolesProvider();
private:
/**
@@ -81,9 +81,9 @@ private:
private:
QSet<QByteArray> m_roles;
- QHash<QUrl, QByteArray> m_roleForUri;
+ QHash<QString, QByteArray> m_roleForProperty;
- friend class KNepomukRolesProviderSingleton;
+ friend class KBalooRolesProviderSingleton;
};
#endif
diff --git a/src/kitemviews/private/knepomukrolesprovider.cpp b/src/kitemviews/private/knepomukrolesprovider.cpp
deleted file mode 100644
index e237f948f..000000000
--- a/src/kitemviews/private/knepomukrolesprovider.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2012 by Peter Penz <[email protected]> *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
- ***************************************************************************/
-
-#include "knepomukrolesprovider.h"
-
-#include <KDebug>
-#include <KGlobal>
-#include <KLocale>
-
-#include <Nepomuk2/Resource>
-#include <Nepomuk2/Tag>
-#include <Nepomuk2/Types/Property>
-#include <Nepomuk2/Variant>
-
-#include <QTime>
-
-struct KNepomukRolesProviderSingleton
-{
- KNepomukRolesProvider instance;
-};
-K_GLOBAL_STATIC(KNepomukRolesProviderSingleton, s_nepomukRolesProvider)
-
-
-KNepomukRolesProvider& KNepomukRolesProvider::instance()
-{
- return s_nepomukRolesProvider->instance;
-}
-
-KNepomukRolesProvider::~KNepomukRolesProvider()
-{
-}
-
-QSet<QByteArray> KNepomukRolesProvider::roles() const
-{
- return m_roles;
-}
-
-QHash<QByteArray, QVariant> KNepomukRolesProvider::roleValues(const Nepomuk2::Resource& resource,
- const QSet<QByteArray>& roles) const
-{
- if (!resource.isValid()) {
- return QHash<QByteArray, QVariant>();
- }
-
- QHash<QByteArray, QVariant> values;
-
- int width = -1;
- int height = -1;
-
- QHashIterator<QUrl, Nepomuk2::Variant> it(resource.properties());
- while (it.hasNext()) {
- it.next();
-
- const Nepomuk2::Types::Property property = it.key();
- const QByteArray role = roleForPropertyUri(property.uri());
- if (role.isEmpty() || !roles.contains(role)) {
- continue;
- }
-
- const Nepomuk2::Variant value = it.value();
-
- if (role == "imageSize") {
- // Merge the two Nepomuk properties for width and height
- // as one string into the "imageSize" role
- const QString uri = property.uri().toString();
- if (uri.endsWith(QLatin1String("#width"))) {
- width = value.toInt();
- } else if (uri.endsWith(QLatin1String("#height"))) {
- height = value.toInt();
- }
-
- if (width >= 0 && height >= 0) {
- const QString widthAndHeight = QString::number(width) +
- QLatin1String(" x ") +
- QString::number(height);
- values.insert(role, widthAndHeight);
- }
- } else if (role == "tags") {
- const QString tags = tagsFromValues(value.toStringList());
- values.insert(role, tags);
- } else if (role == "orientation") {
- const QString orientation = orientationFromValue(value.toInt());
- values.insert(role, orientation);
- } else if (role == "duration") {
- const QString duration = durationFromValue(value.toInt());
- values.insert(role, duration);
- } else if (value.isResource()) {
- const Nepomuk2::Resource resource = value.toResource();
- values.insert(role, resource.genericLabel());
- } else if (value.isResourceList()) {
- const QList<Nepomuk2::Resource> resList = value.toResourceList();
- QStringList strList;
- foreach (const Nepomuk2::Resource& res, resList) {
- strList << res.genericLabel();
- }
- values.insert(role, strList.join(QLatin1String(", ")));
- } else {
- values.insert(role, value.toString());
- }
- }
-
- return values;
-}
-
-QByteArray KNepomukRolesProvider::roleForPropertyUri(const QUrl& uri) const
-{
- return m_roleForUri.value(uri);
-}
-
-KNepomukRolesProvider::KNepomukRolesProvider() :
- m_roles(),
- m_roleForUri()
-{
- struct UriInfo
- {
- const char* const uri;
- const char* const role;
- };
-
- // Mapping from the URIs to the KFileItemModel roles. Note that this must not be
- // a 1:1 mapping: One role may contain several URI-values (e.g. the URIs for height and
- // width of an image are mapped to the role "imageSize")
- static const UriInfo uriInfoList[] = {
- { "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#numericRating", "rating" },
- { "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#hasTag", "tags" },
- { "http://www.semanticdesktop.org/ontologies/2007/08/15/nao#description", "comment" },
- { "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#wordCount", "wordCount" },
- { "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#lineCount", "lineCount" },
- { "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width", "imageSize" },
- { "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height", "imageSize" },
- { "http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#orientation", "orientation", },
- { "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#performer", "artist" },
- { "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#musicAlbum", "album" },
- { "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#duration", "duration" },
- { "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#trackNumber", "track" },
- { "http://www.semanticdesktop.org/ontologies/2010/04/30/ndo#copiedFrom", "copiedFrom" }
- };
-
- for (unsigned int i = 0; i < sizeof(uriInfoList) / sizeof(UriInfo); ++i) {
- m_roleForUri.insert(QUrl(uriInfoList[i].uri), uriInfoList[i].role);
- m_roles.insert(uriInfoList[i].role);
- }
-}
-
-QString KNepomukRolesProvider::tagsFromValues(const QStringList& values) const
-{
- QString tags;
-
- for (int i = 0; i < values.count(); ++i) {
- if (i > 0) {
- tags.append(QLatin1String(", "));
- }
-
- const Nepomuk2::Tag tag(values[i]);
- tags += tag.genericLabel();
- }
-
- return tags;
-}
-
-QString KNepomukRolesProvider::orientationFromValue(int value) const
-{
- QString string;
- switch (value) {
- case 1: string = i18nc("@item:intable Image orientation", "Unchanged"); break;
- case 2: string = i18nc("@item:intable Image orientation", "Horizontally flipped"); break;
- case 3: string = i18nc("@item:intable image orientation", "180° rotated"); break;
- case 4: string = i18nc("@item:intable image orientation", "Vertically flipped"); break;
- case 5: string = i18nc("@item:intable image orientation", "Transposed"); break;
- case 6: string = i18nc("@item:intable image orientation", "90° rotated"); break;
- case 7: string = i18nc("@item:intable image orientation", "Transversed"); break;
- case 8: string = i18nc("@item:intable image orientation", "270° rotated"); break;
- default:
- break;
- }
- return string;
-}
-
-QString KNepomukRolesProvider::durationFromValue(int value) const
-{
- QTime duration;
- duration = duration.addSecs(value);
- return duration.toString("hh:mm:ss");
-}
-