From 3949b84ed02700f637e1545d3188c59608ff63d3 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Thu, 8 Mar 2012 20:04:56 +0100 Subject: [PATCH] Allow setting buddies subscriptions --- include/transport/buddy.h | 8 ++++++-- src/buddy.cpp | 11 ++++++----- src/networkpluginserver.cpp | 7 ++++++- src/rosterstorage.cpp | 2 +- src/tests/basictest.h | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/transport/buddy.h b/include/transport/buddy.h index 5e8f1088..929ba337 100644 --- a/include/transport/buddy.h +++ b/include/transport/buddy.h @@ -39,6 +39,9 @@ typedef enum { BUDDY_NO_FLAG = 0, /// Represents one legacy network Buddy. class Buddy { public: + typedef enum { Ask, + Both, + } Subscription; /// Constructor. /// \param rosterManager RosterManager associated with this buddy. @@ -93,12 +96,12 @@ class Buddy { /// Sets current subscription. /// \param subscription "to", "from", "both", "ask" - void setSubscription(const std::string &subscription); + void setSubscription(Subscription subscription); /// Returns current subscription /// \return subscription "to", "from", "both", "ask" - const std::string getSubscription(); + Subscription getSubscription(); /// Sets this buddy's flags. @@ -172,6 +175,7 @@ class Buddy { Swift::JID m_jid; BuddyFlag m_flags; RosterManager *m_rosterManager; + Subscription m_subscription; }; } diff --git a/src/buddy.cpp b/src/buddy.cpp index 6c023539..55f35713 100644 --- a/src/buddy.cpp +++ b/src/buddy.cpp @@ -26,7 +26,8 @@ namespace Transport { -Buddy::Buddy(RosterManager *rosterManager, long id) : m_id(id), m_flags(BUDDY_NO_FLAG), m_rosterManager(rosterManager){ +Buddy::Buddy(RosterManager *rosterManager, long id) : m_id(id), m_flags(BUDDY_NO_FLAG), m_rosterManager(rosterManager), + m_subscription(Ask) { // m_rosterManager->setBuddy(this); } @@ -64,12 +65,12 @@ const Swift::JID &Buddy::getJID() { return m_jid; } -void Buddy::setSubscription(const std::string &subscription) { -// m_subscription = subscription; +void Buddy::setSubscription(Subscription subscription) { + m_subscription = subscription; } -const std::string Buddy::getSubscription() { - return "ask"; +Buddy::Subscription Buddy::getSubscription() { + return m_subscription; } Swift::Presence::ref Buddy::generatePresenceStanza(int features, bool only_new) { diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index eeae4c31..5beba002 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -95,7 +95,12 @@ class NetworkFactory : public Factory { LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id); buddy->setAlias(buddyInfo.alias); buddy->setName(buddyInfo.legacyName); - buddy->setSubscription(buddyInfo.subscription); + if (buddyInfo.subscription == "both") { + buddy->setSubscription(Buddy::Both); + } + else { + buddy->setSubscription(Buddy::Ask); + } buddy->setGroups(buddyInfo.groups); buddy->setFlags((BuddyFlag) (buddyInfo.flags)); if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end()) diff --git a/src/rosterstorage.cpp b/src/rosterstorage.cpp index 294f19e8..30679cb9 100644 --- a/src/rosterstorage.cpp +++ b/src/rosterstorage.cpp @@ -103,7 +103,7 @@ bool RosterStorage::storeBuddies() { buddyInfo.alias = buddy->getAlias(); buddyInfo.legacyName = buddy->getName(); buddyInfo.groups = buddy->getGroups(); - buddyInfo.subscription = buddy->getSubscription(); + buddyInfo.subscription = buddy->getSubscription() == Buddy::Ask ? "ask" : "both"; buddyInfo.id = buddy->getID(); buddyInfo.flags = buddy->getFlags(); buddyInfo.settings["icon_hash"].s = buddy->getIconHash(); diff --git a/src/tests/basictest.h b/src/tests/basictest.h index c67691b3..832cada4 100644 --- a/src/tests/basictest.h +++ b/src/tests/basictest.h @@ -72,7 +72,7 @@ class TestingFactory : public Factory { LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id); buddy->setAlias(buddyInfo.alias); buddy->setName(buddyInfo.legacyName); - buddy->setSubscription(buddyInfo.subscription); + buddy->setSubscription(Buddy::Ask); buddy->setGroups(buddyInfo.groups); buddy->setFlags((BuddyFlag) buddyInfo.flags); if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end())