X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-document-factory.c;h=a920be60bcfe06e2a051866700212b29160a7639;hb=13948dea9658bd64604cd71d8913583afb88776a;hp=5b2473f5e1b2e5e55e66ff3b381b2e9e0eeb7a3d;hpb=2a24c3f16f9ae6a6dc210abbef64c78aba4ddded;p=evince.git diff --git a/libdocument/ev-document-factory.c b/libdocument/ev-document-factory.c index 5b2473f5..a920be60 100644 --- a/libdocument/ev-document-factory.c +++ b/libdocument/ev-document-factory.c @@ -23,6 +23,7 @@ #endif #include + #include #include #include @@ -104,29 +105,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 +136,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; @@ -143,7 +144,7 @@ get_mime_type_from_data (const gchar *uri) size_read = g_input_stream_read (G_INPUT_STREAM (input_stream), buffer, 1024, NULL, NULL); - g_input_stream_close (G_INPUT_STREAM (input_stream), NULL, NULL); + g_input_stream_close (G_INPUT_STREAM (input_stream), NULL, error); g_object_unref (file); @@ -167,35 +168,41 @@ 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); + + 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); + _("File type %s (%s) is not supported"), + mime_desc, mime_type); + g_free (mime_desc); g_free (mime_type); - + return NULL; }