diff --git a/src/conversation.cpp b/src/conversation.cpp index c02396e5..dce307c3 100644 --- a/src/conversation.cpp +++ b/src/conversation.cpp @@ -214,6 +214,17 @@ void Conversation::sendCachedMessages(const Swift::JID &to) { } m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(*it); } + + if (m_subject) { + if (to.isValid()) { + m_subject->setTo(to); + } + else { + m_subject->setTo(m_jid.toBare()); + } + m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(m_subject); + } + m_cachedMessages.clear(); } diff --git a/src/tests/conversationmanager.cpp b/src/tests/conversationmanager.cpp index 36d90a30..c5965a9d 100644 --- a/src/tests/conversationmanager.cpp +++ b/src/tests/conversationmanager.cpp @@ -313,6 +313,10 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe conv->setNickname("nickname"); conv->addJID("user@localhost/resource"); + boost::shared_ptr msg0(new Swift::Message()); + msg0->setSubject("subject"); + conv->handleMessage(msg0, "anotheruser"); + CPPUNIT_ASSERT(!user->shouldCacheMessages()); // disconnectUser @@ -350,7 +354,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe injectPresence(response); loop->processEvents(); - CPPUNIT_ASSERT_EQUAL(3, (int) received.size()); + CPPUNIT_ASSERT_EQUAL(4, (int) received.size()); CPPUNIT_ASSERT(dynamic_cast(getStanza(received[1]))); CPPUNIT_ASSERT_EQUAL(std::string("hi there!"), dynamic_cast(getStanza(received[1]))->getBody()); CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast(getStanza(received[1]))->getTo().toString()); @@ -361,6 +365,10 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast(getStanza(received[2]))->getTo().toString()); CPPUNIT_ASSERT_EQUAL(std::string("#room@localhost/anotheruser"), dynamic_cast(getStanza(received[2]))->getFrom().toString()); + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[3]))); + CPPUNIT_ASSERT_EQUAL(std::string("subject"), dynamic_cast(getStanza(received[3]))->getSubject()); + CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast(getStanza(received[3]))->getTo().toString()); + CPPUNIT_ASSERT_EQUAL(std::string("#room@localhost/anotheruser"), dynamic_cast(getStanza(received[3]))->getFrom().toString()); } void handleGroupchatMessagesBouncerLeave() {