From 49e5cd3ac405d7da23d989787ade9e58e4343a4d Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 21 Mar 2011 09:57:48 +0100 Subject: [PATCH] Comments + some methods renamed --- include/transport/abstractbuddy.h | 101 ++++++++++++++++++++---------- include/transport/logger.h | 4 +- spectrum/src/main.cpp | 10 ++- spectrum/src/spectrumbuddy.cpp | 17 ----- spectrum/src/spectrumbuddy.h | 1 - src/abstractbuddy.cpp | 27 ++++++-- src/logger.cpp | 9 ++- 7 files changed, 107 insertions(+), 62 deletions(-) diff --git a/include/transport/abstractbuddy.h b/include/transport/abstractbuddy.h index 4c470eae..c5db5e04 100644 --- a/include/transport/abstractbuddy.h +++ b/include/transport/abstractbuddy.h @@ -26,72 +26,109 @@ #include "Swiften/Swiften.h" -typedef enum { SPECTRUM_BUDDY_NO_FLAG = 0, - SPECTRUM_BUDDY_JID_ESCAPING = 2, - SPECTRUM_BUDDY_IGNORE = 4 - } SpectrumBuddyFlag; - namespace Transport { class RosterManager; -// Wrapper for PurpleBuddy. +typedef enum { BUDDY_NO_FLAG = 0, + BUDDY_JID_ESCAPING = 2, + BUDDY_IGNORE = 4 + } BuddyFlag; + +/// Represents one legacy network Buddy. class AbstractBuddy { public: + /// Constructor. AbstractBuddy(long id); + + /// Destructor virtual ~AbstractBuddy(); - // Sets/gets ID used to identify this buddy for example by storage backend. - void setId(long id); - long getId(); + /// Sets unique ID used to identify this buddy by StorageBackend. This is set + /// by RosterStorage class once the buddy is stored into database or when the + /// buddy is loaded from database. + /// You should not need to set this ID manually. + /// \param id ID + void setID(long id); - // Returns full JID. + /// Returns unique ID used to identify this buddy by StorageBackend. + /// \see AbstractBuddy::setID(long) + /// \return ID + long getID(); + + /// Returns full JID of this buddy. + /// \param hostname hostname used as domain in returned JID + /// \return full JID of this buddy Swift::JID getJID(const std::string &hostname); - // Generates whole stanza without "to" attribute. That attribute - // has to be added manually. - // only_new - if the stanza is the same as previous generated one, returns NULL. + /// Generates whole Presennce stanza with current status/show for this buddy. + /// Presence stanza does not containt "to" attribute, it has to be added manually. + /// \param features features used in returned stanza + /// \param only_new if True, this function returns Presence stanza only if it's different + /// than the previously generated one. + /// \return Presence stanza or NULL. Swift::Presence::ref generatePresenceStanza(int features, bool only_new = false); - // Sets online/offline state information. + /// Marks this buddy as available. void setOnline(); + + /// Marks this buddy as offline. void setOffline(); - // Returns true if online. + /// Returns true if this buddy is marked as available/online. + /// \return true if this buddy is marked as available/online. bool isOnline(); - // Sets/gets current subscription. - // TODO: rewrite me to use SpectrumSubscriptionType! + /// Sets current subscription. + /// \param subscription "to", "from", "both", "ask" void setSubscription(const std::string &subscription); + + /// Returns current subscription + /// \return subscription "to", "from", "both", "ask" const std::string &getSubscription(); - // Sets SpectrumBuddyFlags. - void setFlags(int flags); + /// Sets this buddy's flags. + /// \param flags flags + void setFlags(BuddyFlag flags); - // Returns flags. - int getFlags(); + /// Returns this buddy's flags. + /// \param flags flags + BuddyFlag getFlags(); + /// Sets RosterManager associated with this buddy. + /// \param rosterManager RosterManager void setRosterManager(RosterManager *rosterManager) { m_rosterManager = rosterManager; } + + /// Returns RosterManager associated with this buddy + /// \return rosterManager RosterManager *getRosterManager() { return m_rosterManager; } - // Returns buddy's name (so for example UIN for ICQ, JID for XMPP...). + /// Returns legacy network username which does not contain unsafe characters, + /// so it can be used in JIDs. + std::string getSafeName(); + + /// Returns legacy network username of this buddy. (for example UIN for ICQ, + /// JID for Jabber, ...). + /// \return legacy network username virtual std::string getName() = 0; - // Returns buddy's alias (nickname). + /// Returns alias (nickname) of this buddy. + /// \return alias (nickname) virtual std::string getAlias() = 0; - // Returns buddy's group name. + /// Returns list of groups this buddy is in. + /// \return groups virtual std::vector getGroups() = 0; - // Returns name which doesn't contain unsafe characters, so it can be used. - // in JIDs. - virtual std::string getSafeName() = 0; - - // Stores current status in `status` and current status message in `statusMessage`. - // Returns true if data can be stored. + /// Returns current legacy network status and statuMessage of this buddy. + /// \param status current status/show is stored here + /// \param statusMessage current status message is stored here + /// \return true if status was stored successfully virtual bool getStatus(Swift::StatusShow &status, std::string &statusMessage) = 0; - // Returns SHA-1 hash of buddy icon (avatar) or empty string if there is no avatar. + /// Returns SHA-1 hash of buddy icon (avatar) or empty string if there is no avatar + /// for this buddy. + /// \return avatar hash or empty string. virtual std::string getIconHash() = 0; private: @@ -99,7 +136,7 @@ class AbstractBuddy { bool m_online; std::string m_subscription; Swift::Presence::ref m_lastPresence; - int m_flags; + BuddyFlag m_flags; RosterManager *m_rosterManager; }; diff --git a/include/transport/logger.h b/include/transport/logger.h index 82fdd1f7..05b89af7 100644 --- a/include/transport/logger.h +++ b/include/transport/logger.h @@ -82,8 +82,8 @@ class Logger void handleUserDestroyed(User *user); // RosterManager - void handleBuddyAdded(AbstractBuddy *buddy); - void handleBuddyRemoved(AbstractBuddy *buddy); + void handleBuddySet(AbstractBuddy *buddy); + void handleBuddyUnset(AbstractBuddy *buddy); }; } diff --git a/spectrum/src/main.cpp b/spectrum/src/main.cpp index 50f3cc01..8f24b697 100644 --- a/spectrum/src/main.cpp +++ b/spectrum/src/main.cpp @@ -20,6 +20,8 @@ using namespace Transport; +Logger *_logger; + static gboolean nodaemon = FALSE; static gchar *logfile = NULL; static gchar *lock_file = NULL; @@ -65,9 +67,9 @@ static void buddyListNewNode(PurpleBlistNode *node) { else { buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy); SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data; - s_buddy->setFlags(SPECTRUM_BUDDY_JID_ESCAPING); + s_buddy->setFlags(BUDDY_JID_ESCAPING); - user->getRosterManager()->addBuddy(s_buddy); + user->getRosterManager()->setBuddy(s_buddy); } } @@ -83,7 +85,7 @@ static void NodeRemoved(PurpleBlistNode *node, void *data) { s_buddy->removeBuddy(buddy); buddy->node.ui_data = NULL; if (s_buddy->getBuddiesCount() == 0) { - user->getRosterManager()->removeBuddy(s_buddy); + user->getRosterManager()->unsetBuddy(s_buddy); delete s_buddy; } } @@ -296,6 +298,7 @@ static void handleUserCreated(User *user, UserManager *userManager, Config *conf user->setData(account); user->onReadyToConnect.connect(boost::bind(&handleUserReadyToConnect, user)); + _logger->setRosterManager(user->getRosterManager()); // Transport::instance()->protocol()->onPurpleAccountCreated(m_account); @@ -403,6 +406,7 @@ int main(int argc, char **argv) { SpectrumEventLoop eventLoop; Component transport(&eventLoop, &config); Logger logger(&transport); + _logger = &logger; SQLite3Backend sql(&config); logger.setStorageBackend(&sql); diff --git a/spectrum/src/spectrumbuddy.cpp b/spectrum/src/spectrumbuddy.cpp index 25636670..f7ee0d78 100644 --- a/spectrum/src/spectrumbuddy.cpp +++ b/spectrum/src/spectrumbuddy.cpp @@ -108,20 +108,3 @@ std::vector SpectrumBuddy::getGroups() { return groups; } -std::string SpectrumBuddy::getSafeName() { - std::string name = getName(); -// Transport::instance()->protocol()->prepareUsername(name, purple_buddy_get_account(m_buddy)); - if (getFlags() & SPECTRUM_BUDDY_JID_ESCAPING) { -// name = JID::escapeNode(name); - } - else { - if (name.find_last_of("@") != std::string::npos) { - name.replace(name.find_last_of("@"), 1, "%"); - } - } - if (name.empty()) { - Log("SpectrumBuddy::getSafeName", "Name is EMPTY! Previous was " << getName() << "."); - } - return name; -} - diff --git a/spectrum/src/spectrumbuddy.h b/spectrum/src/spectrumbuddy.h index 0e8ad9e2..bda3f2f0 100644 --- a/spectrum/src/spectrumbuddy.h +++ b/spectrum/src/spectrumbuddy.h @@ -41,7 +41,6 @@ class SpectrumBuddy : public AbstractBuddy { bool getStatus(Swift::StatusShow &status, std::string &statusMessage); std::string getIconHash(); std::vector getGroups(); - std::string getSafeName(); void addBuddy(PurpleBuddy *buddy) { m_buddies.push_back(buddy); } void removeBuddy(PurpleBuddy *buddy) { m_buddies.remove(buddy); } diff --git a/src/abstractbuddy.cpp b/src/abstractbuddy.cpp index f63043c3..11c2e735 100644 --- a/src/abstractbuddy.cpp +++ b/src/abstractbuddy.cpp @@ -22,25 +22,25 @@ namespace Transport { -AbstractBuddy::AbstractBuddy(long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(0) { +AbstractBuddy::AbstractBuddy(long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(BUDDY_NO_FLAG) { } AbstractBuddy::~AbstractBuddy() { } -void AbstractBuddy::setId(long id) { +void AbstractBuddy::setID(long id) { m_id = id; } -long AbstractBuddy::getId() { +long AbstractBuddy::getID() { return m_id; } -void AbstractBuddy::setFlags(int flags) { +void AbstractBuddy::setFlags(BuddyFlag flags) { m_flags = flags; } -int AbstractBuddy::getFlags() { +BuddyFlag AbstractBuddy::getFlags() { return m_flags; } @@ -110,4 +110,21 @@ Swift::Presence::ref AbstractBuddy::generatePresenceStanza(int features, bool on return presence; } +std::string AbstractBuddy::getSafeName() { + std::string name = getName(); +// Transport::instance()->protocol()->prepareUsername(name, purple_buddy_get_account(m_buddy)); + if (getFlags() & BUDDY_JID_ESCAPING) { +// name = JID::escapeNode(name); + } + else { + if (name.find_last_of("@") != std::string::npos) { + name.replace(name.find_last_of("@"), 1, "%"); + } + } + if (name.empty()) { +// Log("SpectrumBuddy::getSafeName", "Name is EMPTY! Previous was " << getName() << "."); + } + return name; +} + } diff --git a/src/logger.cpp b/src/logger.cpp index bc3e6c41..ea0903b6 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -57,6 +57,11 @@ void Logger::setUserManager(UserManager *userManager) { userManager->onUserDestroyed.connect(bind(&Logger::handleUserDestroyed, this, _1)); } +void Logger::setRosterManager(RosterManager *rosterManager) { + rosterManager->onBuddySet.connect(bind(&Logger::handleBuddySet, this, _1)); + rosterManager->onBuddyUnset.connect(bind(&Logger::handleBuddyUnset, this, _1)); +} + void Logger::handleConnected() { std::cout << "[COMPONENT] Connected to Jabber Server!\n"; } @@ -106,11 +111,11 @@ 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) { +void Logger::handleBuddySet(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) { +void Logger::handleBuddyUnset(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"; }