diff options
author | Andre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk> | 2010-12-20 10:15:17 -0200 |
---|---|---|
committer | Andre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk> | 2010-12-20 10:15:17 -0200 |
commit | f114e62bb340a7840ea5a2d8f3fc0513776bcc50 (patch) | |
tree | f57eb9cbdaf2c4691d29efd4dfbd3e78eac90e8a | |
parent | 8f19b7c7440225d65d1ca07be7061f5df3a0153f (diff) |
Contact: Added new accessors to check if publish/subscription state is known/rejected/cancelled.
-rw-r--r-- | TelepathyQt4/contact-manager.cpp | 35 | ||||
-rw-r--r-- | TelepathyQt4/contact.cpp | 46 | ||||
-rw-r--r-- | TelepathyQt4/contact.h | 12 |
3 files changed, 59 insertions, 34 deletions
diff --git a/TelepathyQt4/contact-manager.cpp b/TelepathyQt4/contact-manager.cpp index 604e829e..18b3ff6d 100644 --- a/TelepathyQt4/contact-manager.cpp +++ b/TelepathyQt4/contact-manager.cpp @@ -463,22 +463,23 @@ void ContactManager::Private::updateContactsPresenceStateFallback() if (subscribeChannel) { // not in "subscribe" -> No, in "subscribe" lp -> Ask, in "subscribe" current -> Yes if (subscribeContacts.contains(contact)) { - contact->setSubscriptionState(Contact::PresenceStateYes); + contact->setSubscriptionState(SubscriptionStateYes); } else if (subscribeContactsRP.contains(contact)) { - contact->setSubscriptionState(Contact::PresenceStateAsk); + contact->setSubscriptionState(SubscriptionStateAsk); } else { - contact->setSubscriptionState(Contact::PresenceStateNo); + contact->setSubscriptionState(SubscriptionStateNo); } } if (publishChannel) { // not in "publish" -> No, in "subscribe" rp -> Ask, in "publish" current -> Yes if (publishContacts.contains(contact)) { - contact->setPublishState(Contact::PresenceStateYes); + contact->setPublishState(SubscriptionStateYes); } else if (publishContactsLP.contains(contact)) { - contact->setPublishState(Contact::PresenceStateAsk); + contact->setPublishState(SubscriptionStateAsk, + publishChannel->groupLocalPendingContactChangeInfo(contact)); } else { - contact->setPublishState(Contact::PresenceStateNo); + contact->setPublishState(SubscriptionStateNo); } } } @@ -1837,8 +1838,7 @@ void ContactManager::onContactListNewContactsConstructed(Tp::PendingOperation *o added << contact; } - contact->setSubscriptionState( - Contact::subscriptionStateToPresenceState(subscriptions.subscribe)); + contact->setSubscriptionState((SubscriptionState) subscriptions.subscribe); Channel::GroupMemberChangeDetails publishRequestDetails; if (!subscriptions.publishRequest.isEmpty() && subscriptions.publish == SubscriptionStateAsk) { @@ -1848,8 +1848,7 @@ void ContactManager::onContactListNewContactsConstructed(Tp::PendingOperation *o emit presencePublicationRequested(Contacts() << contact, publishRequestDetails); } - contact->setPublishState(Contact::subscriptionStateToPresenceState(subscriptions.publish), - publishRequestDetails); + contact->setPublishState((SubscriptionState) subscriptions.publish, publishRequestDetails); } foreach (uint bareHandle, info.removals) { @@ -1861,8 +1860,8 @@ void ContactManager::onContactListNewContactsConstructed(Tp::PendingOperation *o Q_ASSERT(mPriv->cachedAllKnownContacts.contains(contact)); - contact->setSubscriptionState(Contact::PresenceStateNo); - contact->setPublishState(Contact::PresenceStateNo); + contact->setSubscriptionState(SubscriptionStateNo); + contact->setPublishState(SubscriptionStateNo); mPriv->cachedAllKnownContacts.remove(contact); removed << contact; } @@ -1956,17 +1955,17 @@ void ContactManager::onSubscribeChannelMembersChangedFallback( foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "on subscribe list"; - contact->setSubscriptionState(Contact::PresenceStateYes, details); + contact->setSubscriptionState(SubscriptionStateYes, details); } foreach (ContactPtr contact, groupRemotePendingMembersAdded) { debug() << "Contact" << contact->id() << "added to subscribe list"; - contact->setSubscriptionState(Contact::PresenceStateAsk, details); + contact->setSubscriptionState(SubscriptionStateAsk, details); } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from subscribe list"; - contact->setSubscriptionState(Contact::PresenceStateNo, details); + contact->setSubscriptionState(SubscriptionStateNo, details); } // Perform the needed computation for allKnownContactsChanged @@ -1988,17 +1987,17 @@ void ContactManager::onPublishChannelMembersChangedFallback( foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "on publish list"; - contact->setPublishState(Contact::PresenceStateYes, details); + contact->setPublishState(SubscriptionStateYes, details); } foreach (ContactPtr contact, groupLocalPendingMembersAdded) { debug() << "Contact" << contact->id() << "added to publish list"; - contact->setPublishState(Contact::PresenceStateAsk, details); + contact->setPublishState(SubscriptionStateAsk, details); } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from publish list"; - contact->setPublishState(Contact::PresenceStateNo, details); + contact->setPublishState(SubscriptionStateNo, details); } if (!groupLocalPendingMembersAdded.isEmpty()) { diff --git a/TelepathyQt4/contact.cpp b/TelepathyQt4/contact.cpp index c2261a30..9fec5742 100644 --- a/TelepathyQt4/contact.cpp +++ b/TelepathyQt4/contact.cpp @@ -51,8 +51,8 @@ struct TELEPATHY_QT4_NO_EXPORT Contact::Private ContactCapabilities(true) : ContactCapabilities( manager->connection()->capabilities().allClassSpecs(), false)), isAvatarTokenKnown(false), - subscriptionState(PresenceStateNo), - publishState(PresenceStateNo), + subscriptionState(SubscriptionStateUnknown), + publishState(SubscriptionStateUnknown), blocked(false) { } @@ -78,8 +78,8 @@ struct TELEPATHY_QT4_NO_EXPORT Contact::Private QString avatarToken; AvatarData avatarData; - PresenceState subscriptionState; - PresenceState publishState; + SubscriptionState subscriptionState; + SubscriptionState publishState; Channel::GroupMemberChangeDetails publishStateDetails; bool blocked; @@ -393,14 +393,36 @@ PendingContactInfo *Contact::requestInfo() return new PendingContactInfo(self); } +bool Contact::isSubscriptionStateKnown() const +{ + return (mPriv->subscriptionState != SubscriptionStateUnknown && + mPriv->subscriptionState != SubscriptionStateRemovedRemotely); +} + +bool Contact::isSubscriptionRejected() const +{ + return mPriv->subscriptionState == SubscriptionStateRemovedRemotely; +} + Contact::PresenceState Contact::subscriptionState() const { - return mPriv->subscriptionState; + return subscriptionStateToPresenceState(mPriv->subscriptionState); +} + +bool Contact::isPublishStateKnown() const +{ + return (mPriv->publishState != SubscriptionStateUnknown && + mPriv->publishState != SubscriptionStateRemovedRemotely); +} + +bool Contact::isPublishCancelled() const +{ + return mPriv->publishState == SubscriptionStateRemovedRemotely; } Contact::PresenceState Contact::publishState() const { - return mPriv->publishState; + return subscriptionStateToPresenceState(mPriv->publishState); } Channel::GroupMemberChangeDetails Contact::publishStateDetails() const @@ -500,7 +522,7 @@ void Contact::augment(const Features &requestedFeatures, const QVariantMap &attr QLatin1String("/subscribe"))) { uint subscriptionState = qdbus_cast<uint>(attributes.value( TP_QT4_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/subscribe"))); - setSubscriptionState(subscriptionStateToPresenceState(subscriptionState)); + setSubscriptionState((SubscriptionState) subscriptionState); } if (attributes.contains(TP_QT4_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + @@ -515,7 +537,7 @@ void Contact::augment(const Features &requestedFeatures, const QVariantMap &attr detailsMap.insert(QLatin1String("message"), publishRequest); publishRequestDetails = Channel::GroupMemberChangeDetails(ContactPtr(), detailsMap); } - setPublishState(subscriptionStateToPresenceState(publishState), publishRequestDetails); + setPublishState((SubscriptionState) publishState, publishRequestDetails); } foreach (const Feature &feature, requestedFeatures) { @@ -732,17 +754,17 @@ Contact::PresenceState Contact::subscriptionStateToPresenceState(uint subscripti } } -void Contact::setSubscriptionState(Contact::PresenceState state, +void Contact::setSubscriptionState(SubscriptionState state, const Channel::GroupMemberChangeDetails &details) { if (mPriv->subscriptionState == state) { return; } mPriv->subscriptionState = state; - emit subscriptionStateChanged(state, details); + emit subscriptionStateChanged(subscriptionStateToPresenceState(state), details); } -void Contact::setPublishState(Contact::PresenceState state, +void Contact::setPublishState(SubscriptionState state, const Channel::GroupMemberChangeDetails &details) { if (mPriv->publishState == state) { @@ -750,7 +772,7 @@ void Contact::setPublishState(Contact::PresenceState state, } mPriv->publishState = state; mPriv->publishStateDetails = details; - emit publishStateChanged(state, details); + emit publishStateChanged(subscriptionStateToPresenceState(state), details); } void Contact::setBlocked(bool value, const Channel::GroupMemberChangeDetails &details) diff --git a/TelepathyQt4/contact.h b/TelepathyQt4/contact.h index 1f562e10..56ff5fb7 100644 --- a/TelepathyQt4/contact.h +++ b/TelepathyQt4/contact.h @@ -131,7 +131,11 @@ public: /* * Filters on exact values of these, but also the "in your contact list at all or not" usecase */ + bool isSubscriptionStateKnown() const; + bool isSubscriptionRejected() const; PresenceState subscriptionState() const; + bool isPublishStateKnown() const; + bool isPublishCancelled() const; PresenceState publishState() const; Channel::GroupMemberChangeDetails publishStateDetails() const; @@ -202,10 +206,10 @@ private: void receiveInfo(const ContactInfoFieldList &info); static PresenceState subscriptionStateToPresenceState(uint subscriptionState); - void setSubscriptionState(PresenceState state, const Channel::GroupMemberChangeDetails &details = - Channel::GroupMemberChangeDetails()); - void setPublishState(PresenceState state, const Channel::GroupMemberChangeDetails &details = - Channel::GroupMemberChangeDetails()); + void setSubscriptionState(SubscriptionState state, + const Channel::GroupMemberChangeDetails &details = Channel::GroupMemberChangeDetails()); + void setPublishState(SubscriptionState state, + const Channel::GroupMemberChangeDetails &details = Channel::GroupMemberChangeDetails()); void setBlocked(bool value, const Channel::GroupMemberChangeDetails &details = Channel::GroupMemberChangeDetails()); |