Re-implemented status tracking in the GtkTextView-based implementation

This commit is contained in:
Pierre Pronchery 2010-04-20 19:12:25 +00:00
parent 2bd872d86a
commit 230fd1defc
3 changed files with 41 additions and 11 deletions

View File

@ -38,6 +38,7 @@ struct _Conn
guint64 content_length; guint64 content_length;
guint64 data_received; guint64 data_received;
gdouble progress; gdouble progress;
char * status;
int direct; int direct;
int image; int image;
@ -60,7 +61,9 @@ static void _conn_delete(Conn * conn);
/* accessors */ /* accessors */
static gdouble _conn_get_progress(Conn * conn); static gdouble _conn_get_progress(Conn * conn);
static char const * _conn_get_status(Conn * conn);
static void _conn_set_progress(Conn * conn, gdouble progress); static void _conn_set_progress(Conn * conn, gdouble progress);
static void _conn_set_status(Conn * conn, char const * status);
static void _conn_set_callback_write(Conn * conn, static void _conn_set_callback_write(Conn * conn,
ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer), ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer),
@ -85,6 +88,7 @@ static Conn * _conn_new(Surfer * surfer, char const * url, char const * post)
return NULL; return NULL;
conn->surfer = surfer; conn->surfer = surfer;
conn->url = strdup(url); conn->url = strdup(url);
conn->status = NULL;
conn->http_post = (post != NULL) ? strdup(post) : NULL; conn->http_post = (post != NULL) ? strdup(post) : NULL;
if(conn->url == NULL || (post != NULL && conn->http_post == NULL)) if(conn->url == NULL || (post != NULL && conn->http_post == NULL))
{ {
@ -126,18 +130,28 @@ static ssize_t _new_callback_write(Conn * conn, char const * buf, ssize_t size,
static void _conn_delete(Conn * conn) static void _conn_delete(Conn * conn)
{ {
free(conn->url); free(conn->url);
free(conn->status);
free(conn->http_post); free(conn->http_post);
free(conn); free(conn);
} }
/* accessors */ /* accessors */
/* conn_get_progress */
static gdouble _conn_get_progress(Conn * conn) static gdouble _conn_get_progress(Conn * conn)
{ {
return conn->progress; return conn->progress;
} }
/* conn_get_status */
static char const * _conn_get_status(Conn * conn)
{
return conn->status;
}
/* conn_set_progress */
static void _conn_set_progress(Conn * conn, gdouble progress) static void _conn_set_progress(Conn * conn, gdouble progress)
{ {
conn->progress = progress; conn->progress = progress;
@ -145,6 +159,17 @@ static void _conn_set_progress(Conn * conn, gdouble progress)
} }
/* conn_set_status */
static void _conn_set_status(Conn * conn, char const * status)
{
free(conn->status);
/* XXX may fail */
conn->status = (status != NULL) ? strdup(status) : NULL;
surfer_set_status(conn->surfer, status);
}
/* conn_set_callback_write */
static void _conn_set_callback_write(Conn * conn, static void _conn_set_callback_write(Conn * conn,
ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer), ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer),
gpointer data) gpointer data)
@ -178,7 +203,7 @@ static int _conn_load(Conn * conn)
return 1; return 1;
} }
_conn_set_progress(conn, -1.0); _conn_set_progress(conn, -1.0);
surfer_set_status(conn->surfer, _("Resolving...")); _conn_set_status(conn, _("Resolving..."));
conn->http = gnet_conn_http_new(); conn->http = gnet_conn_http_new();
gnet_conn_http_set_uri(conn->http, conn->url); gnet_conn_http_set_uri(conn->http, conn->url);
gnet_conn_http_set_user_agent(conn->http, "DeforaOS " PACKAGE); gnet_conn_http_set_user_agent(conn->http, "DeforaOS " PACKAGE);
@ -227,7 +252,7 @@ static void _load_watch_http(GConnHttp * connhttp, GConnHttpEvent * event,
static void _http_connected(Conn * conn) static void _http_connected(Conn * conn)
{ {
surfer_set_status(conn->surfer, _("Connected")); _conn_set_status(conn, _("Connected"));
} }
static void _http_data_complete(GConnHttpEventData * event, Conn * conn) static void _http_data_complete(GConnHttpEventData * event, Conn * conn)
@ -239,12 +264,12 @@ static void _http_data_complete(GConnHttpEventData * event, Conn * conn)
{ {
/* FIXME report error */ /* FIXME report error */
_conn_set_progress(conn, -1.0); _conn_set_progress(conn, -1.0);
surfer_set_status(conn->surfer, NULL); _conn_set_status(conn, NULL);
return; return;
} }
conn->callback_write(conn, buf, size, conn->callback_write_data); conn->callback_write(conn, buf, size, conn->callback_write_data);
_http_data_progress(event, conn); _http_data_progress(event, conn);
surfer_set_status(conn->surfer, NULL); _conn_set_status(conn, NULL);
} }
static void _http_data_partial(GConnHttpEventData * event, Conn * conn) static void _http_data_partial(GConnHttpEventData * event, Conn * conn)
@ -252,7 +277,7 @@ static void _http_data_partial(GConnHttpEventData * event, Conn * conn)
gchar * buf; gchar * buf;
gsize size; gsize size;
surfer_set_status(conn->surfer, _("Downloading...")); _conn_set_status(conn, _("Downloading..."));
if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE) if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
/* FIXME report error */ /* FIXME report error */
return; return;
@ -290,7 +315,7 @@ static void _http_error(GConnHttpEventError * event, Conn * conn)
break; break;
} }
_conn_set_progress(conn, -1.0); _conn_set_progress(conn, -1.0);
surfer_set_status(conn->surfer, NULL); _conn_set_status(conn, NULL);
surfer_error(conn->surfer, msg, 0); surfer_error(conn->surfer, msg, 0);
} }
@ -301,11 +326,11 @@ static void _http_redirect(GConnHttpEventRedirect * event, Conn * conn)
if(url == NULL) if(url == NULL)
{ {
surfer_set_status(conn->surfer, buf); _conn_set_status(conn, buf);
return; return;
} }
/* FIXME implement */ /* FIXME implement */
surfer_set_status(conn->surfer, buf); _conn_set_status(conn, buf);
} }
static void _http_resolved(GConnHttpEventResolved * event, Conn * conn) static void _http_resolved(GConnHttpEventResolved * event, Conn * conn)
@ -322,5 +347,5 @@ static void _http_timeout(Conn * conn)
{ {
surfer_error(conn->surfer, _("Timeout"), 0); surfer_error(conn->surfer, _("Timeout"), 0);
_conn_set_progress(conn, -1.0); _conn_set_progress(conn, -1.0);
surfer_set_status(conn->surfer, NULL); _conn_set_status(conn, NULL);
} }

View File

@ -566,6 +566,7 @@ static void _ghtml_set_progress(GHtml * ghtml, gdouble progress)
static void _ghtml_set_status(GHtml * ghtml, char const * status) static void _ghtml_set_status(GHtml * ghtml, char const * status)
{ {
free(ghtml->status); free(ghtml->status);
/* XXX may fail */
ghtml->status = (status != NULL) ? strdup(status) : NULL; ghtml->status = (status != NULL) ? strdup(status) : NULL;
surfer_set_status(ghtml->surfer, status); surfer_set_status(ghtml->surfer, status);
} }

View File

@ -165,8 +165,12 @@ char const * ghtml_get_source(GtkWidget * widget)
/* ghtml_get_status */ /* ghtml_get_status */
char const * ghtml_get_status(GtkWidget * widget) char const * ghtml_get_status(GtkWidget * widget)
{ {
/* FIXME really implement */ GHtml * ghtml;
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
if(ghtml->conn == NULL)
return NULL; return NULL;
return _conn_get_status(ghtml->conn);
} }