comparison libpurple/protocols/jabber/presence.c @ 26862:5c4a4a0f5929

When we download a buddy's vCard to update an avatar, also try to update the nickname.
author Paul Aurich <paul@darkrain42.org>
date Sat, 02 May 2009 20:42:55 +0000
parents 867e231bffbc
children 0c1983abe991
comparison
equal deleted inserted replaced
26861:d387f1164b3a 26862:5c4a4a0f5929
338 jabber_vcard_parse_avatar(JabberStream *js, const char *from, 338 jabber_vcard_parse_avatar(JabberStream *js, const char *from,
339 JabberIqType type, const char *id, 339 JabberIqType type, const char *id,
340 xmlnode *packet, gpointer blah) 340 xmlnode *packet, gpointer blah)
341 { 341 {
342 JabberBuddy *jb = NULL; 342 JabberBuddy *jb = NULL;
343 xmlnode *vcard, *photo, *binval; 343 xmlnode *vcard, *photo, *binval, *fn, *nick;
344 char *text; 344 char *text;
345 345
346 if(!from) 346 if(!from)
347 return; 347 return;
348 348
350 350
351 js->pending_avatar_requests = g_slist_remove(js->pending_avatar_requests, jb); 351 js->pending_avatar_requests = g_slist_remove(js->pending_avatar_requests, jb);
352 352
353 if((vcard = xmlnode_get_child(packet, "vCard")) || 353 if((vcard = xmlnode_get_child(packet, "vCard")) ||
354 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) { 354 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
355 /* The logic here regarding the nickname and full name is copied from
356 * buddy.c:jabber_vcard_parse. */
357 gchar *nickname = NULL;
358 if ((fn = xmlnode_get_child(vcard, "FN")))
359 nickname = xmlnode_get_data(fn);
360
361 if ((nick = xmlnode_get_child(vcard, "NICKNAME"))) {
362 char *tmp = xmlnode_get_data(nick);
363 char *bare_jid = jabber_get_bare_jid(from);
364 if (strstr(bare_jid, tmp) == NULL) {
365 g_free(nickname);
366 nickname = tmp;
367 } else
368 g_free(tmp);
369
370 g_free(bare_jid);
371 }
372
373 if (nickname) {
374 serv_got_alias(js->gc, from, nickname);
375 g_free(nickname);
376 }
377
355 if((photo = xmlnode_get_child(vcard, "PHOTO")) && 378 if((photo = xmlnode_get_child(vcard, "PHOTO")) &&
356 (( (binval = xmlnode_get_child(photo, "BINVAL")) && 379 (( (binval = xmlnode_get_child(photo, "BINVAL")) &&
357 (text = xmlnode_get_data(binval))) || 380 (text = xmlnode_get_data(binval))) ||
358 (text = xmlnode_get_data(photo)))) { 381 (text = xmlnode_get_data(photo)))) {
359 guchar *data; 382 guchar *data;