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