diff --git a/spectrum/src/frontends/slack/SlackUserManager.cpp b/spectrum/src/frontends/slack/SlackUserManager.cpp index 20cee001b5578b2ae849dca5ad6a9af4d901a35f..37963d47b8bbcdb4938297aa3b7c77dec9ace21f 100644 --- a/spectrum/src/frontends/slack/SlackUserManager.cpp +++ b/spectrum/src/frontends/slack/SlackUserManager.cpp @@ -21,7 +21,8 @@ #include "SlackUserManager.h" #include "SlackUserRegistration.h" #include "SlackFrontend.h" -#include "SlackInstallation.h" +#include "SlackSession.h" +#include "SlackUser.h" #include "transport/User.h" #include "transport/Transport.h" @@ -49,21 +50,8 @@ void SlackUserManager::reconnectUser(const std::string &user) { return; } -// if (!uinfo.uin.empty()) { -// LOG4CXX_INFO(logger, "Reconnecting user " << user); -// Swift::Presence::ref response = Swift::Presence::create(); -// response->setTo(m_component->getJID()); -// response->setFrom(user + "@" + m_component->getJID().toString()); -// response->setType(Swift::Presence::Available); -// } -// else { - LOG4CXX_INFO(logger, "Cannot reconnect user " << user << "," - "because he does not have legacy network configured. " - "Continuing in Installation mode for this user until " - "he configures the legacy network."); - m_installations[user] = new SlackInstallation(m_component, m_storageBackend, uinfo); - m_installations[user]->onInstallationDone.connect(boost::bind(&SlackUserManager::reconnectUser, this, _1)); -// } + LOG4CXX_INFO(logger, "Connecting user " << user << " to Slack network."); + m_tempSessions[user] = new SlackSession(m_component, m_storageBackend, uinfo); } void SlackUserManager::sendVCard(unsigned int id, Swift::VCard::ref vcard) { @@ -71,8 +59,22 @@ void SlackUserManager::sendVCard(unsigned int id, Swift::VCard::ref vcard) { } void SlackUserManager::sendMessage(boost::shared_ptr message) { - LOG4CXX_INFO(logger, message->getTo().toBare().toString()); - m_installations[message->getTo().toBare().toString()]->sendMessage(message); + User *user = getUser(message->getTo().toBare().toString()); + if (!user) { + LOG4CXX_ERROR(logger, "Received message for unknown user " << message->getTo().toBare().toString()); + return; + } + + static_cast(user)->getSession()->sendMessage(message); +} + +SlackSession *SlackUserManager::moveTempSession(const std::string &user) { + if (m_tempSessions.find(user) != m_tempSessions.end()) { + SlackSession *session = m_tempSessions[user]; + m_tempSessions.erase(user); + return session; + } + return NULL; }