From e06f5b73dda002bb01796ae8e6370256f7412929 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Mon, 30 Aug 2010 04:14:25 +0300 Subject: [PATCH] daemon: save connections of stopped apps. #100 --- daemon/graph.c | 23 ++++++++++++++++++++--- daemon/virtualizer.c | 26 ++++++++++++++++++++++++++ daemon/virtualizer.h | 4 ++++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/daemon/graph.c b/daemon/graph.c index e359301d..3e499d56 100644 --- a/daemon/graph.c +++ b/daemon/graph.c @@ -29,6 +29,7 @@ #include "graph.h" #include "../dbus/error.h" #include "../dbus_constants.h" +#include "virtualizer.h" struct ladish_graph_port { @@ -2170,7 +2171,7 @@ ladish_graph_iterate_nodes( { client_ptr = list_entry(client_node_ptr, struct ladish_graph_client, siblings); - if (skip_hidden && client_ptr->hidden) + if (skip_hidden && client_ptr->hidden && !ladish_client_has_app(client_ptr->client)) { continue; } @@ -2205,7 +2206,7 @@ ladish_graph_iterate_nodes( { port_ptr = list_entry(port_node_ptr, struct ladish_graph_port, siblings_client); - if (skip_hidden && port_ptr->hidden) + if (skip_hidden && port_ptr->hidden && !ladish_client_has_app(port_ptr->client_ptr->client)) { continue; } @@ -2237,6 +2238,19 @@ ladish_graph_iterate_nodes( return true; } +static bool is_system_client(ladish_client_handle client) +{ + uuid_t uuid; + ladish_client_get_uuid(client, uuid); + return ladish_virtualizer_is_system_client(uuid); +} + +#define is_port_interesting(port_ptr) ( \ + ladish_client_has_app(port_ptr->client_ptr->client) || \ + ladish_port_is_link(port_ptr->port) || \ + is_system_client(port_ptr->client_ptr->client) \ + ) + bool ladish_graph_iterate_connections( ladish_graph_handle graph_handle, @@ -2256,7 +2270,10 @@ ladish_graph_iterate_connections( { connection_ptr = list_entry(node_ptr, struct ladish_graph_connection, siblings); - if (skip_hidden && connection_ptr->hidden) + if (skip_hidden && + connection_ptr->hidden && + (!is_port_interesting(connection_ptr->port1_ptr) || + !is_port_interesting(connection_ptr->port2_ptr))) { continue; } diff --git a/daemon/virtualizer.c b/daemon/virtualizer.c index 214fdc1a..3dbcd021 100644 --- a/daemon/virtualizer.c +++ b/daemon/virtualizer.c @@ -457,6 +457,8 @@ port_appeared( bool is_a2j; uuid_t jclient_uuid; uuid_t vclient_uuid; + bool has_app; + uuid_t app_uuid; char * alsa_client_name; char * alsa_port_name; char * a2j_fake_jack_port_name = NULL; @@ -484,6 +486,8 @@ port_appeared( goto exit; } + has_app = ladish_client_get_app(jack_client, app_uuid); + /* find the virtual graph that owns the app that owns the client that owns the appeared port */ vgraph = ladish_client_get_vgraph(jack_client); if (vgraph == NULL) @@ -707,6 +711,11 @@ port_appeared( ladish_client_interlink(vclient, jack_client); + if (has_app) + { + ladish_client_set_app(vclient, app_uuid); + } + if (!ladish_graph_add_client(vgraph, vclient, jack_client_name, false)) { log_error("ladish_graph_add_client() failed to add client '%s' to virtual graph", jack_client_name); @@ -1254,3 +1263,20 @@ ladish_virtualizer_rename_app( } } #undef vgraph + +bool +ladish_virtualizer_is_system_client( + uuid_t uuid) +{ + if (uuid_compare(uuid, g_system_capture_uuid) == 0) + { + return true; + } + + if (uuid_compare(uuid, g_system_playback_uuid) == 0) + { + return true; + } + + return false; +} diff --git a/daemon/virtualizer.h b/daemon/virtualizer.h index f011649e..c7e202b4 100644 --- a/daemon/virtualizer.h +++ b/daemon/virtualizer.h @@ -67,6 +67,10 @@ ladish_virtualizer_rename_app( const char * old_name, const char * new_app_name); +bool +ladish_virtualizer_is_system_client( + uuid_t uuid); + void ladish_virtualizer_destroy( ladish_virtualizer_handle handle);