]> git.sesse.net Git - vlc/blobdiff - modules/lua/libs/playlist.c
livehttp: try to comply draft 11 section 6.2.2 for how long to keep segments around...
[vlc] / modules / lua / libs / playlist.c
index 2336a376d8f83d3d1e8850363f70b01c9772e7ca..29f5e4bcc1ac8841a368954c7196726a21218aac 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "../vlc.h"
 #include "../libs.h"
+#include "input.h"
 #include "playlist.h"
 #include "variables.h"
 
@@ -123,7 +124,7 @@ static int vlclua_playlist_random( lua_State * L )
     return i_ret;
 }
 
-static int vlclua_playlist_goto( lua_State * L )
+static int vlclua_playlist_gotoitem( lua_State * L )
 {
     int i_id = luaL_checkint( L, 1 );
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
@@ -140,7 +141,35 @@ static int vlclua_playlist_delete( lua_State * L )
     int i_id = luaL_checkint( L, 1 );
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
     PL_LOCK;
-    int i_ret = playlist_DeleteFromInput(p_playlist, playlist_ItemGetById( p_playlist, i_id ) -> p_input, true );
+    playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id );
+    if( !p_item )
+    {
+       PL_UNLOCK;
+       return vlclua_push_ret( L, -1 );
+    }
+    int i_ret = playlist_DeleteFromInput( p_playlist, p_item -> p_input, true );
+    PL_UNLOCK;
+    return vlclua_push_ret( L, i_ret );
+}
+
+static int vlclua_playlist_move( lua_State * L )
+{
+    int i_item = luaL_checkint( L, 1 );
+    int i_target = luaL_checkint( L, 2 );
+    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+    PL_LOCK;
+    playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item );
+    playlist_item_t *p_target = playlist_ItemGetById( p_playlist, i_target );
+    if( !p_item || !p_target )
+    {
+       PL_UNLOCK;
+       return vlclua_push_ret( L, -1 );
+    }
+    int i_ret;
+    if( p_target->i_children != -1 )
+        i_ret = playlist_TreeMove( p_playlist, p_item, p_target, 0 );
+    else
+       i_ret = playlist_TreeMove( p_playlist, p_item, p_target->p_parent, p_target->i_id - p_target->p_parent->pp_children[0]->i_id + 1 );
     PL_UNLOCK;
     return vlclua_push_ret( L, i_ret );
 }
@@ -205,6 +234,7 @@ static void push_playlist_item( lua_State *L, playlist_item_t *p_item )
         lua_setfield( L, -2, "duration" );
         lua_pushinteger( L, p_input->i_nb_played );
         lua_setfield( L, -2, "nb_played" );
+        luaopen_input_item( L, p_input );
         /* TODO: add (optional) info categories, meta, options, es */
     }
     if( p_item->i_children >= 0 )
@@ -377,7 +407,8 @@ static const luaL_Reg vlclua_playlist_reg[] = {
     { "repeat_", vlclua_playlist_repeat }, // ... provide repeat_ too.
     { "loop", vlclua_playlist_loop },
     { "random", vlclua_playlist_random },
-    { "goto", vlclua_playlist_goto },
+    { "goto", vlclua_playlist_gotoitem },
+    { "gotoitem", vlclua_playlist_gotoitem },
     { "add", vlclua_playlist_add },
     { "enqueue", vlclua_playlist_enqueue },
     { "get", vlclua_playlist_get },
@@ -386,6 +417,7 @@ static const luaL_Reg vlclua_playlist_reg[] = {
     { "sort", vlclua_playlist_sort },
     { "status", vlclua_playlist_status },
     { "delete", vlclua_playlist_delete },
+    { "move", vlclua_playlist_move },
     { NULL, NULL }
 };