int playlist_vaControl( playlist_t * p_playlist, int i_query, va_list args )
{
playlist_view_t *p_view;
+ playlist_item_t *p_item, *p_node;
+ int i_view;
vlc_value_t val;
#ifdef PLAYLIST_PROFILE
break;
case PLAYLIST_ITEMPLAY:
+ p_item = (playlist_item_t *)va_arg( args, playlist_item_t * );
+ if ( p_item == NULL || p_item->input.psz_uri == NULL )
+ return VLC_EGENERIC;
p_playlist->status.i_status = PLAYLIST_RUNNING;
p_playlist->request.i_skip = 0;
p_playlist->request.b_request = VLC_TRUE;
- p_playlist->request.p_item = (playlist_item_t *)va_arg( args,
- playlist_item_t *);
+ p_playlist->request.p_item = p_item;
p_playlist->request.i_view = p_playlist->status.i_view;
p_view = playlist_ViewFind( p_playlist, p_playlist->status.i_view );
if( p_view )
break;
case PLAYLIST_VIEWPLAY:
+ i_view = (int)va_arg( args,int );
+ p_node = (playlist_item_t *)va_arg( args, playlist_item_t * );
+ p_item = (playlist_item_t *)va_arg( args, playlist_item_t * );
+ if ( p_node == NULL || (p_item != NULL && p_item->input.psz_uri
+ == NULL ))
+ {
+ p_playlist->status.i_status = PLAYLIST_STOPPED;
+ p_playlist->request.b_request = VLC_TRUE;
+ return VLC_SUCCESS;
+ }
p_playlist->status.i_status = PLAYLIST_RUNNING;
p_playlist->request.i_skip = 0;
p_playlist->request.b_request = VLC_TRUE;
- p_playlist->request.i_view = (int)va_arg( args,int );
- p_playlist->request.p_node = (playlist_item_t *)va_arg( args,
- playlist_item_t *);
- p_playlist->request.p_item = (playlist_item_t *)va_arg( args,
- playlist_item_t *);
+ p_playlist->request.i_view = i_view;
+ p_playlist->request.p_node = p_node;
+ p_playlist->request.p_item = p_item;
/* If we select a node, play only it.
* If we select an item, continue */
int i_skip,i_goto,i, i_new, i_count ;
playlist_view_t *p_view;
- vlc_bool_t b_loop = var_GetBool( p_playlist, "loop");
+ vlc_bool_t b_loop = var_GetBool( p_playlist, "loop" );
vlc_bool_t b_random = var_GetBool( p_playlist, "random" );
vlc_bool_t b_repeat = var_GetBool( p_playlist, "repeat" );
vlc_bool_t b_playstop = var_GetBool( p_playlist, "play-and-stop" );
int64_t start = mdate();
#endif
-
/* Handle quickly a few special cases */
/* No items to play */
{
p_playlist->pp_items[--i_count]->i_nb_played = 0;
}
- if( !b_loop )
+ if( !b_loop )
{
return NULL;
}
p_playlist->request.i_skip = 0;
p_playlist->request.b_request = VLC_FALSE;
return p_playlist->pp_items[i_new];
- }
+ }
/* Start the real work */
if( p_playlist->request.b_request )
i_skip = p_playlist->request.i_skip;
i_goto = p_playlist->request.i_goto;
- if( p_playlist->i_index == -1 ) p_playlist->i_index = 0;
+ if( p_playlist->i_index < 0 ) p_playlist->i_index = 0;
p_new = p_playlist->pp_items[p_playlist->i_index];
if( i_goto >= 0 && i_goto < p_playlist->i_size )
{
if( b_loop )
{
+#ifdef PLAYLIST_DEBUG
+ msg_Dbg( p_playlist, "looping" );
+#endif
p_new = playlist_FindNextFromParent( p_playlist,
p_playlist->request.i_view,
p_view->p_root,
if( p_playlist->status.i_view == -1 )
{
+#ifdef PLAYLIST_DEBUG
+ msg_Dbg( p_playlist,"no request - old mode" );
+#endif
if( p_playlist->i_index + 1 < p_playlist->i_size )
{
p_playlist->i_index++;
/* We are playing with a view */
else
{
+#ifdef PLAYLIST_DEBUG
+ msg_Dbg( p_playlist,"no request - from a view" );
+#endif
playlist_view_t *p_view =
playlist_ViewFind( p_playlist,
p_playlist->status.i_view );
p_playlist->status.p_item );
if( p_new == NULL && b_loop )
{
+#ifdef PLAYLIST_DEBUG
+ msg_Dbg( p_playlist, "looping" );
+#endif
p_new = playlist_FindNextFromParent( p_playlist,
p_playlist->status.i_view,
p_view->p_root,