# HG changeset patch # User Marcus Lundblad # Date 1245792790 0 # Node ID 3882d419e6285131a34d2d43796a6c47fce6f276 # Parent ef9e68020265499e264c3be291836c83d1a38f3b Added a skeleton for functions to set and get a thumbnail image associated with a file transfer and provision for a UI op to let a UI "manufacture" a thumbnail. Refs #9476 diff -r ef9e68020265 -r 3882d419e628 libpurple/ft.c --- a/libpurple/ft.c Mon Jun 22 21:31:54 2009 +0000 +++ b/libpurple/ft.c Tue Jun 23 21:33:10 2009 +0000 @@ -101,6 +101,7 @@ g_free(xfer->filename); g_free(xfer->remote_ip); g_free(xfer->local_filename); + g_free(xfer->thumbnail_data); PURPLE_DBUS_UNREGISTER_POINTER(xfer); g_free(xfer); @@ -1287,6 +1288,35 @@ ui_ops->update_progress(xfer, purple_xfer_get_progress(xfer)); } +const void * +purple_xfer_get_thumbnail_data(const PurpleXfer *xfer) +{ + return xfer->thumbnail_data; +} + +gsize +purple_xfer_get_thumbnail_size(const PurpleXfer *xfer) +{ + return xfer->thumbnail_size; +} + +void +purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail, + gsize size) +{ + if (thumbnail && size > 0) { + xfer->thumbnail_data = g_memdup(thumbnail, size); + xfer->thumbnail_size = size; + } +} + +void +purple_xfer_prepare_thumbnail(PurpleXfer *xfer) +{ + if (xfer->ui_ops->add_thumbnail) { + xfer->ui_ops->add_thumbnail(xfer); + } +} /************************************************************************** * File Transfer Subsystem API diff -r ef9e68020265 -r 3882d419e628 libpurple/ft.h --- a/libpurple/ft.h Mon Jun 22 21:31:54 2009 +0000 +++ b/libpurple/ft.h Tue Jun 23 21:33:10 2009 +0000 @@ -76,11 +76,11 @@ void (*update_progress)(PurpleXfer *xfer, double percent); void (*cancel_local)(PurpleXfer *xfer); void (*cancel_remote)(PurpleXfer *xfer); + void (*add_thumbnail)(PurpleXfer *xfer); void (*_purple_reserved1)(void); void (*_purple_reserved2)(void); void (*_purple_reserved3)(void); - void (*_purple_reserved4)(void); } PurpleXferUiOps; /** @@ -139,6 +139,9 @@ void *ui_data; /**< UI-specific data. */ void *data; /**< prpl-specific data. */ + + gpointer thumbnail_data; /**< thumbnail image */ + gsize thumbnail_size; }; #ifdef __cplusplus @@ -617,6 +620,41 @@ */ void purple_xfer_conversation_write(PurpleXfer *xfer, char *message, gboolean is_error); +/** + * Gets the thumbnail data for a transfer + * + * @param xfer The file transfer to get the thumbnail for + * @return The thumbnail data, or NULL if there is no thumbnail + */ +const void *purple_xfer_get_thumbnail_data(const PurpleXfer *xfer); + +/** + * Gets the thumbnail size for a transfer + * + * @param xfer The file transfer to get the thumbnail size for + * @return The size, in bytes of the file transfer's thumbnail + */ +gsize purple_xfer_get_thumbnail_size(const PurpleXfer *xfer); + + +/** + * Sets the thumbnail data for a transfer + * + * @param xfer The file transfer to set the data for + * @param thumbnail A pointer to the thumbnail data, this will be copied + * @param size The size in bytes of the passed in thumbnail data + */ +void purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail, + gsize size); + +/** + * Prepare a thumbnail for a transfer (if the UI supports it) + * will be no-op in case the UI doesn't implement thumbnail creation + * + * @param xfer The file transfer to create a thumbnail for + */ +void purple_xfer_prepare_thumbnail(PurpleXfer *xfer); + /*@}*/ /**************************************************************************/