[vlc-commits] commit: merge playlist_DeleteItem() functionality into playlist_NodeDelete( ) (Jakob Leben )
git at videolan.org
git at videolan.org
Sun Jun 20 15:44:37 CEST 2010
vlc | branch: master | Jakob Leben <jleben at videolan.org> | Sun Jun 20 14:24:10 2010 +0200| [56c70401a28856211bc0021841179f5edc392c6f] | committer: Jakob Leben
merge playlist_DeleteItem() functionality into playlist_NodeDelete()
...omitting b_stop argument, because it is true in all use cases.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=56c70401a28856211bc0021841179f5edc392c6f
---
src/playlist/item.c | 4 ++++
src/playlist/tree.c | 37 ++++++++++++++++++++++++++-----------
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/src/playlist/item.c b/src/playlist/item.c
index 9f2b7bf..5f06fb3 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 dff0a73..46144a8 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 );
More information about the vlc-commits
mailing list