From e2d9f9e47056a41d5e5a67ea3130ccdd860a06ed Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Fri, 26 Jun 2009 20:34:11 +0100
Subject: Use nicks in tab titles.


diff --git a/Swift/Controllers/ChatController.cpp b/Swift/Controllers/ChatController.cpp
index 32fc0c2..90e5567 100644
--- a/Swift/Controllers/ChatController.cpp
+++ b/Swift/Controllers/ChatController.cpp
@@ -16,6 +16,7 @@ ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQ
  : ChatControllerBase(self, stanzaChannel, iqRouter, chatWindowFactory, contact, presenceOracle, avatarManager) {
 	nickResolver_ = nickResolver;
 	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatController::handlePresenceChange, this, _1, _2));
+	chatWindow_->setName(nickResolver_->jidToNick(toJID_));
 }
 
 bool ChatController::isIncomingMessageFromMe(boost::shared_ptr<Message>) {
diff --git a/Swift/Controllers/ChatWindow.h b/Swift/Controllers/ChatWindow.h
index dd71bf9..36788cf 100644
--- a/Swift/Controllers/ChatWindow.h
+++ b/Swift/Controllers/ChatWindow.h
@@ -22,6 +22,7 @@ namespace Swift {
 			virtual void addSystemMessage(const String& message) = 0;
 			virtual void addErrorMessage(const String& message) = 0;
 
+			virtual void setName(const String& name) = 0;
 			virtual void show() = 0;
 			virtual void setAvailableSecurityLabels(const std::vector<SecurityLabel>& labels) = 0;
 			virtual void setSecurityLabelsEnabled(bool enabled) = 0;
diff --git a/Swift/Controllers/NickResolver.cpp b/Swift/Controllers/NickResolver.cpp
index db1d2b4..0886079 100644
--- a/Swift/Controllers/NickResolver.cpp
+++ b/Swift/Controllers/NickResolver.cpp
@@ -11,10 +11,11 @@ NickResolver::NickResolver(boost::shared_ptr<XMPPRoster> xmppRoster) {
 }
 
 String NickResolver::jidToNick(const JID& jid) {
-	if (xmppRoster_->containsJID(jid)) {
+	String nick;
+	if (xmppRoster_->containsJID(jid) && xmppRoster_->getNameForJID(jid) != "") {
 		return xmppRoster_->getNameForJID(jid);
 	}
-	std::map<JID, String>::iterator it = map_.find(jid);
+	std::map<JID, String>::const_iterator it = map_.find(jid);
 	return (it == map_.end()) ? jid.toBare() : it->second;
 }
 
diff --git a/Swift/Controllers/UnitTest/NickResolverTest.cpp b/Swift/Controllers/UnitTest/NickResolverTest.cpp
index 947d3d8..e3123f9 100644
--- a/Swift/Controllers/UnitTest/NickResolverTest.cpp
+++ b/Swift/Controllers/UnitTest/NickResolverTest.cpp
@@ -10,6 +10,7 @@ class NickResolverTest : public CppUnit::TestFixture
 {
 		CPPUNIT_TEST_SUITE(NickResolverTest);
 		CPPUNIT_TEST(testNoMatch);
+		CPPUNIT_TEST(testZeroLengthMatch);
 		CPPUNIT_TEST(testMatch);
 		CPPUNIT_TEST(testOverwrittenMatch);
 		CPPUNIT_TEST(testRemovedMatch);
@@ -23,37 +24,45 @@ class NickResolverTest : public CppUnit::TestFixture
 		void testNoMatch() {
 			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
 			NickResolver resolver(xmppRoster);
-			JID testling("foo@bar/baz");
+			JID testJID("foo@bar/baz");
 
-			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testling));
+			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID));
+		}
+		
+		void testZeroLengthMatch() {
+			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
+			NickResolver resolver(xmppRoster);
+			JID testJID("foo@bar/baz");
+			xmppRoster->addContact(testJID, "", groups_);
+			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID));
 		}
 
 		void testMatch() {
 			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
 			NickResolver resolver(xmppRoster);
-			JID testling("foo@bar/baz");
-			xmppRoster->addContact(testling, "Test", groups_);
+			JID testJID("foo@bar/baz");
+			xmppRoster->addContact(testJID, "Test", groups_);
 
-			CPPUNIT_ASSERT_EQUAL(String("Test"), resolver.jidToNick(testling));
+			CPPUNIT_ASSERT_EQUAL(String("Test"), resolver.jidToNick(testJID));
 		}
 
 		void testOverwrittenMatch() {
 			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
 			NickResolver resolver(xmppRoster);
-			JID testling("foo@bar/baz");
-			xmppRoster->addContact(testling, "FailTest", groups_);
-			xmppRoster->addContact(testling, "Test", groups_);
+			JID testJID("foo@bar/baz");
+			xmppRoster->addContact(testJID, "FailTest", groups_);
+			xmppRoster->addContact(testJID, "Test", groups_);
 
-			CPPUNIT_ASSERT_EQUAL(String("Test"), resolver.jidToNick(testling));
+			CPPUNIT_ASSERT_EQUAL(String("Test"), resolver.jidToNick(testJID));
 		}
 
 		void testRemovedMatch() {
 			boost::shared_ptr<XMPPRoster> xmppRoster(new XMPPRoster());
 			NickResolver resolver(xmppRoster);
-			JID testling("foo@bar/baz");
-			xmppRoster->addContact(testling, "FailTest", groups_);
-			xmppRoster->removeContact(testling);
-			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testling));
+			JID testJID("foo@bar/baz");
+			xmppRoster->addContact(testJID, "FailTest", groups_);
+			xmppRoster->removeContact(testJID);
+			CPPUNIT_ASSERT_EQUAL(String("foo@bar"), resolver.jidToNick(testJID));
 		}
 
 };
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index 8e916c3..f4e0b0b 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -121,6 +121,11 @@ void QtChatWindow::setUnreadMessageCount(int count) {
 	updateTitleWithUnreadCount();
 }
 
+void QtChatWindow::setName(const String& name) {
+	contact_ = P2QSTRING(name);
+	updateTitleWithUnreadCount();
+}
+
 void QtChatWindow::updateTitleWithUnreadCount() {
 	setWindowTitle(unreadCount_ > 0 ? QString("(%1) %2)").arg(unreadCount_).arg(contact_) : contact_);
 	emit titleUpdated();
diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h
index 20a53b9..6e45d34 100644
--- a/Swift/QtUI/QtChatWindow.h
+++ b/Swift/QtUI/QtChatWindow.h
@@ -29,6 +29,7 @@ namespace Swift {
 			void setSecurityLabelsEnabled(bool enabled);
 			void setSecurityLabelsError();
 			SecurityLabel getSelectedSecurityLabel();
+			void setName(const String& name);
 
 		protected slots:
 			void qAppFocusChanged(QWidget* old, QWidget* now);
-- 
cgit v0.10.2-6-g49f6