From: Andrej Kacian Date: Tue, 5 Mar 2019 22:01:26 +0000 (+0100) Subject: Rewrite image_viewer.c to not create a temporary file for the image being loaded X-Git-Tag: 3.17.4~78 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=55717767b62cf673760d72e1d8ddf02685103e6e Rewrite image_viewer.c to not create a temporary file for the image being loaded Instead, we use new procmime_get_part_as_inputstream(). --- diff --git a/src/image_viewer.c b/src/image_viewer.c index 09fd79cde..bd33c94b3 100644 --- a/src/image_viewer.c +++ b/src/image_viewer.c @@ -69,16 +69,35 @@ static GtkWidget *image_viewer_get_widget(MimeViewer *_mimeviewer) return imageviewer->notebook; } -static void image_viewer_load_file(ImageViewer *imageviewer, const gchar *imgfile) +static void image_viewer_load_image(ImageViewer *imageviewer) { GtkAllocation allocation; GdkPixbufAnimation *animation = NULL; GdkPixbuf *pixbuf = NULL; GError *error = NULL; + GInputStream *stream; - debug_print("image_viewer_show_mimepart\n"); + cm_return_if_fail(imageviewer != NULL); + + if (imageviewer->mimeinfo == NULL) + return; + + stream = procmime_get_part_as_inputstream(imageviewer->mimeinfo, &error); + if (error != NULL) { + g_warning("Couldn't get image MIME part: %s\n", error->message); + g_error_free(error); + return; + } + + animation = gdk_pixbuf_animation_new_from_stream(stream, NULL, &error); + g_object_unref(stream); + + if (error != NULL) { + g_warning("Couldn't load image: %s\n", error->message); + g_error_free(error); + return; + } - animation = gdk_pixbuf_animation_new_from_file(imgfile, &error); if (gdk_pixbuf_animation_is_static_image(animation) || imageviewer->resize_img) { pixbuf = gdk_pixbuf_animation_get_static_image(animation); @@ -139,28 +158,12 @@ static void image_viewer_set_notebook_page(MimeViewer *_mimeviewer) gtk_notebook_set_current_page(GTK_NOTEBOOK(imageviewer->notebook), 1); } -static void image_viewer_load_image(ImageViewer *imageviewer) -{ - gchar *imgfile; - - if (imageviewer->mimeinfo == NULL) - return; - - imgfile = procmime_get_tmp_file_name(imageviewer->mimeinfo); - if (procmime_get_part(imgfile, imageviewer->mimeinfo) < 0) { - g_warning("Can't get mimepart file"); - g_free(imgfile); - return; - } - image_viewer_load_file(imageviewer, imgfile); - claws_unlink(imgfile); - g_free(imgfile); -} - static void image_viewer_show_mimepart(MimeViewer *_mimeviewer, const gchar *file, MimeInfo *mimeinfo) { ImageViewer *imageviewer = (ImageViewer *) _mimeviewer; + debug_print("image_viewer_show_mimepart\n"); + image_viewer_clear_viewer(_mimeviewer); g_free(imageviewer->file); imageviewer->file = g_strdup(file);