static void action_change_icon(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; qq_data *qd; gchar *icon_name; gchar *icon_path; g_return_if_fail(NULL != gc && NULL != gc->proto_data); qd = (qq_data *) gc->proto_data; if ( !qd->is_login ) { return; } icon_name = qq_get_icon_name(qd->my_icon); icon_path = qq_get_icon_path(icon_name); g_free(icon_name); purple_debug_info("QQ", "Change prev icon %s to...\n", icon_path); purple_request_file(action, _("Select icon..."), icon_path, FALSE, G_CALLBACK(qq_change_icon_cb), NULL, purple_connection_get_account(gc), NULL, NULL, gc); g_free(icon_path); }
void qq_update_buddy_icon(PurpleAccount *account, const gchar *who, gint face) { PurpleBuddy *buddy; const gchar *icon_name_prev = NULL; gchar *icon_name; gchar *icon_path; gchar *icon_file_content; gsize icon_file_size; g_return_if_fail(account != NULL && who != NULL); /* purple_debug_info("QQ", "Update %s icon to %d\n", who, face); */ icon_name = qq_get_icon_name(face); g_return_if_fail(icon_name != NULL); /* purple_debug_info("QQ", "icon file name is %s\n", icon_name); */ if ((buddy = purple_find_buddy(account, who))) { icon_name_prev = purple_buddy_icons_get_checksum_for_user(buddy); /* purple_debug_info("QQ", "Previous icon is %s\n", icon_name_prev != NULL ? icon_name_prev : "(NULL)"); */ } if (icon_name_prev != NULL && !strcmp(icon_name, icon_name_prev)) { /* purple_debug_info("QQ", "Icon is not changed\n"); */ g_free(icon_name); return; } icon_path = qq_get_icon_path(icon_name); if (icon_path == NULL) { g_free(icon_name); return; } if (!g_file_get_contents(icon_path, &icon_file_content, &icon_file_size, NULL)) { purple_debug_error("QQ", "Failed reading icon file %s\n", icon_path); } else { purple_debug_info("QQ", "Update %s icon to %d (%s)\n", who, face, icon_path); purple_buddy_icons_set_for_user(account, who, icon_file_content, icon_file_size, icon_name); } g_free(icon_name); g_free(icon_path); }