diff options
author | Tobias Markmann <tm@ayena.de> | 2017-05-18 14:31:36 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2017-05-19 11:49:14 (GMT) |
commit | a986b2a4cef30a83df385e616503c9029b039610 (patch) | |
tree | 61df7b33c227baf247fed09648591ce481af4716 | |
parent | 7b53dc308feeef2da9d826c6bbfe215222af8639 (diff) | |
download | swift-a986b2a4cef30a83df385e616503c9029b039610.zip swift-a986b2a4cef30a83df385e616503c9029b039610.tar.bz2 |
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
-rw-r--r-- | Swift/ChangeLog.md | 4 | ||||
-rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 12 | ||||
-rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 14 |
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>(); |