summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swift/ChangeLog.md4
-rw-r--r--Swift/Controllers/Chat/ChatsManager.cpp12
-rw-r--r--Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp14
3 files changed, 28 insertions, 2 deletions
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>();