diff --git a/backends/libircclient-qt/session.cpp b/backends/libircclient-qt/session.cpp index 6777cd5c..d4724dc2 100644 --- a/backends/libircclient-qt/session.cpp +++ b/backends/libircclient-qt/session.cpp @@ -76,9 +76,9 @@ void MyIrcBuffer::on_receiverChanged(const QString& receiver) qDebug() << "receiver changed:" << receiver; } -void MyIrcBuffer::on_joined(const QString& origin) -{ - qDebug() << "joined:" << receiver() << origin; +void MyIrcBuffer::on_joined(const QString& origin) { + qDebug() << "joined:" << receiver() << origin; + np->handleParticipantChanged(user, origin.toStdString(), receiver().toStdString(), 0); } void MyIrcBuffer::on_parted(const QString& origin, const QString& message) @@ -91,9 +91,9 @@ void MyIrcBuffer::on_quit(const QString& origin, const QString& message) qDebug() << "quit:" << receiver() << origin << message; } -void MyIrcBuffer::on_nickChanged(const QString& origin, const QString& nick) -{ - qDebug() << "nick changed:" << receiver() << origin << nick; +void MyIrcBuffer::on_nickChanged(const QString& origin, const QString& nick) { + qDebug() << "nick changed:" << receiver() << origin << nick; + np->handleParticipantChanged(user, origin.toStdString(), receiver().toStdString(), 0, nick.toStdString()); } void MyIrcBuffer::on_modeChanged(const QString& origin, const QString& mode, const QString& args) diff --git a/include/transport/conversation.h b/include/transport/conversation.h index 77da2aed..c6157ac8 100644 --- a/include/transport/conversation.h +++ b/include/transport/conversation.h @@ -42,7 +42,7 @@ class Conversation { const std::string &getLegacyName() { return m_legacyName; } void handleMessage(boost::shared_ptr &message, const std::string &nickname = ""); - void handleParticipantChanged(const std::string &nickname, int flag); + void handleParticipantChanged(const std::string &nickname, int flag, const std::string &newname = ""); void setNickname(const std::string &nickname) { m_nickname = nickname; } diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index caa8579f..f1427891 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -44,7 +44,7 @@ class NetworkPlugin { const std::string &groups, int status, const std::string &statusMessage = "", const std::string &iconHash = "" ); - void handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags); + void handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags, const std::string &newname = ""); void handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &message); diff --git a/src/conversation.cpp b/src/conversation.cpp index 12a92d41..f028e88f 100644 --- a/src/conversation.cpp +++ b/src/conversation.cpp @@ -78,7 +78,7 @@ void Conversation::handleMessage(boost::shared_ptr &message, con } } -void Conversation::handleParticipantChanged(const std::string &nick, int flag) { +void Conversation::handleParticipantChanged(const std::string &nick, int flag, const std::string &newname) { std::string nickname = nick; if (nickname.find("@") == 0) { nickname = nickname.substr(1); @@ -94,7 +94,16 @@ void Conversation::handleParticipantChanged(const std::string &nick, int flag) { c.code = 110; p->addStatusCode(c); } - p->addItem(Swift::MUCUserPayload::Item(Swift::MUCOccupant::Member, Swift::MUCOccupant::Participant)); + + Swift::MUCUserPayload::Item item(Swift::MUCOccupant::Member, Swift::MUCOccupant::Participant); + if (!newname.empty()) { + item.nick = newname; + Swift::MUCUserPayload::StatusCode c; + c.code = 303; + p->addStatusCode(c); + } + + p->addItem(item); presence->addPayload(boost::shared_ptr(p)); m_conversationManager->getComponent()->getStanzaChannel()->sendPresence(presence); diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index a0da1cd7..f6cfd15f 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -105,12 +105,13 @@ void NetworkPlugin::handleDisconnected(const std::string &user, const std::strin send(message); } -void NetworkPlugin::handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags) { +void NetworkPlugin::handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags, const std::string &newname) { pbnetwork::Participant d; d.set_username(user); d.set_nickname(nickname); d.set_room(room); d.set_flag(flags); + d.set_newname(newname); std::string message; d.SerializeToString(&message); diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 62327707..aada58ec 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -210,7 +210,7 @@ void NetworkPluginServer::handleParticipantChangedPayload(const std::string &dat return; } - conv->handleParticipantChanged(payload.nickname(), payload.flag()); + conv->handleParticipantChanged(payload.nickname(), payload.flag(), payload.newname()); // LocalBuddy *buddy = (LocalBuddy *) user->getRosterManager()->getBuddy(payload.buddyname()); // if (buddy) { @@ -222,7 +222,7 @@ void NetworkPluginServer::handleParticipantChangedPayload(const std::string &dat // handleBuddyPayload(buddy, payload); // user->getRosterManager()->setBuddy(buddy); // } - std::cout << payload.nickname() << "\n"; +// std::cout << payload.nickname() << "\n"; } void NetworkPluginServer::handleRoomChangedPayload(const std::string &data) { diff --git a/src/pbnetwork.proto b/src/pbnetwork.proto index e5c29701..4fc7bf19 100644 --- a/src/pbnetwork.proto +++ b/src/pbnetwork.proto @@ -52,6 +52,7 @@ message Participant { required string room = 2; required string nickname = 3; required int32 flag = 4; + optional string newname = 5; } message WrapperMessage {