Updating branch refs/heads/master to c1f2f2fb7a01a51f1e52a74189c5b94b05054b57 (commit) from ec00417c0826122b0a905f75631d984e10ab73d0 (commit)
commit c1f2f2fb7a01a51f1e52a74189c5b94b05054b57 Author: Jannis Pohlmann <jan...@xfce.org> Date: Wed Nov 2 23:11:16 2011 +0100 Improve error reporting in the ODF thumbnailer plugin. NEWS | 1 + plugins/odf-thumbnailer/odf-thumbnailer.c | 54 +++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/NEWS b/NEWS index c93ec82..d78a2d7 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ ====== - Fix generation of video images by starting the pipeline (bug #7996). - Fix ownership race conditions when started twice (bug #8001). +- Add an ODF thumbnailer plugin. 0.1.22 ====== diff --git a/plugins/odf-thumbnailer/odf-thumbnailer.c b/plugins/odf-thumbnailer/odf-thumbnailer.c index b19b8a7..6a8b219 100644 --- a/plugins/odf-thumbnailer/odf-thumbnailer.c +++ b/plugins/odf-thumbnailer/odf-thumbnailer.c @@ -1,5 +1,6 @@ /* vi:set et ai sw=2 sts=2 ts=2: */ /*- + * Copyright (c) 2011 Jannis Pohlmann <jan...@xfce.org> * Copyright (c) 2011 Nick Schermer <n...@xfce.org> * * This library is free software; you can redistribute it and/or @@ -157,20 +158,22 @@ odf_thumbnailer_size_prepared (GdkPixbufLoader *loader, static GdkPixbuf * odf_thumbnailer_create_from_data (const guchar *data, gsize bytes, - TumblerThumbnail *thumbnail) + TumblerThumbnail *thumbnail, + GError **error) { GdkPixbufLoader *loader; GdkPixbuf *pixbuf = NULL; - GError *error = NULL; + GError *err = NULL; g_return_val_if_fail (TUMBLER_IS_THUMBNAIL (thumbnail), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); loader = gdk_pixbuf_loader_new (); g_signal_connect (loader, "size-prepared", G_CALLBACK (odf_thumbnailer_size_prepared), thumbnail); - if (gdk_pixbuf_loader_write (loader, data, bytes, &error)) + if (gdk_pixbuf_loader_write (loader, data, bytes, &err)) { - if (gdk_pixbuf_loader_close (loader, &error)) + if (gdk_pixbuf_loader_close (loader, &err)) { pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); if (pixbuf != NULL) @@ -183,6 +186,10 @@ odf_thumbnailer_create_from_data (const guchar *data, } g_object_unref (loader); + /* forward errors to the caller */ + if (err != NULL) + g_propagate_error (error, err); + return pixbuf; } @@ -190,7 +197,8 @@ odf_thumbnailer_create_from_data (const guchar *data, static GdkPixbuf * odf_thumbnailer_create_zip (GsfInfile *infile, - TumblerThumbnail *thumbnail) + TumblerThumbnail *thumbnail, + GError **error) { GsfInput *thumb_file; gsize bytes; @@ -198,6 +206,7 @@ odf_thumbnailer_create_zip (GsfInfile *infile, GdkPixbuf *pixbuf = NULL; g_return_val_if_fail (GSF_IS_INFILE_ZIP (infile), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); /* openoffice and libreoffice thumbnail */ thumb_file = gsf_infile_child_by_vname (infile, "Thumbnails", "thumbnail.png", NULL); @@ -213,7 +222,7 @@ odf_thumbnailer_create_zip (GsfInfile *infile, bytes = gsf_input_remaining (thumb_file); data = gsf_input_read (thumb_file, bytes, NULL); if (data != NULL) - pixbuf = odf_thumbnailer_create_from_data (data, bytes, thumbnail); + pixbuf = odf_thumbnailer_create_from_data (data, bytes, thumbnail, error); g_object_unref (thumb_file); @@ -224,11 +233,12 @@ odf_thumbnailer_create_zip (GsfInfile *infile, static GdkPixbuf * odf_thumbnailer_create_msole (GsfInfile *infile, - TumblerThumbnail *thumbnail) + TumblerThumbnail *thumbnail, + GError **error) { GsfInput *summary; GsfDocMetaData *meta_data; - GError *error; + GError *err = NULL; GsfDocProp *thumb_doc; GdkPixbuf *pixbuf = NULL; GValue const *thumb_value; @@ -237,19 +247,25 @@ odf_thumbnailer_create_msole (GsfInfile *infile, const guchar *data; g_return_val_if_fail (GSF_IS_INFILE_MSOLE (infile), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); /* try to find summary information stream */ summary = gsf_infile_child_by_name (infile, "\05SummaryInformation"); if (summary == NULL) - return NULL; + { + g_set_error (&err, TUMBLER_ERROR, TUMBLER_ERROR_NO_CONTENT, + _("Thumbnail could not be inferred from file contents")); + g_propagate_error (error, err); + return NULL; + } /* read meta data from stream */ meta_data = gsf_doc_meta_data_new (); - error = gsf_msole_metadata_read (summary, meta_data); + err = gsf_msole_metadata_read (summary, meta_data); g_object_unref (summary); - if (error != NULL) + if (err != NULL) { - g_error_free (error); + g_propagate_error (error, err); return NULL; } @@ -268,13 +284,16 @@ odf_thumbnailer_create_msole (GsfInfile *infile, { data = gsf_clip_data_peek_real_data (GSF_CLIP_DATA (clip_data), &bytes, NULL); if (data != NULL) - pixbuf = odf_thumbnailer_create_from_data (data, bytes, thumbnail); + pixbuf = odf_thumbnailer_create_from_data (data, bytes, thumbnail, &err); } } } g_object_unref (meta_data); + if (err != NULL) + g_propagate_error (error, err); + return pixbuf; } @@ -335,7 +354,7 @@ odf_thumbnailer_create (TumblerAbstractThumbnailer *thumbnailer, infile = gsf_infile_zip_new (input, NULL); if (infile != NULL) { - pixbuf = odf_thumbnailer_create_zip (infile, thumbnail); + pixbuf = odf_thumbnailer_create_zip (infile, thumbnail, &error); g_object_unref (infile); } else @@ -343,9 +362,14 @@ odf_thumbnailer_create (TumblerAbstractThumbnailer *thumbnailer, infile = gsf_infile_msole_new (input, NULL); if (infile != NULL) { - pixbuf = odf_thumbnailer_create_msole (infile, thumbnail); + pixbuf = odf_thumbnailer_create_msole (infile, thumbnail, &error); g_object_unref (infile); } + else + { + g_set_error (&error, TUMBLER_ERROR, TUMBLER_ERROR_NO_CONTENT, + _("Thumbnail could not be inferred from file contents")); + } } if (pixbuf != NULL) _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits