| 275 purple_debug(PURPLE_DEBUG_ERROR, "jabber", |
275 purple_debug(PURPLE_DEBUG_ERROR, "jabber", |
| 276 "do_buddy_avatar_update_fromurl got error \"%s\"", |
276 "do_buddy_avatar_update_fromurl got error \"%s\"", |
| 277 error_message); |
277 error_message); |
| 278 goto out; |
278 goto out; |
| 279 } |
279 } |
| 280 |
280 |
| 281 purple_buddy_icons_set_for_user(purple_connection_get_account(info->js->gc), info->from, (void*)url_text, len, info->id); |
281 purple_buddy_icons_set_for_user(purple_connection_get_account(info->js->gc), info->from, (void*)url_text, len, info->id); |
| 282 |
282 |
| 283 out: |
283 out: |
| 284 g_free(info->from); |
284 g_free(info->from); |
| 285 g_free(info->id); |
285 g_free(info->id); |
| 312 return; |
312 return; |
| 313 |
313 |
| 314 checksum = xmlnode_get_attrib(item,"id"); |
314 checksum = xmlnode_get_attrib(item,"id"); |
| 315 if(!checksum) |
315 if(!checksum) |
| 316 return; |
316 return; |
| 317 |
317 |
| 318 b64data = xmlnode_get_data(data); |
318 b64data = xmlnode_get_data(data); |
| 319 if(!b64data) |
319 if(!b64data) |
| 320 return; |
320 return; |
| 321 |
321 |
| 322 img = purple_base64_decode(b64data, &size); |
322 img = purple_base64_decode(b64data, &size); |
| 323 if(!img) { |
323 if(!img) { |
| 324 g_free(b64data); |
324 g_free(b64data); |
| 325 return; |
325 return; |
| 326 } |
326 } |
| 327 |
327 |
| 328 purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, img, size, checksum); |
328 purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, img, size, checksum); |
| 329 g_free(b64data); |
329 g_free(b64data); |
| 330 } |
330 } |
| 331 |
331 |
| 332 static void |
332 static void |
| 335 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from); |
335 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from); |
| 336 const char *checksum, *ns; |
336 const char *checksum, *ns; |
| 337 xmlnode *item, *metadata; |
337 xmlnode *item, *metadata; |
| 338 if(!buddy) |
338 if(!buddy) |
| 339 return; |
339 return; |
| 340 |
340 |
| 341 checksum = purple_buddy_icons_get_checksum_for_user(buddy); |
341 checksum = purple_buddy_icons_get_checksum_for_user(buddy); |
| 342 item = xmlnode_get_child(items,"item"); |
342 item = xmlnode_get_child(items,"item"); |
| 343 metadata = xmlnode_get_child(item, "metadata"); |
343 metadata = xmlnode_get_child(item, "metadata"); |
| 344 if(!metadata) |
344 if(!metadata) |
| 345 return; |
345 return; |
| 362 if(info->type == XMLNODE_TYPE_TAG) |
362 if(info->type == XMLNODE_TYPE_TAG) |
| 363 has_children = TRUE; |
363 has_children = TRUE; |
| 364 if(info->type == XMLNODE_TYPE_TAG && !strcmp(info->name,"info")) { |
364 if(info->type == XMLNODE_TYPE_TAG && !strcmp(info->name,"info")) { |
| 365 const char *type = xmlnode_get_attrib(info,"type"); |
365 const char *type = xmlnode_get_attrib(info,"type"); |
| 366 const char *id = xmlnode_get_attrib(info,"id"); |
366 const char *id = xmlnode_get_attrib(info,"id"); |
| 367 |
367 |
| 368 if(checksum && id && !strcmp(id, checksum)) { |
368 if(checksum && id && !strcmp(id, checksum)) { |
| 369 /* we already have that avatar, so we don't have to do anything */ |
369 /* we already have that avatar, so we don't have to do anything */ |
| 370 goodinfo = NULL; |
370 goodinfo = NULL; |
| 371 break; |
371 break; |
| 372 } |
372 } |