From 04c0598d979078e4b74022dee9208e3b0c8fba07 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 21 Mar 2011 21:29:02 +0100 Subject: [PATCH] Added missing rostermanager.cpp and rostermanager.h --- include/transport/rostermanager.h | 75 +++++++++++++++++++++++++++++++ src/rostermanager.cpp | 49 ++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 include/transport/rostermanager.h create mode 100644 src/rostermanager.cpp diff --git a/include/transport/rostermanager.h b/include/transport/rostermanager.h new file mode 100644 index 00000000..7965152f --- /dev/null +++ b/include/transport/rostermanager.h @@ -0,0 +1,75 @@ +/** + * XMPP - libpurple transport + * + * Copyright (C) 2009, Jan Kaluza + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#pragma once + +#include +#include +#include +#include "Swiften/Swiften.h" +// #include "rosterstorage.h" + +namespace Transport { + +class AbstractBuddy; +class User; +class Component; + +/// Manages roster of one XMPP user. +class RosterManager { + public: + /// Creates new RosterManager. + /// \param user User associated with this RosterManager. + /// \param component Transport instance associated with this roster. + RosterManager(User *user, Component *component); + + /// Destructor. + virtual ~RosterManager(); + + /// Associates the buddy with this roster, + /// and if the buddy is not already in XMPP user's server-side roster, the proper requests + /// are sent to XMPP user (subscribe presences, Roster Item Exchange stanza or + /// the buddy is added to server-side roster using remote-roster protoXEP). + /// \param buddy AbstractBuddy + void setBuddy(AbstractBuddy *buddy); + + /// Deassociates the buddy with this roster. + /// \param buddy AbstractBuddy. + void unsetBuddy(AbstractBuddy *buddy); + + /// Returns user associated with this roster. + /// \return User + User *getUser() { return m_user; } + + /// Called when new AbstractBuddy is added to this roster. + /// \param buddy newly added AbstractBuddy + boost::signal onBuddySet; + + /// Called when AbstractBuddy has been removed from this roster. + /// \param buddy removed AbstractBuddy + boost::signal onBuddyUnset; + + private: + std::map m_buddies; + Component *m_component; + User *m_user; +}; + +} diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp new file mode 100644 index 00000000..1faeadde --- /dev/null +++ b/src/rostermanager.cpp @@ -0,0 +1,49 @@ +/** + * XMPP - libpurple transport + * + * Copyright (C) 2009, Jan Kaluza + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "transport/rostermanager.h" +#include "transport/abstractbuddy.h" +#include "transport/usermanager.h" +#include "transport/abstractbuddy.h" +#include "transport/user.h" + +namespace Transport { + +RosterManager::RosterManager(User *user, Component *component){ + m_user = user; + m_component = component; +} + +RosterManager::~RosterManager() { +} + +void RosterManager::setBuddy(AbstractBuddy *buddy) { + m_buddies[buddy->getSafeName()] = buddy; + buddy->setRosterManager(this); + onBuddySet(buddy); +} + +void RosterManager::unsetBuddy(AbstractBuddy *buddy) { + m_buddies.erase(buddy->getSafeName()); + onBuddyUnset(buddy); + buddy->setRosterManager(NULL); +} + +} \ No newline at end of file