[DataView] Fix bold of playing song, italic 'prioritized songs'
[gmpc.git] / src / Widgets / mpd-async-request.c
blobe55df0aab0860f0610fd978764ebb3ae39dcd741
1 #include <glib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <strings.h>
6 #include <gio/gio.h>
7 #include "main.h"
8 #include "mpd-async-request.h"
10 #define LOG_DOMAIN "MpdAsyncRequest"
12 typedef struct
14 MpdObj *mi;
15 MpdAsyncFunction *function;
16 gpointer function_data;
17 MpdAsyncCallback *callback;
18 gpointer callback_data;
19 MpdData *result;
20 } MpdAsyncData;
22 static void __async_handler_function(GSimpleAsyncResult * simple, GObject * object, GCancellable * cancel)
24 MpdAsyncData *data = g_simple_async_result_get_op_res_gpointer(G_SIMPLE_ASYNC_RESULT(simple));
25 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Start async function\n");
26 if (mpd_connect(data->mi) == MPD_OK)
28 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "call function\n");
29 data->result = (data->function(data->mi, data->function_data));
30 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Got result: %p\n", data->result);
33 mpd_free(data->mi);
36 static void __mpd_async_simple_callback(GObject * object, GAsyncResult * simple, gpointer user_data)
38 MpdAsyncData *data = g_simple_async_result_get_op_res_gpointer(G_SIMPLE_ASYNC_RESULT(simple));
39 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Start async result function %p\n", data);
40 if (data->callback)
41 data->callback(data->result, data->callback_data);
44 static void __mpd_async_result_free_data(gpointer udata)
46 MpdAsyncData *data = (MpdAsyncData *) udata;
47 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Free data\n");
48 g_free(data);
51 void mpd_async_request(MpdAsyncCallback * callback, gpointer callback_data, MpdAsyncFunction * function,
52 gpointer function_data)
54 gchar *string = NULL;
55 GSimpleAsyncResult *res = NULL;
56 MpdAsyncData *data = g_new0(MpdAsyncData, 1);
57 data->mi = mpd_new_default();
58 data->function = function;
59 data->function_data = function_data;
60 data->callback = callback;
61 data->callback_data = callback_data;
62 /**
63 * Set Hostname
65 string = connection_get_hostname();
66 mpd_set_hostname(data->mi, string);
67 /**
68 * Set port
70 mpd_set_port(data->mi, connection_get_port());
71 /**
72 * Timeout
74 mpd_set_connection_timeout(data->mi,
75 cfg_get_single_value_as_float_with_default(config, "connection", "timeout",
76 DEFAULT_TIMEOUT));
78 if (connection_use_auth())
80 string = connection_get_password();
81 mpd_set_password(data->mi, string);
82 } else
84 mpd_set_password(data->mi, "");
87 res = g_simple_async_result_new(NULL, __mpd_async_simple_callback, NULL, mpd_async_request);
88 g_simple_async_result_set_op_res_gpointer(G_SIMPLE_ASYNC_RESULT(res), data, __mpd_async_result_free_data);
89 g_log(LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Start async thread %p\n", data);
90 g_simple_async_result_run_in_thread(res, __async_handler_function, G_PRIORITY_LOW, NULL);