[PATCH] update file size after starting transfer
- From: Jonathan Matthew <jonathan kaolin wh9 net>
- To: gnome-vfs-list gnome org
- Subject: [PATCH] update file size after starting transfer
- Date: Wed, 17 Jan 2007 08:12:18 +1000
Hi,
The file size reported to gnome-vfs transfer callbacks is currently
based on values returned by gnome_vfs_get_file_info() before starting
the transfer. For HTTP transfers, this means it's based on the
Content-Length header returned from a HEAD request.
In bugs 330498 and 378155, there are a few examples of HTTP servers that
do not return Content-Length headers for HEAD requests, or return
'Content-Length: 0'. The HTTP server is not required to return exactly
the same headers as it would for a GET request (RFC 2616 only says it
SHOULD).
The patch adds a gnome_vfs_get_file_info_from_handle() call after
opening the source file to set the file size if the initial
gnome_vfs_get_file_info() didn't provide a value. For HTTP transfers,
this will use the Content-Length header from the GET response, which is
at least a bit more likely to provide the right value.
thanks,
jonathan
Index: libgnomevfs/gnome-vfs-xfer.c
===================================================================
--- libgnomevfs/gnome-vfs-xfer.c (revision 5266)
+++ libgnomevfs/gnome-vfs-xfer.c (working copy)
@@ -1341,6 +1341,23 @@
}
} while (retry);
+ /* if we didn't get a file size earlier,
+ * try to get one from the handle (#330498)
+ */
+ if (progress->progress_info->file_size == 0) {
+ GnomeVFSFileInfo *info;
+
+ info = gnome_vfs_file_info_new ();
+ result = gnome_vfs_get_file_info_from_handle (*source_handle,
+ info,
+ GNOME_VFS_FILE_INFO_DEFAULT);
+ if (result == GNOME_VFS_OK &&
+ info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) {
+ progress->progress_info->file_size = info->size;
+ }
+ gnome_vfs_file_info_unref (info);
+ }
+
return result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]