diff --git a/src/user.cpp b/src/user.cpp index c7bd18ce0b884d77c2103deafee6760dcec90c55..a4949f8f57e3a13e4fba2a842d6793f0410cc4b4 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -20,19 +20,20 @@ #include "transport/user.h" #include "transport/transport.h" +#include "transport/storagebackend.h" #include "Swiften/Swiften.h" namespace Transport { -User::User(const Swift::JID &jid, const std::string &username, const std::string &password, Component *component) { +User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component) { m_jid = jid; - m_component = component->m_component; + m_component = component; m_presenceOracle = component->m_presenceOracle; m_entityCapsManager = component->m_entityCapsManager; -// m_activeResource = m_jid.getResource(); - + m_userInfo = userInfo; } + User::~User(){ } @@ -41,4 +42,20 @@ const Swift::JID &User::getJID() { return m_jid; } +void User::handlePresence(Swift::Presence::ref presence) { + Swift::Presence::ref highest = m_presenceOracle->getHighestPriorityPresence(m_jid.toBare()); + if (highest) { + highest->setTo(presence->getFrom()); + highest->setFrom(m_component->getJID()); + m_component->getComponent()->sendPresence(highest); + } + else { + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(m_jid.toBare()); + response->setFrom(m_component->getJID()); + response->setType(Swift::Presence::Unavailable); + m_component->getComponent()->sendPresence(response); + } +} + }