diff --git a/src/ghtml-gtkhtml.c b/src/ghtml-gtkhtml.c
index 9919d78..bbf82c1 100644
--- a/src/ghtml-gtkhtml.c
+++ b/src/ghtml-gtkhtml.c
@@ -258,7 +258,7 @@ void ghtml_refresh(GtkWidget * widget)
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
if(ghtml->html_url == NULL)
return;
- /* FIXME keep and warn about POST data */
+ /* FIXME keep POST data and warn about re-submission */
_ghtml_document_load(ghtml, ghtml->html_url, NULL);
}
@@ -526,6 +526,7 @@ static void _stream_load_watch_http(GConnHttp * connhttp,
static void _http_connected(GHtmlConn * conn);
static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn);
static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn);
+static void _http_data_progress(GConnHttpEventData * event, GHtmlConn * conn);
static void _http_error(GConnHttpEventError * event, GHtmlConn * conn);
static void _http_redirect(GConnHttpEventRedirect * event, GHtmlConn * conn);
static void _http_resolved(GConnHttpEventResolved * event, GHtmlConn * conn);
@@ -748,7 +749,7 @@ static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn)
{
if(size > 0)
html_stream_write(conn->stream, buf, size);
- surfer_set_progress(conn->ghtml->surfer, 1.0);
+ _http_data_progress(event, conn);
}
surfer_set_status(conn->ghtml->surfer, NULL);
_ghtmlconn_delete(conn);
@@ -758,7 +759,6 @@ static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn)
{
gchar * buf;
gsize size;
- gdouble fraction;
surfer_set_status(conn->ghtml->surfer, "Downloading...");
if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
@@ -768,13 +768,31 @@ static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn)
return;
}
html_stream_write(conn->stream, buf, size);
- if(event->content_length > 0)
+ _http_data_progress(event, conn);
+}
+
+static void _http_data_progress(GConnHttpEventData * event, GHtmlConn * conn)
+{
+ size_t i;
+ GHtmlConn * p;
+ guint64 len = 0;
+ guint64 rec = 0;
+ gdouble fraction;
+
+ conn->data_received = event->data_received;
+ conn->content_length = event->content_length;
+ for(i = 0; i < conn->ghtml->conns_cnt; i++)
{
- conn->data_received = event->data_received;
- conn->content_length = event->content_length;
- fraction = conn->data_received;
- surfer_set_progress(conn->ghtml->surfer,
- fraction / conn->content_length);
+ if((p = conn->ghtml->conns[i]) == NULL
+ || p->content_length == 0)
+ continue;
+ len += p->content_length;
+ rec += p->data_received;
+ }
+ if(len > 0)
+ {
+ fraction = rec;
+ surfer_set_progress(conn->ghtml->surfer, fraction / len);
}
}