From 3949b84ed02700f637e1545d3188c59608ff63d3 2012-03-08 20:04:56 From: HanzZ Date: 2012-03-08 20:04:56 Subject: [PATCH] Allow setting buddies subscriptions --- diff --git a/include/transport/buddy.h b/include/transport/buddy.h index 5e8f1088dc791487e05931bd943f84c99655877d..929ba337037d41d8c007c17e2691355a12efc507 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 6c023539eaa549457e0a11eb1d1df175ab5fe783..55f3571339138ad4e99bbc5b9b616e9dbc339faa 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 eeae4c314298b3904ed6de13d71f14c9fef66200..5beba0027532518518ecf69828eb3aeb20e2a81f 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 294f19e81fd22852e67f3c2a1b0a798169a9275c..30679cb9f5edf8b6730ce2677f408c364be46a8b 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 c67691b39d0ff1a2e9ae96c29f47a2afdd1b90ab..832cada4a22d35d6592b8b5ef80a9261bfcc6aff 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())