]> www.fi.muni.cz Git - evince.git/blobdiff - backend/ev-document-factory.c
Updated Norwegian Nynorsk translation.
[evince.git] / backend / ev-document-factory.c
index 23364a2db1f5cdddc1a980a8104fba09bf1ad06b..3b3f701a5ce6edf54aa5f7100ab9f833e1705614 100644 (file)
@@ -287,28 +287,58 @@ EvDocument *
 ev_document_factory_get_document (const char *uri, GError **error)
 {
        EvDocument *document;
+       int result;
 
        document = get_document_from_uri (uri, FALSE, error);
 
-       if (*error == NULL) {
-               ev_document_load (document, uri, error);
+       if (*error != NULL) {
+               return NULL;
        }
-       
-       if (*error) {
-               g_error_free (*error);
-               *error = NULL;
+
+       result = ev_document_load (document, uri, error);
+
+       if (result == FALSE || *error) {
+               if (*error &&
+                   (*error)->domain == EV_DOCUMENT_ERROR &&
+                   (*error)->code == EV_DOCUMENT_ERROR_ENCRYPTED)
+                       return document;
        } else {
                return document;
        }
 
+       /* Try again with slow mime detection */
+       if (document)
+               g_object_unref (document);
+       document = NULL;
+
+       if (*error)
+               g_error_free (*error);
+       *error = NULL;
+
        document = get_document_from_uri (uri, TRUE, error);
 
        if (*error != NULL) {
                return NULL;
        }
 
-       ev_document_load (document, uri, error);
+       result = ev_document_load (document, uri, error);
+
+       if (result == FALSE) {
+               if (*error == NULL) {
+                       g_set_error (error,
+                                    EV_DOCUMENT_ERROR,
+                                    0,
+                                    _("Unknown MIME Type"));
+               } else if ((*error)->domain == EV_DOCUMENT_ERROR &&
+                          (*error)->code == EV_DOCUMENT_ERROR_ENCRYPTED) {
+                       return document;
+               }
 
+               if (document)
+                       g_object_unref (document);
+               document = NULL;
+       }
+       
        return document;
 }