return pl_Yield( p_this );
}
+void vlclua_release_playlist_internal( playlist_t *p_playlist )
+{
+ vlc_object_release( p_playlist );
+}
+
static int vlclua_playlist_prev( lua_State * L )
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Prev( p_playlist );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Next( p_playlist );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
int i_skip = luaL_checkint( L, 1 );
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Skip( p_playlist, i_skip );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
static int vlclua_playlist_play( lua_State * L )
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ vlc_object_lock( p_playlist );
playlist_Play( p_playlist );
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Pause( p_playlist );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Stop( p_playlist );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
playlist_Stop( p_playlist ); /* Isn't this already implied by Clear? */
- playlist_Clear( p_playlist, false );
- vlc_object_release( p_playlist );
+ playlist_Clear( p_playlist, pl_Unlocked );
+ vlclua_release_playlist_internal( p_playlist );
return 0;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
int i_ret = vlclua_var_toggle_or_set( L, p_playlist, "repeat" );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return i_ret;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
int i_ret = vlclua_var_toggle_or_set( L, p_playlist, "loop" );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return i_ret;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
int i_ret = vlclua_var_toggle_or_set( L, p_playlist, "random" );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return i_ret;
}
{
int i_id = luaL_checkint( L, 1 );
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ vlc_object_lock( p_playlist );
int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
true, NULL,
playlist_ItemGetById( p_playlist, i_id,
true ) );
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return vlclua_push_ret( L, i_ret );
}
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
i_count = vlclua_playlist_add_internal( p_this, L, p_playlist,
NULL, true );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
lua_pushinteger( L, i_count );
return 1;
}
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
i_count = vlclua_playlist_add_internal( p_this, L, p_playlist,
NULL, false );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
lua_pushinteger( L, i_count );
return 1;
}
static void push_playlist_item( lua_State *L, playlist_item_t *p_item )
{
input_item_t *p_input = p_item->p_input;
- int i_flags = p_item->i_flags;
+ int i_flags = 0;
+ i_flags = p_item->i_flags;
lua_newtable( L );
lua_pushinteger( L, p_item->i_id );
lua_setfield( L, -2, "id" );
static int vlclua_playlist_get( lua_State *L )
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ vlc_object_lock( p_playlist );
int b_category = luaL_optboolean( L, 2, 1 ); /* Default to tree playlist (discared when 1st argument is a playlist_item's id) */
playlist_item_t *p_item = NULL;
p_item = playlist_ItemGetById( p_playlist, i_id, true );
if( !p_item )
{
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0; /* Should we return an error instead? */
}
}
}
if( !p_item )
{
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 0; /* Should we return an error instead? */
}
}
: p_playlist->p_root_onelevel;
}
push_playlist_item( L, p_item );
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 1;
}
int b_category = luaL_optboolean( L, 2, 1 ); /* default to category */
playlist_item_t *p_item = b_category ? p_playlist->p_root_category
: p_playlist->p_root_onelevel;
+ vlc_object_lock( p_playlist );
playlist_LiveSearchUpdate( p_playlist, p_item, psz_string );
+ vlc_object_unlock( p_playlist );
push_playlist_item( L, p_item );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 1;
}
{
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
lua_pushinteger( L, var_GetInteger( p_playlist, "playlist-current" ) );
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 1;
}
int i_type = luaL_optboolean( L, 2, 0 ) ? ORDER_REVERSE : ORDER_NORMAL;
int b_category = luaL_optboolean( L, 3, 1 ); /* default to category */
playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ vlc_object_lock( p_playlist );
playlist_item_t *p_root = b_category ? p_playlist->p_local_category
: p_playlist->p_local_onelevel;
int i_ret = playlist_RecursiveNodeSort( p_playlist, p_root, i_mode,
i_type );
- vlc_object_release( p_playlist );
+ vlc_object_unlock( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return vlclua_push_ret( L, i_ret );
}
/* FIXME: split this in 3 different functions? */
static int vlclua_playlist_status( lua_State *L )
{
- intf_thread_t *p_intf = (intf_thread_t *)vlclua_get_this( L );
- playlist_t *p_playlist = pl_Yield( p_intf );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
/*
int i_count = 0;
lua_settop( L, 0 );*/
lua_pushstring( L, psz_uri );
free( psz_uri );
lua_pushnumber( L, config_GetInt( p_intf, "volume" ) );*/
- vlc_mutex_lock( &p_playlist->object_lock );
+ vlc_object_lock( p_playlist );
switch( p_playlist->status.i_status )
{
case PLAYLIST_STOPPED:
lua_pushstring( L, "unknown" );
break;
}
- vlc_mutex_unlock( &p_playlist->object_lock );
+ vlc_object_unlock( p_playlist );
/*i_count += 3;*/
}
else
{
lua_pushstring( L, "stopped" );
}
- vlc_object_release( p_playlist );
+ vlclua_release_playlist_internal( p_playlist );
return 1;
}