]> www.fi.muni.cz Git - evince.git/commitdiff
Port to gio and drop gnome-vfs dependency. Fixes bug #510401. Based on
authorCarlos Garcia Campos <carlosgc@gnome.org>
Fri, 25 Jan 2008 12:30:28 +0000 (12:30 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Fri, 25 Jan 2008 12:30:28 +0000 (12:30 +0000)
2008-01-25  Carlos Garcia Campos  <carlosgc@gnome.org>
* configure.ac:
* backend/comics/comics-document.c: (comics_document_load):
* libdocument/ev-attachment.[ch]: (ev_attachment_finalize),
(ev_attachment_set_property), (ev_attachment_init),
(ev_attachment_save), (ev_attachment_launch_app),
(ev_attachment_open):
* libdocument/ev-document-factory.c: (get_document_from_uri):
* libdocument/ev-file-helpers.[ch]: (ev_tmp_file_get),
(ev_tmp_file_unlink), (ev_tmp_uri_unlink), (ev_xfer_uri_simple),:
* shell/ev-jobs.c:
* shell/ev-password.c: (ev_password_dialog_set_property),
(ev_password_dialog_save_password):
* shell/ev-sidebar-attachments.c:
(ev_sidebar_attachments_drag_data_get):
* shell/ev-window-title.c: (get_filename_from_uri):
* shell/ev-window.c: (ev_window_clear_temp_file),
(ev_window_load_job_cb), (window_open_file_copy_ready_cb),
(ev_window_open_uri), (window_save_file_copy_ready_cb),
(ev_window_save_remote), (ev_window_cmd_save_as), (launch_action),
(launch_external_uri), (image_save_dialog_response_cb),
(attachment_save_dialog_response_cb):
* shell/main.c: (load_files), (load_files_remote), (main):
* thumbnailer/evince-thumbnailer.c: (main):
Port to gio and drop gnome-vfs dependency. Fixes bug
#510401. Based on patch by Cosimo Cecchi.

svn path=/trunk/; revision=2858

15 files changed:
ChangeLog
backend/comics/comics-document.c
configure.ac
libdocument/ev-attachment.c
libdocument/ev-attachment.h
libdocument/ev-document-factory.c
libdocument/ev-file-helpers.c
libdocument/ev-file-helpers.h
shell/ev-jobs.c
shell/ev-password.c
shell/ev-sidebar-attachments.c
shell/ev-window-title.c
shell/ev-window.c
shell/main.c
thumbnailer/evince-thumbnailer.c

index 4137ab886f00b12c5854698af8a15172115ad026..253457e20be425a92702adb3b134a4259c88daf5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2008-01-25  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * configure.ac:
+       * backend/comics/comics-document.c: (comics_document_load):
+       * libdocument/ev-attachment.[ch]: (ev_attachment_finalize),
+       (ev_attachment_set_property), (ev_attachment_init),
+       (ev_attachment_save), (ev_attachment_launch_app),
+       (ev_attachment_open):
+       * libdocument/ev-document-factory.c: (get_document_from_uri):
+       * libdocument/ev-file-helpers.[ch]: (ev_tmp_file_get),
+       (ev_tmp_file_unlink), (ev_tmp_uri_unlink), (ev_xfer_uri_simple),:
+       * shell/ev-jobs.c:
+       * shell/ev-password.c: (ev_password_dialog_set_property),
+       (ev_password_dialog_save_password):
+       * shell/ev-sidebar-attachments.c:
+       (ev_sidebar_attachments_drag_data_get):
+       * shell/ev-window-title.c: (get_filename_from_uri):
+       * shell/ev-window.c: (ev_window_clear_temp_file),
+       (ev_window_load_job_cb), (window_open_file_copy_ready_cb),
+       (ev_window_open_uri), (window_save_file_copy_ready_cb),
+       (ev_window_save_remote), (ev_window_cmd_save_as), (launch_action),
+       (launch_external_uri), (image_save_dialog_response_cb),
+       (attachment_save_dialog_response_cb):
+       * shell/main.c: (load_files), (load_files_remote), (main):
+       * thumbnailer/evince-thumbnailer.c: (main):
+
+       Port to gio and drop gnome-vfs dependency. Fixes bug
+       #510401. Based on patch by Cosimo Cecchi.
+       
 2008-01-24  Wouter Bolsterlee  <wbolster@svn.gnome.org>
 
        * NEWS:
index 004cb8e30b9b1cfdd2ffcc67fdd22afa7e91f1c1..b0d99ca64069cc74eeb75858c389edf35a2ed297 100644 (file)
@@ -23,7 +23,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
+#include <gio/gio.h>
 
 #include "comics-document.h"
 #include "ev-document-misc.h"
@@ -109,7 +109,10 @@ comics_document_load (EvDocument *document,
 {
        ComicsDocument *comics_document = COMICS_DOCUMENT (document);
        GSList *supported_extensions;
-       gchar *list_files_command = NULL, *std_out, *quoted_file, *mime_type;
+       GFile *file;
+       GFileInfo *file_info;
+       gchar *list_files_command = NULL, *std_out, *quoted_file;
+       const gchar *mime_type = NULL;
        gchar **cbr_files;
        gboolean success;
        int i, retval;
@@ -118,7 +121,14 @@ comics_document_load (EvDocument *document,
        g_return_val_if_fail (comics_document->archive != NULL, FALSE);
 
        quoted_file = g_shell_quote (comics_document->archive);
-       mime_type = gnome_vfs_get_mime_type (uri);
+       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) {
+               mime_type = g_file_info_get_content_type (file_info);
+       }
+       g_object_unref (file);
 
        /* FIXME, use proper cbr/cbz mime types once they're
         * included in shared-mime-info */
@@ -136,6 +146,7 @@ comics_document_load (EvDocument *document,
                comics_document->regex_arg = TRUE;
        }
 
+       g_object_unref (file_info);
        g_free (quoted_file);
 
        /* Get list of files in archive */
@@ -144,14 +155,12 @@ comics_document_load (EvDocument *document,
        g_free (list_files_command);
 
        if (!success) {
-               g_free (mime_type);
                return FALSE;
        } else if (retval != 0) {
                g_set_error (error,
                             EV_DOCUMENT_ERROR,
                             EV_DOCUMENT_ERROR_INVALID,
                             _("File corrupted."));
-               g_free (mime_type);
                return FALSE;
        }
 
@@ -177,7 +186,6 @@ comics_document_load (EvDocument *document,
        }
 
        g_free (std_out);
-       g_free (mime_type);
        g_strfreev (cbr_files);
        g_slist_foreach (supported_extensions, (GFunc) g_free, NULL);
        g_slist_free (supported_extensions);
index cffed8763bd6cc9f2f763cb22b2a6584bbc9c516..f0d9b608e5df419fb9cad7fb9279e9901c23f499 100644 (file)
@@ -47,6 +47,7 @@ dnl Check dependencies
 
 DBUS_GLIB_REQUIRED=0.70
 GTK_REQUIRED=2.10.0
+GLIB_REQUIRED=2.15.4
 KEYRING_REQUIRED=0.4.0
 
 LIBGNOMEUI_REQUIRED=2.14.0
@@ -57,10 +58,10 @@ LIBXML_REQUIRED=2.5.0
 
 GTK_PRINT_REQUIRED=2.10.0
 
-PKG_CHECK_MODULES(LIB, gtk+-2.0 >= $GTK_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED gnome-vfs-2.0)
+PKG_CHECK_MODULES(LIB, gtk+-2.0 >= $GTK_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED gio-2.0 >= $GLIB_REQUIRED)
 PKG_CHECK_MODULES(BACKEND, gtk+-2.0 >= $GTK_REQUIRED)
-PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 gnome-vfs-2.0)
-PKG_CHECK_MODULES(SHELL_CORE, libxml-2.0 >= $LIBXML_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED gnome-vfs-2.0 libglade-2.0 gconf-2.0)
+PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 gio-2.0 >= $GLIB_REQUIRED)
+PKG_CHECK_MODULES(SHELL_CORE, libxml-2.0 >= $LIBXML_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gio-2.0 >= $GLIB_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED libglade-2.0 gconf-2.0)
 
 BACKEND_LIBTOOL_FLAGS="-module -avoid-version"
 AC_SUBST(BACKEND_LIBTOOL_FLAGS)
index 7592c4fe0f61db256db7fc996933b7a5057899f7..02d5f3d22153143c07f636eefef723266f9b3fde 100644 (file)
@@ -20,9 +20,6 @@
 #include <config.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include <libgnomevfs/gnome-vfs-mime-handlers.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
 #include "ev-file-helpers.h"
 #include "ev-attachment.h"
 
@@ -46,8 +43,8 @@ struct _EvAttachmentPrivate {
        gchar                   *data;
        gchar                   *mime_type;
 
-       GnomeVFSMimeApplication *app;
-       gchar                   *tmp_uri;
+       GAppInfo                *app;
+       GFile                   *tmp_file;
 };
 
 #define EV_ATTACHMENT_GET_PRIVATE(object) \
@@ -93,14 +90,14 @@ ev_attachment_finalize (GObject *object)
        }
 
        if (attachment->priv->app) {
-               gnome_vfs_mime_application_free (attachment->priv->app);
+               g_object_unref (attachment->priv->app);
                attachment->priv->app = NULL;
        }
 
-       if (attachment->priv->tmp_uri) {
-               ev_tmp_filename_unlink (attachment->priv->tmp_uri);
-               g_free (attachment->priv->tmp_uri);
-               attachment->priv->tmp_uri = NULL;
+       if (attachment->priv->tmp_file) {
+               ev_tmp_file_unlink (attachment->priv->tmp_file);
+               g_object_unref (attachment->priv->tmp_file);
+               attachment->priv->tmp_file = NULL;
        }
 
        (* G_OBJECT_CLASS (ev_attachment_parent_class)->finalize) (object);
@@ -132,9 +129,10 @@ ev_attachment_set_property (GObject      *object,
                break;
        case PROP_DATA:
                attachment->priv->data = g_value_get_pointer (value);
-               attachment->priv->mime_type =
-                       g_strdup (gnome_vfs_get_mime_type_for_data (attachment->priv->data,
-                                                                   attachment->priv->size));
+               attachment->priv->mime_type = g_content_type_guess (attachment->priv->name,
+                                                                   (guchar *) attachment->priv->data,
+                                                                   attachment->priv->size,
+                                                                   NULL);
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
@@ -217,7 +215,7 @@ ev_attachment_init (EvAttachment *attachment)
        attachment->priv->data = NULL;
        attachment->priv->mime_type = NULL;
 
-       attachment->priv->tmp_uri = NULL;
+       attachment->priv->tmp_file = NULL;
 }
 
 EvAttachment *
@@ -284,78 +282,92 @@ ev_attachment_get_mime_type (EvAttachment *attachment)
 
 gboolean
 ev_attachment_save (EvAttachment *attachment,
-                   const gchar  *uri,
+                   GFile        *file,
                    GError      **error)
 {
-       GnomeVFSHandle  *handle = NULL;
-       GnomeVFSFileSize written;
-       GnomeVFSResult   result;
-       
+       GFileOutputStream *output_stream;
+       GError *ioerror = NULL;
+       gssize  written_bytes;
+
        g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
-       g_return_val_if_fail (uri != NULL, FALSE);
+       g_return_val_if_fail (G_IS_FILE (file), FALSE);
 
-       result = gnome_vfs_create (&handle, uri,
-                                  GNOME_VFS_OPEN_WRITE,
-                                  FALSE, 0644);
-       if (result != GNOME_VFS_OK) {
+       output_stream = g_file_create (file, 0, NULL, &ioerror);
+       if (output_stream == NULL) {
+               char *uri;
+               
+               uri = g_file_get_uri (file);
                g_set_error (error,
                             EV_ATTACHMENT_ERROR, 
-                            (gint) result,
+                            ioerror->code,
                             _("Couldn't save attachment “%s”: %s"),
                             uri, 
-                            gnome_vfs_result_to_string (result));
+                            ioerror->message);
+
+               g_error_free (ioerror);
+               g_free (uri);
                
                return FALSE;
        }
-
-       result = gnome_vfs_write (handle, attachment->priv->data,
-                                 attachment->priv->size, &written);
-       if (result != GNOME_VFS_OK || written < attachment->priv->size){
+       
+       written_bytes = g_output_stream_write (G_OUTPUT_STREAM (output_stream),
+                                              attachment->priv->data,
+                                              attachment->priv->size,
+                                              NULL, &ioerror);
+       if (written_bytes == -1) {
+               char *uri;
+               
+               uri = g_file_get_uri (file);
                g_set_error (error,
                             EV_ATTACHMENT_ERROR,
-                            (gint) result,
+                            ioerror->code,
                             _("Couldn't save attachment “%s”: %s"),
                             uri,
-                            gnome_vfs_result_to_string (result));
+                            ioerror->message);
                
-               gnome_vfs_close (handle);
+               g_output_stream_close (G_OUTPUT_STREAM (output_stream), NULL, NULL);
+               g_error_free (ioerror);
+               g_free (uri);
 
                return FALSE;
        }
 
-       gnome_vfs_close (handle);
+       g_output_stream_close (G_OUTPUT_STREAM (output_stream), NULL, NULL);
 
        return TRUE;
+       
 }
 
 static gboolean
 ev_attachment_launch_app (EvAttachment *attachment,
                          GError      **error)
 {
-       GnomeVFSResult result;
-       GList         *uris = NULL;
+       gboolean result;
+       GList   *files = NULL;
+       GError  *ioerror = NULL;
 
-       g_assert (attachment->priv->tmp_uri != NULL);
-       g_assert (attachment->priv->app != NULL);
+       g_assert (G_IS_FILE (attachment->priv->tmp_file));
+       g_assert (G_IS_APP_INFO (attachment->priv->app));
 
-       uris = g_list_prepend (uris, attachment->priv->tmp_uri);
-       result = gnome_vfs_mime_application_launch (attachment->priv->app,
-                                                   uris);
+       files = g_list_prepend (files, attachment->priv->tmp_file);
+       result = g_app_info_launch (attachment->priv->app, files,
+                                   NULL, &ioerror);
 
-       if (result != GNOME_VFS_OK) {
+       if (!result) {
                g_set_error (error,
                             EV_ATTACHMENT_ERROR,
                             (gint) result,
                             _("Couldn't open attachment “%s”: %s"),
                             attachment->priv->name,
-                            gnome_vfs_result_to_string (result));
+                            ioerror->message);
 
-               g_list_free (uris);
+               g_list_free (files);
+               g_error_free (ioerror);
                
                return FALSE;
        }
 
-       g_list_free (uris);
+       g_list_free (files);
        
        return TRUE;
 }
@@ -364,15 +376,14 @@ gboolean
 ev_attachment_open (EvAttachment *attachment,
                    GError      **error)
 {
-
-       gboolean                 retval = FALSE;
-       GnomeVFSMimeApplication *default_app = NULL;
+       GAppInfo *app_info;
+       gboolean  retval = FALSE;
 
        g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
        
        if (!attachment->priv->app) {
-               default_app = gnome_vfs_mime_get_default_application (attachment->priv->mime_type);
-               attachment->priv->app = default_app;
+               app_info = g_app_info_get_default_for_type (attachment->priv->mime_type, TRUE);
+               attachment->priv->app = app_info;
        }
 
        if (!attachment->priv->app) {
@@ -385,26 +396,28 @@ ev_attachment_open (EvAttachment *attachment,
                return FALSE;
        }
 
-       if (attachment->priv->tmp_uri &&
-           g_file_test (attachment->priv->tmp_uri, G_FILE_TEST_EXISTS)) {
+       if (attachment->priv->tmp_file &&
+           g_file_query_exists (attachment->priv->tmp_file, NULL)) {
                retval = ev_attachment_launch_app (attachment, error);
        } else {
-               gchar *uri, *filename;
+               GFile *tmpdir;
+               GFile *file;
                
-               filename = g_build_filename (ev_tmp_dir (), attachment->priv->name, NULL);
-               uri = g_filename_to_uri (filename, NULL, NULL);
+               tmpdir = g_file_new_for_path (ev_tmp_dir ());
+               file = g_file_get_child (tmpdir, attachment->priv->name);
 
-               if (ev_attachment_save (attachment, uri, error)) {
-                       if (attachment->priv->tmp_uri)
-                               g_free (attachment->priv->tmp_uri);
-                       attachment->priv->tmp_uri = g_strdup (filename);
+               if (ev_attachment_save (attachment, file, error)) {
+                       if (attachment->priv->tmp_file)
+                               g_object_unref (attachment->priv->tmp_file);
+                       attachment->priv->tmp_file = g_object_ref (file);
 
                        retval = ev_attachment_launch_app (attachment, error);
                }
 
-               g_free (filename);
-               g_free (uri);
+               g_object_unref (file);
+               g_object_unref (tmpdir);
        }
 
        return retval;
 }
+
index 994b65499c267c9ca3e0f77328ada58317e18a3f..8403bee869f704e0fed3d695ce38cccef0217c5f 100644 (file)
@@ -21,6 +21,7 @@
 #define __EV_ATTACHMENT_H__
 
 #include <glib-object.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
@@ -62,7 +63,7 @@ GTime        ev_attachment_get_modification_date (EvAttachment *attachment);
 GTime        ev_attachment_get_creation_date     (EvAttachment *attachment);
 const gchar *ev_attachment_get_mime_type         (EvAttachment *attachment);
 gboolean     ev_attachment_save                  (EvAttachment *attachment,
-                                                 const gchar  *uri,
+                                                 GFile        *file,
                                                  GError      **error);
 gboolean     ev_attachment_open                  (EvAttachment *attachment,
                                                  GError      **error);
index 21e0b4a9a8f29401d6fbc655c1ea87eac44f4a4e..1bc67ef6f667a0441c4dcda3b7f95ad71493d3e6 100644 (file)
 #endif
 
 #include <string.h>
+#include <gio/gio.h>
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include <libgnomevfs/gnome-vfs-file-info.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
 #include <gtk/gtkfilechooserdialog.h>
 
 #include "ev-backends-manager.h"
@@ -112,55 +110,57 @@ get_document_from_uri (const char        *uri,
                       GError           **error)
 {
        EvDocument *document = NULL;
-        GnomeVFSFileInfo *info;
-        GnomeVFSResult result;
+       GFile *file;
+       GFileInfo *file_info;
+       const gchar *mime_type;
 
        *compression = EV_COMPRESSION_NONE;
 
-        info = gnome_vfs_file_info_new ();
-        result = gnome_vfs_get_file_info (uri, info,
-                                         GNOME_VFS_FILE_INFO_GET_MIME_TYPE |
-                                         GNOME_VFS_FILE_INFO_FOLLOW_LINKS | 
-                                         (slow ? GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE : 0));
-        if (result != GNOME_VFS_OK) {
+       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) {
                g_set_error (error,
                             EV_DOCUMENT_ERROR,
                             0,
-                            gnome_vfs_result_to_string (result));                      
-               gnome_vfs_file_info_unref (info);
+                            _("Failed to get info for document"));                     
                return NULL;
-        } 
-       
-       if (info->mime_type == NULL) {
+       }
+       mime_type = g_file_info_get_content_type (file_info);
+
+       if (mime_type == NULL) {
                g_set_error (error,
                             EV_DOCUMENT_ERROR, 
                             0,
                             _("Unknown MIME Type"));
-               gnome_vfs_file_info_unref (info);
+               g_object_unref (file_info);
                return NULL;
        }
 
 #ifdef ENABLE_PIXBUF
-       if (mime_type_supported_by_gdk_pixbuf (info->mime_type)) {
+       if (mime_type_supported_by_gdk_pixbuf (mime_type))
                document = ev_backends_manager_get_document ("image/*");
-       else
-               document = ev_backends_manager_get_document (info->mime_type);
+       else
+               document = ev_backends_manager_get_document (mime_type);
 #else
-       document = ev_backends_manager_get_document (info->mime_type);
+       document = ev_backends_manager_get_document (mime_type);
 #endif /* ENABLE_PIXBUF */
 
        if (document == NULL) {
                g_set_error (error,
                             EV_DOCUMENT_ERROR, 
                             0,
-                            _("Unhandled MIME type: “%s”"), info->mime_type);
-               gnome_vfs_file_info_unref (info);
+                            _("Unhandled MIME type: “%s”"), mime_type);
+               g_object_unref (file_info);
                return NULL;
        }
 
-       *compression = get_compression_from_mime_type (info->mime_type);
+       *compression = get_compression_from_mime_type (mime_type);
 
-        gnome_vfs_file_info_unref (info);
+        g_object_unref (file_info);
        
         return document;
 }
index dd3b3e1df8ca6051dc53420ac9e1f133a9cb427a..20c7bc4eabd1b8c66927ceafc401500b708a11de 100644 (file)
 #include <glib.h>
 #include <glib/gstdio.h>
 #include <errno.h>
-#include <libgnomevfs/gnome-vfs-uri.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
-#include <libgnomevfs/gnome-vfs-xfer.h>
 
 #if WITH_GNOME
 #include <libgnome/gnome-init.h>
@@ -122,6 +118,20 @@ ev_file_helpers_shutdown (void)
        tmp_dir = NULL;
 }
 
+GFile *
+ev_tmp_file_get (const gchar *prefix)
+{
+       gchar *path;
+       GFile *file;
+
+       path = ev_tmp_filename (prefix);
+       file = g_file_new_for_path (path);
+       
+       g_free (path);
+       
+       return file;
+}
+
 gchar * 
 ev_tmp_filename (const gchar *prefix)
 {
@@ -160,26 +170,41 @@ ev_tmp_filename_unlink (const gchar *filename)
        }
 }
 
+void
+ev_tmp_file_unlink (GFile *file)
+{
+       gboolean res;
+
+       if (!file)
+               return;
+       
+       res = g_file_delete (file, NULL, NULL);
+       if (!res) {
+               char *uri;
+               
+               uri = g_file_get_uri (file);
+               g_warning ("Unable to delete temp file %s\n", uri);
+               g_free (uri);
+       }
+}
+
 void
 ev_tmp_uri_unlink (const gchar *uri)
 {
-       GnomeVFSURI *vfs_uri;
-       gchar       *filename;
+       GFile *file;
        
        if (!uri)
                return;
        
-       vfs_uri = gnome_vfs_uri_new (uri);
-       if (!gnome_vfs_uri_is_local (vfs_uri)) {
-               g_warning ("Attempting to delete non local uri: %s\n", uri);
-               gnome_vfs_uri_unref (vfs_uri);
+       file = g_file_new_for_uri (uri);
+       if (!g_file_is_native (file)) {
+               g_warning ("Attempting to delete non native uri: %s\n", uri);
+               g_object_unref (file);
                return;
        }
-       gnome_vfs_uri_unref (vfs_uri);
-
-       filename = g_filename_from_uri (uri, NULL, NULL);
-       ev_tmp_filename_unlink (filename);
-       g_free (filename);
+       
+       ev_tmp_file_unlink (file);
+       g_object_unref (file);
 }
 
 gboolean
@@ -187,31 +212,28 @@ ev_xfer_uri_simple (const char *from,
                    const char *to,
                    GError     **error)
 {
-       GnomeVFSResult result;
-       GnomeVFSURI *source_uri;
-       GnomeVFSURI *target_uri;
+       GFile *source_file;
+       GFile *target_file;
+       GError *ioerror;
+       gboolean result;
        
        if (!from)
                return FALSE;
        
-       source_uri = gnome_vfs_uri_new (from);
-       target_uri = gnome_vfs_uri_new (to);
-
-       result = gnome_vfs_xfer_uri (source_uri, target_uri, 
-                                    GNOME_VFS_XFER_DEFAULT | GNOME_VFS_XFER_FOLLOW_LINKS,
-                                    GNOME_VFS_XFER_ERROR_MODE_ABORT,
-                                    GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
-                                    NULL,
-                                    NULL);
-       gnome_vfs_uri_unref (target_uri);
-       gnome_vfs_uri_unref (source_uri);
+       source_file = g_file_new_for_uri (from);
+       target_file = g_file_new_for_uri (to);
+       
+       result = g_file_copy (source_file, target_file,
+                             G_FILE_COPY_OVERWRITE,
+                             NULL, NULL, NULL, &ioerror);
+
+       g_object_unref (target_file);
+       g_object_unref (source_file);
     
-       if (result != GNOME_VFS_OK)
-               g_set_error (error,
-                            G_FILE_ERROR,
-                            G_FILE_ERROR_FAILED,
-                            gnome_vfs_result_to_string (result));
-       return (result == GNOME_VFS_OK);
+       if (!result) {
+               g_propagate_error (error, ioerror);
+       }
+       return result;
 
 }
 
index 6aad12a2eedb55b869a644491a23776fbbcb4078..cd86320ed804abf3faa149b8a4c0deb67f6b9970 100644 (file)
  *  $Id$
  */
 
-#ifndef EPHY_FILE_HELPERS_H
-#define EPHY_FILE_HELPERS_H
+#ifndef EV_FILE_HELPERS_H
+#define EV_FILE_HELPERS_H
 
 #include <glib.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
@@ -39,8 +40,10 @@ void         ev_file_helpers_init     (void);
 
 void         ev_file_helpers_shutdown (void);
 
+GFile       *ev_tmp_file_get          (const gchar       *prefix);
 gchar       *ev_tmp_filename          (const char        *prefix);
 void         ev_tmp_filename_unlink   (const gchar       *filename);
+void         ev_tmp_file_unlink       (GFile             *file);
 void         ev_tmp_uri_unlink        (const gchar       *uri);
 
 gboolean     ev_xfer_uri_simple       (const char        *from,
@@ -57,4 +60,4 @@ gchar       *ev_file_compress         (const gchar       *uri,
 
 G_END_DECLS
 
-#endif /* EPHY_FILE_HELPERS_H */
+#endif /* EV_FILE_HELPERS_H */
index d22a3bb636eeb82029a051561020dc517647cac1..f9d17e0bdc33416af0df5faa35c516d75cfc5cbb 100644 (file)
@@ -16,9 +16,6 @@
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
 #include <unistd.h>
-#include <libgnomevfs/gnome-vfs-uri.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
 
 static void ev_job_init                 (EvJob               *job);
 static void ev_job_class_init           (EvJobClass          *class);
index 463d1e71af71d049c5b54781b8dd14a9e3c4071f..ae317f029c4a4417d8b95d558f6001b367831669 100644 (file)
@@ -22,9 +22,9 @@
 #endif
 
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
 
 #ifdef WITH_KEYRING
 #include <gnome-keyring.h>
@@ -75,15 +75,15 @@ ev_password_dialog_set_property (GObject      *object,
        char *format;
        char *markup;
        char *base_name;
-       char *file_name;
+       GFile *file;
 
-       switch (prop_id)
-       {
+       switch (prop_id) {
        case PROP_URI:
                dialog->priv->uri = g_strdup (g_value_get_string (value));
+               
+               file = g_file_new_for_uri (dialog->priv->uri);
 
-               file_name = gnome_vfs_format_uri_for_display (dialog->priv->uri);
-               base_name = g_path_get_basename (file_name);
+               base_name = g_file_get_basename (file);
                format = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
                                          _("Password required"),
                                          _("The document “%s” is locked and requires a password before it can be opened."));
@@ -92,9 +92,9 @@ ev_password_dialog_set_property (GObject      *object,
                gtk_label_set_markup (GTK_LABEL (dialog->priv->label), markup);
 
                g_free (base_name);
-               g_free (file_name);
                g_free (format);
                g_free (markup);
+               g_object_unref (file);
 
                ev_password_search_in_keyring (dialog, dialog->priv->uri);
                break;
@@ -256,7 +256,7 @@ ev_password_dialog_save_password (EvPasswordDialog *dialog)
        attribute.value.string = g_strdup (dialog->priv->uri);
        g_array_append_val (attributes, attribute);
        
-       unescaped_uri = gnome_vfs_unescape_string_for_display (dialog->priv->uri);
+       unescaped_uri = g_uri_unescape_string (dialog->priv->uri, NULL);
        name = g_strdup_printf (_("Password for document %s"), unescaped_uri);  
 
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->check_default))) {
index 5d2beff317e1ab722450284b9654eeca99f03846..7fb7f00e72f52fb6a8522d62dcea44403070b11a 100644 (file)
@@ -406,7 +406,8 @@ ev_sidebar_attachments_drag_data_get (GtkWidget        *widget,
                EvAttachment *attachment;
                GtkTreePath  *path;
                GtkTreeIter   iter;
-               gchar        *uri, *filename;
+               GFile        *file;
+               gchar        *filename;
                GError       *error = NULL;
                
                path = (GtkTreePath *) l->data;
@@ -420,12 +421,16 @@ ev_sidebar_attachments_drag_data_get (GtkWidget        *widget,
                filename = g_build_filename (ev_tmp_dir (),
                                             ev_attachment_get_name (attachment),
                                             NULL);
+               file = g_file_new_for_path (filename);
+               g_free (filename);
                
-               uri = g_filename_to_uri (filename, NULL, NULL);
+               if (ev_attachment_save (attachment, file, &error)) {
+                       gchar *uri;
 
-               if (ev_attachment_save (attachment, filename, &error)) {
+                       uri = g_file_get_uri (file);
                        g_string_append (uri_list, uri);
                        g_string_append_c (uri_list, '\n');
+                       g_free (uri);
                }
        
                if (error) {
@@ -433,8 +438,8 @@ ev_sidebar_attachments_drag_data_get (GtkWidget        *widget,
                        g_error_free (error);
                }
 
-               g_free (uri);
                gtk_tree_path_free (path);
+               g_object_unref (file);
                g_object_unref (attachment);
        }
 
index 427e696182a8c2f687f720feeafd4da524b38b7c..b43775a62e122b1af4932b0f2358c88106016173 100644 (file)
@@ -21,8 +21,8 @@
 #include "ev-window-title.h"
 #include "ev-backends-manager.h"
 
+#include <gio/gio.h>
 #include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
 
 /* Known backends (for bad extensions fix) */
 #define EV_BACKEND_PS  "psdocument"
@@ -65,12 +65,12 @@ ev_window_title_new (EvWindow *window)
 static char *
 get_filename_from_uri (const char *uri)
 {
+       GFile *file;
        char *filename;
-       char *display_name;
-
-       display_name = gnome_vfs_format_uri_for_display (uri);
-       filename = g_path_get_basename (display_name);
-       g_free (display_name);
+       
+       file = g_file_new_for_uri (uri);
+       filename = g_file_get_basename (file);
+       g_object_unref (file);
 
        return filename;
 }
index 9f9924bac7a740bae0f906ae64e8057ea248d0a9..0ec0533b94a809451975a33ecefb6ceaeb6ce4a7 100644 (file)
@@ -83,9 +83,7 @@
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libgnomevfs/gnome-vfs-async-ops.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
+#include <gio/gio.h>
 #include <gconf/gconf-client.h>
 
 #include <errno.h>
@@ -1301,30 +1299,20 @@ ev_window_clear_print_settings_file (EvWindow *ev_window)
 static void
 ev_window_clear_temp_file (EvWindow *ev_window)
 {
-       GnomeVFSURI *uri;
-       gchar       *filename;
-       const gchar *tempdir;
+       GFile *file, *tempdir;
 
        if (!ev_window->priv->uri)
                return;
 
-       uri = gnome_vfs_uri_new (ev_window->priv->uri);
-       if (!gnome_vfs_uri_is_local (uri)) {
-               gnome_vfs_uri_unref (uri);
-               return;
-       }
-       gnome_vfs_uri_unref (uri);
+       file = g_file_new_for_uri (ev_window->priv->uri);
+       tempdir = g_file_new_for_path (g_get_tmp_dir ());
 
-       filename = g_filename_from_uri (ev_window->priv->uri, NULL, NULL);
-       if (!filename)
-               return;
-
-       tempdir = g_get_tmp_dir ();
-       if (g_ascii_strncasecmp (filename, tempdir, strlen (tempdir)) == 0) {
-               g_unlink (filename);
+       if (g_file_contains_file (tempdir, file)) {
+               g_file_delete (file, NULL, NULL);
        }
 
-       g_free (filename);
+       g_object_unref (file);
+       g_object_unref (tempdir);
 }
 
 /* This callback will executed when load job will be finished.
@@ -1404,15 +1392,16 @@ ev_window_load_job_cb  (EvJobLoad *job,
 
        if (job->error->domain == EV_DOCUMENT_ERROR &&
            job->error->code == EV_DOCUMENT_ERROR_ENCRYPTED) {
-               gchar *base_name, *file_name;
+               GFile *file;
+               gchar *base_name;
 
                setup_view_from_metadata (ev_window);
 
-               file_name = gnome_vfs_format_uri_for_display (job->uri);
-               base_name = g_path_get_basename (file_name);
+               file = g_file_new_for_uri (job->uri);
+               base_name = g_file_get_basename (file);
                ev_password_view_set_file_name (EV_PASSWORD_VIEW (ev_window->priv->password_view),
                                                base_name);
-               g_free (file_name);
+               g_object_unref (file);
                g_free (base_name);
                ev_window_set_page_mode (ev_window, PAGE_MODE_PASSWORD);
                
@@ -1473,27 +1462,14 @@ ev_window_close_dialogs (EvWindow *ev_window)
        ev_window->priv->properties = NULL;
 }
 
-static gint
-open_xfer_update_progress_callback (GnomeVFSAsyncHandle      *handle,
-                                   GnomeVFSXferProgressInfo *info,
-                                   EvWindow                 *ev_window)
-{
-       switch (info->status) {
-               case GNOME_VFS_XFER_PROGRESS_STATUS_OK:
-                       if (info->phase == GNOME_VFS_XFER_PHASE_COMPLETED) {
-                               ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH);
-                       }
-
-                       return 1;
-               case GNOME_VFS_XFER_PROGRESS_STATUS_VFSERROR:
-               case GNOME_VFS_XFER_PROGRESS_STATUS_OVERWRITE:
-               case GNOME_VFS_XFER_PROGRESS_STATUS_DUPLICATE:
-                       return 1;
-               default:
-                       g_assert_not_reached ();
-       }
-
-       return 0;
+static void
+window_open_file_copy_ready_cb (GFile        *source,
+                               GAsyncResult *async_result,
+                               EvWindow     *ev_window)
+{
+       g_file_copy_finish (source, async_result, NULL);
+       ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH);
+       g_object_unref (source);
 }
 
 void
@@ -1505,8 +1481,8 @@ ev_window_open_uri (EvWindow       *ev_window,
                    gboolean        unlink_temp_file,
                    const gchar    *print_settings)
 {
-       GnomeVFSURI *source_uri;
-       GnomeVFSURI *target_uri;
+       GFile *source_file;
+       GFile *target_file;
 
        if (ev_window->priv->uri &&
            g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0) {
@@ -1538,48 +1514,34 @@ ev_window_open_uri (EvWindow       *ev_window,
                          G_CALLBACK (ev_window_load_job_cb),
                          ev_window);
 
-       source_uri = gnome_vfs_uri_new (uri);
-       if (!gnome_vfs_uri_is_local (source_uri) && !ev_window->priv->local_uri) {
-               GnomeVFSAsyncHandle *handle;
-               GList               *slist = NULL;
-               GList               *tlist = NULL;
-               char                *tmp_name;
-               char                *base_name;
+       source_file = g_file_new_for_uri (uri);
+       if (!g_file_is_native (source_file) && !ev_window->priv->local_uri) {
+               char *tmp_name;
+               char *base_name;
 
                /* We'd like to keep extension of source uri since
                 * it helps to resolve some mime types, say cbz */
 
                tmp_name = ev_tmp_filename (NULL);
-               base_name = gnome_vfs_uri_extract_short_name (source_uri);
+               base_name = g_file_get_basename (source_file);
                ev_window->priv->local_uri = g_strconcat ("file:", tmp_name, "-", base_name, NULL);
                ev_job_load_set_uri (EV_JOB_LOAD (ev_window->priv->load_job),
                                     ev_window->priv->local_uri);
                g_free (base_name);
                g_free (tmp_name);
                
-               target_uri = gnome_vfs_uri_new (ev_window->priv->local_uri);
-               
-               slist = g_list_prepend (slist, source_uri);
-               tlist = g_list_prepend (tlist, target_uri);
-               gnome_vfs_async_xfer (&handle, slist, tlist,
-                                     GNOME_VFS_XFER_DEFAULT | GNOME_VFS_XFER_FOLLOW_LINKS,
-                                     GNOME_VFS_XFER_ERROR_MODE_ABORT,
-                                     GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
-                                     GNOME_VFS_PRIORITY_DEFAULT,
-                                     (GnomeVFSAsyncXferProgressCallback)
-                                     open_xfer_update_progress_callback,
-                                     ev_window,
-                                     NULL, NULL); 
-               
-               g_list_free (slist);
-               g_list_free (tlist);
-               gnome_vfs_uri_unref (target_uri);
-               gnome_vfs_uri_unref (source_uri);
-               
+               target_file = g_file_new_for_uri (ev_window->priv->local_uri);
+
+               g_file_copy_async (source_file, target_file,
+                                  0, G_PRIORITY_DEFAULT, NULL,
+                                  NULL, NULL, /* no progress callback */
+                                  (GAsyncReadyCallback) window_open_file_copy_ready_cb,
+                                  ev_window);
+               g_object_unref (target_file);
                return;
        }
 
-       gnome_vfs_uri_unref (source_uri);
+       g_object_unref (source_file);
        ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH);
 }
 
@@ -1937,79 +1899,53 @@ ev_window_setup_recent (EvWindow *ev_window)
        g_list_free (items);
 }
 
-static gint
-save_xfer_update_progress_callback (GnomeVFSAsyncHandle      *handle,
-                                   GnomeVFSXferProgressInfo *info,
-                                   GnomeVFSURI              *tmp_uri)
-{
-       switch (info->status) {
-               case GNOME_VFS_XFER_PROGRESS_STATUS_OK:
-                       if (info->phase == GNOME_VFS_XFER_PHASE_COMPLETED) {
-                               gchar *uri;
-
-                               uri = gnome_vfs_uri_to_string (tmp_uri, 0);
-                               ev_tmp_uri_unlink (uri);
-                               g_free (uri);
-                               gnome_vfs_uri_unref (tmp_uri);
-                       }
-                       return 1;
-               case GNOME_VFS_XFER_PROGRESS_STATUS_VFSERROR:
-                       if (info->vfs_status != GNOME_VFS_OK) {
-                               GtkWidget *dialog;
-                               gchar     *uri;
-
-                               dialog = gtk_message_dialog_new (NULL,
-                                                                GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                                GTK_MESSAGE_ERROR,
-                                                                GTK_BUTTONS_CLOSE,
-                                                                _("The file could not be saved as “%s”."),
-                                                                info->target_name);
-                               gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-                                                                         gnome_vfs_result_to_string (info->vfs_status));
-
-                               g_signal_connect (dialog, "response",
-                                                 G_CALLBACK (gtk_widget_destroy),
-                                                 NULL);
-                               gtk_widget_show (dialog);
-
-                               uri = gnome_vfs_uri_to_string (tmp_uri, 0);
-                               ev_tmp_uri_unlink (uri);
-                               g_free (uri);
-                               gnome_vfs_uri_unref (tmp_uri);
-                       }
-                       return 1;
-               case GNOME_VFS_XFER_PROGRESS_STATUS_OVERWRITE:
-               case GNOME_VFS_XFER_PROGRESS_STATUS_DUPLICATE:
-                       return 1;
-               default:
-                       g_assert_not_reached ();
+static void
+window_save_file_copy_ready_cb (GFile        *src,
+                               GAsyncResult *async_result,
+                               GFile        *dst)
+{
+       EvWindow  *window;
+       GtkWidget *dialog;
+       gchar     *name;
+       GError    *error = NULL;
+
+       if (g_file_copy_finish (src, async_result, &error)) {
+               ev_tmp_file_unlink (src);
+               return;
        }
 
-       return 0;
+       window = g_object_get_data (G_OBJECT (dst), "ev-window");
+       name = g_file_get_basename (dst);
+       dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                        GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        GTK_MESSAGE_ERROR,
+                                        GTK_BUTTONS_CLOSE,
+                                        _("The file could not be saved as “%s”."),
+                                        name);
+       gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+                                                 error->message);
+       g_signal_connect (dialog, "response",
+                         G_CALLBACK (gtk_widget_destroy),
+                         NULL);
+       gtk_widget_show (dialog);
+       ev_tmp_file_unlink (src);
+
+       g_free (name);
+       g_error_free (error);
 }
 
 static void
-ev_window_save_remote (EvWindow    *ev_window,
-                      GnomeVFSURI *src,
-                      GnomeVFSURI *dst)
+ev_window_save_remote (EvWindow *ev_window,
+                      GFile    *src,
+                      GFile    *dst)
 {
-       GnomeVFSAsyncHandle *handle;
-       GList               *slist = NULL;
-       GList               *tlist = NULL;
-       
-       slist = g_list_prepend (slist, src);
-       tlist = g_list_prepend (tlist, dst);
-       gnome_vfs_async_xfer (&handle, slist, tlist,
-                             GNOME_VFS_XFER_DEFAULT | GNOME_VFS_XFER_FOLLOW_LINKS,
-                             GNOME_VFS_XFER_ERROR_MODE_ABORT,
-                             GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
-                             GNOME_VFS_PRIORITY_DEFAULT,
-                             (GnomeVFSAsyncXferProgressCallback)
-                             save_xfer_update_progress_callback,
-                             gnome_vfs_uri_ref (src),
-                             NULL, NULL);
-       g_list_free (slist);
-       g_list_free (tlist);
+       g_object_set_data (G_OBJECT (dst), "ev-window", ev_window);
+       g_file_copy_async (src, dst,
+                          G_FILE_COPY_OVERWRITE,
+                          G_PRIORITY_DEFAULT, NULL,
+                          NULL, NULL, /* no progress callback */
+                          (GAsyncReadyCallback) window_save_file_copy_ready_cb,
+                          dst);                
 }
 
 static void
@@ -2075,7 +2011,7 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
 {
        GtkWidget *fc;
        gchar *base_name;
-       gchar *file_name;
+       GFile *file;
 #if GLIB_CHECK_VERSION (2, 13, 3)
        const gchar *folder;
 #else
@@ -2093,9 +2029,9 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
        gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK);
 
        gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), FALSE);
-       gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);   
-       file_name = gnome_vfs_format_uri_for_display (ev_window->priv->uri);
-       base_name = g_path_get_basename (file_name);
+       gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);
+       file = g_file_new_for_uri (ev_window->priv->uri);
+       base_name = g_file_get_basename (file);
        gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), base_name);
        
 #if GLIB_CHECK_VERSION (2, 13, 3)
@@ -2108,7 +2044,7 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
        free (folder);
 #endif
        
-       g_free (file_name);
+       g_object_unref (file);
        g_free (base_name);
         
        g_signal_connect (fc, "response",
@@ -4784,31 +4720,48 @@ static void
 launch_action (EvWindow *window, EvLinkAction *action)
 {
        const char *filename = ev_link_action_get_filename (action);
-       char *uri = NULL;
+       const char *content_type;
+       GAppInfo *app_info;
+       GFileInfo *file_info;
+       GFile *file;
+       GList *file_list = NULL;
+       
+       if (filename == NULL)
+               return;
 
-       if (filename  && g_path_is_absolute (filename)) {
-               uri = gnome_vfs_get_uri_from_local_path (filename);
+       if (g_path_is_absolute (filename)) {
+               file = g_file_new_for_path (filename);
        } else {
-               GnomeVFSURI *base_uri, *resolved_uri;
-
-               base_uri = gnome_vfs_uri_new (window->priv->uri);
-               if (base_uri && filename) {
-                       resolved_uri = gnome_vfs_uri_resolve_relative (base_uri, filename);     
-                       if (resolved_uri) {
-                               uri = gnome_vfs_uri_to_string (resolved_uri, GNOME_VFS_URI_HIDE_NONE);
-                               gnome_vfs_uri_unref (resolved_uri);
-                       }
-                       gnome_vfs_uri_unref (base_uri);
-               }
+               GFile *base_file;
+               
+               base_file = g_file_new_for_uri (window->priv->uri);
+               file = g_file_resolve_relative_path (base_file,
+                                                    filename);
+               
+               g_object_unref (base_file);
        }
-
-       if (uri) {
-               gnome_vfs_url_show (uri);
-       } else {
-               gnome_vfs_url_show (filename);
+       
+       file_info = g_file_query_info (file,
+                                      G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+                                      0, NULL, NULL);
+       if (file_info == NULL) {
+               g_object_unref (file);
+               return;
        }
+       
+       content_type = g_file_info_get_content_type (file_info);
+       app_info = g_app_info_get_default_for_type (content_type, TRUE);
+       
+       file_list = g_list_append (file_list, file);
 
-       g_free (uri);
+       /* FIXME: should we use a GAppLaunchContext? */
+       g_app_info_launch (app_info, file_list,
+                          NULL, NULL);
+       
+       g_list_free (file_list);
+       g_object_unref (app_info);
+       g_object_unref (file_info);
+       g_object_unref (file);
 
        /* According to the PDF spec filename can be an executable. I'm not sure
           allowing to launch executables is a good idea though. -- marco */
@@ -4818,37 +4771,47 @@ static void
 launch_external_uri (EvWindow *window, EvLinkAction *action)
 {
        const gchar *uri = ev_link_action_get_uri (action);
-       GnomeVFSResult result = gnome_vfs_url_show (uri);
-       GtkWidget *dialog;
-       gchar* message = NULL;
-
-       switch(result) {
-               case GNOME_VFS_OK:
-                       break;
-               case GNOME_VFS_ERROR_BAD_PARAMETERS:
-                       message = _("Invalid URI: “%s”");
-                       break;
-               case GNOME_VFS_ERROR_NOT_SUPPORTED:
-                       message = _("Unsupported URI: “%s”");
-                       break;
-               default:
-                       message = _("Unknown error");
+       const char *content_type;
+       GFile *file;
+       GFileInfo *file_info;
+       GAppInfo *app;
+       GList *file_list = NULL;
+       GError *error = NULL;
+       
+       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) {
+               g_object_unref (file);
+               return;
        }
-       if(message) {
+       
+       content_type = g_file_info_get_content_type (file_info);
+       app = g_app_info_get_default_for_type (content_type, TRUE);
+       g_object_unref (file_info);
+       
+       file_list = g_list_append (file_list, file);
+       
+       if (!g_app_info_launch (app, file_list, NULL, &error)) {
+               GtkWidget *dialog;
+       
                dialog = gtk_message_dialog_new (GTK_WINDOW (window),
                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
                                                 GTK_MESSAGE_ERROR,
                                                 GTK_BUTTONS_CLOSE,
                                                 _("Unable to open external link"));
                gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-                                                         message, uri);
+                                                         error->message, uri);
                g_signal_connect (dialog, "response",
                                  G_CALLBACK (gtk_widget_destroy),
                                  NULL);
                gtk_widget_show (dialog);
-
        }
-       return;
+
+       g_object_unref (app);
+       g_object_unref (file);
+       g_list_free (file_list);
 }
 
 static void
@@ -4980,8 +4943,8 @@ image_save_dialog_response_cb (GtkWidget *fc,
                               gint       response_id,
                               EvWindow  *ev_window)
 {
-       GnomeVFSURI     *target_uri;
-       gboolean         is_local;
+       GFile           *target_file;
+       gboolean         is_native;
        GError          *error = NULL;
        GdkPixbuf       *pixbuf;
        gchar           *uri;
@@ -5020,11 +4983,11 @@ image_save_dialog_response_cb (GtkWidget *fc,
        g_strfreev(extensions);
        file_format = gdk_pixbuf_format_get_name (format);
        
-       target_uri = gnome_vfs_uri_new (uri_extension);
-       is_local = gnome_vfs_uri_is_local (target_uri);
+       target_file = g_file_new_for_uri (uri_extension);
+       is_native = g_file_is_native (target_file);
        
-       if (is_local) {
-               filename = g_filename_from_uri (uri_extension, NULL, NULL);
+       if (is_native) {
+               filename = g_file_get_path (target_file);
        } else {
                filename = ev_tmp_filename ("saveimage");
        }
@@ -5038,6 +5001,7 @@ image_save_dialog_response_cb (GtkWidget *fc,
        ev_document_doc_mutex_unlock ();
        
        gdk_pixbuf_save (pixbuf, filename, file_format, &error, NULL);
+       g_free (file_format);
        g_object_unref (pixbuf);
        
        if (error) {
@@ -5046,25 +5010,23 @@ image_save_dialog_response_cb (GtkWidget *fc,
                                         error);
                g_error_free (error);
                g_free (filename);
-               gnome_vfs_uri_unref (target_uri);
+               g_object_unref (target_file);
                gtk_widget_destroy (fc);
 
                return;
        }
 
-       if (!is_local) {
-               GnomeVFSURI *source_uri;
-               gchar       *local_uri;
-
-               local_uri = g_filename_to_uri (filename, NULL, NULL);
-               source_uri = gnome_vfs_uri_new (local_uri);
-               g_free (local_uri);
-               ev_window_save_remote (ev_window, source_uri, target_uri);
-               gnome_vfs_uri_unref (source_uri);
+       if (!is_native) {
+               GFile *source_file;
+               
+               source_file = g_file_new_for_uri (filename);
+               
+               ev_window_save_remote (ev_window, source_file, target_file);
+               g_object_unref (source_file);
        }
        
        g_free (filename);
-       gnome_vfs_uri_unref (target_uri);
+       g_object_unref (target_file);
        gtk_widget_destroy (fc);
 }
 
@@ -5147,12 +5109,12 @@ attachment_save_dialog_response_cb (GtkWidget *fc,
                                    gint       response_id,
                                    EvWindow  *ev_window)
 {
-       GnomeVFSURI          *target_uri;
+       GFile                *target_file;
        gchar                *uri;
        GList                *l;
        GtkFileChooserAction  fc_action;
        gboolean              is_dir;
-       gboolean              is_local;
+       gboolean              is_native;
        
        if (response_id != GTK_RESPONSE_OK) {
                gtk_widget_destroy (fc);
@@ -5160,69 +5122,61 @@ attachment_save_dialog_response_cb (GtkWidget *fc,
        }
 
        uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc));
-       target_uri = gnome_vfs_uri_new (uri);
+       target_file = g_file_new_for_uri (uri);
        g_object_get (G_OBJECT (fc), "action", &fc_action, NULL);
        is_dir = (fc_action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-       is_local = gnome_vfs_uri_is_local (target_uri);
+       is_native = g_file_is_native (target_file);
        
        for (l = ev_window->priv->attach_list; l && l->data; l = g_list_next (l)) {
                EvAttachment *attachment;
-               gchar        *filename;
+               GFile        *save_to;
                GError       *error = NULL;
                
                attachment = (EvAttachment *) l->data;
 
-               if (is_local) {
+               if (is_native) {
                        if (is_dir) {
-                               filename = g_strjoin ("/", uri,
-                                                     ev_attachment_get_name (attachment),
-                                                     NULL);
+                               save_to = g_file_get_child (target_file,
+                                                           ev_attachment_get_name (attachment));
                        } else {
-                               filename = g_strdup (uri);
+                               save_to = g_object_ref (target_file);
                        }
                } else {
-                       filename = ev_tmp_filename ("saveattachment");
+                       save_to = ev_tmp_file_get ("saveattachment");
                }
 
-               ev_attachment_save (attachment, filename, &error);
+               ev_attachment_save (attachment, save_to, &error);
                
                if (error) {
                        ev_window_error_message (GTK_WINDOW (ev_window),
                                                 _("The attachment could not be saved."),
                                                 error);
                        g_error_free (error);
-                       g_free (filename);
+                       g_object_unref (save_to);
 
                        continue;
                }
 
-               if (!is_local) {
-                       GnomeVFSURI *src_uri;
-                       GnomeVFSURI *dest_uri;
-                       gchar       *local_uri;
+               if (!is_native) {
+                       GFile *dest_file;
 
                        if (is_dir) {
-                               const gchar *name = ev_attachment_get_name (attachment);
-
-                               dest_uri = gnome_vfs_uri_append_file_name (target_uri,
-                                                                          name);
+                               dest_file = g_file_get_child (target_file,
+                                                             ev_attachment_get_name (attachment));
                        } else {
-                               dest_uri = gnome_vfs_uri_ref (target_uri);
+                               dest_file = g_object_ref (target_file);
                        }
-                       
-                       local_uri = g_filename_to_uri (filename, NULL, NULL);
-                       src_uri = gnome_vfs_uri_new (local_uri);
-                       g_free (local_uri);
-                       ev_window_save_remote (ev_window, src_uri, dest_uri);
-                       gnome_vfs_uri_unref (src_uri);
-                       gnome_vfs_uri_unref (dest_uri);
+
+                       ev_window_save_remote (ev_window, save_to, dest_file);
+
+                       g_object_unref (dest_file);
                }
 
-               g_free (filename);
+               g_object_unref (save_to);
        }
 
        g_free (uri);
-       gnome_vfs_uri_unref (target_uri);
+       g_object_unref (target_file);
 
        gtk_widget_destroy (fc);
 }
index e4c2d1b7e7f4a4ea9517a54f97fd658315962d67..e0fc99331700bc52ff860be6eeb7fcc1c24f4c3c 100644 (file)
@@ -35,9 +35,6 @@
 #include <libgnomeui/gnome-authentication-manager.h>
 #endif
 
-#include <libgnomevfs/gnome-vfs-init.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-
 #ifdef ENABLE_DBUS
 #include <dbus/dbus-glib-bindings.h>
 #endif
@@ -203,10 +200,13 @@ load_files (const char **files,
                char   *uri;
                char   *label;
                GValue *old = NULL;
+               GFile  *file;
 
-               uri = gnome_vfs_make_uri_from_shell_arg (files[i]);
+               file = g_file_new_for_commandline_arg (files[i]);
+               uri = g_file_get_uri (file);
+               g_object_unref (file);
                
-               label = strchr (uri, GNOME_VFS_URI_MAGIC_CHR);
+               label = strchr (uri, '#');
 
                if (label) {
                        GValue *new;
@@ -282,9 +282,13 @@ load_files_remote (const char **files,
 
        for (i = 0; files[i]; i++) {
                const char *page_label;
+               GFile *file;
                char *uri;
 
-               uri = gnome_vfs_make_uri_from_shell_arg (files[i]);
+               file = g_file_new_for_commandline_arg (files[i]);
+               uri = g_file_get_uri (file);
+               g_object_unref (file);
+
                page_label = ev_page_label ? ev_page_label : "";
 
                if (!dbus_g_proxy_call (remote_object, "OpenURI", &error,
@@ -353,8 +357,6 @@ main (int argc, char *argv[])
                return 1;
        }
        g_option_context_free (context);
-       
-       gnome_vfs_init ();
 
        accel_filename = g_build_filename (ev_dot_dir (), "accels", NULL);
        gtk_accel_map_load (accel_filename);
index b192d26e7ac18bb1a2f3c9f322b7efd470bc137c..d4d1a248e91c6982c8f0524912507290ab249268 100644 (file)
 */
 
 #include <config.h>
-#include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include <libgnomevfs/gnome-vfs-uri.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libgnomevfs/gnome-vfs-init.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
 
 #include <ev-document.h>
 #include <ev-document-thumbnails.h>
@@ -29,6 +24,8 @@
 #include <ev-document-factory.h>
 #include <ev-backends-manager.h>
 
+#include <gio/gio.h>
+
 #include <stdlib.h>
 #include <string.h>
 
@@ -138,6 +135,7 @@ main (int argc, char *argv[])
        const char *output;
        int         size;
        char       *uri;
+       GFile      *file;
 
        if (argc <= 2 || argc > 5 || strcmp (argv[1], "-h") == 0 ||
            strcmp (argv[1], "--help") == 0) {
@@ -162,13 +160,14 @@ main (int argc, char *argv[])
 
        if (!g_thread_supported ())
                g_thread_init (NULL);
-       
-       gnome_vfs_init ();
 
        ev_backends_manager_init ();
 
-       uri = gnome_vfs_make_uri_from_shell_arg (input);
+       file = g_file_new_for_commandline_arg (input);
+       uri = g_file_get_uri (file);
        document = evince_thumbnailer_get_document (uri);
+
+       g_object_unref (file);
        g_free (uri);
 
        if (!document) {