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=64eaabaa25d52ac37487db5cf3367ab05c6dbca9;hb=f343927df4325959193353c52cff1ea4b20b2286;hp=5b2473f5e1b2e5e55e66ff3b381b2e9e0eeb7a3d;hpb=2a24c3f16f9ae6a6dc210abbef64c78aba4ddded;p=evince.git diff --git a/libdocument/ev-document-factory.c b/libdocument/ev-document-factory.c index 5b2473f5..64eaabaa 100644 --- a/libdocument/ev-document-factory.c +++ b/libdocument/ev-document-factory.c @@ -104,29 +104,29 @@ get_compression_from_mime_type (const gchar *mime_type) } static gchar * -get_mime_type_from_uri (const gchar *uri) +get_mime_type_from_uri (const gchar *uri, GError **error) { - GFile *file; - GFileInfo *file_info; - const gchar *mime_type; + GFile *file; + GFileInfo *file_info; + gchar *mime_type; file = g_file_new_for_uri (uri); file_info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, - 0, NULL, NULL); + 0, NULL, error); g_object_unref (file); if (file_info == NULL) return NULL; - mime_type = g_file_info_get_content_type (file_info); + mime_type = g_strdup (g_file_info_get_content_type (file_info)); g_object_unref (file_info); - return g_strdup (mime_type); + return mime_type; } static gchar * -get_mime_type_from_data (const gchar *uri) +get_mime_type_from_data (const gchar *uri, GError **error) { GFile *file; GFileInputStream *input_stream; @@ -135,7 +135,7 @@ get_mime_type_from_data (const gchar *uri) file = g_file_new_for_uri (uri); - input_stream = g_file_read (file, NULL, NULL); + input_stream = g_file_read (file, NULL, error); if (!input_stream) { g_object_unref (file); return NULL; @@ -167,35 +167,34 @@ get_document_from_uri (const char *uri, *compression = EV_COMPRESSION_NONE; mime_type = slow ? - get_mime_type_from_data (uri) : - get_mime_type_from_uri (uri); - + get_mime_type_from_data (uri, error) : + get_mime_type_from_uri (uri, error); + if (mime_type == NULL) { - g_set_error (error, - EV_DOCUMENT_ERROR, - 0, - _("Unknown MIME Type")); g_free (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); + _("File type %s (%s) is not supported"), + mime_desc, mime_type); + g_free (mime_desc); g_free (mime_type); - + return NULL; }