summaryrefslogtreecommitdiff
path: root/libmediaart/extractpixbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmediaart/extractpixbuf.c')
-rw-r--r--libmediaart/extractpixbuf.c75
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);