[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9

Maximiliano Curia maxy at moszumanska.debian.org
Mon May 9 09:06:54 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=d24c0a5

The following commit has been merged in the master branch:
commit d24c0a588d941279dc7a0a4d712b7c03945b31fe
Author: Martin Klapetek <martin.klapetek at gmail.com>
Date:   Tue Jun 25 17:31:44 2013 +0200

    Update to latest changes from KPeople
---
 KTp/Models/kpeopletranslationproxy.cpp | 59 ++++++++++++++++++++++++++++++++--
 KTp/Models/kpeopletranslationproxy.h   |  1 +
 2 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/KTp/Models/kpeopletranslationproxy.cpp b/KTp/Models/kpeopletranslationproxy.cpp
index e231823..bdf9723 100644
--- a/KTp/Models/kpeopletranslationproxy.cpp
+++ b/KTp/Models/kpeopletranslationproxy.cpp
@@ -27,6 +27,9 @@
 
 #include <KTp/types.h>
 #include <KDebug>
+#include <KIconLoader>
+
+#include <QPixmapCache>
 
 using namespace KPeople;
 
@@ -57,7 +60,7 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
         case KTp::ContactPresenceTypeRole:
             return translatePresence(mapToSource(proxyIndex).data(PersonsModel::PresenceTypeRole));
         case KTp::ContactPresenceIconRole:
-            return mapToSource(proxyIndex).data(PersonsModel::PresenceDecorationRole);
+            return mapToSource(proxyIndex).data(PersonsModel::PresenceIconNameRole);
         case KTp::ContactPresenceNameRole:
             return mapToSource(proxyIndex).data(PersonsModel::PresenceDisplayRole);
         case Qt::DisplayRole:
@@ -70,6 +73,8 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
             }
         case KTp::ContactAvatarPathRole:
             return mapToSource(proxyIndex).data(PersonsModel::PhotosRole);
+        case KTp::ContactAvatarPixmapRole:
+            return contactPixmap(proxyIndex);
         case KTp::IdRole:
             return mapToSource(proxyIndex).data(PersonsModel::IMsRole);
         case KTp::HeaderTotalUsersRole:
@@ -89,7 +94,7 @@ QVariant KPeopleTranslationProxy::data(const QModelIndex &proxyIndex, int role)
 
     for (int i = 0; i < j; i++) {
         const QString contactId = isChildContact ? mapToSource(proxyIndex).data(PersonsModel::IMsRole).toString()
-                                                : mapToSource(proxyIndex).data(PersonsModel::IMsRole).toList().at(i).toString();
+        : mapToSource(proxyIndex).data(PersonsModel::IMsRole).toList().at(i).toString();
         const KTp::ContactPtr contact = imPlugin->contactForContactId(contactId);
 
         if (!contact.isNull()) {
@@ -157,3 +162,53 @@ QVariant KPeopleTranslationProxy::translatePresence(const QVariant &presenceName
 
     return Tp::ConnectionPresenceTypeOffline;
 }
+
+QPixmap KPeopleTranslationProxy::contactPixmap(const QModelIndex &index) const
+{
+    QPixmap avatar;
+
+    int presenceType = index.data(KTp::ContactPresenceTypeRole).toInt();
+    const QVariantList ids = index.data(KTp::IdRole).toList();
+    QString id;
+    if (!ids.isEmpty()) {
+        id = ids.first().toString();
+    }
+
+    const QString keyCache = id + (presenceType == Tp::ConnectionPresenceTypeOffline ? QLatin1String("-offline") : QLatin1String("-online"));
+
+    //check pixmap cache for the avatar, if not present, load the avatar
+    if (!QPixmapCache::find(keyCache, avatar)){
+        const QVariantList files = index.data(KTp::ContactAvatarPathRole).toList();
+        QString file;
+        if (!files.isEmpty()) {
+            file = files.first().toUrl().toLocalFile();
+        }
+
+        //QPixmap::load() checks for empty path
+        avatar.load(file);
+
+        //if the above didn't succeed, we need to load the generic icon
+        if (avatar.isNull()) {
+            avatar = KIconLoader::global()->loadIcon(QLatin1String("im-user"), KIconLoader::NoGroup, 96);
+        }
+
+        //if the contact is offline, gray it out
+        if (presenceType == Tp::ConnectionPresenceTypeOffline) {
+            QImage image = avatar.toImage();
+            const QPixmap alpha = avatar.alphaChannel();
+            for (int i = 0; i < image.width(); ++i) {
+                for (int j = 0; j < image.height(); ++j) {
+                    int colour = qGray(image.pixel(i, j));
+                    image.setPixel(i, j, qRgb(colour, colour, colour));
+                }
+            }
+            avatar = avatar.fromImage(image);
+            avatar.setAlphaChannel(alpha);
+        }
+
+        //insert the contact into pixmap cache for faster lookup
+        QPixmapCache::insert(keyCache, avatar);
+    }
+
+    return avatar;
+}
diff --git a/KTp/Models/kpeopletranslationproxy.h b/KTp/Models/kpeopletranslationproxy.h
index a37e881..16dbd07 100644
--- a/KTp/Models/kpeopletranslationproxy.h
+++ b/KTp/Models/kpeopletranslationproxy.h
@@ -36,6 +36,7 @@ public:
 
 private:
     QVariant translatePresence(const QVariant &presenceName) const;
+    QPixmap contactPixmap(const QModelIndex &index) const;
 };
 
 #endif // KTP_TRANSLATION_PROXY_H

-- 
ktp-common-internals packaging



More information about the pkg-kde-commits mailing list