static void tgp_info_load_photo_done (struct tgl_state *TLS, void *extra, int success, const char *filename) { tgl_peer_t *P = extra; g_return_if_fail(success); gchar *img = NULL; size_t len; GError *err = NULL; g_file_get_contents (filename, &img, &len, &err); if (err) { failure ("getting file contents for %s failed: %s", filename, err->message); return; } if (tgl_get_peer_type (P->id) == TGL_PEER_USER || tgl_get_peer_type (P->id) == TGL_PEER_ENCR_CHAT) { PurpleBuddy *B = tgp_blist_buddy_find (TLS, P->id); g_return_if_fail(B); purple_buddy_icons_set_for_user (tls_get_pa (TLS), purple_buddy_get_name (B), (guchar*) img, len, NULL); tgp_info_update_photo_id (&B->node, P->user.photo_big.local_id); } else { PurpleChat *C = tgp_blist_chat_find (TLS, P->id); g_return_if_fail(C); purple_buddy_icons_node_set_custom_icon (&C->node, (guchar*) img, len); tgp_info_update_photo_id (&C->node, P->user.photo_big.local_id); } }
PurpleStoredImage * purple_buddy_icons_node_find_custom_icon(PurpleBlistNode *node) { char *path; size_t len; guchar *data; PurpleStoredImage *img; const char *custom_icon_file, *dirname; g_return_val_if_fail(node != NULL, NULL); if ((img = g_hash_table_lookup(pointer_icon_cache, node))) { return purple_imgstore_ref(img); } custom_icon_file = purple_blist_node_get_string(node, "custom_buddy_icon"); if (custom_icon_file == NULL) return NULL; dirname = purple_buddy_icons_get_cache_dir(); path = g_build_filename(dirname, custom_icon_file, NULL); if (read_icon_file(path, &data, &len)) { g_free(path); img = purple_buddy_icons_node_set_custom_icon(node, data, len); return purple_imgstore_ref(img); } g_free(path); return NULL; }
PurpleStoredImage * purple_buddy_icons_node_set_custom_icon_from_file(PurpleBlistNode *node, const gchar *filename) { size_t len = 0; guchar *data = NULL; g_return_val_if_fail(node != NULL, NULL); if (!PURPLE_BLIST_NODE_IS_CONTACT(node) && !PURPLE_BLIST_NODE_IS_CHAT(node) && !PURPLE_BLIST_NODE_IS_GROUP(node)) { return NULL; } if (filename != NULL) { if (!read_icon_file(filename, &data, &len)) { return NULL; } } return purple_buddy_icons_node_set_custom_icon(node, data, len); }
PurpleStoredImage * purple_buddy_icons_set_custom_icon(PurpleContact *contact, guchar *icon_data, size_t icon_len) { return purple_buddy_icons_node_set_custom_icon((PurpleBlistNode*)contact, icon_data, icon_len); }