diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-11-28 11:37:47 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-11-28 11:37:47 (GMT) |
commit | 5caf2316dad81d6c02ff3e886a65121011ccc9fe (patch) | |
tree | 1eabe5d3f5c61713d9b9e0c6d557075c97d111f9 | |
parent | ab6bac1ee3ba4ebf4dfc8dc1a3ae6783756c48c9 (diff) | |
download | swift-5caf2316dad81d6c02ff3e886a65121011ccc9fe.zip swift-5caf2316dad81d6c02ff3e886a65121011ccc9fe.tar.bz2 |
Rebind chat dialogs on just about anything.
Resolves: #646
Release-Notes: Duplicate chat windows when contacts are using multiple clients should now be avoided.
-rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 8 | ||||
-rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 20 |
2 files changed, 17 insertions, 11 deletions
diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 2fc5a43..6bd7597 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -133,7 +133,7 @@ void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> event) { */ void ChatsManager::handlePresenceChange(boost::shared_ptr<Presence> newPresence) { if (mucRegistry_->isMUC(newPresence->getFrom().toBare())) return; - if (newPresence->getType() != Presence::Unavailable) return; + //if (newPresence->getType() != Presence::Unavailable) return; JID fullJID(newPresence->getFrom()); std::map<JID, ChatController*>::iterator it = chatControllers_.find(fullJID); if (it == chatControllers_.end()) return; @@ -218,6 +218,12 @@ ChatController* ChatsManager::getChatControllerIfExists(const JID &contact) { if (chatControllers_.find(bare) != chatControllers_.end()) { rebindControllerJID(bare, contact); } else { + foreach (JIDChatControllerPair pair, chatControllers_) { + if (pair.first.toBare() == contact.toBare()) { + rebindControllerJID(pair.first, contact); + return chatControllers_[contact]; + } + } return NULL; } } diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp index 08106e6..c180062 100644 --- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp @@ -136,15 +136,15 @@ public: JID messageJID2("testling@test.com/resource2"); - MockChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); - mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID2, uiEventStream_).Return(window2); + //MockChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); + //mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID2, uiEventStream_).Return(window2); boost::shared_ptr<Message> message2(new Message()); message2->setFrom(messageJID2); String body2("This is a legible message. .cmaulm.chul"); message2->setBody(body2); manager_->handleIncomingMessage(message2); - CPPUNIT_ASSERT_EQUAL(body2, window2->lastMessageBody_); + CPPUNIT_ASSERT_EQUAL(body2, window1->lastMessageBody_); } void testFirstOpenWindowOutgoing() { @@ -239,14 +239,14 @@ public: uiEventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(JID(messageJIDString1)))); String messageJIDString2("testling@test.com/2"); - ChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); - mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(JID(messageJIDString2), uiEventStream_).Return(window2); + //ChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); + //mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(JID(messageJIDString2), uiEventStream_).Return(window2); uiEventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(JID(messageJIDString2)))); String messageJIDString3("testling@test.com/3"); - ChatWindow* window3 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); - mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(JID(messageJIDString3), uiEventStream_).Return(window3); + //ChatWindow* window3 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); + //mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(JID(messageJIDString3), uiEventStream_).Return(window3); uiEventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(JID(messageJIDString3)))); @@ -278,8 +278,8 @@ public: JID messageJID2("testling@test.com/resource2"); - MockChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); - mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID2, uiEventStream_).Return(window2); + //MockChatWindow* window2 = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>(); + //mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID2, uiEventStream_).Return(window2); boost::shared_ptr<Message> message2(new Message()); message2->setFrom(messageJID2); @@ -314,7 +314,7 @@ public: String body2b("This is a legible message2b."); message2b->setBody(body2b); manager_->handleIncomingMessage(message2b); - CPPUNIT_ASSERT_EQUAL(body2b, window2->lastMessageBody_); + CPPUNIT_ASSERT_EQUAL(body2b, window1->lastMessageBody_); } private: |