diff options
author | Kevin Smith <git@kismith.co.uk> | 2009-12-27 09:48:13 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-01-10 21:02:18 (GMT) |
commit | 9c89de33df2cd52f19f067dff438547d27a81fe7 (patch) | |
tree | b86652ceeb6a7b38ba58a4949942deacc591096d /Swift/Controllers | |
parent | 3ca52c5c19d3e750f6ed8b5f7c06b78183eaabfb (diff) | |
download | swift-9c89de33df2cd52f19f067dff438547d27a81fe7.zip swift-9c89de33df2cd52f19f067dff438547d27a81fe7.tar.bz2 |
Don't join MUCs a second time.
Resolves: #273
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/ChatsManager.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Swift/Controllers/ChatsManager.cpp b/Swift/Controllers/ChatsManager.cpp index e64967c..a805802 100644 --- a/Swift/Controllers/ChatsManager.cpp +++ b/Swift/Controllers/ChatsManager.cpp @@ -75,84 +75,90 @@ void ChatsManager::setAvatarManager(AvatarManager* avatarManager) { void ChatsManager::setServerDiscoInfo(boost::shared_ptr<DiscoInfo> info) { foreach (JIDChatControllerPair pair, chatControllers_) { pair.second->setAvailableServerFeatures(info); } foreach (JIDMUCControllerPair pair, mucControllers_) { pair.second->setAvailableServerFeatures(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_) { controllerPair.second->setEnabled(enabled); } } void ChatsManager::handleChatRequest(const String &contact) { ChatController* controller = getChatController(JID(contact)); controller->showChatWindow(); controller->activateChatWindow(); } ChatController* ChatsManager::getChatController(const JID &contact) { if (chatControllers_.find(contact) == chatControllers_.end()) { //Need to look for an unboud window to bind first JID bare(contact.toBare()); if (chatControllers_.find(bare) != chatControllers_.end()) { rebindControllerJID(bare, contact); } else { chatControllers_[contact] = new ChatController(jid_, stanzaChannel_, iqRouter_, chatWindowFactory_, contact, nickResolver_, presenceOracle_, avatarManager_); chatControllers_[contact]->setAvailableServerFeatures(serverDiscoInfo_); } } return chatControllers_[contact]; } void ChatsManager::rebindControllerJID(const JID& from, const JID& to) { chatControllers_[to] = chatControllers_[from]; chatControllers_.erase(from); chatControllers_[to]->setToJID(to); } void ChatsManager::handleJoinMUCRequest(const JID &muc, const String &nick) { - mucControllers_[muc] = new MUCController(jid_, muc, nick, stanzaChannel_, presenceSender_, iqRouter_, chatWindowFactory_, treeWidgetFactory_, presenceOracle_, avatarManager_); - mucControllers_[muc]->setAvailableServerFeatures(serverDiscoInfo_); + std::map<JID, MUCController*>::iterator it = mucControllers_.find(muc); + if (it != mucControllers_.end()) { + //FIXME: What's correct behaviour here? + } else { + mucControllers_[muc] = new MUCController(jid_, muc, nick, stanzaChannel_, presenceSender_, iqRouter_, chatWindowFactory_, treeWidgetFactory_, presenceOracle_, avatarManager_); + mucControllers_[muc]->setAvailableServerFeatures(serverDiscoInfo_); + } + mucControllers_[muc]->activateChatWindow(); } void ChatsManager::handleIncomingMessage(boost::shared_ptr<Message> message) { JID jid = message->getFrom(); boost::shared_ptr<MessageEvent> event(new MessageEvent(message)); if (!event->isReadable()) { return; } // Try to deliver it to a MUC if (message->getType() == Message::Groupchat || message->getType() == Message::Error) { std::map<JID, MUCController*>::iterator i = mucControllers_.find(jid.toBare()); if (i != mucControllers_.end()) { i->second->handleIncomingMessage(event); return; } else if (message->getType() == Message::Groupchat) { //FIXME: Error handling - groupchat messages from an unknown muc. return; } } //if not a mucroom eventController_->handleIncomingEvent(event); getChatController(jid)->handleIncomingMessage(event); } bool ChatsManager::isMUC(const JID& jid) const { return mucControllers_.find(jid.toBare()) != mucControllers_.end(); } } |