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;