From ecddc9b761c5a577835d7510d04c19568a581232 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 8 Aug 2010 21:40:57 +0300 Subject: [PATCH] Revert "playlist: refactor and fix #3932" This reverts commit 2a4a8f9a3f57087ac320a090442c876e94cda9c7. --- src/playlist/item.c | 105 ++++++++----------------------- src/playlist/playlist_internal.h | 2 +- 2 files changed, 28 insertions(+), 79 deletions(-) diff --git a/src/playlist/item.c b/src/playlist/item.c index 8d152c34b7..5f06fb3c01 100644 --- a/src/playlist/item.c +++ b/src/playlist/item.c @@ -28,7 +28,6 @@ #include #include #include -#include #include "playlist_internal.h" static void AddItem( playlist_t *p_playlist, playlist_item_t *p_item, @@ -62,110 +61,60 @@ static void input_item_add_subitem_tree ( const vlc_event_t * p_event, playlist_ItemGetByInput( p_playlist, p_input ); assert( p_item != NULL ); + playlist_item_t *p_parent = p_item->p_parent; + assert( p_parent != NULL ); bool b_current = get_current_status_item( p_playlist ) == p_item; bool b_autostart = var_CreateGetBool( p_playlist, "playlist-autostart" ); bool b_stop = p_item->i_flags & PLAYLIST_SUBITEM_STOP_FLAG; - bool b_flat = false; - p_item->i_flags &= ~PLAYLIST_SUBITEM_STOP_FLAG; - /* We will have to flatten the tree out if we are in "the playlist" node and - the user setting demands flat playlist */ - - if( !pl_priv(p_playlist)->b_tree ) { - playlist_item_t *p_up = p_item; - while( p_up->p_parent ) + int pos = 0; + for( int i = 0; i < p_parent->i_children; i++ ) + { + if( p_parent->pp_children[i] == p_item ) { - if( p_up->p_parent == p_playlist->p_playing ) - { - b_flat = true; - break; - } - p_up = p_up->p_parent; + pos = i; + break; } } - int pos = 0; - - /* If we have to flatten out, then take the item's position in the parent as - insertion point and delete the item */ - - if( b_flat ) + bool b_flat = false; + playlist_item_t *p_up = p_item; + while( p_up->p_parent ) { - playlist_item_t *p_parent = p_item->p_parent; - assert( p_parent != NULL ); - - int i; - for( i = 0; i < p_parent->i_children; i++ ) + if( p_up->p_parent == p_playlist->p_playing ) { - if( p_parent->pp_children[i] == p_item ) - { - pos = i; - break; - } + if( !pl_priv(p_playlist)->b_tree ) b_flat = true; + break; } - assert( i < p_parent->i_children ); - - playlist_DeleteItem( p_playlist, p_item, true ); - - p_item = p_parent; - } - else - { - pos = p_item->i_children >= 0 ? p_item->i_children : 0; + p_up = p_up->p_parent; } - /* At this point: - "p_item" is the node where sub-items should be inserted, - "pos" is the insertion position in that node */ + if( b_flat ) + playlist_DeleteItem( p_playlist, p_item, true ); - int last_pos = playlist_InsertInputItemTree( p_playlist, - p_item, - p_new_root, - pos, - b_flat ); + p_item = playlist_InsertInputItemTree( p_playlist, + b_flat ? p_parent : p_item, + p_new_root, + b_flat ? pos: PLAYLIST_END, + b_flat ); if( !b_flat ) var_SetAddress( p_playlist, "leaf-to-parent", p_input ); //control playback only if it was the current playing item that got subitems if( b_current ) { - if( last_pos == pos || ( b_stop && !b_flat ) || !b_autostart ) + if( !p_item || ( b_stop && !b_flat ) || !b_autostart ) { - /* We stop, either because no sub-item was actually created, or some - flags/settings want us to do so at this point */ PL_UNLOCK; playlist_Stop( p_playlist ); return; } else { - /* Continue to play, either random or the first new item */ - playlist_item_t *p_play_item; - - if( var_GetBool( p_playlist, "random" ) ) - { - unsigned rand_pos = - ((unsigned)vlc_mrand48()) % (last_pos - pos); - rand_pos += pos; - p_play_item = p_item->pp_children[rand_pos]; - } - else - { - p_play_item = playlist_GetNextLeaf( p_playlist, - p_item, - NULL, - true, - false ); - char *psz_name = input_item_GetName(p_play_item->p_input); - free(psz_name); - } - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, - pl_Locked, - get_current_status_node( p_playlist ), - p_play_item ); + pl_Locked, get_current_status_node( p_playlist ), p_item ); } } @@ -559,13 +508,13 @@ int playlist_NodeAddCopy ( * \param b_flat TRUE if the new tree contents should be flattened into a list * \return the first new leaf inserted (in playing order) */ -int playlist_InsertInputItemTree ( +playlist_item_t *playlist_InsertInputItemTree ( playlist_t *p_playlist, playlist_item_t *p_parent, input_item_node_t *p_node, int i_pos, bool b_flat ) { playlist_item_t *p_first_leaf = NULL; - int i = RecursiveAddIntoParent ( p_playlist, p_parent, p_node, i_pos, b_flat, &p_first_leaf ); - return i; + RecursiveAddIntoParent ( p_playlist, p_parent, p_node, i_pos, b_flat, &p_first_leaf ); + return p_first_leaf; } diff --git a/src/playlist/playlist_internal.h b/src/playlist/playlist_internal.h index a42c046011..959b8e3d9f 100644 --- a/src/playlist/playlist_internal.h +++ b/src/playlist/playlist_internal.h @@ -132,7 +132,7 @@ void playlist_SendAddNotify( playlist_t *p_playlist, int i_item_id, playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *,int , int, bool ); -int playlist_InsertInputItemTree ( playlist_t *, +playlist_item_t * playlist_InsertInputItemTree ( playlist_t *, playlist_item_t *, input_item_node_t *, int, bool ); /* Tree walking */ -- 2.39.2