diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-02-10 11:14:50 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-02-10 11:14:50 (GMT) |
commit | 4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f (patch) | |
tree | 63ce3df61e88f27ed183d373e3496d8f56af7fb1 /Swift/Controllers/ChatsManager.cpp | |
parent | 936f7ff9b80aca95040301a4b3cfcd2a248e3334 (diff) | |
download | swift-contrib-4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f.zip swift-contrib-4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f.tar.bz2 |
Move the Chat stuff in Controllers into Chat folder.
It was starting to get a bit unwieldly in Controllers/
Diffstat (limited to 'Swift/Controllers/ChatsManager.cpp')
-rw-r--r-- | Swift/Controllers/ChatsManager.cpp | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/Swift/Controllers/ChatsManager.cpp b/Swift/Controllers/ChatsManager.cpp deleted file mode 100644 index a805802..0000000 --- a/Swift/Controllers/ChatsManager.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include "Swift/Controllers/ChatsManager.h" - -#include <boost/bind.hpp> - -#include "Swiften/Client/Client.h" - -#include "Swift/Controllers/ChatController.h" -#include "Swift/Controllers/EventController.h" -#include "Swift/Controllers/MUCController.h" -#include "Swiften/Presence/PresenceSender.h" - -namespace Swift { - -typedef std::pair<JID, ChatController*> JIDChatControllerPair; -typedef std::pair<JID, MUCController*> JIDMUCControllerPair; - -ChatsManager::ChatsManager(JID jid, StanzaChannel* stanzaChannel, IQRouter* iqRouter, EventController* eventController, ChatWindowFactory* chatWindowFactory, TreeWidgetFactory* treeWidgetFactory, NickResolver* nickResolver, PresenceOracle* presenceOracle, boost::shared_ptr<DiscoInfo> serverDiscoInfo, PresenceSender* presenceSender) : jid_(jid) { - eventController_ = eventController; - stanzaChannel_ = stanzaChannel; - iqRouter_ = iqRouter; - chatWindowFactory_ = chatWindowFactory; - treeWidgetFactory_ = treeWidgetFactory; - nickResolver_ = nickResolver; - presenceOracle_ = presenceOracle; - avatarManager_ = NULL; - serverDiscoInfo_ = serverDiscoInfo; - presenceSender_ = presenceSender; - presenceOracle_->onPresenceChange.connect(boost::bind(&ChatsManager::handlePresenceChange, this, _1, _2)); -} - -ChatsManager::~ChatsManager() { - foreach (JIDChatControllerPair controllerPair, chatControllers_) { - delete controllerPair.second; - } - foreach (JIDMUCControllerPair controllerPair, mucControllers_) { - delete controllerPair.second; - } - -} - -/** - * If a resource goes offline, release bound chatdialog to that resource. - */ -void ChatsManager::handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> /*lastPresence*/) { - if (newPresence->getType() != Presence::Unavailable) return; - JID fullJID(newPresence->getFrom()); - std::map<JID, ChatController*>::iterator it = chatControllers_.find(fullJID); - if (it == chatControllers_.end()) return; - JID bareJID(fullJID.toBare()); - //It doesn't make sense to have two unbound dialogs. - if (chatControllers_.find(bareJID) != chatControllers_.end()) return; - rebindControllerJID(fullJID, bareJID); -} - -void ChatsManager::setAvatarManager(AvatarManager* avatarManager) { - avatarManager_ = avatarManager; -} - -// void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> rawEvent) { -// { -// boost::shared_ptr<RequestChatUIEvent> event = boost::dynamic_pointer_cast<RequestChatUIEvent>(rawEvent); -// if (event != NULL) { -// handleChatRequest(event->getContact()); -// return; -// } -// } -// { -// boost::shared_ptr<JoinMUCUIEvent> event = boost::dynamic_pointer_cast<JoinMUCUIEvent>(rawEvent); -// if (event != NULL) { -// handleJoinMUCRequest(event->getRoom(), event->getNick()); -// } -// } -// } - - -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) { - 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(); -} - - - -} |