From 88865c1234e3990dd99229ad4350993598cbd034 2011-03-20 23:04:20 From: HanzZ Date: 2011-03-20 23:04:20 Subject: [PATCH] RosterManager --- diff --git a/include/transport/abstractbuddy.h b/include/transport/abstractbuddy.h index 0e3fdb644f44060b7afbc345474f16e96af2b505..4c470eae81cf37e21855d22cdd6e3f00731091b8 100644 --- a/include/transport/abstractbuddy.h +++ b/include/transport/abstractbuddy.h @@ -31,7 +31,9 @@ typedef enum { SPECTRUM_BUDDY_NO_FLAG = 0, SPECTRUM_BUDDY_IGNORE = 4 } SpectrumBuddyFlag; -using namespace Transport; +namespace Transport { + +class RosterManager; // Wrapper for PurpleBuddy. class AbstractBuddy { @@ -69,6 +71,9 @@ class AbstractBuddy { // Returns flags. int getFlags(); + void setRosterManager(RosterManager *rosterManager) { m_rosterManager = rosterManager; } + RosterManager *getRosterManager() { return m_rosterManager; } + // Returns buddy's name (so for example UIN for ICQ, JID for XMPP...). virtual std::string getName() = 0; @@ -95,4 +100,7 @@ class AbstractBuddy { std::string m_subscription; Swift::Presence::ref m_lastPresence; int m_flags; + RosterManager *m_rosterManager; }; + +} diff --git a/include/transport/logger.h b/include/transport/logger.h index 0a9f3d965fd5c4452b916a363ca21d2b37cf9731..82fdd1f73bdce4048c5dcc42e4fcec8ebb3463ea 100644 --- a/include/transport/logger.h +++ b/include/transport/logger.h @@ -32,6 +32,8 @@ class UserManager; class Component; class StorageBackend; class UserRegistration; +class RosterManager; +class AbstractBuddy; /// Basic logging class which logs various data into std::out (standard output). class Logger @@ -56,6 +58,10 @@ class Logger /// \param userManager userManager class void setUserManager(UserManager *userManager); + /// Starts logging data related to RosterManager class. + /// \param rosterManager rosterManager class + void setRosterManager(RosterManager *rosterManager); + private: // Component void handleConnected(); @@ -74,6 +80,10 @@ class Logger // UserManager void handleUserCreated(User *user); void handleUserDestroyed(User *user); + + // RosterManager + void handleBuddyAdded(AbstractBuddy *buddy); + void handleBuddyRemoved(AbstractBuddy *buddy); }; } diff --git a/include/transport/user.h b/include/transport/user.h index eac38e1dc34766980ba39506d3decbdf431a7f8c..bae378712ceccf6471b264442cf5c8cf80569659 100644 --- a/include/transport/user.h +++ b/include/transport/user.h @@ -29,6 +29,7 @@ namespace Transport { class Component; +class RosterManager; struct UserInfo; /// Represents online XMPP user. @@ -52,6 +53,8 @@ class User { /// \return UserInfo struct UserInfo &getUserInfo() { return m_userInfo; } + RosterManager *getRosterManager() { return m_rosterManager; } + void setData(void *data) { m_data = data; } void *getData() { return m_data; } @@ -69,7 +72,8 @@ class User { void onConnectingTimeout(); Swift::JID m_jid; - Component *m_component; + Component *m_component; + RosterManager *m_rosterManager; Swift::EntityCapsManager *m_entityCapsManager; Swift::PresenceOracle *m_presenceOracle; UserInfo m_userInfo; diff --git a/spectrum/src/main.cpp b/spectrum/src/main.cpp index 591df9bb3037040694818fdd8e9503baf78b2efc..50f3cc014158a5f3bc93ece84bab462d9a0bf264 100644 --- a/spectrum/src/main.cpp +++ b/spectrum/src/main.cpp @@ -10,6 +10,7 @@ #include "transport/userregistration.h" #include "transport/user.h" #include "transport/storagebackend.h" +#include "transport/rostermanager.h" #include "spectrumeventloop.h" #include "spectrumbuddy.h" #include "geventloop.h" @@ -65,7 +66,8 @@ static void buddyListNewNode(PurpleBlistNode *node) { buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy); SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data; s_buddy->setFlags(SPECTRUM_BUDDY_JID_ESCAPING); - // TODO: add buddy to RosterManager + + user->getRosterManager()->addBuddy(s_buddy); } } @@ -81,7 +83,7 @@ static void NodeRemoved(PurpleBlistNode *node, void *data) { s_buddy->removeBuddy(buddy); buddy->node.ui_data = NULL; if (s_buddy->getBuddiesCount() == 0) { - // TODO: remove buddy from RosterManager + user->getRosterManager()->removeBuddy(s_buddy); delete s_buddy; } } diff --git a/src/abstractbuddy.cpp b/src/abstractbuddy.cpp index c0b947fb8d368f19148ffe152e43594c1de2f9e1..f63043c3e5c887dce3a86b8a4ecb9fa54e018fd4 100644 --- a/src/abstractbuddy.cpp +++ b/src/abstractbuddy.cpp @@ -20,6 +20,8 @@ #include "transport/abstractbuddy.h" +namespace Transport { + AbstractBuddy::AbstractBuddy(long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(0) { } @@ -107,3 +109,5 @@ Swift::Presence::ref AbstractBuddy::generatePresenceStanza(int features, bool on return presence; } + +} diff --git a/src/logger.cpp b/src/logger.cpp index 440b18b49d1cbd3c7b699a147b070c6c0a85c88d..bc3e6c41c827f4a0a91f3d3a0eaa0d37c0871d97 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -24,6 +24,8 @@ #include "transport/transport.h" #include "transport/storagebackend.h" #include "transport/userregistration.h" +#include "transport/abstractbuddy.h" +#include "transport/rostermanager.h" #include using namespace boost; @@ -104,4 +106,12 @@ void Logger::handleUserDestroyed(User *user) { std::cout << "[USERMANAGER] User \"" << user->getJID().toBare().toString() << "\" (UIN: \"" << user->getUserInfo().uin << "\") disconnected and User class is going to be destroyed\n"; } +void Logger::handleBuddyAdded(AbstractBuddy *buddy) { + std::cout << "[ROSTERMANAGER] \"" << buddy->getRosterManager()->getUser()->getJID().toBare().toString() << "\": Buddy \"" << buddy->getSafeName() << "\" (ALIAS: \"" << buddy->getAlias() << "\") has been bound with this user's roster.\n"; +} + +void Logger::handleBuddyRemoved(AbstractBuddy *buddy) { + std::cout << "[ROSTERMANAGER] \"" << buddy->getRosterManager()->getUser()->getJID().toBare().toString() << "\": Buddy \"" << buddy->getSafeName() << "\" (ALIAS: \"" << buddy->getAlias() << "\") has been unbound with this user's roster.\n"; +} + } diff --git a/src/user.cpp b/src/user.cpp index d2dd0886d02199af2175de3862a33c607d4c29c3..25a84255651a8739446b18eebe84a1b6c1f41782 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -21,6 +21,7 @@ #include "transport/user.h" #include "transport/transport.h" #include "transport/storagebackend.h" +#include "transport/rostermanager.h" #include "Swiften/Swiften.h" namespace Transport { @@ -37,10 +38,12 @@ User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component) { m_reconnectTimer = m_component->getFactories()->getTimerFactory()->createTimer(10000); m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this)); + + m_rosterManager = new RosterManager(this, m_component); } User::~User(){ - + delete m_rosterManager; } const Swift::JID &User::getJID() {