[Telepathy-commits] [telepathy-salut/master] Emit the canceled signal in the GibberOobFileTransfer when appropriate.

Jonny Lamb jonny.lamb at collabora.co.uk
Fri Nov 21 03:46:15 PST 2008


20080805111035-8ed0e-f91960cb96d9d029aa4e1aafcd61696896dd1db7.gz
---
 lib/gibber/gibber-oob-file-transfer.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index 8cfd32a..d47ee75 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -52,6 +52,8 @@ struct _GibberOobFileTransferPrivate
   gchar *url;
   /* Input/output channel */
   GIOChannel *channel;
+  /* Current number of transferred bytes */
+  guint64 transferred_bytes;
 };
 
 static void
@@ -205,6 +207,8 @@ gibber_oob_file_transfer_new_from_stanza (GibberXmppStanza *stanza,
 
   self->priv->url = url;
 
+  self->priv->transferred_bytes = 0;
+
   g_free (filename);
 
   return GIBBER_FILE_TRANSFER (self);
@@ -215,6 +219,7 @@ transferred_chunk (GibberOobFileTransfer *self,
                 guint64 bytes_read)
 {
   g_signal_emit_by_name (self, "transferred-chunk", bytes_read);
+  self->priv->transferred_bytes += bytes_read;
 }
 
 /*
@@ -246,10 +251,19 @@ http_client_finished_chunks_cb (SoupMessage *msg,
   /* disconnect from the "got_chunk" signal */
   g_signal_handlers_disconnect_by_func (msg, http_client_chunk_cb, user_data);
 
-  DEBUG("Finished HTTP chunked file transfer");
   g_io_channel_unref (self->priv->channel);
   self->priv->channel = NULL;
 
+  /* Is the transfer actually incomplete? */
+  if (GIBBER_FILE_TRANSFER (self)->size > self->priv->transferred_bytes)
+    {
+      DEBUG ("File transfer incomplete");
+      g_signal_emit_by_name (self, "canceled");
+      return;
+    }
+
+  DEBUG ("Finished HTTP chunked file transfer");
+
   if (msg->status_code != 200)
     {
       GError *error = NULL;
-- 
1.5.6.5




More information about the Telepathy-commits mailing list