]> www.fi.muni.cz Git - evince.git/commitdiff
Use g_content_type_guess() only when slow is true in
authorCarlos Garcia Campos <carlosgc@gnome.org>
Thu, 31 Jan 2008 09:51:43 +0000 (09:51 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Thu, 31 Jan 2008 09:51:43 +0000 (09:51 +0000)
2008-01-31  Carlos Garcia Campos  <carlosgc@gnome.org>
* libdocument/ev-document-factory.c: (get_mime_type_from_uri),
(get_mime_type_from_data), (get_document_from_uri):
Use g_content_type_guess() only when slow is true in
get_document_from_uri(). Fix several memory leaks.

svn path=/trunk/; revision=2883

ChangeLog
libdocument/ev-document-factory.c

index b915296f974ff4bc70f9a46fb2b1033405bd9f15..7cd5683b638b819ff2b44ace200a3f0527031301 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-01-31  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * libdocument/ev-document-factory.c: (get_mime_type_from_uri),
+       (get_mime_type_from_data), (get_document_from_uri):
+
+       Use g_content_type_guess() only when slow is true in
+       get_document_from_uri(). Fix several memory leaks.
+       
 2008-01-30  Cosimo Cecchi  <cosimoc@svn.gnome.org>
 
        * libdocument/ev-document-factory.c:
index 76ced10848d42f8113308516b1b22a5e356d9e1d..5b2473f5e1b2e5e55e66ff3b381b2e9e0eeb7a3d 100644 (file)
@@ -103,22 +103,56 @@ get_compression_from_mime_type (const gchar *mime_type)
        return EV_COMPRESSION_NONE;
 }
 
-static void
-throw_unknown_mime_type_error (GError **error)
+static gchar *
+get_mime_type_from_uri (const gchar *uri)
 {
-       g_set_error (error,
-                    EV_DOCUMENT_ERROR, 
-                    0,
-                    _("Unknown MIME Type"));
+       GFile       *file;
+       GFileInfo   *file_info;
+       const 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);
+       g_object_unref (file);
+
+       if (file_info == NULL)
+               return NULL;
+
+       mime_type = g_file_info_get_content_type (file_info);
+       g_object_unref (file_info);
+
+       return g_strdup (mime_type);
 }
 
-static void
-throw_failed_to_get_info_error (GError **error)
+static gchar *
+get_mime_type_from_data (const gchar *uri)
 {
-       g_set_error (error,
-                    EV_DOCUMENT_ERROR,
-                    0,
-                    _("Failed to get info for document"));
+       GFile            *file;
+       GFileInputStream *input_stream;
+       gssize            size_read;
+       guchar            buffer[1024];
+
+       file = g_file_new_for_uri (uri);
+       
+       input_stream = g_file_read (file, NULL, NULL);
+       if (!input_stream) {
+               g_object_unref (file);
+               return NULL;
+       }
+
+       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_object_unref (file);
+
+       if (size_read == -1)
+               return NULL;
+
+       return g_content_type_guess (NULL, /* no filename */
+                                    buffer, 1024,
+                                    NULL);
 }
 
 static EvDocument *
@@ -128,28 +162,21 @@ get_document_from_uri (const char        *uri,
                       GError           **error)
 {
        EvDocument *document = NULL;
-       GFile *file;
-       GFileInfo *file_info;
-       const char *mime_type;
-       char *content_type = NULL;
+       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);
-
-       if (file_info == NULL) {
-               throw_failed_to_get_info_error (error); 
-               return NULL;
-       }
-
-       mime_type = g_file_info_get_content_type (file_info);
-
+       mime_type = slow ?
+               get_mime_type_from_data (uri) :
+               get_mime_type_from_uri (uri);
+       
        if (mime_type == NULL) {
-               throw_unknown_mime_type_error (error);
-               g_object_unref (file_info);
+               g_set_error (error,
+                            EV_DOCUMENT_ERROR, 
+                            0,
+                            _("Unknown MIME Type"));
+               g_free (mime_type);
+               
                return NULL;
        }
 
@@ -163,55 +190,18 @@ get_document_from_uri (const char        *uri,
 #endif /* ENABLE_PIXBUF */
 
        if (document == NULL) {
-               /* try to sniff mime type from the content */
-               guchar *buffer;
-               gssize size_read;
-               GFileInputStream *input_stream;
+               g_set_error (error,
+                            EV_DOCUMENT_ERROR, 
+                            0,
+                            _("Unhandled MIME type: ā€œ%sā€"), mime_type);
+               g_free (mime_type);
                
-               input_stream = g_file_read (file, NULL, NULL);
-               buffer = g_malloc (1024);
-               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_object_unref (file);
-               if (size_read == -1) {
-                       throw_failed_to_get_info_error (error);
-                       g_object_unref (file_info);
-                       return NULL;
-               } else  {
-                       content_type = g_content_type_guess (NULL, /* no filename */
-                                                            buffer, 1024,
-                                                            NULL);
-                       g_free (buffer);
-                       if (content_type == NULL) {
-                               throw_unknown_mime_type_error (error);
-                               g_object_unref (file_info);
-                               return NULL;
-                       } else {
-                               document = ev_backends_manager_get_document (content_type);
-                               if (document == NULL) {
-                                       g_set_error (error,
-                                                    EV_DOCUMENT_ERROR, 
-                                                    0,
-                                                    _("Unhandled MIME type: ā€œ%sā€"), content_type);
-                                       g_object_unref (file_info);
-                                       g_free (content_type);
-                                       return NULL;
-                               }
-                               mime_type = content_type;
-                       }
-               }
-       } else {
-               g_object_unref (file);
+               return NULL;
        }
 
        *compression = get_compression_from_mime_type (mime_type);
 
-        g_object_unref (file_info);
-       g_free (content_type);
+       g_free (mime_type);
        
         return document;
 }