diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-09-12 18:29:39 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-09-13 19:19:52 (GMT) | 
| commit | ef1052bbdb315aaa1c6254098ea05638d9a25b2f (patch) | |
| tree | 482277f649f6c0fc00027514ea8986861fe33437 /Swift/Controllers/Chat | |
| parent | 3ae8cccfe9c6bfed5dda5f024a5cb046ccfc9793 (diff) | |
| download | swift-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.zip swift-ef1052bbdb315aaa1c6254098ea05638d9a25b2f.tar.bz2 | |
Added presence notifier.
Diffstat (limited to 'Swift/Controllers/Chat')
| -rw-r--r-- | Swift/Controllers/Chat/ChatController.cpp | 9 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatController.h | 3 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 4 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.h | 2 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 10 | 
5 files changed, 15 insertions, 13 deletions
| diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index 9154b9a..e621a6d 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -31,7 +31,7 @@ ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQ  	chatStateMessageSender_ = new ChatStateMessageSender(chatStateNotifier_, stanzaChannel, contact);  	chatStateTracker_ = new ChatStateTracker();  	nickResolver_ = nickResolver; -	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatController::handlePresenceChange, this, _1, _2)); +	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatController::handlePresenceChange, this, _1));  	chatStateTracker_->onChatStateChange.connect(boost::bind(&ChatWindow::setContactChatState, chatWindow_, _1));  	stanzaChannel_->onStanzaAcked.connect(boost::bind(&ChatController::handleStanzaAcked, this, _1));  	String nick = nickResolver_->jidToNick(toJID_); @@ -134,19 +134,20 @@ String ChatController::getStatusChangeString(boost::shared_ptr<Presence> presenc  	return "";  } -void ChatController::handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> previousPresence) { +void ChatController::handlePresenceChange(boost::shared_ptr<Presence> newPresence) {  	if (!toJID_.equals(newPresence->getFrom(), toJID_.isBare() ? JID::WithoutResource : JID::WithResource)) {  		return;  	} -	chatStateTracker_->handlePresenceChange(newPresence, previousPresence); +	chatStateTracker_->handlePresenceChange(newPresence);  	String newStatusChangeString = getStatusChangeString(newPresence); -	if (!previousPresence || newStatusChangeString != getStatusChangeString(previousPresence)) { +	if (newStatusChangeString != lastStatusChangeString_) {  		if (lastWasPresence_) {  			chatWindow_->replaceLastMessage(newStatusChangeString);  		} else {  			chatWindow_->addPresenceMessage(newStatusChangeString);  		} +		lastStatusChangeString_ = newStatusChangeString;  		lastWasPresence_ = true;  	}  } diff --git a/Swift/Controllers/Chat/ChatController.h b/Swift/Controllers/Chat/ChatController.h index 971fca9..c226ed8 100644 --- a/Swift/Controllers/Chat/ChatController.h +++ b/Swift/Controllers/Chat/ChatController.h @@ -23,7 +23,7 @@ namespace Swift {  			virtual void setEnabled(bool enabled);  		private: -			void handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> previousPresence); +			void handlePresenceChange(boost::shared_ptr<Presence> newPresence);  			String getStatusChangeString(boost::shared_ptr<Presence> presence);  			bool isIncomingMessageFromMe(boost::shared_ptr<Message> message);  			void postSendMessage(const String &body, boost::shared_ptr<Stanza> sentStanza); @@ -41,6 +41,7 @@ namespace Swift {  			ChatStateTracker* chatStateTracker_;  			bool isInMUC_;  			bool lastWasPresence_; +			String lastStatusChangeString_;  			std::map<boost::shared_ptr<Stanza>, String> unackedStanzas_;  	};  } diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index e1a53b4..08b1453 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -42,7 +42,7 @@ ChatsManager::ChatsManager(JID jid, StanzaChannel* stanzaChannel, IQRouter* iqRo  	mucBookmarkManager_->onBookmarksReady.connect(boost::bind(&ChatsManager::handleBookmarksReady, this));  	mucBookmarkManager_->onBookmarkAdded.connect(boost::bind(&ChatsManager::handleMUCBookmarkAdded, this, _1));  	mucBookmarkManager_->onBookmarkRemoved.connect(boost::bind(&ChatsManager::handleMUCBookmarkRemoved, this, _1)); -	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatsManager::handlePresenceChange, this, _1, _2)); +	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatsManager::handlePresenceChange, this, _1));  	uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&ChatsManager::handleUIEvent, this, _1));  	chatListWindow_ = chatListWindowFactory->createWindow(uiEventStream_);  	if (chatListWindow_) { @@ -122,7 +122,7 @@ void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> event) {  /**   * If a resource goes offline, release bound chatdialog to that resource.   */ -void ChatsManager::handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> /*lastPresence*/) { +void ChatsManager::handlePresenceChange(boost::shared_ptr<Presence> newPresence) {  	if (mucRegistry_->isMUC(newPresence->getFrom().toBare())) return;  	if (newPresence->getType() != Presence::Unavailable) return;  	JID fullJID(newPresence->getFrom()); diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index 752acff..17a5d94 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -47,7 +47,7 @@ namespace Swift {  			void handleChatRequest(const String& contact);  			void handleJoinMUCRequest(const JID& muc, const boost::optional<String>& nick);  			void rebindControllerJID(const JID& from, const JID& to); -			void handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> lastPresence); +			void handlePresenceChange(boost::shared_ptr<Presence> newPresence);  			void handleUIEvent(boost::shared_ptr<UIEvent> event);  			void handleMUCBookmarkAdded(const MUCBookmark& bookmark);  			void handleMUCBookmarkRemoved(const MUCBookmark& bookmark); diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp index ffd5185..bf27dd5 100644 --- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp @@ -59,7 +59,7 @@ public:  		iqRouter_ = new IQRouter(iqChannel_);  		eventController_ = new EventController();  		chatWindowFactory_ = mocks_->InterfaceMock<ChatWindowFactory>(); -		xmppRoster_ = boost::shared_ptr<XMPPRoster>(new XMPPRoster()); +		xmppRoster_ = new XMPPRoster();  		mucRegistry_ = new MUCRegistry();  		nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_);  		presenceOracle_ = new PresenceOracle(stanzaChannel_); @@ -195,7 +195,7 @@ public:  		boost::shared_ptr<Presence> jid1Offline(new Presence());  		jid1Offline->setFrom(JID(fullJIDString1));  		jid1Offline->setType(Presence::Unavailable); -		presenceOracle_->onPresenceChange(jid1Offline, jid1Online); +		presenceOracle_->onPresenceChange(jid1Offline);  		boost::shared_ptr<Message> message2(new Message());  		message2->setFrom(JID(fullJIDString2)); @@ -273,14 +273,14 @@ public:  		boost::shared_ptr<Presence> jid1Offline(new Presence());  		jid1Offline->setFrom(JID(messageJID1));  		jid1Offline->setType(Presence::Unavailable); -		presenceOracle_->onPresenceChange(jid1Offline, jid1Online); +		presenceOracle_->onPresenceChange(jid1Offline);  		boost::shared_ptr<Presence> jid2Online(new Presence());  		jid2Online->setFrom(JID(messageJID2));  		boost::shared_ptr<Presence> jid2Offline(new Presence());  		jid2Offline->setFrom(JID(messageJID2));  		jid2Offline->setType(Presence::Unavailable); -		presenceOracle_->onPresenceChange(jid2Offline, jid2Online); +		presenceOracle_->onPresenceChange(jid2Offline);  		JID messageJID3("testling@test.com/resource3"); @@ -311,7 +311,7 @@ private:  	PresenceOracle* presenceOracle_;  	AvatarManager* avatarManager_;  	boost::shared_ptr<DiscoInfo> serverDiscoInfo_; -	boost::shared_ptr<XMPPRoster> xmppRoster_; +	XMPPRoster* xmppRoster_;  	PresenceSender* presenceSender_;  	MockRepository* mocks_;  	UIEventStream* uiEventStream_; | 
 Swift
 Swift