From a986b2a4cef30a83df385e616503c9029b039610 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Thu, 18 May 2017 16:31:36 +0200
Subject: Only apply impromptu chat title style to impromptu chats

Fixes regression of 1cb2bb7, that would show the full
bare JID as chat title for normal MUCs.

Test-Information:

Added unit test for having the classic title style for normal
MUCS.

Joined basic MUC room and verified it only shows the node
part of the MUC JID as chat title. Verified that for
impromptu chats, it shows the list of participants as
chat title.

Tested on macOS 10.12.5 with Qt 5.4.2.

Change-Id: I3685172378c0b6303524c89876b044eac1aa1422

diff --git a/Swift/ChangeLog.md b/Swift/ChangeLog.md
index 82db988..1b0eaca 100644
--- a/Swift/ChangeLog.md
+++ b/Swift/ChangeLog.md
@@ -1,3 +1,7 @@
+4.0-in-progress
+---------------
+- Fix regression in chat window titles for chat rooms
+
 4.0-rc1 ( 2017-05-17 )
 ----------------------
 - Fix UI layout issue for translations that require right-to-left (RTL) layout
diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp
index 190ca8b..b7087fd 100644
--- a/Swift/Controllers/Chat/ChatsManager.cpp
+++ b/Swift/Controllers/Chat/ChatsManager.cpp
@@ -435,6 +435,15 @@ void ChatsManager::handleChatActivity(const JID& jid, const std::string& activit
     appendRecent(chat);
     handleUnreadCountChanged(nullptr);
     saveRecents();
+
+    // Look up potential MUC controller and update title accordingly as people
+    // join impromptu chats.
+    if (mucControllers_.find(jid) != mucControllers_.end()) {
+        auto chatListWindowIter = std::find_if(recentChats_.begin(), recentChats_.end(), [&](const ChatListWindow::Chat& chatListWindow) { return jid == (chatListWindow.jid); });
+        if (chatListWindowIter != recentChats_.end() && (mucControllers_[jid]->isImpromptu() || !chatListWindowIter->impromptuJIDs.empty())) {
+            mucControllers_[jid]->setChatWindowTitle(chatListWindowIter->getTitle());
+        }
+    }
 }
 
 void ChatsManager::handleChatClosed(const JID& /*jid*/) {
@@ -875,8 +884,9 @@ MUC::ref ChatsManager::handleJoinMUCRequest(const JID &mucJID, const boost::opti
         }
         handleChatActivity(mucJID.toBare(), "", true);
     }
+
     auto chatListWindowIter = std::find_if(recentChats_.begin(), recentChats_.end(), [&](const ChatListWindow::Chat& chatListWindow) { return mucJID == (chatListWindow.jid); });
-    if (chatListWindowIter != recentChats_.end()) {
+    if (chatListWindowIter != recentChats_.end() && (mucControllers_[mucJID]->isImpromptu() || !chatListWindowIter->impromptuJIDs.empty())) {
         mucControllers_[mucJID]->setChatWindowTitle(chatListWindowIter->getTitle());
     }
 
diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
index 20c959c..8fc26b5 100644
--- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
+++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
@@ -150,9 +150,10 @@ class ChatsManagerTest : public CppUnit::TestFixture {
     CPPUNIT_TEST(testChatControllerMessageCorrectionReplaceByOtherResource);
     CPPUNIT_TEST(testMUCControllerMessageCorrectionNoIDMatchRequired);
 
-    //Imptomptu test
+    // Chat window title tests
     CPPUNIT_TEST(testImpromptuChatTitle);
     CPPUNIT_TEST(testImpromptuChatWindowTitle);
+    CPPUNIT_TEST(testStandardMUCChatWindowTitle);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -1586,6 +1587,17 @@ public:
         CPPUNIT_ASSERT_EQUAL(std::string("bar@test.com, foo@test.com"), window->name_);
     }
 
+    void testStandardMUCChatWindowTitle() {
+        JID mucJID("mucroom@rooms.test.com");
+        std::string nickname = "toodles";
+
+        MockChatWindow* window = new MockChatWindow();
+        mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(mucJID, uiEventStream_).Return(window);
+
+        uiEventStream_->send(std::make_shared<JoinMUCUIEvent>(mucJID, boost::optional<std::string>(), nickname));
+        CPPUNIT_ASSERT_EQUAL(std::string("mucroom"), window->name_);
+    }
+
 private:
     std::shared_ptr<Message> makeDeliveryReceiptTestMessage(const JID& from, const std::string& id) {
         std::shared_ptr<Message> message = std::make_shared<Message>();
-- 
cgit v0.10.2-6-g49f6