[ostree] pull: Correctly display concurrent libsoup requests
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] pull: Correctly display concurrent libsoup requests
- Date: Thu, 12 Jul 2012 16:04:58 +0000 (UTC)
commit 95921bcbf0a6b710dedd107fbacb41090af74ed9
Author: Colin Walters <walters verbum org>
Date: Thu Jul 12 11:19:15 2012 -0400
pull: Correctly display concurrent libsoup requests
The "status text" code was assuming that libsoup was only doing one
thing at a time, but that's never been the case. Change the code to
display the status of all active requests.
src/ostree/ostree-fetcher.c | 74 ++++++++++++++++++++++++++-----------------
1 files changed, 45 insertions(+), 29 deletions(-)
---
diff --git a/src/ostree/ostree-fetcher.c b/src/ostree/ostree-fetcher.c
index c1239cb..7ab15ed 100644
--- a/src/ostree/ostree-fetcher.c
+++ b/src/ostree/ostree-fetcher.c
@@ -77,9 +77,9 @@ struct OstreeFetcher
SoupSession *session;
SoupRequester *requester;
- SoupMessage *sending_message;
+ GHashTable *sending_messages; /* SoupMessage */
- GHashTable *message_to_request;
+ GHashTable *message_to_request; /* SoupMessage -> SoupRequest */
guint64 total_downloaded;
};
@@ -95,6 +95,9 @@ ostree_fetcher_finalize (GObject *object)
g_clear_object (&self->session);
+ g_hash_table_destroy (self->sending_messages);
+ g_hash_table_destroy (self->message_to_request);
+
G_OBJECT_CLASS (ostree_fetcher_parent_class)->finalize (object);
}
@@ -113,7 +116,7 @@ on_request_started (SoupSession *session,
gpointer user_data)
{
OstreeFetcher *self = user_data;
- self->sending_message = msg;
+ g_hash_table_insert (self->sending_messages, msg, g_object_ref (msg));
}
static void
@@ -122,8 +125,7 @@ on_request_unqueued (SoupSession *session,
gpointer user_data)
{
OstreeFetcher *self = user_data;
- if (msg == self->sending_message)
- self->sending_message = NULL;
+ g_hash_table_remove (self->sending_messages, msg);
g_hash_table_remove (self->message_to_request, msg);
}
@@ -141,6 +143,8 @@ ostree_fetcher_init (OstreeFetcher *self)
g_signal_connect (self->session, "request-unqueued",
G_CALLBACK (on_request_unqueued), self);
+ self->sending_messages = g_hash_table_new_full (NULL, NULL, NULL,
+ (GDestroyNotify)g_object_unref);
self->message_to_request = g_hash_table_new_full (NULL, NULL, (GDestroyNotify)g_object_unref,
(GDestroyNotify)pending_uri_free);
}
@@ -284,37 +288,49 @@ format_size_pair (guint64 start,
char *
ostree_fetcher_query_state_text (OstreeFetcher *self)
{
- OstreeFetcherPendingURI *active;
+ guint n_active;
- if (self->sending_message)
- active = g_hash_table_lookup (self->message_to_request, self->sending_message);
- else
- active = NULL;
- if (active)
+ n_active = g_hash_table_size (self->sending_messages);
+ if (n_active > 0)
{
- ot_lfree char *active_uri = soup_uri_to_string (active->uri, TRUE);
+ GHashTableIter hash_iter;
+ gpointer key, value;
+ GString *buf;
+
+ buf = g_string_new ("");
- if (active->tmpfile)
+ g_string_append_printf (buf, "%u requests", n_active);
+
+ g_hash_table_iter_init (&hash_iter, self->sending_messages);
+ while (g_hash_table_iter_next (&hash_iter, &key, &value))
{
- ot_lobj GFileInfo *file_info = NULL;
+ OstreeFetcherPendingURI *active;
+
+ active = g_hash_table_lookup (self->message_to_request, key);
+ g_assert (active != NULL);
- file_info = g_file_query_info (active->tmpfile, OSTREE_GIO_FAST_QUERYINFO,
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- NULL, NULL);
- if (file_info)
+ if (active->tmpfile)
{
- ot_lfree char *size = format_size_pair (g_file_info_get_size (file_info),
- active->content_length);
- return g_strdup_printf ("Downloading %s [ %s, %.1f KiB downloaded ]",
- active_uri, size, ((double)self->total_downloaded) / 1024);
+ ot_lobj GFileInfo *file_info = NULL;
+
+ file_info = g_file_query_info (active->tmpfile, OSTREE_GIO_FAST_QUERYINFO,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL, NULL);
+ if (file_info)
+ {
+ ot_lfree char *size = format_size_pair (g_file_info_get_size (file_info),
+ active->content_length);
+ g_string_append_printf (buf, " [%s]", size);
+ }
+ }
+ else
+ {
+ g_string_append_printf (buf, " [Requesting]");
}
}
- else
- {
- return g_strdup_printf ("Requesting %s [ %.1f KiB downloaded ]",
- active_uri, ((double)self->total_downloaded) / 1024);
- }
- }
- return g_strdup_printf ("Idle [ %.1f KiB downloaded ]", ((double)self->total_downloaded) / 1024);
+ return g_string_free (buf, FALSE);
+ }
+ else
+ return g_strdup_printf ("Idle");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]