[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