diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 4059d865beb88b8578086cdd10bc7a3770ddce96..9cf799341ee6260169849f288bb957f636a0346f 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -1053,10 +1053,17 @@ void NetworkPluginServer::handleElement(boost::shared_ptr elemen boost::shared_ptr presence = boost::dynamic_pointer_cast(stanza); if (presence) { - m_component->getStanzaChannel()->sendPresence(presence); if (buddy) { - buddy->m_statusMessage = presence->getStatus(); - buddy->m_status = Swift::StatusShow(presence->getShow()); + if (!buddy->isAvailable() && presence->getType() != Swift::Presence::Unavailable) { + buddy->m_status.setType(Swift::StatusShow::Online); + } + buddy->handleRawPresence(presence); + } + else if (conv) { + conv->handleRawPresence(presence); + } + else { + m_component->getStanzaChannel()->sendPresence(presence); } return;