From 54e0d270e2e8a8b81e83c3540f3e5bd6c9444d2e Mon Sep 17 00:00:00 2001 From: Jakob Leben Date: Mon, 15 Feb 2010 19:09:33 +0100 Subject: [PATCH] SD: remove category node when it becomes empty --- src/playlist/services_discovery.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/playlist/services_discovery.c b/src/playlist/services_discovery.c index 88c03611ff..fe6bfde9b1 100644 --- a/src/playlist/services_discovery.c +++ b/src/playlist/services_discovery.c @@ -282,8 +282,25 @@ static void playlist_sd_item_added( const vlc_event_t * p_event, void * user_dat static void playlist_sd_item_removed( const vlc_event_t * p_event, void * user_data ) { input_item_t * p_input = p_event->u.services_discovery_item_removed.p_item; - playlist_item_t * p_parent = user_data; - playlist_DeleteFromInput( p_parent->p_playlist, p_input, false ); + playlist_item_t * p_sd_node = user_data; + playlist_t *p_playlist = p_sd_node->p_playlist; + + PL_LOCK; + playlist_item_t *p_item = + playlist_ItemFindFromInputAndRoot( p_playlist, p_input, + p_sd_node, false ); + if( !p_item ) + { + PL_UNLOCK; return; + } + playlist_item_t *p_parent = p_item->p_parent; + /* if the item was added under a category and the category node + becomes empty, delete that node as well */ + if( p_parent->i_children > 1 || p_parent == p_sd_node ) + playlist_DeleteItem( p_playlist, p_item, true ); + else + playlist_NodeDelete( p_playlist, p_parent, true, true ); + PL_UNLOCK; } int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist, -- 2.39.2