From 196afcf3a36a72af2320cd7e089a1739abce544b Mon Sep 17 00:00:00 2001 From: HanzZ Date: Thu, 24 Nov 2011 19:37:38 +0100 Subject: [PATCH] Set proper resource in MUCs --- include/transport/networkpluginserver.h | 2 +- include/transport/user.h | 2 +- src/conversationmanager.cpp | 3 +++ src/networkpluginserver.cpp | 5 +++-- src/user.cpp | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/transport/networkpluginserver.h b/include/transport/networkpluginserver.h index a678c247..c04ae834 100644 --- a/include/transport/networkpluginserver.h +++ b/include/transport/networkpluginserver.h @@ -96,7 +96,7 @@ class NetworkPluginServer { void handleFTDataPayload(Backend *b ,const std::string &payload); void handleUserCreated(User *user); - void handleRoomJoined(User *user, const std::string &room, const std::string &nickname, const std::string &password); + void handleRoomJoined(User *user, const Swift::JID &who, const std::string &room, const std::string &nickname, const std::string &password); void handleRoomLeft(User *user, const std::string &room); void handleUserReadyToConnect(User *user); void handleUserPresenceChanged(User *user, Swift::Presence::ref presence); diff --git a/include/transport/user.h b/include/transport/user.h index 9d7f1118..952bb3b4 100644 --- a/include/transport/user.h +++ b/include/transport/user.h @@ -111,7 +111,7 @@ class User : public Swift::EntityCapsProvider { boost::signal onReadyToConnect; boost::signal onPresenceChanged; - boost::signal onRoomJoined; + boost::signal onRoomJoined; boost::signal onRoomLeft; boost::signal onDisconnected; diff --git a/src/conversationmanager.cpp b/src/conversationmanager.cpp index ee24ec1c..bc08d7a7 100644 --- a/src/conversationmanager.cpp +++ b/src/conversationmanager.cpp @@ -64,6 +64,9 @@ void ConversationManager::removeConversation(Conversation *conv) { void ConversationManager::resetResources() { for (std::map::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) { + if ((*it).second->isMUC()) { + continue; + } (*it).second->setJID(m_user->getJID().toBare()); } } diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index e1cb4606..b284390c 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -935,7 +935,7 @@ void NetworkPluginServer::handleUserCreated(User *user) { // UserInfo userInfo = user->getUserInfo(); user->onReadyToConnect.connect(boost::bind(&NetworkPluginServer::handleUserReadyToConnect, this, user)); user->onPresenceChanged.connect(boost::bind(&NetworkPluginServer::handleUserPresenceChanged, this, user, _1)); - user->onRoomJoined.connect(boost::bind(&NetworkPluginServer::handleRoomJoined, this, user, _1, _2, _3)); + user->onRoomJoined.connect(boost::bind(&NetworkPluginServer::handleRoomJoined, this, user, _1, _2, _3, _4)); user->onRoomLeft.connect(boost::bind(&NetworkPluginServer::handleRoomLeft, this, user, _1)); } @@ -991,7 +991,7 @@ void NetworkPluginServer::handleUserPresenceChanged(User *user, Swift::Presence: send(c->connection, message); } -void NetworkPluginServer::handleRoomJoined(User *user, const std::string &r, const std::string &nickname, const std::string &password) { +void NetworkPluginServer::handleRoomJoined(User *user, const Swift::JID &who, const std::string &r, const std::string &nickname, const std::string &password) { UserInfo userInfo = user->getUserInfo(); pbnetwork::Room room; @@ -1014,6 +1014,7 @@ void NetworkPluginServer::handleRoomJoined(User *user, const std::string &r, con NetworkConversation *conv = new NetworkConversation(user->getConversationManager(), r, true); conv->onMessageToSend.connect(boost::bind(&NetworkPluginServer::handleMessageReceived, this, _1, _2)); conv->setNickname(nickname); + conv->setJID(who); } void NetworkPluginServer::handleRoomLeft(User *user, const std::string &r) { diff --git a/src/user.cpp b/src/user.cpp index 47d63065..9b1d7fd6 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -226,7 +226,7 @@ void User::handlePresence(Swift::Presence::ref presence) { if (presence->getPayload() != NULL) { password = presence->getPayload()->getPassword() ? *presence->getPayload()->getPassword() : ""; } - onRoomJoined(room, presence->getTo().getResource(), password); + onRoomJoined(presence->getFrom(), room, presence->getTo().getResource(), password); } return; }