summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2012-04-26 16:52:12 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-04-26 16:52:12 (GMT)
commitbc08209eedf8a8a9f2506420384201e2bd0035d4 (patch)
treeeafae0f103389d6e1f1511dfe363b39395a2e4f2
parent4a1f206b0f8d4926b3a61cc8d7aad217761e52f6 (diff)
downloadswift-contrib-bc08209eedf8a8a9f2506420384201e2bd0035d4.zip
swift-contrib-bc08209eedf8a8a9f2506420384201e2bd0035d4.tar.bz2
Only include targeted messages in the Chats view count for MUCs.
Resolves: #935
-rw-r--r--Swift/Controllers/Chat/ChatControllerBase.cpp6
-rw-r--r--Swift/Controllers/Chat/ChatControllerBase.h1
-rw-r--r--Swift/Controllers/Chat/MUCController.cpp10
-rw-r--r--Swift/Controllers/XMPPEvents/MessageEvent.h23
4 files changed, 26 insertions, 14 deletions
diff --git a/Swift/Controllers/Chat/ChatControllerBase.cpp b/Swift/Controllers/Chat/ChatControllerBase.cpp
index 16ff885..583a102 100644
--- a/Swift/Controllers/Chat/ChatControllerBase.cpp
+++ b/Swift/Controllers/Chat/ChatControllerBase.cpp
@@ -92,6 +92,7 @@ void ChatControllerBase::setAvailableServerFeatures(boost::shared_ptr<DiscoInfo>
void ChatControllerBase::handleAllMessagesRead() {
if (!unreadMessages_.empty()) {
+ targetedUnreadMessages_.clear();
foreach (boost::shared_ptr<StanzaEvent> stanzaEvent, unreadMessages_) {
stanzaEvent->conclude();
}
@@ -102,7 +103,7 @@ void ChatControllerBase::handleAllMessagesRead() {
}
int ChatControllerBase::getUnreadCount() {
- return unreadMessages_.size();
+ return targetedUnreadMessages_.size();
}
void ChatControllerBase::handleSendMessageRequest(const std::string &body, bool isCorrectionMessage) {
@@ -181,6 +182,9 @@ void ChatControllerBase::handleIncomingMessage(boost::shared_ptr<MessageEvent> m
preHandleIncomingMessage(messageEvent);
if (messageEvent->isReadable() && !messageEvent->getConcluded()) {
unreadMessages_.push_back(messageEvent);
+ if (messageEvent->targetsMe()) {
+ targetedUnreadMessages_.push_back(messageEvent);
+ }
}
boost::shared_ptr<Message> message = messageEvent->getStanza();
std::string body = message->getBody();
diff --git a/Swift/Controllers/Chat/ChatControllerBase.h b/Swift/Controllers/Chat/ChatControllerBase.h
index 8a8161d..7dd339c 100644
--- a/Swift/Controllers/Chat/ChatControllerBase.h
+++ b/Swift/Controllers/Chat/ChatControllerBase.h
@@ -91,6 +91,7 @@ namespace Swift {
protected:
JID selfJID_;
std::vector<boost::shared_ptr<StanzaEvent> > unreadMessages_;
+ std::vector<boost::shared_ptr<StanzaEvent> > targetedUnreadMessages_;
StanzaChannel* stanzaChannel_;
IQRouter* iqRouter_;
ChatWindowFactory* chatWindowFactory_;
diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp
index 775d7a2..3386877 100644
--- a/Swift/Controllers/Chat/MUCController.cpp
+++ b/Swift/Controllers/Chat/MUCController.cpp
@@ -393,10 +393,12 @@ void MUCController::preHandleIncomingMessage(boost::shared_ptr<MessageEvent> mes
}
clearPresenceQueue();
boost::shared_ptr<Message> message = messageEvent->getStanza();
- if (joined_ && messageEvent->getStanza()->getFrom().getResource() != nick_ && messageTargetsMe(message) && !message->getPayload<Delay>()) {
- if (messageEvent->isReadable()) {
- chatWindow_->flash();
- }
+ if (joined_ && messageEvent->getStanza()->getFrom().getResource() != nick_ && messageTargetsMe(message) && !message->getPayload<Delay>() && messageEvent->isReadable()
+) {
+ chatWindow_->flash();
+ }
+ else {
+ messageEvent->setTargetsMe(false);
}
if (joined_) {
std::string nick = message->getFrom().getResource();
diff --git a/Swift/Controllers/XMPPEvents/MessageEvent.h b/Swift/Controllers/XMPPEvents/MessageEvent.h
index d1021dc..1093470 100644
--- a/Swift/Controllers/XMPPEvents/MessageEvent.h
+++ b/Swift/Controllers/XMPPEvents/MessageEvent.h
@@ -1,26 +1,23 @@
/*
- * Copyright (c) 2010 Kevin Smith
+ * Copyright (c) 2010-2012 Kevin Smith
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
-#ifndef SWIFTEN_MessageEvent_H
-#define SWIFTEN_MessageEvent_H
-
+#pragma once
#include <cassert>
-#include "Swiften/Base/boost_bsignals.h"
#include <boost/shared_ptr.hpp>
-#include "Swift/Controllers/XMPPEvents/StanzaEvent.h"
-#include "Swiften/Elements/Message.h"
+#include <Swift/Controllers/XMPPEvents/StanzaEvent.h>
+#include <Swiften/Elements/Message.h>
namespace Swift {
class MessageEvent : public StanzaEvent {
public:
typedef boost::shared_ptr<MessageEvent> ref;
- MessageEvent(boost::shared_ptr<Message> stanza) : stanza_(stanza){};
+ MessageEvent(boost::shared_ptr<Message> stanza) : stanza_(stanza), targetsMe_(true) {};
boost::shared_ptr<Message> getStanza() {return stanza_;}
@@ -33,9 +30,17 @@ namespace Swift {
conclude();
}
+ void setTargetsMe(bool targetsMe) {
+ targetsMe_ = targetsMe;
+ }
+
+ bool targetsMe() const {
+ return targetsMe_;
+ }
+
private:
boost::shared_ptr<Message> stanza_;
+ bool targetsMe_;
};
}
-#endif