From bc08209eedf8a8a9f2506420384201e2bd0035d4 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Thu, 26 Apr 2012 17:52:12 +0100
Subject: Only include targeted messages in the Chats view count for MUCs.

Resolves: #935

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
-- 
cgit v0.10.2-6-g49f6