diff --git a/spectrum/src/frontends/xmpp/discoitemsresponder.cpp b/spectrum/src/frontends/xmpp/discoitemsresponder.cpp index c53e41a6d4e2bcdbab94138adfa2681decaa8a79..c5a2a924c109f8e6ad737085bb7fd5d04f774b7f 100644 --- a/spectrum/src/frontends/xmpp/discoitemsresponder.cpp +++ b/spectrum/src/frontends/xmpp/discoitemsresponder.cpp @@ -29,6 +29,8 @@ #include "discoinforesponder.h" #include "XMPPFrontend.h" #include "transport/Frontend.h" +#include "transport/UserManager.h" +#include "XMPPUser.h" using namespace Swift; using namespace boost; @@ -37,14 +39,16 @@ namespace Transport { DEFINE_LOGGER(logger, "DiscoItemsResponder"); -DiscoItemsResponder::DiscoItemsResponder(Component *component) : Swift::GetResponder(static_cast(component->getFrontend())->getIQRouter()) { +DiscoItemsResponder::DiscoItemsResponder(Component *component, UserManager *userManager) : Swift::GetResponder(static_cast(component->getFrontend())->getIQRouter()) { m_component = component; m_commands = boost::shared_ptr(new DiscoItems()); m_commands->setNode("http://jabber.org/protocol/commands"); m_rooms = boost::shared_ptr(new DiscoItems()); - m_discoInfoResponder = new DiscoInfoResponder(static_cast(component->getFrontend())->getIQRouter(), component->getConfig()); + m_discoInfoResponder = new DiscoInfoResponder(static_cast(component->getFrontend())->getIQRouter(), component->getConfig(), userManager); m_discoInfoResponder->start(); + + m_userManager = userManager; } DiscoItemsResponder::~DiscoItemsResponder() { @@ -80,7 +84,21 @@ bool DiscoItemsResponder::handleGetRequest(const Swift::JID& from, const Swift:: sendResponse(from, id, m_commands); } else if (to.getNode().empty()) { - sendResponse(from, id, m_rooms); + XMPPUser *user = static_cast(m_userManager->getUser(from.toBare().toString())); + if (!user) { + sendResponse(from, id, m_rooms); + return true; + } + + boost::shared_ptr rooms = boost::shared_ptr(new DiscoItems()); + BOOST_FOREACH(const DiscoItems::Item &item, m_rooms->getItems()) { + rooms->addItem(item); + } + BOOST_FOREACH(const DiscoItems::Item &item, user->getRoomList()->getItems()) { + rooms->addItem(item); + } + + sendResponse(from, id, rooms); } else { sendResponse(from, id, boost::shared_ptr(new DiscoItems()));