[telepathy-qt4/master] Contact: Cache contact list groups.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Wed Jul 22 12:16:23 PDT 2009


---
 TelepathyQt4/contact-manager.cpp |   19 +++++--------------
 TelepathyQt4/contact.cpp         |   15 ++++++++++-----
 2 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/TelepathyQt4/contact-manager.cpp b/TelepathyQt4/contact-manager.cpp
index c62ca04..58ca951 100644
--- a/TelepathyQt4/contact-manager.cpp
+++ b/TelepathyQt4/contact-manager.cpp
@@ -91,6 +91,10 @@ struct ContactManager::Private
         parent->connect(contactListGroupChannel.data(),
                 SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)),
                 SLOT(onContactListGroupRemoved(Tp::DBusProxy *, const QString &, const QString &)));
+
+        foreach (const ContactPtr &contact, contactListGroupChannel->groupContacts()) {
+            contact->setAddedToGroup(id);
+        }
         return id;
     }
 
@@ -258,20 +262,7 @@ QStringList ContactManager::contactGroups(const ContactPtr &contact) const
         return QStringList();
     }
 
-    QStringList result;
-    ChannelPtr contactListGroupChannel;
-    QMap<QString, ChannelPtr>::const_iterator i = mPriv->contactListGroupsChannels.constBegin();
-    QMap<QString, ChannelPtr>::const_iterator end = mPriv->contactListGroupsChannels.constEnd();
-    while (i != end) {
-        contactListGroupChannel = i.value();
-        if (contactListGroupChannel->groupContacts().contains(contact)) {
-            QString id = contactListGroupChannel->immutableProperties().value(
-                QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".TargetID")).toString();
-            result << id;
-        }
-        ++i;
-    }
-    return result;
+    return contact->groups();
 }
 
 /**
diff --git a/TelepathyQt4/contact.cpp b/TelepathyQt4/contact.cpp
index 15b9c57..c329c9e 100644
--- a/TelepathyQt4/contact.cpp
+++ b/TelepathyQt4/contact.cpp
@@ -56,6 +56,8 @@ struct Contact::Private
     PresenceState subscriptionState;
     PresenceState publishState;
     bool blocked;
+
+    QSet<QString> groups;
 };
 
 ContactManager *Contact::manager() const
@@ -215,9 +217,7 @@ PendingOperation *Contact::block(bool value)
 
 QStringList Contact::groups() const
 {
-    ContactPtr self =
-        mPriv->manager->lookupContactByHandle(mPriv->handle[0]);
-    return mPriv->manager->contactGroups(self);
+    return mPriv->groups.toList();
 }
 
 PendingOperation *Contact::addToGroup(const QString &group)
@@ -380,12 +380,17 @@ void Contact::setBlocked(bool value)
 
 void Contact::setAddedToGroup(const QString &group)
 {
-    emit addedToGroup(group);
+    if (!mPriv->groups.contains(group)) {
+        mPriv->groups.insert(group);
+        emit addedToGroup(group);
+    }
 }
 
 void Contact::setRemovedFromGroup(const QString &group)
 {
-    emit removedFromGroup(group);
+    if (mPriv->groups.remove(group)) {
+        emit removedFromGroup(group);
+    }
 }
 
 } // Tp
-- 
1.5.6.5




More information about the telepathy-commits mailing list