diff --git a/libtransport/ConversationManager.cpp b/libtransport/ConversationManager.cpp index 13ac150dd409da1e7bc543d92d51053f01485791..24678466da54d431fbbbb26dbafd43ad951c1dfb 100644 --- a/libtransport/ConversationManager.cpp +++ b/libtransport/ConversationManager.cpp @@ -103,8 +103,20 @@ void ConversationManager::resetResources() { } void ConversationManager::removeJID(const Swift::JID &jid) { + std::vector toRemove; for (std::map::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) { (*it).second->removeJID(jid); + if (it->second->getJIDs().empty()) { + toRemove.push_back(it->first); + } + } + + if (m_user->getUserSetting("stay_connected") != "1") { + while(!toRemove.empty()) { + LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Leaving room " << toRemove.back() << "."); + m_user->leaveRoom(toRemove.back()); + toRemove.pop_back(); + } } }