[Telepathy-commits] [telepathy-qt4/master] ContactManager: cache pointers to the subscribe, publish, stored, deny channels

Simon McVittie simon.mcvittie at collabora.co.uk
Thu Mar 5 08:32:33 PST 2009


---
 TelepathyQt4/Client/contact-manager.cpp |  110 ++++++++++++++-----------------
 1 files changed, 49 insertions(+), 61 deletions(-)

diff --git a/TelepathyQt4/Client/contact-manager.cpp b/TelepathyQt4/Client/contact-manager.cpp
index 04d6394..c08548c 100644
--- a/TelepathyQt4/Client/contact-manager.cpp
+++ b/TelepathyQt4/Client/contact-manager.cpp
@@ -76,6 +76,11 @@ struct ContactManager::Private
     QSet<Contact::Feature> supportedFeatures;
 
     QMap<uint, ContactListChannel> contactListsChannels;
+    QSharedPointer<Channel> subscribeChannel;
+    QSharedPointer<Channel> publishChannel;
+    QSharedPointer<Channel> storedChannel;
+    QSharedPointer<Channel> denyChannel;
+
     Contacts allKnownContacts() const;
     void updateContactsPresenceState();
 };
@@ -151,11 +156,8 @@ Contacts ContactManager::allKnownContacts() const
 
 bool ContactManager::canRequestContactsPresenceSubscription() const
 {
-    QSharedPointer<Channel> subscribeChannel;
-    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeSubscribe)) {
-        subscribeChannel = mPriv->contactListsChannels[ContactListChannel::TypeSubscribe].channel;
-    }
-    return subscribeChannel && subscribeChannel->groupCanAddContacts();
+    return mPriv->subscribeChannel &&
+        mPriv->subscribeChannel->groupCanAddContacts();
 }
 
 PendingOperation *ContactManager::requestContactsPresenceSubscription(
@@ -168,18 +170,14 @@ PendingOperation *ContactManager::requestContactsPresenceSubscription(
                 "Cannot request contacts presence subscription");
     }
 
-    QSharedPointer<Channel> subscribeChannel =
-        mPriv->contactListsChannels[ContactListChannel::TypeSubscribe].channel;
-    return subscribeChannel->groupAddContacts(contacts, message);
+    Q_ASSERT(mPriv->subscribeChannel);
+    return mPriv->subscribeChannel->groupAddContacts(contacts, message);
 }
 
 bool ContactManager::canRemoveContactsPresenceSubscription() const
 {
-    QSharedPointer<Channel> subscribeChannel;
-    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeSubscribe)) {
-        subscribeChannel = mPriv->contactListsChannels[ContactListChannel::TypeSubscribe].channel;
-    }
-    return subscribeChannel && subscribeChannel->groupCanRemoveContacts();
+    return mPriv->subscribeChannel &&
+        mPriv->subscribeChannel->groupCanRemoveContacts();
 }
 
 PendingOperation *ContactManager::removeContactsPresenceSubscription(
@@ -192,21 +190,16 @@ PendingOperation *ContactManager::removeContactsPresenceSubscription(
                 "Cannot remove contacts presence subscription");
     }
 
-    QSharedPointer<Channel> subscribeChannel =
-        mPriv->contactListsChannels[ContactListChannel::TypeSubscribe].channel;
-    return subscribeChannel->groupRemoveContacts(contacts, message);
+    Q_ASSERT(mPriv->subscribeChannel);
+    return mPriv->subscribeChannel->groupRemoveContacts(contacts, message);
 }
 
 bool ContactManager::canAuthorizeContactsPresencePublication() const
 {
-    QSharedPointer<Channel> publishChannel;
-    if (mPriv->contactListsChannels.contains(ContactListChannel::TypePublish)) {
-        publishChannel = mPriv->contactListsChannels[ContactListChannel::TypePublish].channel;
-    }
     // do not check for Channel::groupCanAddContacts as all contacts in local
     // pending can be added, even if the Channel::groupFlags() does not contain
     // the flag CanAdd
-    return (bool) publishChannel;
+    return (bool) mPriv->publishChannel;
 }
 
 PendingOperation *ContactManager::authorizeContactsPresencePublication(
@@ -219,18 +212,14 @@ PendingOperation *ContactManager::authorizeContactsPresencePublication(
                 "Cannot authorize contacts presence publication");
     }
 
-    QSharedPointer<Channel> publishChannel =
-        mPriv->contactListsChannels[ContactListChannel::TypePublish].channel;
-    return publishChannel->groupAddContacts(contacts, message);
+    Q_ASSERT(mPriv->publishChannel);
+    return mPriv->publishChannel->groupAddContacts(contacts, message);
 }
 
 bool ContactManager::canRemoveContactsPresencePublication() const
 {
-    QSharedPointer<Channel> publishChannel;
-    if (mPriv->contactListsChannels.contains(ContactListChannel::TypePublish)) {
-        publishChannel = mPriv->contactListsChannels[ContactListChannel::TypePublish].channel;
-    }
-    return publishChannel && publishChannel->groupCanRemoveContacts();
+    return mPriv->publishChannel &&
+        mPriv->publishChannel->groupCanRemoveContacts();
 }
 
 PendingOperation *ContactManager::removeContactsPresencePublication(
@@ -243,18 +232,13 @@ PendingOperation *ContactManager::removeContactsPresencePublication(
                 "Cannot remove contacts presence publication");
     }
 
-    QSharedPointer<Channel> publishChannel =
-        mPriv->contactListsChannels[ContactListChannel::TypePublish].channel;
-    return publishChannel->groupRemoveContacts(contacts, message);
+    Q_ASSERT(mPriv->publishChannel);
+    return mPriv->publishChannel->groupRemoveContacts(contacts, message);
 }
 
 bool ContactManager::canBlockContacts() const
 {
-    QSharedPointer<Channel> denyChannel;
-    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeDeny)) {
-        denyChannel = mPriv->contactListsChannels[ContactListChannel::TypeDeny].channel;
-    }
-    return (bool) denyChannel;
+    return (bool) mPriv->denyChannel;
 }
 
 PendingOperation *ContactManager::blockContacts(
@@ -267,13 +251,12 @@ PendingOperation *ContactManager::blockContacts(
                 "Cannot block contacts");
     }
 
-    QSharedPointer<Channel> denyChannel =
-        mPriv->contactListsChannels[ContactListChannel::TypeDeny].channel;
+    Q_ASSERT(mPriv->denyChannel);
     if (value) {
-        return denyChannel->groupAddContacts(contacts);
+        return mPriv->denyChannel->groupAddContacts(contacts);
     }
     else {
-        return denyChannel->groupRemoveContacts(contacts);
+        return mPriv->denyChannel->groupRemoveContacts(contacts);
     }
 }
 
@@ -529,6 +512,22 @@ void ContactManager::setContactListChannels(
     Q_ASSERT(mPriv->contactListsChannels.isEmpty());
     mPriv->contactListsChannels = contactListsChannels;
 
+    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeSubscribe)) {
+        mPriv->subscribeChannel = mPriv->contactListsChannels[ContactListChannel::TypeSubscribe].channel;
+    }
+
+    if (mPriv->contactListsChannels.contains(ContactListChannel::TypePublish)) {
+        mPriv->publishChannel = mPriv->contactListsChannels[ContactListChannel::TypePublish].channel;
+    }
+
+    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeStored)) {
+        mPriv->storedChannel = mPriv->contactListsChannels[ContactListChannel::TypeStored].channel;
+    }
+
+    if (mPriv->contactListsChannels.contains(ContactListChannel::TypeDeny)) {
+        mPriv->denyChannel = mPriv->contactListsChannels[ContactListChannel::TypeDeny].channel;
+    }
+
     mPriv->updateContactsPresenceState();
 
     QMap<uint, ContactListChannel>::const_iterator i = contactListsChannels.constBegin();
@@ -651,35 +650,24 @@ Contacts ContactManager::Private::allKnownContacts() const
 
 void ContactManager::Private::updateContactsPresenceState()
 {
-    QSharedPointer<Channel> subscribeChannel;
     Contacts subscribeContacts;
     Contacts subscribeContactsRP;
-    if (contactListsChannels.contains(ContactListChannel::TypeSubscribe)) {
-        subscribeChannel = contactListsChannels[ContactListChannel::TypeSubscribe].channel;
-        if (subscribeChannel) {
-            subscribeContacts = subscribeChannel->groupContacts();
-            subscribeContactsRP = subscribeChannel->groupRemotePendingContacts();
-        }
+
+    if (subscribeChannel) {
+        subscribeContacts = subscribeChannel->groupContacts();
+        subscribeContactsRP = subscribeChannel->groupRemotePendingContacts();
     }
 
-    QSharedPointer<Channel> publishChannel;
     Contacts publishContacts;
     Contacts publishContactsLP;
-    if (contactListsChannels.contains(ContactListChannel::TypePublish)) {
-        publishChannel = contactListsChannels[ContactListChannel::TypePublish].channel;
-        if (publishChannel) {
-            publishContacts = publishChannel->groupContacts();
-            publishContactsLP = publishChannel->groupLocalPendingContacts();
-        }
+    if (publishChannel) {
+        publishContacts = publishChannel->groupContacts();
+        publishContactsLP = publishChannel->groupLocalPendingContacts();
     }
 
-    QSharedPointer<Channel> denyChannel;
     Contacts denyContacts;
-    if (contactListsChannels.contains(ContactListChannel::TypeDeny)) {
-        denyChannel = contactListsChannels[ContactListChannel::TypeDeny].channel;
-        if (denyChannel) {
-            denyContacts = denyChannel->groupContacts();
-        }
+    if (denyChannel) {
+        denyContacts = denyChannel->groupContacts();
     }
 
     if (!subscribeChannel && !publishChannel && !denyChannel) {
-- 
1.5.6.5




More information about the telepathy-commits mailing list