Exemplo n.º 1
0
static void netsoul_got_photo (PurpleUtilFetchUrlData *url, void *user_data,
			       const char *photo, size_t len, const char *error_msg)
{
  PurpleBuddy *gb = user_data;
  PurpleAccount *account = purple_buddy_get_account (gb);

  // Check if connection is still existing
  PurpleConnection *gc = purple_account_get_connection (account);
  if (gc == NULL)
    return;

  purple_debug_info("netsoul", "netsoul_got_photo (size: %d) for %s\n",
		    len,
		    gb->name);

  /* Try to put the photo in , if there's one and is readable */
  if (user_data && photo && len != 0)
  {
    if (strstr(photo, "400 Bad Request")
	|| strstr(photo, "403 Forbidden")
	|| strstr(photo, "404 Not Found"))
      purple_debug_info("netsoul", "netsoul_got_photo: error: %s\n", photo);
    else
    {
      PurpleStoredImage *img = purple_imgstore_add(g_memdup(photo, len), len, NULL);
      PurpleBuddyIcon *icon = purple_buddy_icon_new(account, gb->name,
						    purple_imgstore_get_data(img),
						    purple_imgstore_get_size(img),
						    NULL);
      purple_buddy_set_icon(gb, icon);
    }
  }
}
Exemplo n.º 2
0
void
purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username,
                                void *icon_data, size_t icon_len,
                                const char *checksum)
{
	GHashTable *icon_cache;
	PurpleBuddyIcon *icon = NULL;

	g_return_if_fail(account  != NULL);
	g_return_if_fail(username != NULL);

	icon_cache = g_hash_table_lookup(account_cache, account);

	if (icon_cache != NULL)
		icon = g_hash_table_lookup(icon_cache, username);

	if (icon != NULL)
		purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum);
	else if (icon_data && icon_len > 0)
	{
		PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len, checksum);

		/* purple_buddy_icon_new() calls
		 * purple_buddy_icon_set_data(), which calls
		 * purple_buddy_icon_update(), which has the buddy list
		 * and conversations take references as appropriate.
		 * This function doesn't return icon, so we can't
		 * leave a reference dangling. */
		purple_buddy_icon_unref(icon);
	}
	else
	{
		/* If the buddy list or a conversation was holding a
		 * reference, we'd have found the icon in the cache.
		 * Since we know we're deleting the icon, we only
		 * need a subset of purple_buddy_icon_update(). */

		GSList *buddies = purple_find_buddies(account, username);
		while (buddies != NULL)
		{
			PurpleBuddy *buddy = (PurpleBuddy *)buddies->data;

			unref_filename(purple_blist_node_get_string((PurpleBlistNode *)buddy, "buddy_icon"));
			purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon");
			purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum");

			buddies = g_slist_delete_link(buddies, buddies);
		}
	}
}
Exemplo n.º 3
0
void gaym_fetch_thumbnail_cb(PurpleUtilFetchUrlData *url_data, void *user_data, const gchar *pic_data,
                             gsize len, const gchar* error_message)
{
    if (!user_data)
        return;
    struct gaym_fetch_thumbnail_data *d = user_data;
    if (!pic_data) {
        return;
    }
     
    if (!d->gc)
	return;
    if (len && !g_strrstr_len(pic_data, len, "Server Error")) {
	purple_debug_misc("gaym","Setting buddy icon for %s\n",d->who);
	//if(len<1024) 
    //    len=1024;
	void* new_pic_data=NULL;
	purple_debug_misc("gaym","Short icon file, padding to 1024\n");
	new_pic_data=g_malloc0(len);
	memcpy(new_pic_data, pic_data, len);
	purple_buddy_icon_new(d->gc->account, d->who, (void*)new_pic_data, len, NULL);
	//g_free(new_pic_data);
	//PurpleBuddyIcon *icon=purple_buddy_icons_find(d->gc->account,d->who, NULL);
	//guint len;
	//const guchar* data=purple_buddy_icon_get_data(icon, &len);
    }
    if (PURPLE_CONNECTION_IS_VALID(d->gc) && len) {
        purple_signal_emit(purple_accounts_get_handle(), "info-updated",
                         d->gc->account, d->who);
      /*  if (purple_find_conversation_with_account(d->who, d->gc->account)) {
	    
	    purple_debug_misc("fetch_thumbnail_cb","setting buddy icon\n");
            purple_buddy_icons_set_for_user(purple_connection_get_account
             (d->gc), d->who,
             (void *) pic_data, len);
        }*/

    } else {
        purple_debug_error("gaym", "Fetching buddy icon failed.\n");
    }

    g_free(d->who);
    g_free(d);
    purple_debug_misc("gaym","Finished buddy icon set callback\n");
}
Exemplo n.º 4
0
static void
pb_set_base64_icon_for_buddy(const gchar *base64_icon, PurpleBuddy *buddy)
{
	PurpleBuddyIcon *icon;
	guchar *icon_data;
	gsize icon_len;
	gchar *checksum;
	const gchar *old_checksum;
	
	checksum = g_strdup_printf("%ud", g_str_hash(base64_icon));
	old_checksum = purple_buddy_icons_get_checksum_for_user(buddy);
	if (old_checksum && purple_strequal(old_checksum, checksum)) {
		g_free(checksum);
		return;
	}
	
	icon_data = purple_base64_decode(base64_icon, &icon_len);
	
	icon = purple_buddy_icon_new(purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), icon_data, icon_len, checksum);
	
	g_free(icon_data);
	g_free(checksum);
}