From ca76287f4d9cd28ec9882c38c68e2c0302bb7c37 2011-10-03 23:09:14 From: HanzZ Date: 2011-10-03 23:09:14 Subject: [PATCH] Set nickname according to received vcard --- diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 616d2325a1fc35d803debe1c3d0ea28c83ed08b2..abcc8420b1d9171a6dcae7f414823d8f5c10daba 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -708,9 +708,11 @@ class SpectrumNetworkPlugin : public NetworkPlugin { } } - void handleVCardUpdatedRequest(const std::string &user, const std::string &image) { + void handleVCardUpdatedRequest(const std::string &user, const std::string &image, const std::string &nickname) { PurpleAccount *account = m_sessions[user]; if (account) { + purple_account_set_alias(account, nickname.c_str()); + purple_account_set_public_alias(account, nickname.c_str(), NULL, NULL); gssize size = image.size(); // this will be freed by libpurple guchar *photo = (guchar *) g_malloc(size * sizeof(guchar)); diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index 69e7c34390f00fd3cec0c5609ed513e22534c3e6..d844821e40cd1c39f2bc633820636e95b715b988 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -201,7 +201,7 @@ class NetworkPlugin { /// You should update the VCard in legacy network too. /// \param user XMPP JID of user for which this event occurs. /// \param photo Raw photo data. - virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/) {} + virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/, const std::string &nickname) {} virtual void handleJoinRoomRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*nickname*/, const std::string &/*pasword*/) {} diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index be138b51a7cafd0d8b96cb1d7f378b1c2de54b76..46f2d2fbf3b3f3be8de85749e6a638f231bfd7fb 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -449,7 +449,7 @@ void NetworkPlugin::handleVCardPayload(const std::string &data) { } if (payload.has_photo()) { - handleVCardUpdatedRequest(payload.username(), payload.photo()); + handleVCardUpdatedRequest(payload.username(), payload.photo(), payload.nickname()); } else if (!payload.buddyname().empty()) { handleVCardRequest(payload.username(), payload.buddyname(), payload.id()); diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 59247d20a54212b5dd4f637d916140e2df80dd88..94acf3c27c346db6c5aadec38a74640c2c467607 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -1218,6 +1218,7 @@ void NetworkPluginServer::handleVCardUpdated(User *user, boost::shared_ptrgetPhoto()[0], v->getPhoto().size()); + vcard.set_nickname(v->getNickname()); std::string message; vcard.SerializeToString(&message);