From ca76287f4d9cd28ec9882c38c68e2c0302bb7c37 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 3 Oct 2011 23:09:14 +0200 Subject: [PATCH] Set nickname according to received vcard --- backends/libpurple/main.cpp | 4 +++- include/transport/networkplugin.h | 2 +- src/networkplugin.cpp | 2 +- src/networkpluginserver.cpp | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 616d2325..abcc8420 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 69e7c343..d844821e 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 be138b51..46f2d2fb 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 59247d20..94acf3c2 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);