From ffd47fa767f69c0b534037a6e067534d7d2345c9 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Tue, 05 Jul 2005 16:03:47 +0000 Subject: Support all mime types 2005-07-05 Marco Pesenti Gritti * Makefile.am: * properties/Makefile.am: * properties/ev-properties-main.c: (ev_properties_get_pages): Support all mime types * shell/Makefile.am: * thumbnailer/Makefile.am: * thumbnailer/evince-thumbnailer.c: (get_document_from_uri), (evince_thumbnail_pngenc_get): Use the document factory --- (limited to 'thumbnailer/evince-thumbnailer.c') diff --git a/thumbnailer/evince-thumbnailer.c b/thumbnailer/evince-thumbnailer.c index 9c67246..4e9f300 100644 --- a/thumbnailer/evince-thumbnailer.c +++ b/thumbnailer/evince-thumbnailer.c @@ -20,15 +20,42 @@ #include #include #include +#include #include -#include #include +#include #include #define THUMBNAIL_SIZE 128 +static EvDocument * +get_document_from_uri (const char *uri, gboolean slow, gchar **mime_type) +{ + EvDocument *document = NULL; + GnomeVFSFileInfo *info; + GnomeVFSResult result; + + info = gnome_vfs_file_info_new (); + result = gnome_vfs_get_file_info (uri, info, + GNOME_VFS_FILE_INFO_GET_MIME_TYPE | + GNOME_VFS_FILE_INFO_FOLLOW_LINKS | + (slow ? GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE : 0)); + if (result != GNOME_VFS_OK || info->mime_type == NULL) { + goto end; + } + + document = ev_document_factory_get_document (info->mime_type); + if (mime_type != NULL) { + *mime_type = info->mime_type ? g_strdup (info->mime_type) : NULL; + } + +end: + gnome_vfs_file_info_unref (info); + return document; +} + static gboolean evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail, int size) { @@ -37,9 +64,13 @@ evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail, int size) GdkPixbuf *pixbuf; char *mime_type = NULL; - document = ev_document_types_get_document (uri, &mime_type, &error); - if (document == NULL) + document = get_document_from_uri (uri, FALSE, &mime_type); + if (document == NULL) { + document = get_document_from_uri (uri, TRUE, &mime_type); + } + if (document == NULL) { return FALSE; + } if (!ev_document_load (document, uri, &error)) { if (error->domain == EV_DOCUMENT_ERROR && -- cgit v0.9.1