From: Jakob Leben Date: Sun, 20 Jun 2010 12:24:10 +0000 (+0200) Subject: merge playlist_DeleteItem() functionality into playlist_NodeDelete() X-Git-Tag: 1.2.0-pre1~6106 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=56c70401a28856211bc0021841179f5edc392c6f;p=vlc merge playlist_DeleteItem() functionality into playlist_NodeDelete() ...omitting b_stop argument, because it is true in all use cases. --- diff --git a/src/playlist/item.c b/src/playlist/item.c index 9f2b7bf91d..5f06fb3c01 100644 --- a/src/playlist/item.c +++ b/src/playlist/item.c @@ -744,6 +744,9 @@ static void ChangeToNode( playlist_t *p_playlist, playlist_item_t *p_item ) int playlist_DeleteItem( playlist_t * p_playlist, playlist_item_t *p_item, bool b_stop ) { + assert( b_stop ); + return playlist_NodeDelete( p_playlist, p_item, true, false ); +#if 0 int i; int i_id = p_item->i_id; PL_ASSERT_LOCKED; @@ -790,6 +793,7 @@ int playlist_DeleteItem( playlist_t * p_playlist, playlist_item_t *p_item, playlist_ItemRelease( p_item ); return VLC_SUCCESS; +#endif } static int RecursiveAddIntoParent ( diff --git a/src/playlist/tree.c b/src/playlist/tree.c index dff0a73e3b..46144a8829 100644 --- a/src/playlist/tree.c +++ b/src/playlist/tree.c @@ -143,22 +143,13 @@ int playlist_NodeDelete( playlist_t *p_playlist, playlist_item_t *p_root, PL_ASSERT_LOCKED; int i; - if( p_root->i_children == -1 ) - { - return VLC_EGENERIC; - } - /* Delete the children */ for( i = p_root->i_children - 1 ; i >= 0; i-- ) { - if( p_root->pp_children[i]->i_children > -1 ) + if( b_delete_items || p_root->pp_children[i]->i_children > -1 ) { playlist_NodeDelete( p_playlist, p_root->pp_children[i], - b_delete_items , b_force ); - } - else if( b_delete_items ) - { - playlist_DeleteItem( p_playlist, p_root->pp_children[i], true ); + b_delete_items, b_force ); } } /* Delete the node */ @@ -167,6 +158,8 @@ int playlist_NodeDelete( playlist_t *p_playlist, playlist_item_t *p_root, } else { + pl_priv(p_playlist)->b_reset_currently_playing = true; + int i; var_SetInteger( p_playlist, "playlist-item-deleted", p_root->i_id ); ARRAY_BSEARCH( p_playlist->all_items, ->i_id, int, @@ -174,6 +167,28 @@ int playlist_NodeDelete( playlist_t *p_playlist, playlist_item_t *p_root, if( i != -1 ) ARRAY_REMOVE( p_playlist->all_items, i ); + if( p_root->i_children == -1 ) { + ARRAY_BSEARCH( p_playlist->items,->i_id, int, p_root->i_id, i ); + if( i != -1 ) + ARRAY_REMOVE( p_playlist->items, i ); + } + + /* Check if it is the current item */ + if( get_current_status_item( p_playlist ) == p_root ) + { + /* Stop */ + playlist_Control( p_playlist, PLAYLIST_STOP, pl_Locked ); + msg_Info( p_playlist, "stopping playback" ); + /* This item can't be the next one to be played ! */ + set_current_status_item( p_playlist, NULL ); + } + + ARRAY_BSEARCH( p_playlist->current,->i_id, int, p_root->i_id, i ); + if( i != -1 ) + ARRAY_REMOVE( p_playlist->current, i ); + + PL_DEBUG( "deleting item `%s'", p_root->p_input->psz_name ); + /* Remove the item from its parent */ if( p_root->p_parent ) playlist_NodeRemoveItem( p_playlist, p_root, p_root->p_parent );