[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