diff options
Diffstat (limited to 'invest-applet/invest/invest-applet.c')
| -rw-r--r-- | invest-applet/invest/invest-applet.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/invest-applet/invest/invest-applet.c b/invest-applet/invest/invest-applet.c index 979d90fb..d35c053c 100644 --- a/invest-applet/invest/invest-applet.c +++ b/invest-applet/invest/invest-applet.c @@ -66,31 +66,44 @@ invest_applet_update_display (InvestApplet *applet) } static void -on_stock_data_received (SoupSession *session, - SoupMessage *msg, - gpointer user_data) +on_stock_data_received (GObject *source_object, + GAsyncResult *result, + gpointer user_data) { gpointer *user_data_with_index = (gpointer *)user_data; InvestApplet *applet = INVEST_APPLET (user_data_with_index[0]); gint symbol_index = GPOINTER_TO_INT (user_data_with_index[1]); + SoupMessage *msg = SOUP_MESSAGE (user_data_with_index[2]); JsonParser *parser = NULL; JsonNode *root; JsonObject *root_obj; GError *error = NULL; + GBytes *response_body; - if (msg->status_code != SOUP_STATUS_OK) { - g_warning ("Failed to fetch stock data for symbol %d: %s", symbol_index, msg->reason_phrase); + response_body = soup_session_send_and_read_finish (SOUP_SESSION (source_object), result, &error); + if (error) { + g_warning ("Failed to fetch stock data for symbol %d: %s", symbol_index, error->message); + g_error_free (error); + goto cleanup; + } + + if (soup_message_get_status (msg) != SOUP_STATUS_OK) { + g_warning ("Failed to fetch stock data for symbol %d: %s", symbol_index, soup_message_get_reason_phrase (msg)); + g_bytes_unref (response_body); goto cleanup; } parser = json_parser_new (); - if (!json_parser_load_from_data (parser, msg->response_body->data, - msg->response_body->length, &error)) { + gsize data_length; + const gchar *data = g_bytes_get_data (response_body, &data_length); + if (!json_parser_load_from_data (parser, data, data_length, &error)) { g_warning ("Failed to parse JSON for symbol %d: %s", symbol_index, error->message); g_error_free (error); + g_bytes_unref (response_body); goto cleanup; } + g_bytes_unref (response_body); root = json_parser_get_root (parser); root_obj = json_node_get_object (root); @@ -148,6 +161,9 @@ cleanup: if (parser) { g_object_unref (parser); } + if (msg) { + g_object_unref (msg); + } applet->pending_requests--; if (applet->pending_requests == 0) { @@ -227,14 +243,16 @@ invest_applet_update_stocks (gpointer user_data) SoupMessage *msg = soup_message_new ("GET", url); /* HACK: avoid rate limiting */ - soup_message_headers_replace (msg->request_headers, "User-Agent", + SoupMessageHeaders *headers = soup_message_get_request_headers (msg); + soup_message_headers_replace (headers, "User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"); - gpointer *user_data_with_index = g_malloc (2 * sizeof (gpointer)); + gpointer *user_data_with_index = g_malloc (3 * sizeof (gpointer)); user_data_with_index[0] = applet; user_data_with_index[1] = GINT_TO_POINTER (i); + user_data_with_index[2] = msg; - soup_session_queue_message (applet->soup_session, msg, on_stock_data_received, user_data_with_index); + soup_session_send_and_read_async (applet->soup_session, msg, G_PRIORITY_DEFAULT, NULL, on_stock_data_received, user_data_with_index); g_free (url); } |
