X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-job-xfer.c;h=28e7a91a472ff725948e9019c540ce01120a1884;hb=1ba681aa9eb43a60f0a01c1939e70f9f6de755c7;hp=b75e9d1c97bcca0b349bb76f6fd56a051ef4fe5e;hpb=bca369672136e5ff831ece9832afd42085808fba;p=evince.git diff --git a/shell/ev-job-xfer.c b/shell/ev-job-xfer.c index b75e9d1c..28e7a91a 100644 --- a/shell/ev-job-xfer.c +++ b/shell/ev-job-xfer.c @@ -24,6 +24,7 @@ #include "ev-job-xfer.h" #include "ev-document-types.h" +#include "ev-file-helpers.h" #include #include @@ -31,6 +32,7 @@ #include #include #include +#include static void ev_job_xfer_init (EvJobXfer *job); static void ev_job_xfer_class_init (EvJobXferClass *class); @@ -49,6 +51,11 @@ ev_job_xfer_dispose (GObject *object) job->uri = NULL; } + if (job->local_uri) { + g_free (job->local_uri); + job->local_uri = NULL; + } + if (job->error) { g_error_free (job->error); job->error = NULL; @@ -83,9 +90,10 @@ ev_job_xfer_new (const gchar *uri) void ev_job_xfer_run (EvJobXfer *job) { - GnomeVFSURI *vfs_uri; - char *mime_type; - GType document_type; + EvDocument *document; + GError *error = NULL; + GnomeVFSURI *source_uri; + GnomeVFSURI *target_uri; g_return_if_fail (EV_IS_JOB_XFER (job)); @@ -94,34 +102,35 @@ ev_job_xfer_run (EvJobXfer *job) job->error = NULL; } - vfs_uri = gnome_vfs_uri_new (job->uri); - if (vfs_uri) { - if (!gnome_vfs_uri_exists (vfs_uri)) { - g_set_error (&job->error, - EV_DOCUMENT_ERROR, - 0, - _("The file %s does not exist."), - job->uri); - - EV_JOB (job)->finished = TRUE; - return; - } - } - gnome_vfs_uri_unref (vfs_uri); - - document_type = ev_document_type_lookup (job->uri, &mime_type); + document = ev_document_types_get_document (job->uri, NULL, &error); - if (document_type != G_TYPE_INVALID) { - EV_JOB (job)->document = g_object_new (document_type, NULL); + if (document != NULL) { + EV_JOB (job)->document = document; } else { - g_set_error (&job->error, - EV_DOCUMENT_ERROR, - 0, - _("Unhandled MIME type: '%s'"), - mime_type ? mime_type : ""); + job->error = error; EV_JOB (job)->finished = TRUE; return; } + + source_uri = gnome_vfs_uri_new (job->uri); + if (!gnome_vfs_uri_is_local (source_uri)) { + char *tmp_name; + + tmp_name = ev_tmp_filename (); + job->local_uri = g_strconcat ("file:", tmp_name, NULL); + g_free (tmp_name); + + target_uri = gnome_vfs_uri_new (job->local_uri); + + 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, + job); + gnome_vfs_uri_unref (target_uri); + } + gnome_vfs_uri_unref (source_uri); EV_JOB (job)->finished = TRUE; return;