summaryrefslogtreecommitdiff
path: root/invest-applet
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2025-10-01 14:36:29 -0400
committerVictor Kareh <[email protected]>2025-10-02 02:58:32 +0000
commitd433bbd9aeb7ae3377e59c70f6608c3e29f9ebbc (patch)
treec30271c47198d6c4c7eb1d09166325c5611fbf67 /invest-applet
parentc90425a43ed401ce71766ef038e0333269dcee73 (diff)
downloadmate-applets-master.tar.bz2
mate-applets-master.tar.xz
invest: Migrate from libsoup 2.4 to libsoup 3.0HEADmaster
Diffstat (limited to 'invest-applet')
-rw-r--r--invest-applet/invest/invest-applet-chart.c36
-rw-r--r--invest-applet/invest/invest-applet.c38
2 files changed, 55 insertions, 19 deletions
diff --git a/invest-applet/invest/invest-applet-chart.c b/invest-applet/invest/invest-applet-chart.c
index 1114b900..c6699088 100644
--- a/invest-applet/invest/invest-applet-chart.c
+++ b/invest-applet/invest/invest-applet-chart.c
@@ -49,7 +49,7 @@ struct _InvestChart {
};
static void fetch_chart_data (InvestChart *chart);
-static void on_chart_data_received (SoupSession *session, SoupMessage *msg, gpointer user_data);
+static void on_chart_data_received (GObject *source_object, GAsyncResult *result, gpointer user_data);
static gboolean chart_draw_cb (GtkWidget *widget, cairo_t *cr, InvestChart *chart);
static gboolean chart_window_key_press (GtkWidget *widget, GdkEventKey *event, InvestChart *chart);
static void chart_range_button_clicked (GtkWidget *widget, InvestChart *chart);
@@ -221,15 +221,17 @@ fetch_chart_data (InvestChart *chart)
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] = chart;
user_data_with_index[1] = GINT_TO_POINTER (i);
+ user_data_with_index[2] = msg;
/* Queue the actual request to the Yahoo Finance API */
- soup_session_queue_message (chart->applet->soup_session, msg, on_chart_data_received, user_data_with_index);
+ soup_session_send_and_read_async (chart->applet->soup_session, msg, G_PRIORITY_DEFAULT, NULL, on_chart_data_received, user_data_with_index);
g_free (url);
}
@@ -237,29 +239,42 @@ fetch_chart_data (InvestChart *chart)
}
static void
-on_chart_data_received (SoupSession *session, SoupMessage *msg, gpointer user_data)
+on_chart_data_received (GObject *source_object, GAsyncResult *result, gpointer user_data)
{
gpointer *user_data_with_index = (gpointer *)user_data;
InvestChart *chart = (InvestChart *)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 chart 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 chart 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 chart 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 chart 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);
@@ -349,6 +364,9 @@ cleanup:
if (parser) {
g_object_unref (parser);
}
+ if (msg) {
+ g_object_unref (msg);
+ }
/* Redraw chart if window is still visible */
if (chart->window && gtk_widget_get_visible (chart->window)) {
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);
}