Mercurial > pidgin
changeset 22450:b53bacc6eb6e
If we receive a Full Name and no nickname, use the Full Name as the serverside alias for an XMPP contact. If we receive just a nickname or both a full name and a nickname, prefer the nickname.
author | Evan Schoenberg <evan.s@dreskin.net> |
---|---|
date | Sun, 09 Mar 2008 18:47:09 +0000 |
parents | 8802eddbfedc |
children | ec8eddc93a7f 8ec6ac1b9e26 |
files | libpurple/protocols/jabber/buddy.c |
diffstat | 1 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/buddy.c Sun Mar 09 16:52:07 2008 +0000 +++ b/libpurple/protocols/jabber/buddy.c Sun Mar 09 18:47:09 2008 +0000 @@ -1209,6 +1209,7 @@ GString *info_text; char *bare_jid; char *text; + char *serverside_alias = NULL; xmlnode *vcard; PurpleBuddy *b; JabberBuddyInfo *jbi = data; @@ -1247,6 +1248,10 @@ text = xmlnode_get_data(child); if(text && !strcmp(child->name, "FN")) { + /* If we havne't found a name yet, use this one as the serverside name */ + if (!serverside_alias) + serverside_alias = g_strdup(text); + jabber_string_escape_and_append(info_text, _("Full Name"), text, FALSE); } else if(!strcmp(child->name, "N")) { @@ -1270,11 +1275,11 @@ } g_free(text2); } - } else if(text && !strcmp(child->name, "NICKNAME")) { - serv_got_alias(js->gc, from, text); - if(b) { - purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", text); - } + } else if(text && !strcmp(child->name, "NICKNAME")) { + /* Prefer the Nickcname to the Full Name as the serverside alias */ + g_free(serverside_alias); + serverside_alias = g_strdup(text); + jabber_string_escape_and_append(info_text, _("Nickname"), text, FALSE); } else if(text && !strcmp(child->name, "BDAY")) { @@ -1434,6 +1439,16 @@ } } + if (serverside_alias) { + /* If we found a serverside alias, set it and tell the core */ + serv_got_alias(js->gc, from, serverside_alias); + if (b) { + purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", serverside_alias); + } + + g_free(serverside_alias); + } + jbi->vcard_text = purple_strdup_withhtml(info_text->str); g_string_free(info_text, TRUE); g_free(bare_jid);