Fix studio room signal parameters; Add RoomChanged signal
This commit is contained in:
parent
e154c89ce3
commit
1f11f0968e
141
daemon/studio.c
141
daemon/studio.c
|
@ -118,6 +118,91 @@ void emit_studio_stopped(void)
|
||||||
dbus_signal_emit(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "StudioStopped", "");
|
dbus_signal_emit(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "StudioStopped", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool fill_room_info(DBusMessageIter * iter_ptr, ladish_room_handle room)
|
||||||
|
{
|
||||||
|
DBusMessageIter dict_iter;
|
||||||
|
const char * name;
|
||||||
|
uuid_t template_uuid;
|
||||||
|
ladish_room_handle template;
|
||||||
|
const char * template_name;
|
||||||
|
const char * opath;
|
||||||
|
|
||||||
|
name = ladish_room_get_name(room);
|
||||||
|
opath = ladish_room_get_opath(room);
|
||||||
|
|
||||||
|
if (!ladish_room_get_template_uuid(room, template_uuid))
|
||||||
|
{
|
||||||
|
template = NULL;
|
||||||
|
template_name = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
template = find_room_template_by_uuid(template_uuid);
|
||||||
|
if (template != NULL)
|
||||||
|
{
|
||||||
|
template_name = ladish_room_get_name(template);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
template_name = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_message_iter_append_basic(iter_ptr, DBUS_TYPE_STRING, &opath))
|
||||||
|
{
|
||||||
|
log_error("dbus_message_iter_append_basic() failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_message_iter_open_container(iter_ptr, DBUS_TYPE_ARRAY, "{sv}", &dict_iter))
|
||||||
|
{
|
||||||
|
log_error("dbus_message_iter_open_container() failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "template", template_name))
|
||||||
|
{
|
||||||
|
log_error("dbus_maybe_add_dict_entry_string() failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "name", name))
|
||||||
|
{
|
||||||
|
log_error("dbus_maybe_add_dict_entry_string() failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_message_iter_close_container(iter_ptr, &dict_iter))
|
||||||
|
{
|
||||||
|
log_error("dbus_message_iter_close_container() failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void emit_room_appeared(ladish_room_handle room)
|
||||||
|
{
|
||||||
|
DBusMessage * message_ptr;
|
||||||
|
DBusMessageIter iter;
|
||||||
|
|
||||||
|
message_ptr = dbus_message_new_signal(STUDIO_OBJECT_PATH, IFACE_STUDIO, "RoomAppeared");
|
||||||
|
if (message_ptr == NULL)
|
||||||
|
{
|
||||||
|
log_error("dbus_message_new_signal() failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbus_message_iter_init_append(message_ptr, &iter);
|
||||||
|
|
||||||
|
if (fill_room_info(&iter, room))
|
||||||
|
{
|
||||||
|
dbus_signal_send(g_dbus_connection, message_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
dbus_message_unref(message_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
void on_event_jack_started(void)
|
void on_event_jack_started(void)
|
||||||
{
|
{
|
||||||
if (!studio_fetch_jack_settings())
|
if (!studio_fetch_jack_settings())
|
||||||
|
@ -703,7 +788,6 @@ static void ladish_studio_new_room(struct dbus_method_call * call_ptr)
|
||||||
const char * template_name;
|
const char * template_name;
|
||||||
ladish_room_handle room;
|
ladish_room_handle room;
|
||||||
char room_dbus_name[1024];
|
char room_dbus_name[1024];
|
||||||
const char * arg;
|
|
||||||
|
|
||||||
dbus_error_init(&g_dbus_error);
|
dbus_error_init(&g_dbus_error);
|
||||||
|
|
||||||
|
@ -736,8 +820,7 @@ static void ladish_studio_new_room(struct dbus_method_call * call_ptr)
|
||||||
|
|
||||||
list_add_tail(ladish_room_get_list_node(room), &g_studio.rooms);
|
list_add_tail(ladish_room_get_list_node(room), &g_studio.rooms);
|
||||||
|
|
||||||
arg = room_dbus_name;
|
emit_room_appeared(room);
|
||||||
dbus_signal_emit(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "RoomAppeared", "s", &arg);
|
|
||||||
|
|
||||||
method_return_new_void(call_ptr);
|
method_return_new_void(call_ptr);
|
||||||
}
|
}
|
||||||
|
@ -746,14 +829,8 @@ static void ladish_studio_get_room_list(struct dbus_method_call * call_ptr)
|
||||||
{
|
{
|
||||||
DBusMessageIter iter, array_iter;
|
DBusMessageIter iter, array_iter;
|
||||||
DBusMessageIter struct_iter;
|
DBusMessageIter struct_iter;
|
||||||
DBusMessageIter dict_iter;
|
|
||||||
struct list_head * node_ptr;
|
struct list_head * node_ptr;
|
||||||
ladish_room_handle room;
|
ladish_room_handle room;
|
||||||
const char * name;
|
|
||||||
uuid_t template_uuid;
|
|
||||||
ladish_room_handle template;
|
|
||||||
const char * template_name;
|
|
||||||
const char * opath;
|
|
||||||
|
|
||||||
call_ptr->reply = dbus_message_new_method_return(call_ptr->message);
|
call_ptr->reply = dbus_message_new_method_return(call_ptr->message);
|
||||||
if (call_ptr->reply == NULL)
|
if (call_ptr->reply == NULL)
|
||||||
|
@ -771,43 +848,11 @@ static void ladish_studio_get_room_list(struct dbus_method_call * call_ptr)
|
||||||
list_for_each(node_ptr, &g_studio.rooms)
|
list_for_each(node_ptr, &g_studio.rooms)
|
||||||
{
|
{
|
||||||
room = ladish_room_from_list_node(node_ptr);
|
room = ladish_room_from_list_node(node_ptr);
|
||||||
name = ladish_room_get_name(room);
|
|
||||||
opath = ladish_room_get_opath(room);
|
|
||||||
|
|
||||||
if (!ladish_room_get_template_uuid(room, template_uuid))
|
|
||||||
{
|
|
||||||
template = NULL;
|
|
||||||
template_name = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
template = find_room_template_by_uuid(template_uuid);
|
|
||||||
if (template != NULL)
|
|
||||||
{
|
|
||||||
template_name = ladish_room_get_name(template);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
template_name = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
|
if (!dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter))
|
||||||
goto fail_unref;
|
goto fail_unref;
|
||||||
|
|
||||||
if (!dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &opath))
|
if (!fill_room_info(&struct_iter, room))
|
||||||
goto fail_unref;
|
|
||||||
|
|
||||||
if (!dbus_message_iter_open_container(&struct_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter))
|
|
||||||
goto fail_unref;
|
|
||||||
|
|
||||||
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "template", template_name))
|
|
||||||
goto fail_unref;
|
|
||||||
|
|
||||||
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "name", name))
|
|
||||||
goto fail_unref;
|
|
||||||
|
|
||||||
if (!dbus_message_iter_close_container(&struct_iter, &dict_iter))
|
|
||||||
goto fail_unref;
|
goto fail_unref;
|
||||||
|
|
||||||
if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
|
if (!dbus_message_iter_close_container(&array_iter, &struct_iter))
|
||||||
|
@ -918,11 +963,18 @@ SIGNAL_ARGS_BEGIN(StudioStopped, "Studio stopped")
|
||||||
SIGNAL_ARGS_END
|
SIGNAL_ARGS_END
|
||||||
|
|
||||||
SIGNAL_ARGS_BEGIN(RoomAppeared, "Room D-Bus object appeared")
|
SIGNAL_ARGS_BEGIN(RoomAppeared, "Room D-Bus object appeared")
|
||||||
SIGNAL_ARG_DESCRIBE("room_path", "s", "room object path")
|
SIGNAL_ARG_DESCRIBE("opath", "s", "room object path")
|
||||||
|
SIGNAL_ARG_DESCRIBE("properties", "a{sv}", "room object path and props")
|
||||||
|
SIGNAL_ARGS_END
|
||||||
|
|
||||||
|
SIGNAL_ARGS_BEGIN(RoomChanged, "Room D-Bus object changed")
|
||||||
|
SIGNAL_ARG_DESCRIBE("opath", "s", "room object path")
|
||||||
|
SIGNAL_ARG_DESCRIBE("properties", "a{sv}", "room object path and props")
|
||||||
SIGNAL_ARGS_END
|
SIGNAL_ARGS_END
|
||||||
|
|
||||||
SIGNAL_ARGS_BEGIN(RoomDisappeared, "Room D-Bus object disappeared")
|
SIGNAL_ARGS_BEGIN(RoomDisappeared, "Room D-Bus object disappeared")
|
||||||
SIGNAL_ARG_DESCRIBE("room_path", "s", "room object path")
|
SIGNAL_ARG_DESCRIBE("opath", "s", "room object path")
|
||||||
|
SIGNAL_ARG_DESCRIBE("properties", "a{sv}", "room object path and props")
|
||||||
SIGNAL_ARGS_END
|
SIGNAL_ARGS_END
|
||||||
|
|
||||||
SIGNALS_BEGIN
|
SIGNALS_BEGIN
|
||||||
|
@ -932,6 +984,7 @@ SIGNALS_BEGIN
|
||||||
SIGNAL_DESCRIBE(StudioStopped)
|
SIGNAL_DESCRIBE(StudioStopped)
|
||||||
SIGNAL_DESCRIBE(RoomAppeared)
|
SIGNAL_DESCRIBE(RoomAppeared)
|
||||||
SIGNAL_DESCRIBE(RoomDisappeared)
|
SIGNAL_DESCRIBE(RoomDisappeared)
|
||||||
|
SIGNAL_DESCRIBE(RoomChanged)
|
||||||
SIGNALS_END
|
SIGNALS_END
|
||||||
|
|
||||||
INTERFACE_BEGIN(g_interface_studio, IFACE_STUDIO)
|
INTERFACE_BEGIN(g_interface_studio, IFACE_STUDIO)
|
||||||
|
|
Loading…
Reference in New Issue