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: | 
 Swift
 Swift