[gvfs] afp: Report number of bytes copied
- From: Ross Lagerwall <rossl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs] afp: Report number of bytes copied
- Date: Wed, 4 Jun 2014 06:22:30 +0000 (UTC)
commit dd14287060689075fd3259c4c627d20bd46b9ed2
Author: Ross Lagerwall <rosslagerwall gmail com>
Date: Mon Jun 2 18:05:38 2014 +0100
afp: Report number of bytes copied
Report the number of bytes copied at the end since this is required by
the g_file_copy API. This doesn't add any overhead either since we're
already stat()ing the source file.
https://bugzilla.gnome.org/show_bug.cgi?id=731116
daemon/gvfsbackendafp.c | 36 ++++++++++++++++++++++++------------
1 files changed, 24 insertions(+), 12 deletions(-)
---
diff --git a/daemon/gvfsbackendafp.c b/daemon/gvfsbackendafp.c
index 21825d4..13bca67 100644
--- a/daemon/gvfsbackendafp.c
+++ b/daemon/gvfsbackendafp.c
@@ -163,6 +163,7 @@ typedef struct
GVfsJobCopy *job;
GAsyncResult *source_parms_res;
GAsyncResult *dest_parms_res;
+ goffset size;
} CopyData;
static void
@@ -178,9 +179,14 @@ static void
copy_copy_file_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
GVfsAfpVolume *volume = G_VFS_AFP_VOLUME (source_object);
- GVfsJobCopy *job = G_VFS_JOB_COPY (user_data);
+ CopyData *copy_data = user_data;
+ GVfsJobCopy *job = copy_data->job;
+ goffset size;
GError *err = NULL;
+
+ size = copy_data->size;
+ copy_data_free (copy_data);
if (!g_vfs_afp_volume_copy_file_finish (volume, res, &err))
{
@@ -189,6 +195,7 @@ copy_copy_file_cb (GObject *source_object, GAsyncResult *res, gpointer user_data
return;
}
+ g_vfs_job_progress_callback (size, size, job);
g_vfs_job_succeeded (G_VFS_JOB (job));
}
@@ -196,7 +203,8 @@ static void
copy_delete_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
GVfsAfpVolume *volume = G_VFS_AFP_VOLUME (source_object);
- GVfsJobCopy *job = G_VFS_JOB_COPY (user_data);
+ CopyData *copy_data = user_data;
+ GVfsJobCopy *job = copy_data->job;
GVfsBackendAfp *afp_backend = G_VFS_BACKEND_AFP (job->backend);
GError *err = NULL;
@@ -205,11 +213,12 @@ copy_delete_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
g_vfs_job_failed_from_error (G_VFS_JOB (job), err);
g_error_free (err);
+ copy_data_free (copy_data);
return;
}
g_vfs_afp_volume_copy_file (afp_backend->volume, job->source, job->destination,
- G_VFS_JOB (job)->cancellable, copy_copy_file_cb, job);
+ G_VFS_JOB (job)->cancellable, copy_copy_file_cb, copy_data);
}
static void
@@ -230,8 +239,9 @@ do_copy (CopyData *copy_data)
{
g_vfs_job_failed_from_error (G_VFS_JOB (job), err);
g_error_free (err);
- goto done;
+ goto error;
}
+ copy_data->size = g_file_info_get_size (info);
/* If the source is a directory, don't fail with WOULD_RECURSE immediately,
* as that is less useful to the app. Better check for errors on the
@@ -252,7 +262,7 @@ do_copy (CopyData *copy_data)
{
g_vfs_job_failed_from_error (G_VFS_JOB (job), err);
g_error_free (err);
- goto done;
+ goto error;
}
}
else
@@ -276,14 +286,14 @@ do_copy (CopyData *copy_data)
else
g_vfs_job_failed_literal (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
_("File is directory"));
- goto done;
+ goto error;
}
}
else
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_EXISTS,
_("Target file already exists"));
- goto done;
+ goto error;
}
}
@@ -292,21 +302,22 @@ do_copy (CopyData *copy_data)
{
g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE,
_("Can't recursively copy directory"));
- goto done;
+ goto error;
}
if (dest_exists)
{
g_vfs_afp_volume_delete (afp_backend->volume, job->destination,
- G_VFS_JOB (job)->cancellable, copy_delete_cb, job);
+ G_VFS_JOB (job)->cancellable, copy_delete_cb, copy_data);
}
else
{
g_vfs_afp_volume_copy_file (afp_backend->volume, job->source, job->destination,
- G_VFS_JOB (job)->cancellable, copy_copy_file_cb, job);
+ G_VFS_JOB (job)->cancellable, copy_copy_file_cb, copy_data);
}
+ return;
-done:
+error:
copy_data_free (copy_data);
return;
}
@@ -348,7 +359,8 @@ try_copy (GVfsBackend *backend,
copy_data->job = job;
g_vfs_afp_volume_get_filedir_parms (afp_backend->volume, source,
- AFP_FILEDIR_BITMAP_ATTRIBUTE_BIT,
+ AFP_FILEDIR_BITMAP_ATTRIBUTE_BIT |
+ AFP_FILE_BITMAP_EXT_DATA_FORK_LEN_BIT,
AFP_FILEDIR_BITMAP_ATTRIBUTE_BIT,
G_VFS_JOB (job)->cancellable, copy_get_source_parms_cb,
copy_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]