27 #include <dbus/dbus.h>
28 #include <dbus/dbus-glib.h>
29 #include <dbus/dbus-glib-bindings.h>
30 #include <dbus/dbus-glib-lowlevel.h>
52 G_DEFINE_TYPE (
RemoteObject, audacious_rc, G_TYPE_OBJECT)
53 G_DEFINE_TYPE (
MprisRoot, mpris_root, G_TYPE_OBJECT)
54 G_DEFINE_TYPE (
MprisPlayer, mpris_player, G_TYPE_OBJECT)
57 #define DBUS_TYPE_G_STRING_VALUE_HASHTABLE (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE))
71 signals[
CAPS_CHANGE_SIG] = g_signal_new(
"caps_change", G_OBJECT_CLASS_TYPE(klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0,
NULL,
NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
73 g_signal_new(
"track_change",
76 GType status_type = dbus_g_type_get_struct (
"GValueArray", G_TYPE_INT,
77 G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INVALID);
79 g_signal_new (
"status_change", G_OBJECT_CLASS_TYPE (klass),
80 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0,
NULL,
NULL,
81 g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, status_type);
87 G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0,
NULL,
NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
93 DBusGProxy *driver_proxy;
94 unsigned int request_ret;
96 AUDDBG (
"Registering remote D-Bus interfaces.\n");
105 driver_proxy = dbus_g_proxy_new_for_name(
dbus_conn, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);
109 g_warning(
"Unable to register service: %s", error->message);
115 g_warning(
"Unable to register service: %s", error->message);
119 g_object_unref(driver_proxy);
138 DBusGProxy *proxy =
object->proxy;
141 dbus_g_proxy_add_signal (proxy,
"StatusChange", dbus_g_type_get_struct
142 (
"GValueArray", G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT,
143 G_TYPE_INVALID), G_TYPE_INVALID);
144 dbus_g_proxy_add_signal (proxy,
"CapsChange", G_TYPE_INT, G_TYPE_INVALID);
150 AUDDBG (
"object->proxy == NULL; not adding some signals.\n");
162 DBusGProxy *proxy =
object->proxy;
165 dbus_g_proxy_add_signal(proxy,
"TrackListChange", G_TYPE_INT, G_TYPE_INVALID);
170 AUDDBG (
"object->proxy == NULL, not adding some signals.\n");
177 DBusConnection *local_conn;
179 AUDDBG (
"Trying to initialize D-Bus.\n");
180 dbus_conn = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
183 g_warning(
"Unable to connect to dbus: %s", error->message);
189 g_object_new(audacious_rc_get_type(),
NULL);
190 g_object_new(mpris_root_get_type(),
NULL);
191 mpris = g_object_new(mpris_player_get_type(),
NULL);
192 mpris_tracklist = g_object_new(mpris_tracklist_get_type(),
NULL);
194 local_conn = dbus_g_connection_get_connection(
dbus_conn);
195 dbus_connection_set_exit_on_disconnect(local_conn,
FALSE);
213 val = g_new0(GValue, 1);
214 g_value_init(val, G_TYPE_STRING);
216 g_value_set_string (val, str);
222 val = g_new0(GValue, 1);
223 g_value_init(val, G_TYPE_INT);
225 g_value_set_int (val, x);
240 const char * tuple_key,
const char *key)
244 g_hash_table_insert (md, (
void *) key, value);
255 g_value_unset((GValue *) value);
256 g_free((GValue *) value);
261 GHashTable *md =
NULL;
266 value = g_malloc(
sizeof(GValue));
267 memset(value, 0,
sizeof(GValue));
268 g_value_init(value, G_TYPE_STRING);
269 g_value_take_string(value, g_strdup(filename));
270 g_hash_table_insert(md,
"location", value);
306 GHashTable * metadata =
NULL;
307 if (filename && tuple)
321 *identity = g_strdup_printf(
"Audacious %s", VERSION);
365 fprintf (stderr,
"implement me\n");
372 memset(&value, 0,
sizeof(value));
373 g_value_init(&value, G_TYPE_INT);
374 g_value_set_int(&value, tmp);
375 g_value_array_append(ar, &value);
388 *status = g_value_array_new(4);
405 * metadata = g_hash_table_new (g_str_hash, g_str_equal);
450 GHashTable *metadata;
457 if (filename && tuple)
461 g_hash_table_destroy (metadata);
468 return (filename && tuple);
473 GValueArray *ar = g_value_array_new(4);
484 g_value_array_free(ar);
503 GHashTable * * metadata, GError * *
error)
507 * metadata = g_hash_table_new (g_str_hash, g_str_equal);
555 *version = g_strdup(VERSION);
640 * status = strdup (
"stopped");
709 title, GError * *
error)
715 * title = strdup (title2);
727 * filename = strdup (filename2);
740 length, GError * *
error)
747 field, GValue * value, GError * *
error)
753 memset (value, 0,
sizeof (GValue));
754 g_value_init (value, G_VALUE_TYPE (value2));
755 g_value_copy (value2, value);
756 g_value_unset (value2);
823 * is_advance = !
get_bool (
NULL,
"no_playlist_advance");
859 * is_stopping =
get_bool (
NULL,
"stop_after_current_song");
872 event_queue(
"prefswin show", GINT_TO_POINTER(show));
878 event_queue(
"aboutwin show", GINT_TO_POINTER(show));
909 int * nch, GError * *
error)
917 hook_call(
"mainwin set always on top", &ontop);
960 qpos, GError * *
error)
967 is_queued, GError * *
error)
974 pos, GError * *
error)
996 * bands = g_array_new (
FALSE,
FALSE,
sizeof (
double));
1041 title, GError * *
error)
1044 * title = strdup (title2);
1051 DBusGConnection *connection =
NULL;
1053 connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
1054 g_clear_error(&error);