[Telepathy-commits] [telepathy-salut/master] Added transferred-chunk signal to enable TransferredBytes to work.
Jonny Lamb
jonny.lamb at collabora.co.uk
Fri Nov 21 03:46:17 PST 2008
20080804160458-8ed0e-ace6aeefc687528a03cecc1bbdae4dc1254209d3.gz
---
lib/gibber/gibber-file-transfer.c | 8 ++++++++
lib/gibber/gibber-oob-file-transfer.c | 9 +++++++++
src/salut-file-channel.c | 18 ++++++++++++++++--
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/lib/gibber/gibber-file-transfer.c b/lib/gibber/gibber-file-transfer.c
index ac469fb..b4f96fe 100644
--- a/lib/gibber/gibber-file-transfer.c
+++ b/lib/gibber/gibber-file-transfer.c
@@ -40,6 +40,7 @@ enum
REMOTE_ACCEPTED,
FINISHED,
ERROR,
+ TRANSFERRED_CHUNK,
LAST_SIGNAL
};
@@ -248,6 +249,13 @@ gibber_file_transfer_class_init (GibberFileTransferClass *gibber_file_transfer_c
0, NULL, NULL,
_gibber_signals_marshal_VOID__UINT_INT_STRING,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_INT, G_TYPE_STRING);
+
+ signals[TRANSFERRED_CHUNK] = g_signal_new ("transferred-chunk",
+ G_OBJECT_CLASS_TYPE (gibber_file_transfer_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0, NULL, NULL,
+ _gibber_signals_marshal_VOID__UINT64,
+ G_TYPE_NONE, 1, G_TYPE_UINT64);
}
static void
diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index 6f2b2c5..64a2e11 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -210,6 +210,13 @@ gibber_oob_file_transfer_new_from_stanza (GibberXmppStanza *stanza,
return GIBBER_FILE_TRANSFER (self);
}
+static void
+transferred_chunk (GibberOobFileTransfer *self,
+ guint64 bytes_read)
+{
+ g_signal_emit_by_name (self, "transferred-chunk", bytes_read);
+}
+
/*
* Data received from the HTTP server.
*/
@@ -222,6 +229,7 @@ http_client_chunk_cb (SoupMessage *msg,
/* FIXME make async */
g_io_channel_write_chars (self->priv->channel, msg->response.body,
msg->response.length, NULL, NULL);
+ transferred_chunk (self, (guint64) msg->response.length);
}
/*
@@ -405,6 +413,7 @@ input_channel_readable_cb (GIOChannel *source,
buff, bytes_read);
soup_message_io_unpause (self->priv->msg);
DEBUG("Data available, writing a %d bytes chunk", bytes_read);
+ transferred_chunk (self, (guint64) bytes_read);
return FALSE;
case G_IO_STATUS_AGAIN:
DEBUG("Data available, try again");
diff --git a/src/salut-file-channel.c b/src/salut-file-channel.c
index 8dddf34..3dc99d9 100644
--- a/src/salut-file-channel.c
+++ b/src/salut-file-channel.c
@@ -778,8 +778,8 @@ remote_accepted_cb (GibberFileTransfer *ft,
g_signal_connect (ft, "finished", G_CALLBACK (ft_finished_cb), self);
}
-static gboolean
-setup_local_socket (SalutFileChannel *self);
+static gboolean setup_local_socket (SalutFileChannel *self);
+static void ft_transferred_chunk_cb (GibberFileTransfer *ft, guint64 count, SalutFileChannel *self);
static void
send_file_offer (SalutFileChannel *self)
@@ -798,6 +798,8 @@ send_file_offer (SalutFileChannel *self)
self->priv->ft = ft;
+ g_signal_connect (ft, "transferred-chunk", G_CALLBACK (ft_transferred_chunk_cb), self);
+
setup_local_socket (self);
if (self->priv->size != SALUT_UNDEFINED_FILE_SIZE)
@@ -908,6 +910,17 @@ salut_file_channel_set_state (SalutSvcChannelTypeFile *iface,
state, reason);
}
+static void
+ft_transferred_chunk_cb (GibberFileTransfer *ft, guint64 count, SalutFileChannel *self)
+{
+ SalutSvcChannelTypeFile *iface = SALUT_SVC_CHANNEL_TYPE_FILE (self);
+
+ self->priv->transferred_bytes += count;
+
+ salut_svc_channel_type_file_emit_transferred_bytes_changed (iface,
+ self->priv->transferred_bytes);
+}
+
/**
* salut_file_channel_accept_file
*
@@ -950,6 +963,7 @@ salut_file_channel_accept_file (SalutSvcChannelTypeFile *iface,
}
g_signal_connect (ft, "finished", G_CALLBACK (ft_finished_cb), self);
+ g_signal_connect (ft, "transferred-chunk", G_CALLBACK (ft_transferred_chunk_cb), self);
setup_local_socket (self);
--
1.5.6.5
More information about the Telepathy-commits
mailing list