diff --git a/backends/libircclient-qt/main.cpp b/backends/libircclient-qt/main.cpp index 346fd4ad59e43f98e8f7b9866f1b836930e845a8..2815cb4a8f6649fe589164e00593bf717f732f9d 100644 --- a/backends/libircclient-qt/main.cpp +++ b/backends/libircclient-qt/main.cpp @@ -52,6 +52,8 @@ class IRCNetworkPlugin : public NetworkPlugin { return; m_sessions[user]->addAutoJoinChannel(QString::fromStdString(room)); m_sessions[user]->join(QString::fromStdString(room), QString::fromStdString(password)); + // update nickname, because we have nickname per session, no nickname per room. + handleRoomChanged(user, room, m_sessions[user]->nick().toStdString()); } std::map m_sessions; diff --git a/docs/Doxyfile b/docs/Doxyfile index 45a29656e901d8b86f114d708e3099d182a1a7fb..8b58ca9b691e24b0e4e8e9d3d67b2bd77857c623 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -1445,7 +1445,7 @@ DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. -DOT_PATH = "/usr/bin" +DOT_PATH = "" # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index 54523923c2e4d5cf46f85080978659ccc560ee8e..6736515354c75d073f931d41f1690e95dda2340c 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -50,6 +50,8 @@ class NetworkPlugin { void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message); + void handleRoomChanged(const std::string &user, const std::string &room, const std::string &nickname); + virtual void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) = 0; virtual void handleLogoutRequest(const std::string &user, const std::string &legacyName) = 0; virtual void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) = 0; diff --git a/include/transport/networkpluginserver.h b/include/transport/networkpluginserver.h index 2e3663e875334ef81b49ad2d620c6aee1fe0e580..81959971b732f3875e029e7003394da05abbe0ba 100644 --- a/include/transport/networkpluginserver.h +++ b/include/transport/networkpluginserver.h @@ -56,6 +56,7 @@ class NetworkPluginServer { void handleBuddyChangedPayload(const std::string &payload); void handleConvMessagePayload(const std::string &payload); void handleParticipantChangedPayload(const std::string &payload); + void handleRoomChangedPayload(const std::string &payload); void handleUserCreated(User *user); void handleRoomJoined(User *user, const std::string &room, const std::string &nickname, const std::string &password); diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index 9494e4f0760b168a3fcf7d254d309ed44b7a083b..c02142fa77896c1070584ea8e471ee51f9a15d9d 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -1,5 +1,5 @@ [service] -jid = icq.localhost +jid = localhost password = secret server = 127.0.0.1 port = 5222 diff --git a/src/conversation.cpp b/src/conversation.cpp index 4a41add22ffaec31b46c69710b07178962659cf1..a8bf2e05c5995890015b3bd3c7c5231e9a0b460b 100644 --- a/src/conversation.cpp +++ b/src/conversation.cpp @@ -53,7 +53,11 @@ void Conversation::handleMessage(boost::shared_ptr &message) { } } -void Conversation::handleParticipantChanged(const std::string &nickname, int flag) { +void Conversation::handleParticipantChanged(const std::string &nick, int flag) { + std::string nickname = nick; + if (nickname.find("@") == 0) { + nickname = nickname.substr(1); + } Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom(Swift::JID(m_legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname)); presence->setTo(m_conversationManager->getUser()->getJID().toString()); diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index 79b225714839d0447599c5f8eb1d00c821b02636..7a1c45165d58fa5a1197f07229111cead85ed8d2 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -119,6 +119,21 @@ void NetworkPlugin::handleParticipantChanged(const std::string &user, const std: send(message); } +void NetworkPlugin::handleRoomChanged(const std::string &user, const std::string &r, const std::string &nickname) { + pbnetwork::Room room; + room.set_username(user); + room.set_nickname(nickname); + room.set_room(r); + room.set_password(""); + + std::string message; + room.SerializeToString(&message); + + WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ROOM_NICKNAME_CHANGED); + + send(message); +} + void NetworkPlugin::handleConnected(bool error) { if (error) { std::cout << "Connecting error\n"; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index ad9ce5de85e1198110731787afade3371cc6b762..3c088ba2e6e8617adb371e82eee47250a79328ce 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -225,6 +225,24 @@ void NetworkPluginServer::handleParticipantChangedPayload(const std::string &dat std::cout << payload.nickname() << "\n"; } +void NetworkPluginServer::handleRoomChangedPayload(const std::string &data) { + pbnetwork::Room payload; + if (payload.ParseFromString(data) == false) { + return; + } + + User *user = m_userManager->getUser(payload.username()); + if (!user) + return; + + NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.room()); + if (!conv) { + return; + } + + conv->setNickname(payload.nickname()); +} + void NetworkPluginServer::handleConvMessagePayload(const std::string &data) { pbnetwork::ConversationMessage payload; // std::cout << "payload...\n"; @@ -292,6 +310,9 @@ void NetworkPluginServer::handleDataRead(boost::shared_ptr c, case pbnetwork::WrapperMessage_Type_TYPE_PARTICIPANT_CHANGED: handleParticipantChangedPayload(wrapper.payload()); break; + case pbnetwork::WrapperMessage_Type_TYPE_ROOM_NICKNAME_CHANGED: + handleRoomChangedPayload(wrapper.payload()); + break; default: return; } diff --git a/src/pbnetwork.proto b/src/pbnetwork.proto index 78803eb102ff2bf7f47cf94e6974058a8a94a9b7..99478b20f908cdb2cbf8759bb7dc02bb226f7423 100644 --- a/src/pbnetwork.proto +++ b/src/pbnetwork.proto @@ -68,6 +68,7 @@ message WrapperMessage { TYPE_PART_ROOM = 12; TYPE_PARTICIPANT_CHANGED = 13; TYPE_PARTICIPANT_LEFT = 14; + TYPE_ROOM_NICKNAME_CHANGED = 15; } required Type type = 1; optional bytes payload = 2;