daemon: register studio on dbus before rooms
This commit is contained in:
parent
6842854e8c
commit
9a1015f50f
|
@ -1236,6 +1236,14 @@ static bool run(void * command_context)
|
|||
XML_SetCharacterDataHandler(parser, callback_chrdata);
|
||||
XML_SetUserData(parser, &parse_context);
|
||||
|
||||
if (!ladish_studio_show())
|
||||
{
|
||||
log_error("ladish_studio_show() failed.");
|
||||
XML_ParserFree(parser);
|
||||
close(fd);
|
||||
return false;
|
||||
}
|
||||
|
||||
xmls = XML_ParseBuffer(parser, bytes_read, XML_TRUE);
|
||||
if (xmls == XML_STATUS_ERROR)
|
||||
{
|
||||
|
@ -1243,6 +1251,7 @@ static bool run(void * command_context)
|
|||
{
|
||||
log_error("XML_ParseBuffer() failed.");
|
||||
}
|
||||
ladish_studio_clear();
|
||||
XML_ParserFree(parser);
|
||||
close(fd);
|
||||
return false;
|
||||
|
@ -1253,6 +1262,7 @@ static bool run(void * command_context)
|
|||
|
||||
if (parse_context.error)
|
||||
{
|
||||
ladish_studio_clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1264,11 +1274,7 @@ static bool run(void * command_context)
|
|||
ladish_graph_dump(g_studio.jack_graph);
|
||||
ladish_graph_dump(g_studio.studio_graph);
|
||||
|
||||
if (!ladish_studio_publish())
|
||||
{
|
||||
log_error("studio_publish() failed.");
|
||||
return false;
|
||||
}
|
||||
ladish_studio_announce();
|
||||
|
||||
cmd_ptr->command.state = LADISH_COMMAND_STATE_DONE;
|
||||
return true;
|
||||
|
|
|
@ -35,41 +35,7 @@ static bool run(void * context)
|
|||
{
|
||||
ASSERT(cmd_ptr->state == LADISH_COMMAND_STATE_PENDING);
|
||||
|
||||
ladish_graph_dump(g_studio.studio_graph);
|
||||
ladish_graph_dump(g_studio.jack_graph);
|
||||
|
||||
/* remove rooms that own clients in studio graph before clearing it */
|
||||
ladish_studio_remove_all_rooms();
|
||||
|
||||
ladish_graph_clear(g_studio.studio_graph, NULL);
|
||||
ladish_graph_clear(g_studio.jack_graph, NULL);
|
||||
|
||||
ladish_studio_jack_conf_clear();
|
||||
|
||||
g_studio.modified = false;
|
||||
g_studio.persisted = false;
|
||||
|
||||
if (g_studio.dbus_object != NULL)
|
||||
{
|
||||
dbus_object_path_destroy(g_dbus_connection, g_studio.dbus_object);
|
||||
g_studio.dbus_object = NULL;
|
||||
emit_studio_disappeared();
|
||||
ladish_notify_simple(LADISH_NOTIFY_URGENCY_NORMAL, "Studio unloaded", NULL);
|
||||
}
|
||||
|
||||
if (g_studio.name != NULL)
|
||||
{
|
||||
free(g_studio.name);
|
||||
g_studio.name = NULL;
|
||||
}
|
||||
|
||||
if (g_studio.filename != NULL)
|
||||
{
|
||||
free(g_studio.filename);
|
||||
g_studio.filename = NULL;
|
||||
}
|
||||
|
||||
ladish_app_supervisor_clear(g_studio.app_supervisor);
|
||||
ladish_studio_clear();
|
||||
|
||||
cmd_ptr->state = LADISH_COMMAND_STATE_DONE;
|
||||
return true;
|
||||
|
|
|
@ -69,11 +69,12 @@ bool ladish_studio_name_generate(char ** name_ptr)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ladish_studio_publish(void)
|
||||
bool ladish_studio_show(void)
|
||||
{
|
||||
dbus_object_path object;
|
||||
|
||||
ASSERT(g_studio.name != NULL);
|
||||
ASSERT(!g_studio.announced);
|
||||
|
||||
object = dbus_object_path_new(
|
||||
STUDIO_OBJECT_PATH,
|
||||
|
@ -100,11 +101,72 @@ bool ladish_studio_publish(void)
|
|||
g_studio.dbus_object = object;
|
||||
|
||||
emit_studio_appeared();
|
||||
ladish_notify_simple(LADISH_NOTIFY_URGENCY_NORMAL, "Studio loaded", NULL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ladish_studio_announce(void)
|
||||
{
|
||||
ASSERT(!g_studio.announced);
|
||||
ladish_notify_simple(LADISH_NOTIFY_URGENCY_NORMAL, "Studio loaded", NULL);
|
||||
g_studio.announced = true;
|
||||
}
|
||||
|
||||
bool ladish_studio_publish(void)
|
||||
{
|
||||
if (!ladish_studio_show())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ladish_studio_announce();
|
||||
return true;
|
||||
}
|
||||
|
||||
void ladish_studio_clear(void)
|
||||
{
|
||||
ladish_graph_dump(g_studio.studio_graph);
|
||||
ladish_graph_dump(g_studio.jack_graph);
|
||||
|
||||
/* remove rooms that own clients in studio graph before clearing it */
|
||||
ladish_studio_remove_all_rooms();
|
||||
|
||||
ladish_graph_clear(g_studio.studio_graph, NULL);
|
||||
ladish_graph_clear(g_studio.jack_graph, NULL);
|
||||
|
||||
ladish_studio_jack_conf_clear();
|
||||
|
||||
g_studio.modified = false;
|
||||
g_studio.persisted = false;
|
||||
|
||||
if (g_studio.dbus_object != NULL)
|
||||
{
|
||||
dbus_object_path_destroy(g_dbus_connection, g_studio.dbus_object);
|
||||
g_studio.dbus_object = NULL;
|
||||
emit_studio_disappeared();
|
||||
}
|
||||
|
||||
if (g_studio.announced)
|
||||
{
|
||||
ladish_notify_simple(LADISH_NOTIFY_URGENCY_NORMAL, "Studio unloaded", NULL);
|
||||
g_studio.announced = false;
|
||||
}
|
||||
|
||||
if (g_studio.name != NULL)
|
||||
{
|
||||
free(g_studio.name);
|
||||
g_studio.name = NULL;
|
||||
}
|
||||
|
||||
if (g_studio.filename != NULL)
|
||||
{
|
||||
free(g_studio.filename);
|
||||
g_studio.filename = NULL;
|
||||
}
|
||||
|
||||
ladish_app_supervisor_clear(g_studio.app_supervisor);
|
||||
}
|
||||
|
||||
void ladish_studio_emit_started(void)
|
||||
{
|
||||
dbus_signal_emit(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "StudioStarted", "");
|
||||
|
@ -494,6 +556,7 @@ bool ladish_studio_init(void)
|
|||
INIT_LIST_HEAD(&g_studio.jack_params);
|
||||
|
||||
g_studio.dbus_object = NULL;
|
||||
g_studio.announced = false;
|
||||
g_studio.name = NULL;
|
||||
g_studio.filename = NULL;
|
||||
|
||||
|
@ -600,7 +663,7 @@ void ladish_studio_on_child_exit(pid_t pid)
|
|||
|
||||
bool ladish_studio_is_loaded(void)
|
||||
{
|
||||
return g_studio.dbus_object != NULL;
|
||||
return g_studio.dbus_object != NULL && g_studio.announced;
|
||||
}
|
||||
|
||||
bool ladish_studio_is_started(void)
|
||||
|
|
|
@ -140,6 +140,7 @@ struct studio
|
|||
struct list_head jack_params; /* list of conf tree leaves */
|
||||
|
||||
dbus_object_path dbus_object;
|
||||
bool announced;
|
||||
|
||||
struct ladish_cqueue cmd_queue;
|
||||
ladish_environment_store env_store;
|
||||
|
@ -189,7 +190,10 @@ extern const struct dbus_interface_descriptor g_interface_studio;
|
|||
void ladish_studio_jack_conf_clear(void);
|
||||
bool ladish_studio_fetch_jack_settings(void);
|
||||
bool ladish_studio_compose_filename(const char * name, char ** filename_ptr_ptr, char ** backup_filename_ptr_ptr);
|
||||
bool ladish_studio_show(void);
|
||||
void ladish_studio_announce(void);
|
||||
bool ladish_studio_publish(void);
|
||||
void ladish_studio_clear(void);
|
||||
bool ladish_studio_name_generate(char ** name_ptr);
|
||||
void ladish_studio_emit_started(void);
|
||||
void ladish_studio_emit_stopped(void);
|
||||
|
|
Loading…
Reference in New Issue