summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>2010-12-20 10:15:17 -0200
committerAndre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>2010-12-20 10:15:17 -0200
commitf114e62bb340a7840ea5a2d8f3fc0513776bcc50 (patch)
treef57eb9cbdaf2c4691d29efd4dfbd3e78eac90e8a
parent8f19b7c7440225d65d1ca07be7061f5df3a0153f (diff)
Contact: Added new accessors to check if publish/subscription state is known/rejected/cancelled.
-rw-r--r--TelepathyQt4/contact-manager.cpp35
-rw-r--r--TelepathyQt4/contact.cpp46
-rw-r--r--TelepathyQt4/contact.h12
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());