]> git.sesse.net Git - vlc/blobdiff - modules/misc/lua/libs/playlist.c
Lua dialogs: introduce "dlg:flush()"
[vlc] / modules / misc / lua / libs / playlist.c
index 68498fc5c199229d5afe0245b1f1ac4f37e53f5e..240b521e14946685be5efd3587915de6000c2055 100644 (file)
@@ -51,7 +51,7 @@
 playlist_t *vlclua_get_playlist_internal( lua_State *L )
 {
     vlc_object_t *p_this = vlclua_get_this( L );
-    return pl_Yield( p_this );
+    return pl_Hold( p_this );
 }
 
 void vlclua_release_playlist_internal( playlist_t *p_playlist )
@@ -87,9 +87,7 @@ static int vlclua_playlist_skip( lua_State * L )
 static int vlclua_playlist_play( lua_State * L )
 {
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    PL_LOCK;
     playlist_Play( p_playlist );
-    PL_UNLOCK;
     vlclua_release_playlist_internal( p_playlist );
     return 0;
 }
@@ -150,8 +148,7 @@ static int vlclua_playlist_goto( lua_State * L )
     PL_LOCK;
     int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
                                   true, NULL,
-                                  playlist_ItemGetById( p_playlist, i_id,
-                                                        true ) );
+                                  playlist_ItemGetById( p_playlist, i_id ) );
     PL_UNLOCK;
     vlclua_release_playlist_internal( p_playlist );
     return vlclua_push_ret( L, i_ret );
@@ -243,7 +240,7 @@ static int vlclua_playlist_get( lua_State *L )
     if( lua_isnumber( L, 1 ) )
     {
         int i_id = lua_tointeger( L, 1 );
-        p_item = playlist_ItemGetById( p_playlist, i_id, true );
+        p_item = playlist_ItemGetById( p_playlist, i_id );
         if( !p_item )
         {
             PL_UNLOCK;
@@ -267,8 +264,8 @@ static int vlclua_playlist_get( lua_State *L )
                                 : p_playlist->p_root_onelevel;
         else
         {
-            int i;
-            for( i = 0; i < p_playlist->i_sds; i++ )
+#ifdef FIX_THAT_CODE_NOT_TO_MESS_WITH_PLAYLIST_INTERNALS
+            for( int i = 0; i < p_playlist->i_sds; i++ )
             {
                 if( !strcasecmp( psz_what,
                                  p_playlist->pp_sds[i]->p_sd->psz_module ) )
@@ -278,6 +275,10 @@ static int vlclua_playlist_get( lua_State *L )
                     break;
                 }
             }
+#else
+# warning "Don't access playlist iternal, broken code here."
+            abort();
+#endif
             if( !p_item )
             {
                 PL_UNLOCK;
@@ -315,7 +316,19 @@ static int vlclua_playlist_search( lua_State *L )
 static int vlclua_playlist_current( lua_State *L )
 {
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    lua_pushinteger( L, var_GetInteger( p_playlist, "playlist-current" ) );
+    input_thread_t *p_input = playlist_CurrentInput( p_playlist );
+    int id = -1;
+
+    if( p_input )
+    {
+        input_item_t *p_item = input_GetItem( p_input );
+        if( p_item )
+            id = p_item->i_id;
+        vlc_object_release( p_input );
+    }
+
+#warning Indexing input items by ID is unsafe,
+    lua_pushinteger( L, id );
     vlclua_release_playlist_internal( p_playlist );
     return 1;
 }
@@ -365,43 +378,26 @@ static int vlclua_playlist_sort( lua_State *L )
     return vlclua_push_ret( L, i_ret );
 }
 
-/* FIXME: split this in 3 different functions? */
 static int vlclua_playlist_status( lua_State *L )
 {
     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    /*
-    int i_count = 0;
-    lua_settop( L, 0 );*/
-    if( p_playlist->p_input )
-    {
-        /*char *psz_uri =
-            input_item_GetURI( input_GetItem( p_playlist->p_input ) );
-        lua_pushstring( L, psz_uri );
-        free( psz_uri );
-        lua_pushnumber( L, config_GetInt( p_intf, "volume" ) );*/
-        PL_LOCK;
-        switch( p_playlist->status.i_status )
-        {
-            case PLAYLIST_STOPPED:
-                lua_pushstring( L, "stopped" );
-                break;
-            case PLAYLIST_RUNNING:
-                lua_pushstring( L, "playing" );
-                break;
-            case PLAYLIST_PAUSED:
-                lua_pushstring( L, "paused" );
-                break;
-            default:
-                lua_pushstring( L, "unknown" );
-                break;
-        }
-        PL_UNLOCK;
-        /*i_count += 3;*/
-    }
-    else
+    PL_LOCK;
+    switch( playlist_Status( p_playlist ) )
     {
-        lua_pushstring( L, "stopped" );
+        case PLAYLIST_STOPPED:
+            lua_pushstring( L, "stopped" );
+            break;
+        case PLAYLIST_RUNNING:
+            lua_pushstring( L, "playing" );
+            break;
+        case PLAYLIST_PAUSED:
+            lua_pushstring( L, "paused" );
+            break;
+        default:
+            lua_pushstring( L, "unknown" );
+            break;
     }
+    PL_UNLOCK;
     vlclua_release_playlist_internal( p_playlist );
     return 1;
 }
@@ -417,7 +413,8 @@ static const luaL_Reg vlclua_playlist_reg[] = {
     { "pause", vlclua_playlist_pause },
     { "stop", vlclua_playlist_stop },
     { "clear", vlclua_playlist_clear },
-    { "repeat", vlclua_playlist_repeat },
+    { "repeat", vlclua_playlist_repeat }, // repeat is a reserved lua keyword...
+    { "repeat_", vlclua_playlist_repeat }, // ... provide repeat_ too.
     { "loop", vlclua_playlist_loop },
     { "random", vlclua_playlist_random },
     { "goto", vlclua_playlist_goto },