diff --git a/src/conversationmanager.cpp b/src/conversationmanager.cpp index 72f27bfb36e7c58876deb2241b2d1fa84bc6b09b..c96ccf3df8d4ebd1f321aa17022dcaa23bc08529 100644 --- a/src/conversationmanager.cpp +++ b/src/conversationmanager.cpp @@ -43,6 +43,11 @@ void ConversationManager::setConversation(Conversation *conv) { } void ConversationManager::unsetConversation(Conversation *conv) { + for (std::map::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) { + if ((*it).second->getRoom() == conv->getLegacyName()) { + (*it).second->setRoom(""); + } + } m_convs.erase(conv->getLegacyName()); } @@ -55,6 +60,15 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) { if (!m_convs[name]) { m_convs[name] = m_component->getFactory()->createConversation(this, name); } + else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) { + std::string room_name = name; + name = message->getTo().getResource(); + if (!m_convs[name]) { + m_convs[name] = m_component->getFactory()->createConversation(this, name); + m_convs[name]->setRoom(room_name); + } + } + m_convs[name]->sendMessage(message); }