diff options
Diffstat (limited to 'libmediaart/extractpixbuf.c')
-rw-r--r-- | libmediaart/extractpixbuf.c | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/libmediaart/extractpixbuf.c b/libmediaart/extractpixbuf.c index 2f823fc..3b2854b 100644 --- a/libmediaart/extractpixbuf.c +++ b/libmediaart/extractpixbuf.c @@ -40,28 +40,28 @@ media_art_plugin_shutdown (void) } gboolean -media_art_file_to_jpeg (const gchar *filename, - const gchar *target) +media_art_file_to_jpeg (const gchar *filename, + const gchar *target, + GError **error) { GdkPixbuf *pixbuf; - GError *error = NULL; + GError *local_error = NULL; /* TODO: Add resizing support */ - pixbuf = gdk_pixbuf_new_from_file (filename, &error); - - if (error) { - g_clear_error (&error); + pixbuf = gdk_pixbuf_new_from_file (filename, &local_error); + if (local_error) { + g_propagate_error (error, local_error); return FALSE; - } else { - gdk_pixbuf_save (pixbuf, target, "jpeg", &error, NULL); - g_object_unref (pixbuf); + } - if (error) { - g_clear_error (&error); - return FALSE; - } + gdk_pixbuf_save (pixbuf, target, "jpeg", &local_error, NULL); + g_object_unref (pixbuf); + + if (local_error) { + g_propagate_error (error, local_error); + return FALSE; } return TRUE; @@ -87,11 +87,14 @@ size_prepared_cb (GdkPixbufLoader *loader, } gboolean -media_art_buffer_to_jpeg (const unsigned char *buffer, - size_t len, - const gchar *buffer_mime, - const gchar *target) +media_art_buffer_to_jpeg (const unsigned char *buffer, + size_t len, + const gchar *buffer_mime, + const gchar *target, + GError **error) { + GError *local_error = NULL; + if (max_width_in_bytes < 0) { g_debug ("Not saving album art from buffer, disabled in config"); return TRUE; @@ -103,11 +106,12 @@ media_art_buffer_to_jpeg (const unsigned char *buffer, g_strcmp0 (buffer_mime, "JPG") == 0) && (buffer && len > 2 && buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff)) { g_debug ("Saving album art using raw data as uri:'%s'", target); - g_file_set_contents (target, (const gchar *) buffer, (gssize) len, NULL); + if (!g_file_set_contents (target, (const gchar *) buffer, (gssize) len, error)) { + return FALSE; + } } else { GdkPixbuf *pixbuf; GdkPixbufLoader *loader; - GError *error = NULL; g_debug ("Saving album art using GdkPixbufLoader for uri:'%s' (max width:%d)", target, @@ -121,11 +125,11 @@ media_art_buffer_to_jpeg (const unsigned char *buffer, NULL); } - if (!gdk_pixbuf_loader_write (loader, buffer, len, &error)) { - g_warning ("Could not write with GdkPixbufLoader when setting album art, %s", - error ? error->message : "no error given"); + if (!gdk_pixbuf_loader_write (loader, buffer, len, &local_error)) { + g_warning ("Could not write with GdkPixbufLoader when setting media art, %s", + local_error ? local_error->message : "no error given"); - g_clear_error (&error); + g_propagate_error (error, local_error); gdk_pixbuf_loader_close (loader, NULL); g_object_unref (loader); @@ -135,7 +139,9 @@ media_art_buffer_to_jpeg (const unsigned char *buffer, pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); if (pixbuf == NULL) { - g_warning ("Could not get pixbuf from GdkPixbufLoader when setting album art"); + g_warning ("Could not get pixbuf from GdkPixbufLoader when setting media art"); + + /* FIXME: Set error here */ gdk_pixbuf_loader_close (loader, NULL); g_object_unref (loader); @@ -143,21 +149,24 @@ media_art_buffer_to_jpeg (const unsigned char *buffer, return FALSE; } - if (!gdk_pixbuf_save (pixbuf, target, "jpeg", &error, NULL)) { - g_warning ("Could not save GdkPixbuf when setting album art, %s", - error ? error->message : "no error given"); + if (!gdk_pixbuf_save (pixbuf, target, "jpeg", &local_error, NULL)) { + g_warning ("Could not save GdkPixbuf when setting media art, %s", + local_error ? local_error->message : "no error given"); - g_clear_error (&error); + g_propagate_error (error, local_error); gdk_pixbuf_loader_close (loader, NULL); g_object_unref (loader); return FALSE; } - if (!gdk_pixbuf_loader_close (loader, &error)) { - g_warning ("Could not close GdkPixbufLoader when setting album art, %s", - error ? error->message : "no error given"); - g_clear_error (&error); + if (!gdk_pixbuf_loader_close (loader, &local_error)) { + g_warning ("Could not close GdkPixbufLoader when setting media art, %s", + local_error ? local_error->message : "no error given"); + + g_propagate_error (error, local_error); + + return FALSE; } g_object_unref (loader); |