Forward messages to proper resources
This commit is contained in:
parent
2b836edd79
commit
5b89dae8ca
5 changed files with 23 additions and 5 deletions
|
@ -74,6 +74,10 @@ class Conversation {
|
|||
m_nickname = nickname;
|
||||
}
|
||||
|
||||
void setJID(const Swift::JID &jid) {
|
||||
m_jid = jid;
|
||||
}
|
||||
|
||||
/// Sends message to Legacy network.
|
||||
|
||||
/// \param message Message.
|
||||
|
@ -112,6 +116,7 @@ class Conversation {
|
|||
std::string m_nickname;
|
||||
std::string m_room;
|
||||
bool m_muc;
|
||||
Swift::JID m_jid;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -73,6 +73,8 @@ class ConversationManager {
|
|||
/// \param conv Conversation.
|
||||
void removeConversation(Conversation *conv);
|
||||
|
||||
void resetResources();
|
||||
|
||||
private:
|
||||
void handleMessageReceived(Swift::Message::ref message);
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ Conversation::Conversation(ConversationManager *conversationManager, const std::
|
|||
m_legacyName = legacyName;
|
||||
m_conversationManager->addConversation(this);
|
||||
m_muc = isMUC;
|
||||
m_jid = m_conversationManager->getUser()->getJID().toBare();
|
||||
}
|
||||
|
||||
Conversation::~Conversation() {
|
||||
|
@ -54,9 +55,9 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
|
|||
else {
|
||||
message->setType(Swift::Message::Chat);
|
||||
}
|
||||
|
||||
if (message->getType() != Swift::Message::Groupchat) {
|
||||
|
||||
message->setTo(m_conversationManager->getUser()->getJID().toBare());
|
||||
message->setTo(m_jid);
|
||||
// normal message
|
||||
if (nickname.empty()) {
|
||||
Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
|
||||
|
@ -83,7 +84,7 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
|
|||
if (legacyName.find_last_of("@") != std::string::npos) {
|
||||
legacyName.replace(legacyName.find_last_of("@"), 1, "%"); // OK
|
||||
}
|
||||
message->setTo(m_conversationManager->getUser()->getJID().toString());
|
||||
message->setTo(m_jid);
|
||||
message->setFrom(Swift::JID(legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
|
||||
m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
|
||||
}
|
||||
|
@ -99,7 +100,7 @@ void Conversation::handleParticipantChanged(const std::string &nick, int flag, i
|
|||
}
|
||||
}
|
||||
presence->setFrom(Swift::JID(legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
|
||||
presence->setTo(m_conversationManager->getUser()->getJID().toString());
|
||||
presence->setTo(m_jid);
|
||||
presence->setType(Swift::Presence::Available);
|
||||
|
||||
if (!statusMessage.empty())
|
||||
|
|
|
@ -62,6 +62,12 @@ void ConversationManager::removeConversation(Conversation *conv) {
|
|||
m_convs.erase(conv->getLegacyName());
|
||||
}
|
||||
|
||||
void ConversationManager::resetResources() {
|
||||
for (std::map<std::string, Conversation *>::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) {
|
||||
(*it).second->setJID(m_user->getJID().toBare());
|
||||
}
|
||||
}
|
||||
|
||||
void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
|
||||
// std::string name = message->getTo().getUnescapedNode();
|
||||
// if (name.find_last_of("%") != std::string::npos) { // OK when commented
|
||||
|
@ -87,7 +93,9 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
|
|||
}
|
||||
}
|
||||
|
||||
// update resource and send the message
|
||||
m_convs[name]->setJID(message->getFrom());
|
||||
m_convs[name]->sendMessage(message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -174,6 +174,8 @@ void User::setConnected(bool connected) {
|
|||
void User::handlePresence(Swift::Presence::ref presence) {
|
||||
int currentResourcesCount = m_presenceOracle->getAllPresence(m_jid).size();
|
||||
|
||||
m_conversationManager->resetResources();
|
||||
|
||||
if (!m_connected) {
|
||||
// we are not connected to legacy network, so we should do it when disco#info arrive :)
|
||||
if (m_readyForConnect == false) {
|
||||
|
|
Loading…
Add table
Reference in a new issue