#include <vlc/vlc.h>
#include <vlc/input.h>
#include <assert.h>
-#include "vlc_playlist.h"
+#include <vlc_playlist.h>
+#include "playlist_internal.h"
void AddItem( playlist_t *p_playlist, playlist_item_t *p_item,
playlist_item_t *p_node, int i_pos );
playlist_item_t *__playlist_ItemNewFromInput( vlc_object_t *p_obj,
input_item_t *p_input )
{
- /** FIXME !!!!! don't find playlist each time */
- playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_obj, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
DECMALLOC_NULL( p_item, playlist_item_t );
+ playlist_t *p_playlist = p_obj->p_libvlc->p_playlist;
+ vlc_object_yield( p_playlist );
p_item->p_input = p_input;
vlc_gc_incref( p_item->p_input );
{
playlist_item_t *p_item_cat, *p_item_one;
- PL_DEBUG( "adding item `%s' ( %s )", p_input->psz_name, p_input->psz_uri );
+ if( !p_playlist->b_doing_ml )
+ PL_DEBUG( "adding item `%s' ( %s )", p_input->psz_name,
+ p_input->psz_uri );
vlc_mutex_lock( &p_playlist->object_lock );
/* Add to ONELEVEL */
p_item_one = playlist_ItemNewFromInput( p_playlist, p_input );
if( p_item_one == NULL ) return VLC_EGENERIC;
- AddItem( p_playlist, p_item_one,
- b_playlist ? p_playlist->p_local_onelevel :
+ AddItem( p_playlist, p_item_one,
+ b_playlist ? p_playlist->p_local_onelevel :
p_playlist->p_ml_onelevel , i_pos );
/* Add to CATEGORY */
p_item_cat = playlist_ItemNewFromInput( p_playlist, p_input );
if( p_item_cat == NULL ) return VLC_EGENERIC;
AddItem( p_playlist, p_item_cat,
- b_playlist ? p_playlist->p_local_category :
+ b_playlist ? p_playlist->p_local_category :
p_playlist->p_ml_category , i_pos );
GoAndPreparse( p_playlist, i_mode, p_item_cat, p_item_one );
p_playlist->p_root_onelevel );
ChangeToNode( p_playlist, p_item_in_category );
if( p_item_in_one->p_parent == p_playlist->p_root_onelevel )
- {
ChangeToNode( p_playlist, p_item_in_one );
- }
else
{
playlist_DeleteFromInput( p_playlist, p_item_in_one->p_input->i_id,
p_playlist->p_root_onelevel, VLC_FALSE );
}
- var_SetInteger( p_playlist, "item-change", p_item->p_input->i_id );
+ p_playlist->b_reset_random = VLC_TRUE;
+ var_SetInteger( p_playlist, "item-change", p_item_in_category->
+ p_input->i_id );
return p_item_in_category;
}
else
p_add->i_item = i_item_id;
p_add->i_node = i_node_id;
val.p_address = p_add;
+ p_playlist->b_reset_random = VLC_TRUE;
var_Set( p_playlist, "item-append", val );
free( p_add );
}
{
playlist_NodeInsert( p_playlist, p_item, p_node, i_pos );
}
-
- playlist_SendAddNotify( p_playlist, p_item->i_id, p_node->i_id );
+ if( !p_playlist->b_doing_ml )
+ playlist_SendAddNotify( p_playlist, p_item->i_id, p_node->i_id );
}
/* Actually convert an item to a node */
{
return playlist_NodeDelete( p_playlist, p_item, VLC_TRUE, VLC_FALSE );
}
+ p_playlist->b_reset_random = VLC_TRUE;
var_SetInteger( p_playlist, "item-deleted", i_id );
/* Remove the item from the bank */
/* Hack we don't call playlist_Control for lock reasons */
if( b_stop )
{
- p_playlist->status.i_status = PLAYLIST_STOPPED;
+ p_playlist->request.i_status = PLAYLIST_STOPPED;
p_playlist->request.b_request = VLC_TRUE;
p_playlist->request.p_item = NULL;
msg_Info( p_playlist, "stopping playback" );
if( b_flag == VLC_FALSE )
playlist_ItemDelete( p_item );
else
+ {
+ PL_DEBUG( "marking %s for further deletion", PLI_NAME( p_item ) );
p_item->i_flags |= PLAYLIST_REMOVE_FLAG;
+ }
return VLC_SUCCESS;
}