[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