]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-document-factory.c
Updated French translation by Robert-André Mauchin.
[evince.git] / libdocument / ev-document-factory.c
index 962f42a604250c39857e9df399ed0a29ab4cba36..a920be60bcfe06e2a051866700212b29160a7639 100644 (file)
@@ -23,6 +23,7 @@
 #endif
 
 #include <string.h>
+
 #include <gio/gio.h>
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
@@ -104,7 +105,7 @@ 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;
@@ -113,7 +114,7 @@ get_mime_type_from_uri (const gchar *uri)
        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)
@@ -126,7 +127,7 @@ get_mime_type_from_uri (const gchar *uri)
 }
 
 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;
        }