Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/buddy.c @ 18684:5c1ed6296b56
propagate from branch 'im.pidgin.pidgin' (head b195e262642015df66e36d33e9dd16ecae5df9d5)
to branch 'im.pidgin.soc.2007.xmpp' (head 06f9dbd73b69e26dc9f56873a9ce106146bb1b18)
author | Andreas Monitzer <pidgin@monitzer.com> |
---|---|
date | Wed, 11 Jul 2007 22:27:44 +0000 |
parents | feac55968392 6050348614ab |
children | b5546f8f8c71 |
comparison
equal
deleted
inserted
replaced
17634:8d2ea5072f6f | 18684:5c1ed6296b56 |
---|---|
395 JabberIq *iq; | 395 JabberIq *iq; |
396 JabberStream *js = gc->proto_data; | 396 JabberStream *js = gc->proto_data; |
397 xmlnode *vc_node; | 397 xmlnode *vc_node; |
398 struct tag_attr *tag_attr; | 398 struct tag_attr *tag_attr; |
399 | 399 |
400 /* if we have't grabbed the remote vcard yet, we can't | |
401 * assume that what we have here is correct */ | |
402 if(!js->vcard_fetched) | |
403 return; | |
404 | |
400 g_free(js->avatar_hash); | 405 g_free(js->avatar_hash); |
401 js->avatar_hash = NULL; | 406 js->avatar_hash = NULL; |
402 | 407 |
403 /* | 408 /* |
404 * Send only if there's actually any *information* to send | 409 * Send only if there's actually any *information* to send |
424 unsigned char hashval[20]; | 429 unsigned char hashval[20]; |
425 char *p, hash[41]; | 430 char *p, hash[41]; |
426 | 431 |
427 avatar_data = purple_imgstore_get_data(img); | 432 avatar_data = purple_imgstore_get_data(img); |
428 avatar_len = purple_imgstore_get_size(img); | 433 avatar_len = purple_imgstore_get_size(img); |
434 /* have to get rid of the old PHOTO if it exists */ | |
435 if((photo = xmlnode_get_child(vc_node, "PHOTO"))) { | |
436 xmlnode_free(photo); | |
437 } | |
429 photo = xmlnode_new_child(vc_node, "PHOTO"); | 438 photo = xmlnode_new_child(vc_node, "PHOTO"); |
430 type = xmlnode_new_child(photo, "TYPE"); | 439 type = xmlnode_new_child(photo, "TYPE"); |
431 xmlnode_insert_data(type, "image/png", -1); | 440 xmlnode_insert_data(type, "image/png", -1); |
432 binval = xmlnode_new_child(photo, "BINVAL"); | 441 binval = xmlnode_new_child(photo, "BINVAL"); |
433 enc = purple_base64_encode(avatar_data, avatar_len); | 442 enc = purple_base64_encode(avatar_data, avatar_len); |
872 } | 881 } |
873 l = l->next; | 882 l = l->next; |
874 } | 883 } |
875 } | 884 } |
876 | 885 |
886 static void jabber_vcard_save_mine(JabberStream *js, xmlnode *packet, gpointer data) | |
887 { | |
888 xmlnode *vcard; | |
889 char *txt; | |
890 PurpleStoredImage *img; | |
891 | |
892 if((vcard = xmlnode_get_child(packet, "vCard")) || | |
893 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) | |
894 { | |
895 txt = xmlnode_to_str(vcard, NULL); | |
896 purple_account_set_user_info(purple_connection_get_account(js->gc), txt); | |
897 | |
898 g_free(txt); | |
899 } else { | |
900 /* if we have no vCard, then lets not overwrite what we might have locally */ | |
901 } | |
902 | |
903 js->vcard_fetched = TRUE; | |
904 | |
905 if(NULL != (img = purple_buddy_icons_find_account_icon(js->gc->account))) { | |
906 jabber_set_buddy_icon(js->gc, img); | |
907 purple_imgstore_unref(img); | |
908 } | |
909 } | |
910 | |
911 void jabber_vcard_fetch_mine(JabberStream *js) | |
912 { | |
913 JabberIq *iq = jabber_iq_new_query(js, JABBER_IQ_GET, "vcard-temp"); | |
914 | |
915 jabber_iq_set_callback(iq, jabber_vcard_save_mine, NULL); | |
916 | |
917 jabber_iq_send(iq); | |
918 } | |
919 | |
877 static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) | 920 static void jabber_vcard_parse(JabberStream *js, xmlnode *packet, gpointer data) |
878 { | 921 { |
879 const char *id, *from; | 922 const char *id, *from; |
880 GString *info_text; | 923 GString *info_text; |
881 char *bare_jid; | 924 char *bare_jid; |