X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=libdocument%2Fev-document-factory.c;h=09baef24683cf66412f633b39633db642088ba8c;hb=6b3613c2246624b0d9e0234096c95ad8daa20632;hp=1bc67ef6f667a0441c4dcda3b7f95ad71493d3e6;hpb=e912e532fd67211aa87ac79414efb30f30a00fab;p=evince.git diff --git a/libdocument/ev-document-factory.c b/libdocument/ev-document-factory.c index 1bc67ef6..09baef24 100644 --- a/libdocument/ev-document-factory.c +++ b/libdocument/ev-document-factory.c @@ -23,10 +23,11 @@ #endif #include + #include #include #include -#include +#include #include "ev-backends-manager.h" #include "ev-document-factory.h" @@ -105,62 +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; - GFile *file; - GFileInfo *file_info; - const gchar *mime_type; + gchar *mime_type = NULL; *compression = EV_COMPRESSION_NONE; - file = g_file_new_for_uri (uri); - file_info = g_file_query_info (file, - G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, - 0, NULL, NULL); - g_object_unref (file); - - if (file_info == NULL) { - g_set_error (error, - EV_DOCUMENT_ERROR, - 0, - _("Failed to get info for document")); - return NULL; - } - mime_type = g_file_info_get_content_type (file_info); + mime_type = ev_file_get_mime_type (uri, fast, error); if (mime_type == NULL) { - g_set_error (error, - EV_DOCUMENT_ERROR, - 0, - _("Unknown MIME Type")); - g_object_unref (file_info); + 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 (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 (mime_type); -#else - document = ev_backends_manager_get_document (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”"), mime_type); - g_object_unref (file_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 (mime_type); - g_object_unref (file_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;