comparison libpurple/ft.c @ 29806:56b67321b7c6

Print the thumbnail along with the offer message in the conversation
author Marcus Lundblad <ml@update.uu.se>
date Thu, 22 Oct 2009 21:21:47 +0000
parents cb09d358d777
children b0f1698c52f8
comparison
equal deleted inserted replaced
29805:bc57ec419847 29806:56b67321b7c6
210 break; 210 break;
211 } 211 }
212 } 212 }
213 } 213 }
214 214
215 void purple_xfer_conversation_write(PurpleXfer *xfer, char *message, gboolean is_error) 215 static void
216 purple_xfer_conversation_write_internal(PurpleXfer *xfer,
217 const char *message, gboolean is_error, gboolean print_thumbnail)
216 { 218 {
217 PurpleConversation *conv = NULL; 219 PurpleConversation *conv = NULL;
218 PurpleMessageFlags flags = PURPLE_MESSAGE_SYSTEM; 220 PurpleMessageFlags flags = PURPLE_MESSAGE_SYSTEM;
219 char *escaped; 221 char *escaped;
220 222 const gpointer *thumbnail_data = purple_xfer_get_thumbnail_data(xfer);
223
221 g_return_if_fail(xfer != NULL); 224 g_return_if_fail(xfer != NULL);
222 g_return_if_fail(message != NULL); 225 g_return_if_fail(message != NULL);
223 226
224 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, xfer->who, 227 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, xfer->who,
225 purple_xfer_get_account(xfer)); 228 purple_xfer_get_account(xfer));
230 escaped = g_markup_escape_text(message, -1); 233 escaped = g_markup_escape_text(message, -1);
231 234
232 if (is_error) 235 if (is_error)
233 flags = PURPLE_MESSAGE_ERROR; 236 flags = PURPLE_MESSAGE_ERROR;
234 237
235 purple_conversation_write(conv, NULL, escaped, flags, time(NULL)); 238 if (print_thumbnail && thumbnail_data) {
239 gchar *message_with_img;
240 gsize size = purple_xfer_get_thumbnail_size(xfer);
241 gpointer data = g_memdup(thumbnail_data, size);
242 int id = purple_imgstore_add_with_id(data, size, NULL);
243
244 message_with_img =
245 g_strdup_printf("<img id='%d'/> %s", id, escaped);
246 purple_conversation_write(conv, NULL, message_with_img, flags,
247 time(NULL));
248 purple_imgstore_unref_by_id(id);
249 g_free(message_with_img);
250 } else {
251 purple_conversation_write(conv, NULL, escaped, flags, time(NULL));
252 }
236 g_free(escaped); 253 g_free(escaped);
237 } 254 }
255
256 void
257 purple_xfer_conversation_write(PurpleXfer *xfer, gchar *message,
258 gboolean is_error)
259 {
260 purple_xfer_conversation_write_internal(xfer, message, is_error, FALSE);
261 }
262
263 /* maybe this one should be exported puplically? */
264 static void
265 purple_xfer_conversation_write_with_thumbnail(PurpleXfer *xfer,
266 const gchar *message)
267 {
268 purple_xfer_conversation_write_internal(xfer, message, FALSE, TRUE);
269 }
270
238 271
239 static void purple_xfer_show_file_error(PurpleXfer *xfer, const char *filename) 272 static void purple_xfer_show_file_error(PurpleXfer *xfer, const char *filename)
240 { 273 {
241 int err = errno; 274 int err = errno;
242 gchar *msg = NULL, *utf8; 275 gchar *msg = NULL, *utf8;
476 purple_xfer_cancel_local(xfer); 509 purple_xfer_cancel_local(xfer);
477 } 510 }
478 else if (purple_xfer_get_filename(xfer) || 511 else if (purple_xfer_get_filename(xfer) ||
479 purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_ACCEPTED) 512 purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_ACCEPTED)
480 { 513 {
481 /* write thumbnail to the conversation, if there is one */
482 const gpointer *thumbnail_data =
483 purple_xfer_get_thumbnail_data(xfer);
484 gchar* message = NULL; 514 gchar* message = NULL;
485 PurpleBuddy *buddy = purple_find_buddy(xfer->account, xfer->who); 515 PurpleBuddy *buddy = purple_find_buddy(xfer->account, xfer->who);
486 516
487 message = g_strdup_printf(_("%s is offering to send file %s"), 517 message = g_strdup_printf(_("%s is offering to send file %s"),
488 buddy ? purple_buddy_get_alias(buddy) : xfer->who, purple_xfer_get_filename(xfer)); 518 buddy ? purple_buddy_get_alias(buddy) : xfer->who, purple_xfer_get_filename(xfer));
489 purple_xfer_conversation_write(xfer, message, FALSE); 519 purple_xfer_conversation_write_with_thumbnail(xfer, message);
490 g_free(message); 520 g_free(message);
491 if (thumbnail_data) {
492 PurpleConversation *conv =
493 purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
494 xfer->who, purple_xfer_get_account(xfer));
495 if (conv) {
496 gsize size = purple_xfer_get_thumbnail_size(xfer);
497 gpointer data = g_memdup(thumbnail_data, size);
498 int id = purple_imgstore_add_with_id(data, size, NULL);
499
500 message = g_strdup_printf("<img id='%d'/>", id);
501 purple_conversation_write(conv, NULL, message,
502 PURPLE_MESSAGE_SYSTEM, time(NULL));
503 purple_imgstore_unref_by_id(id);
504 g_free(message);
505 }
506 }
507
508 521
509 /* Ask for a filename to save to if it's not already given by a plugin */ 522 /* Ask for a filename to save to if it's not already given by a plugin */
510 if (xfer->local_filename == NULL) 523 if (xfer->local_filename == NULL)
511 purple_xfer_ask_recv(xfer); 524 purple_xfer_ask_recv(xfer);
512 } 525 }