static void ggp_image_sent_free(gpointer data) { ggp_image_sent *sent_image = (ggp_image_sent*)data; purple_imgstore_unref_by_id(sent_image->id); g_free(sent_image->conv_name); g_free(sent_image); }
/*------------------------------------------------------------------------ * Display the current splash-screen. * * @param session The MXit session object */ void splash_display(struct MXitSession* session) { const char* splashId = NULL; char* filename; gchar* imgdata; gsize imglen; int imgid = -1; /* Get current splash ID */ splashId = splash_current(session); if (splashId == NULL) /* no splash-screen */ return; purple_debug_info(MXIT_PLUGIN_ID, "Display Splash: '%s'\n", splashId); /* Load splash-screen image from file */ filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "mxit" G_DIR_SEPARATOR_S "%s.png", purple_user_dir(), splashId); if (g_file_get_contents(filename, &imgdata, &imglen, NULL)) { char buf[128]; /* Add splash-image to imagestore */ imgid = purple_imgstore_new_with_id(g_memdup(imgdata, imglen), imglen, NULL); /* Generate and display message */ g_snprintf(buf, sizeof(buf), "<img src=\"" PURPLE_STORED_IMAGE_PROTOCOL "%d\">", imgid); /* Open a request-type popup to display the image */ { PurpleRequestFields* fields; PurpleRequestFieldGroup* group; PurpleRequestField* field; fields = purple_request_fields_new(); group = purple_request_field_group_new(NULL); purple_request_fields_add_group(fields, group); field = purple_request_field_image_new("splash", "", imgdata, imglen); /* add splash image */ purple_request_field_group_add_field(group, field); if (splash_clickable(session)) { purple_request_fields(session->con, _("MXit Advertising"), NULL, NULL, fields, _("More Information"), G_CALLBACK(splash_click_ok), _("Close"), NULL, purple_request_cpar_from_account(session->acc), session->con); } else { purple_request_fields(session->con, _("MXit Advertising"), NULL, NULL, fields, _("Continue"), G_CALLBACK(splash_click_ok), _("Close"), NULL, purple_request_cpar_from_account(session->acc), session->con); } } /* Release reference to image */ purple_imgstore_unref_by_id(imgid); g_free(imgdata); } g_free(filename); }
static void pb_got_conv_image(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { PurpleConversation *conv = user_data; gint icon_id; gchar *msg_tmp; if (!url_text || !url_text[0] || url_text[0] == '{') return; icon_id = purple_imgstore_add_with_id((gpointer)url_text, len, NULL); msg_tmp = g_strdup_printf("<img id='%d'>", icon_id); purple_conversation_write(conv, conv->name, msg_tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(msg_tmp); purple_imgstore_unref_by_id(icon_id); }
static void purple_xfer_conversation_write_internal(PurpleXfer *xfer, const char *message, gboolean is_error, gboolean print_thumbnail) { PurpleConversation *conv = NULL; PurpleMessageFlags flags = PURPLE_MESSAGE_SYSTEM; char *escaped; gconstpointer thumbnail_data; gsize size; g_return_if_fail(xfer != NULL); g_return_if_fail(message != NULL); thumbnail_data = purple_xfer_get_thumbnail(xfer, &size); conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, xfer->who, purple_xfer_get_account(xfer)); if (conv == NULL) return; escaped = g_markup_escape_text(message, -1); if (is_error) flags |= PURPLE_MESSAGE_ERROR; if (print_thumbnail && thumbnail_data) { gchar *message_with_img; gpointer data = g_memdup(thumbnail_data, size); int id = purple_imgstore_add_with_id(data, size, NULL); message_with_img = g_strdup_printf("<img id='%d'> %s", id, escaped); purple_conversation_write(conv, NULL, message_with_img, flags, time(NULL)); purple_imgstore_unref_by_id(id); g_free(message_with_img); } else { purple_conversation_write(conv, NULL, escaped, flags, time(NULL)); } g_free(escaped); }
static void skypeweb_got_imagemessage(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { PurpleConversation *conv = user_data; PurpleConnection *pc; SkypeWebAccount *sa; gint icon_id; gchar *msg_tmp; // Conversation could have been closed before we retrieved the image if (!purple_conversation_is_valid(conv)) { return; } pc = purple_conversation_get_connection(conv); sa = purple_connection_get_protocol_data(pc); sa->url_datas = g_slist_remove(sa->url_datas, url_data); if (url_text == NULL && url_data->data_len) { gchar *location; location = skypeweb_string_get_chunk(url_data->webdata, url_data->data_len, "Location: https://", "/"); if (location && *location) { skypeweb_download_uri_to_conv(sa, location, conv); g_free(location); } return; } if (!url_text || !len || url_text[0] == '{' || url_text[0] == '<') return; if (error_message && *error_message) return; icon_id = purple_imgstore_add_with_id(g_memdup(url_text, len), len, NULL); msg_tmp = g_strdup_printf("<img id='%d'>", icon_id); purple_conversation_write(conv, conv->name, msg_tmp, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_IMAGES, time(NULL)); g_free(msg_tmp); purple_imgstore_unref_by_id(icon_id); }
void msn_switchboard_show_ink(MsnSwitchBoard *swboard, const char *passport, const char *data) { PurpleConnection *gc; guchar *image_data; size_t image_len; int imgid; char *image_msg; if (!purple_str_has_prefix(data, "base64:")) { purple_debug_error("msn", "Ignoring Ink not in Base64 format.\n"); return; } gc = purple_account_get_connection(swboard->session->account); data += sizeof("base64:") - 1; image_data = purple_base64_decode(data, &image_len); if (!image_data || !image_len) { purple_debug_error("msn", "Unable to decode Ink from Base64 format.\n"); return; } imgid = purple_imgstore_add_with_id(image_data, image_len, NULL); image_msg = g_strdup_printf("<IMG ID='%d'/>", imgid); if (swboard->current_users > 1 || ((swboard->conv != NULL) && purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT)) serv_got_chat_in(gc, swboard->chat_id, passport, 0, image_msg, time(NULL)); else serv_got_im(gc, passport, image_msg, 0, time(NULL)); purple_imgstore_unref_by_id(imgid); g_free(image_msg); }
static void ggp_image_got_free(gpointer data) { int id = GPOINTER_TO_INT(data); purple_imgstore_unref_by_id(id); }
static void used_image_free (gpointer data) { purple_imgstore_unref_by_id (GPOINTER_TO_INT(data)); }