daemon: register studio on dbus before rooms

This commit is contained in:
Nedko Arnaudov 2010-07-21 06:55:03 +03:00
parent 6842854e8c
commit 9a1015f50f
4 changed files with 82 additions and 43 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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);