From 719127a8772f921fdba3169b449a4407143c8c45 Mon Sep 17 00:00:00 2001 From: Kevin Smith <git@kismith.co.uk> Date: Sun, 25 Jul 2010 21:15:31 +0100 Subject: Preparation for merging presences in the chat log. diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index 3012377..d9524da 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -113,7 +113,7 @@ void ChatController::handlePresenceChange(boost::shared_ptr<Presence> newPresenc chatStateTracker_->handlePresenceChange(newPresence, previousPresence); String newStatusChangeString = getStatusChangeString(newPresence); if (!previousPresence || newStatusChangeString != getStatusChangeString(previousPresence)) { - chatWindow_->addSystemMessage(newStatusChangeString); + chatWindow_->addPresenceMessage(newStatusChangeString); } } diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index 405272e..1ea0ad1 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp @@ -178,7 +178,7 @@ void MUCController::handleOccupantJoined(const MUCOccupant& occupant) { } joinString += "."; - chatWindow_->addSystemMessage(joinString); + chatWindow_->addPresenceMessage(joinString); } if (avatarManager_ != NULL) { handleAvatarChanged(jid, "dummy"); @@ -266,7 +266,7 @@ void MUCController::handleOccupantLeft(const MUCOccupant& occupant, MUC::Leaving partMessage += " (" + reason + ")"; } partMessage += "."; - chatWindow_->addSystemMessage(partMessage); + chatWindow_->addPresenceMessage(partMessage); if (occupant.getNick() != nick_) { roster_->removeContact(JID(toJID_.getNode(), toJID_.getDomain(), occupant.getNick())); } else { diff --git a/Swift/Controllers/UIInterfaces/ChatWindow.h b/Swift/Controllers/UIInterfaces/ChatWindow.h index 50a0b39..79c7d65 100644 --- a/Swift/Controllers/UIInterfaces/ChatWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatWindow.h @@ -31,6 +31,7 @@ namespace Swift { virtual void addMessage(const String& message, const String& senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath, const boost::posix_time::ptime& time) = 0; virtual void addAction(const String& message, const String& senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath, const boost::posix_time::ptime& time) = 0; virtual void addSystemMessage(const String& message) = 0; + virtual void addPresenceMessage(const String& message) = 0; virtual void addErrorMessage(const String& message) = 0; virtual void setContactChatState(ChatState::ChatStateType state) = 0; diff --git a/Swift/Controllers/UnitTest/MockChatWindow.h b/Swift/Controllers/UnitTest/MockChatWindow.h index ff61bf6..4985cbb 100644 --- a/Swift/Controllers/UnitTest/MockChatWindow.h +++ b/Swift/Controllers/UnitTest/MockChatWindow.h @@ -18,6 +18,7 @@ namespace Swift { virtual void addAction(const String& message, const String& /*senderName*/, bool /*senderIsSelf*/, const boost::optional<SecurityLabel>& /*label*/, const String& /*avatarPath*/, const boost::posix_time::ptime&) {lastMessageBody_ = message;}; virtual void addSystemMessage(const String& /*message*/) {}; virtual void addErrorMessage(const String& /*message*/) {}; + virtual void addPresenceMessage(const String& /*message*/) {}; virtual void setContactChatState(ChatState::ChatStateType /*state*/) {}; virtual void setName(const String& name) {name_ = name;}; diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp index fdf1ebc..a0b25a9 100644 --- a/Swift/QtUI/QtChatWindow.cpp +++ b/Swift/QtUI/QtChatWindow.cpp @@ -28,7 +28,7 @@ #include <QUrl> namespace Swift { -QtChatWindow::QtChatWindow(const QString &contact, UIEventStream* eventStream) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageWasSystem_(false), eventStream_(eventStream) { +QtChatWindow::QtChatWindow(const QString &contact, UIEventStream* eventStream) : QtTabbable(), contact_(contact), previousMessageWasSelf_(false), previousMessageWasSystem_(false), previousMessageWasPresence_(false), eventStream_(eventStream) { unreadCount_ = 0; inputEnabled_ = true; completer_ = NULL; @@ -268,6 +268,7 @@ void QtChatWindow::addMessage(const String &message, const String &senderName, b previousMessageWasSelf_ = senderIsSelf; previousSenderName_ = P2QSTRING(senderName); previousMessageWasSystem_ = false; + previousMessageWasPresence_ = false; } int QtChatWindow::getCount() { @@ -289,6 +290,7 @@ void QtChatWindow::addErrorMessage(const String& errorMessage) { previousMessageWasSelf_ = false; previousMessageWasSystem_ = true; + previousMessageWasPresence_ = false; } void QtChatWindow::addSystemMessage(const String& message) { @@ -302,8 +304,24 @@ void QtChatWindow::addSystemMessage(const String& message) { previousMessageWasSelf_ = false; previousMessageWasSystem_ = true; + previousMessageWasPresence_ = false; } +void QtChatWindow::addPresenceMessage(const String& message) { + if (isWidgetSelected()) { + onAllMessagesRead(); + } + + QString messageHTML(Qt::escape(P2QSTRING(message))); + messageHTML.replace("\n","<br/>"); + messageLog_->addMessage(SystemMessageSnippet(messageHTML, QDateTime::currentDateTime(),previousMessageWasPresence_)); + + previousMessageWasSelf_ = false; + previousMessageWasSystem_ = false; + previousMessageWasPresence_ = true; +} + + void QtChatWindow::returnPressed() { if (!inputEnabled_) { return; diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h index f68ff1c..1770186 100644 --- a/Swift/QtUI/QtChatWindow.h +++ b/Swift/QtUI/QtChatWindow.h @@ -30,6 +30,7 @@ namespace Swift { void addMessage(const String &message, const String &senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath, const boost::posix_time::ptime& time); void addAction(const String &message, const String &senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath, const boost::posix_time::ptime& time); void addSystemMessage(const String& message); + void addPresenceMessage(const String& message); void addErrorMessage(const String& errorMessage); void show(); void activate(); @@ -81,6 +82,7 @@ namespace Swift { std::vector<SecurityLabel> availableLabels_; bool previousMessageWasSelf_; bool previousMessageWasSystem_; + bool previousMessageWasPresence_; QString previousSenderName_; bool inputClearing_; UIEventStream* eventStream_; -- cgit v0.10.2-6-g49f6