Mercurial > pidgin
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 } |