X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=libdocument%2Fev-document-factory.c;h=09baef24683cf66412f633b39633db642088ba8c;hb=22a76eb4d52da8548b31c215a117ef7048573695;hp=21e0b4a9a8f29401d6fbc655c1ea87eac44f4a4e;hpb=31e16bd8f386dc292e60489d4a17227804bdc2e6;p=evince.git diff --git a/libdocument/ev-document-factory.c b/libdocument/ev-document-factory.c index 21e0b4a9..09baef24 100644 --- a/libdocument/ev-document-factory.c +++ b/libdocument/ev-document-factory.c @@ -23,12 +23,11 @@ #endif #include + +#include #include #include -#include -#include -#include -#include +#include #include "ev-backends-manager.h" #include "ev-document-factory.h" @@ -107,60 +106,55 @@ get_compression_from_mime_type (const gchar *mime_type) static EvDocument * get_document_from_uri (const char *uri, - gboolean slow, + gboolean fast, EvCompressionType *compression, GError **error) { EvDocument *document = NULL; - GnomeVFSFileInfo *info; - GnomeVFSResult result; + gchar *mime_type = NULL; *compression = EV_COMPRESSION_NONE; - 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) { - g_set_error (error, - EV_DOCUMENT_ERROR, - 0, - gnome_vfs_result_to_string (result)); - gnome_vfs_file_info_unref (info); - return NULL; - } - - if (info->mime_type == NULL) { - g_set_error (error, - EV_DOCUMENT_ERROR, - 0, - _("Unknown MIME Type")); - gnome_vfs_file_info_unref (info); + mime_type = ev_file_get_mime_type (uri, fast, error); + + if (mime_type == NULL) { + g_free (mime_type); + + if (*error == NULL) { + g_set_error (error, + EV_DOCUMENT_ERROR, + 0, + _("Unknown MIME Type")); + } + return NULL; } + document = ev_backends_manager_get_document (mime_type); + #ifdef ENABLE_PIXBUF - if (mime_type_supported_by_gdk_pixbuf (info->mime_type)) { + if (!document && mime_type_supported_by_gdk_pixbuf (mime_type)) document = ev_backends_manager_get_document ("image/*"); - } else - document = ev_backends_manager_get_document (info->mime_type); -#else - document = ev_backends_manager_get_document (info->mime_type); #endif /* ENABLE_PIXBUF */ if (document == NULL) { + gchar *mime_desc; + + mime_desc = g_content_type_get_description (mime_type); g_set_error (error, EV_DOCUMENT_ERROR, 0, - _("Unhandled MIME type: “%s”"), info->mime_type); - gnome_vfs_file_info_unref (info); + _("File type %s (%s) is not supported"), + mime_desc, mime_type); + g_free (mime_desc); + g_free (mime_type); + return NULL; } - *compression = get_compression_from_mime_type (info->mime_type); + *compression = get_compression_from_mime_type (mime_type); - gnome_vfs_file_info_unref (info); + g_free (mime_type); return document; } @@ -183,7 +177,7 @@ ev_document_factory_get_document (const char *uri, GError **error) EvCompressionType compression; gchar *uri_unc = NULL; - document = get_document_from_uri (uri, FALSE, &compression, error); + document = get_document_from_uri (uri, TRUE, &compression, error); if (*error == NULL) { uri_unc = ev_file_uncompress (uri, compression, error); if (uri_unc) { @@ -223,7 +217,7 @@ ev_document_factory_get_document (const char *uri, GError **error) uri_unc = NULL; - document = get_document_from_uri (uri, TRUE, &compression, error); + document = get_document_from_uri (uri, FALSE, &compression, error); if (*error != NULL) { return NULL;