From a5928fb2a77e4ba899ecd67aeb2412b70945058c Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Sat, 12 Jun 2010 10:12:09 +0100 Subject: Don't re-associate a MUC PM with the bare JID when the target goes offline. Resolves: #458 diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index 7b52fba..79221c4 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -97,9 +97,10 @@ String ChatController::getStatusChangeString(boost::shared_ptr presenc } void ChatController::handlePresenceChange(boost::shared_ptr newPresence, boost::shared_ptr previousPresence) { - if (!(toJID_.isBare() && newPresence->getFrom().equals(toJID_, JID::WithoutResource)) && newPresence->getFrom() != toJID_) { + if (!toJID_.equals(newPresence->getFrom(), toJID_.isBare() ? JID::WithoutResource : JID::WithResource)) { return; } + chatStateTracker_->handlePresenceChange(newPresence, previousPresence); String newStatusChangeString = getStatusChangeString(newPresence); if (!previousPresence || newStatusChangeString != getStatusChangeString(previousPresence)) { diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 1ee501a..824c98d 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -114,6 +114,7 @@ void ChatsManager::handleUIEvent(boost::shared_ptr event) { * If a resource goes offline, release bound chatdialog to that resource. */ void ChatsManager::handlePresenceChange(boost::shared_ptr newPresence, boost::shared_ptr /*lastPresence*/) { + if (isMUC(newPresence->getFrom().toBare())) return; if (newPresence->getType() != Presence::Unavailable) return; JID fullJID(newPresence->getFrom()); std::map::iterator it = chatControllers_.find(fullJID); @@ -128,23 +129,6 @@ void ChatsManager::setAvatarManager(AvatarManager* avatarManager) { avatarManager_ = avatarManager; } -// void ChatsManager::handleUIEvent(boost::shared_ptr rawEvent) { -// { -// boost::shared_ptr event = boost::dynamic_pointer_cast(rawEvent); -// if (event != NULL) { -// handleChatRequest(event->getContact()); -// return; -// } -// } -// { -// boost::shared_ptr event = boost::dynamic_pointer_cast(rawEvent); -// if (event != NULL) { -// handleJoinMUCRequest(); -// } -// } -// } - - void ChatsManager::setServerDiscoInfo(boost::shared_ptr info) { serverDiscoInfo_ = info; foreach (JIDChatControllerPair pair, chatControllers_) { @@ -157,7 +141,6 @@ void ChatsManager::setServerDiscoInfo(boost::shared_ptr info) { void ChatsManager::setEnabled(bool enabled) { foreach (JIDChatControllerPair controllerPair, chatControllers_) { - //printf("Setting enabled on %d to %d\n", controllerPair.second, enabled); controllerPair.second->setEnabled(enabled); } foreach (JIDMUCControllerPair controllerPair, mucControllers_) { diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index 9957891..9af7a70 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -43,6 +43,7 @@ namespace Swift { void setEnabled(bool enabled); void setServerDiscoInfo(boost::shared_ptr info); void handleIncomingMessage(boost::shared_ptr message); + virtual bool isMUC(const JID& muc) const; private: void handleChatRequest(const String& contact); void handleJoinMUCRequest(const JID& muc, const boost::optional& nick); @@ -56,8 +57,6 @@ namespace Swift { ChatController* createNewChatController(const JID &contact); ChatController* getChatControllerOrCreate(const JID &contact); ChatController* getChatControllerIfExists(const JID &contact); - virtual bool isMUC(const JID& muc) const; - std::map mucControllers_; std::map chatControllers_; EventController* eventController_; -- cgit v0.10.2-6-g49f6