[gthumb] facebook: update the progress bar while uploading images



commit f3003b3d0c964edc50a1361b387695830ec967fe
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Sep 2 12:50:59 2011 +0200

    facebook: update the progress bar while uploading images

 extensions/facebook/facebook-service.c |   49 ++++++++++++++++++++++++--------
 1 files changed, 37 insertions(+), 12 deletions(-)
---
diff --git a/extensions/facebook/facebook-service.c b/extensions/facebook/facebook-service.c
index fc35d6d..dc4e390 100644
--- a/extensions/facebook/facebook-service.c
+++ b/extensions/facebook/facebook-service.c
@@ -42,6 +42,7 @@ typedef struct {
 	GList               *current;
 	goffset              total_size;
 	goffset              uploaded_size;
+	goffset              wrote_body_data_size;
 	int                  n_files;
 	int                  uploaded_files;
 	GList               *ids;
@@ -675,6 +676,37 @@ upload_photo_ready_cb (SoupSession *session,
 
 
 static void
+upload_photo_wrote_body_data_cb (SoupMessage *msg,
+                		 SoupBuffer  *chunk,
+                		 gpointer     user_data)
+{
+	FacebookService *self = user_data;
+	GthFileData     *file_data;
+	char            *details;
+	double           current_file_fraction;
+
+	if (self->priv->post_photos->current == NULL)
+		return;
+
+	self->priv->post_photos->wrote_body_data_size += chunk->length;
+	if (self->priv->post_photos->wrote_body_data_size > msg->request_body->length)
+		return;
+
+	file_data = self->priv->post_photos->current->data;
+	/* Translators: %s is a filename */
+	details = g_strdup_printf (_("Uploading '%s'"), g_file_info_get_display_name (file_data->info));
+	current_file_fraction = (double) self->priv->post_photos->wrote_body_data_size / msg->request_body->length;
+	gth_task_progress (GTH_TASK (self->priv->conn),
+			   NULL,
+			   details,
+			   FALSE,
+			   (double) (self->priv->post_photos->uploaded_size + (g_file_info_get_size (file_data->info) * current_file_fraction)) / self->priv->post_photos->total_size);
+
+	g_free (details);
+}
+
+
+static void
 upload_photo_file_buffer_ready_cb (void     **buffer,
 				   gsize      count,
 				   GError    *error,
@@ -803,20 +835,13 @@ upload_photo_file_buffer_ready_cb (void     **buffer,
 
 	/* send the file */
 
-	{
-		char *details;
-
-		/* Translators: %s is a filename */
-		details = g_strdup_printf (_("Uploading '%s'"), g_file_info_get_display_name (file_data->info));
-		gth_task_progress (GTH_TASK (self->priv->conn),
-				   NULL, details,
-				   FALSE,
-				   (double) (self->priv->post_photos->uploaded_size + (g_file_info_get_size (file_data->info) / 2.0)) / self->priv->post_photos->total_size);
-
-		g_free (details);
-	}
+	self->priv->post_photos->wrote_body_data_size = 0;
 
 	msg = soup_form_request_new_from_multipart (FACEBOOK_HTTPS_REST_SERVER, multipart);
+	g_signal_connect (msg,
+			  "wrote-body-data",
+			  (GCallback) upload_photo_wrote_body_data_cb,
+			  self);
 	facebook_connection_send_message (self->priv->conn,
 					  msg,
 					  self->priv->post_photos->cancellable,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]