[vlc-commits] lua: sd: reorder/regroup code

Rémi Denis-Courmont git at videolan.org
Tue May 9 21:37:23 CEST 2017


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue May  9 22:36:48 2017 +0300| [691328a18cf6446cb9ce037c3d0b08da0ae7094a] | committer: Rémi Denis-Courmont

lua: sd: reorder/regroup code

No functional changes.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=691328a18cf6446cb9ce037c3d0b08da0ae7094a
---

 modules/lua/libs/sd.c | 444 +++++++++++++++++++++++++-------------------------
 1 file changed, 224 insertions(+), 220 deletions(-)

diff --git a/modules/lua/libs/sd.c b/modules/lua/libs/sd.c
index f564dbf054..61e7193bcb 100644
--- a/modules/lua/libs/sd.c
+++ b/modules/lua/libs/sd.c
@@ -42,17 +42,8 @@
 #include "../vlc.h"
 #include "../libs.h"
 
-/*****************************************************************************
- *
- *****************************************************************************/
-static int vlclua_node_add_subitem( lua_State * );
-static int vlclua_node_add_subnode( lua_State * );
 
-static const luaL_Reg vlclua_node_reg[] = {
-    { "add_subitem", vlclua_node_add_subitem },
-    { "add_subnode", vlclua_node_add_subnode },
-    { NULL, NULL }
-};
+/*** Input item ***/
 
 #define vlclua_item_luareg( a ) \
 { "set_" # a, vlclua_item_set_ ## a },
@@ -91,11 +82,11 @@ vlclua_item_meta(encodedby, EncodedBy)
 vlclua_item_meta(arturl, ArtworkURL)
 vlclua_item_meta(trackid, TrackID)
 vlclua_item_meta(tracktotal, TrackTotal)
-vlclua_item_meta(director  , Director  )
-vlclua_item_meta(season    , Season    )
-vlclua_item_meta(episode   , Episode   )
-vlclua_item_meta(showname  , ShowName  )
-vlclua_item_meta(actors    , Actors    )
+vlclua_item_meta(director, Director)
+vlclua_item_meta(season, Season)
+vlclua_item_meta(episode, Episode)
+vlclua_item_meta(showname, ShowName)
+vlclua_item_meta(actors, Actors)
 
 static const luaL_Reg vlclua_item_reg[] = {
     vlclua_item_luareg(title)
@@ -116,114 +107,149 @@ static const luaL_Reg vlclua_item_reg[] = {
     vlclua_item_luareg(arturl)
     vlclua_item_luareg(trackid)
     vlclua_item_luareg(tracktotal)
-    vlclua_item_luareg(director  )
-    vlclua_item_luareg(season    )
-    vlclua_item_luareg(episode   )
-    vlclua_item_luareg(showname  )
-    vlclua_item_luareg(actors    )
+    vlclua_item_luareg(director)
+    vlclua_item_luareg(season)
+    vlclua_item_luareg(episode)
+    vlclua_item_luareg(showname)
+    vlclua_item_luareg(actors)
     { NULL, NULL }
 };
 
-static int vlclua_sd_get_services_names( lua_State *L )
-{
-    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    char **ppsz_longnames;
-    char **ppsz_names = vlc_sd_GetNames( p_playlist, &ppsz_longnames, NULL );
-    if( !ppsz_names )
-        return 0;
 
-    char **ppsz_longname = ppsz_longnames;
-    char **ppsz_name = ppsz_names;
-    lua_settop( L, 0 );
-    lua_newtable( L );
-    for( ; *ppsz_name; ppsz_name++,ppsz_longname++ )
-    {
-        lua_pushstring( L, *ppsz_longname );
-        lua_setfield( L, -2, *ppsz_name );
-        free( *ppsz_name );
-        free( *ppsz_longname );
-    }
-    free( ppsz_names );
-    free( ppsz_longnames );
-    return 1;
-}
+/*** Input item tree node ***/
 
-static int vlclua_sd_add( lua_State *L )
+static int vlclua_node_add_subitem( lua_State *L )
 {
-    const char *psz_sd = luaL_checkstring( L, 1 );
-    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    int i_ret = playlist_ServicesDiscoveryAdd( p_playlist, psz_sd );
-    return vlclua_push_ret( L, i_ret );
-}
+    services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
+    input_item_t **pp_node = (input_item_t **)luaL_checkudata( L, 1, "node" );
+    if( *pp_node )
+    {
+        if( lua_istable( L, -1 ) )
+        {
+            lua_getfield( L, -1, "path" );
+            if( lua_isstring( L, -1 ) )
+            {
+                const char *psz_path = lua_tostring( L, -1 );
 
-static int vlclua_sd_remove( lua_State *L )
-{
-    const char *psz_sd = luaL_checkstring( L, 1 );
-    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    int i_ret = playlist_ServicesDiscoveryRemove( p_playlist, psz_sd );
-    return vlclua_push_ret( L, i_ret );
-}
+                /* The table must be at the top of the stack when calling
+                 * vlclua_read_options() */
+                char **ppsz_options = NULL;
+                int i_options = 0;
+                lua_pushvalue( L, -2 );
+                vlclua_read_options( p_sd, L, &i_options, &ppsz_options );
 
-static int vlclua_sd_is_loaded( lua_State *L )
-{
-    const char *psz_sd = luaL_checkstring( L, 1 );
-    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
-    lua_pushboolean( L, playlist_IsServicesDiscoveryLoaded( p_playlist, psz_sd ));
+                input_item_t *p_input = input_item_New( psz_path, psz_path );
+                lua_pop( L, 2 );
+
+                if( p_input )
+                {
+                    input_item_AddOptions( p_input, i_options,
+                                           (const char **)ppsz_options,
+                                           VLC_INPUT_OPTION_TRUSTED );
+                    input_item_node_t *p_input_node = input_item_node_Create( *pp_node );
+
+                    vlclua_read_meta_data( p_sd, L, p_input );
+                    /* This one is to be tested... */
+                    vlclua_read_custom_meta_data( p_sd, L, p_input );
+                    lua_getfield( L, -1, "duration" );
+                    if( lua_isnumber( L, -1 ) )
+                        input_item_SetDuration( p_input, (lua_tonumber( L, -1 )*1e6) );
+                    else if( !lua_isnil( L, -1 ) )
+                        msg_Warn( p_sd, "Item duration should be a number (in seconds)." );
+                    lua_pop( L, 1 );
+                    input_item_node_AppendItem( p_input_node, p_input );
+                    input_item_node_PostAndDelete( p_input_node );
+                    input_item_t **udata = (input_item_t **)
+                                           lua_newuserdata( L, sizeof( input_item_t * ) );
+                    *udata = p_input;
+                    if( luaL_newmetatable( L, "input_item_t" ) )
+                    {
+                        lua_newtable( L );
+                        luaL_register( L, NULL, vlclua_item_reg );
+                        lua_setfield( L, -2, "__index" );
+                        lua_pushliteral( L, "none of your business" );
+                        lua_setfield( L, -2, "__metatable" );
+                    }
+                    lua_setmetatable( L, -2 );
+                    input_item_Release( p_input );
+                }
+                while( i_options > 0 )
+                    free( ppsz_options[--i_options] );
+                free( ppsz_options );
+            }
+            else
+                msg_Err( p_sd, "node:add_subitem: the \"path\" parameter can't be empty" );
+        }
+        else
+            msg_Err( p_sd, "Error parsing add_subitem arguments" );
+    }
     return 1;
 }
 
-static int vlclua_sd_add_node( lua_State *L )
+static const luaL_Reg vlclua_node_reg[];
+
+static int vlclua_node_add_subnode( lua_State *L )
 {
     services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
-    if( lua_istable( L, -1 ) )
+    input_item_t **pp_node = (input_item_t **)luaL_checkudata( L, 1, "node" );
+    if( *pp_node )
     {
-        lua_getfield( L, -1, "title" );
-        if( lua_isstring( L, -1 ) )
+        if( lua_istable( L, -1 ) )
         {
-            const char *psz_name = lua_tostring( L, -1 );
-            input_item_t *p_input = input_item_NewExt( "vlc://nop",
-                                                       psz_name, -1,
-                                                       ITEM_TYPE_NODE, ITEM_NET_UNKNOWN );
-            lua_pop( L, 1 );
-
-            if( p_input )
+            lua_getfield( L, -1, "title" );
+            if( lua_isstring( L, -1 ) )
             {
-                lua_getfield( L, -1, "arturl" );
-                if( lua_isstring( L, -1 ) && strcmp( lua_tostring( L, -1 ), "" ) )
-                {
-                    char *psz_value = strdup( lua_tostring( L, -1 ) );
-                    EnsureUTF8( psz_value );
-                    msg_Dbg( p_sd, "ArtURL: %s", psz_value );
-                    /** @todo Ask for art download if not local file */
-                    input_item_SetArtURL( p_input, psz_value );
-                    free( psz_value );
-                }
+                const char *psz_name = lua_tostring( L, -1 );
+                input_item_t *p_input = input_item_NewExt( "vlc://nop",
+                                                           psz_name, -1,
+                                                           ITEM_TYPE_NODE, ITEM_NET_UNKNOWN );
                 lua_pop( L, 1 );
-                lua_getfield( L, -1, "category" );
-                if( lua_isstring( L, -1 ) )
-                    services_discovery_AddItem( p_sd, p_input, luaL_checkstring( L, -1 ) );
-                else
-                    services_discovery_AddItem( p_sd, p_input, NULL );
-                input_item_t **udata = (input_item_t **)
-                                       lua_newuserdata( L, sizeof( input_item_t * ) );
-                *udata = p_input;
-                if( luaL_newmetatable( L, "node" ) )
+
+                if( p_input )
                 {
-                    lua_newtable( L );
-                    luaL_register( L, NULL, vlclua_node_reg );
-                    lua_setfield( L, -2, "__index" );
+                    input_item_node_t *p_input_node = input_item_node_Create( *pp_node );
+
+                    lua_getfield( L, -1, "arturl" );
+                    if( lua_isstring( L, -1 ) && strcmp( lua_tostring( L, -1 ), "" ) )
+                    {
+                        char *psz_value = strdup( lua_tostring( L, -1 ) );
+                        EnsureUTF8( psz_value );
+                        msg_Dbg( p_sd, "ArtURL: %s", psz_value );
+                        input_item_SetArtURL( p_input, psz_value );
+                        free( psz_value );
+                    }
+                    input_item_node_AppendItem( p_input_node, p_input );
+                    input_item_node_PostAndDelete( p_input_node );
+                    input_item_t **udata = (input_item_t **)
+                                           lua_newuserdata( L, sizeof( input_item_t * ) );
+                    *udata = p_input;
+                    if( luaL_newmetatable( L, "node" ) )
+                    {
+                        lua_newtable( L );
+                        luaL_register( L, NULL, vlclua_node_reg );
+                        lua_setfield( L, -2, "__index" );
+                    }
+                    lua_setmetatable( L, -2 );
                 }
-                lua_setmetatable( L, -2 );
             }
+            else
+                msg_Err( p_sd, "node:add_node: the \"title\" parameter can't be empty" );
         }
         else
-            msg_Err( p_sd, "vlc.sd.add_node: the \"title\" parameter can't be empty" );
+            msg_Err( p_sd, "Error parsing add_node arguments" );
     }
-    else
-        msg_Err( p_sd, "Error parsing add_node arguments" );
     return 1;
 }
 
+static const luaL_Reg vlclua_node_reg[] = {
+    { "add_subitem", vlclua_node_add_subitem },
+    { "add_subnode", vlclua_node_add_subnode },
+    { NULL, NULL }
+};
+
+
+/*** Services discovery instance ***/
+
 static int vlclua_sd_add_item( lua_State *L )
 {
     services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
@@ -315,6 +341,58 @@ static int vlclua_sd_add_item( lua_State *L )
     return 1;
 }
 
+static int vlclua_sd_add_node( lua_State *L )
+{
+    services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
+    if( lua_istable( L, -1 ) )
+    {
+        lua_getfield( L, -1, "title" );
+        if( lua_isstring( L, -1 ) )
+        {
+            const char *psz_name = lua_tostring( L, -1 );
+            input_item_t *p_input = input_item_NewExt( "vlc://nop",
+                                                       psz_name, -1,
+                                                       ITEM_TYPE_NODE, ITEM_NET_UNKNOWN );
+            lua_pop( L, 1 );
+
+            if( p_input )
+            {
+                lua_getfield( L, -1, "arturl" );
+                if( lua_isstring( L, -1 ) && strcmp( lua_tostring( L, -1 ), "" ) )
+                {
+                    char *psz_value = strdup( lua_tostring( L, -1 ) );
+                    EnsureUTF8( psz_value );
+                    msg_Dbg( p_sd, "ArtURL: %s", psz_value );
+                    /** @todo Ask for art download if not local file */
+                    input_item_SetArtURL( p_input, psz_value );
+                    free( psz_value );
+                }
+                lua_pop( L, 1 );
+                lua_getfield( L, -1, "category" );
+                if( lua_isstring( L, -1 ) )
+                    services_discovery_AddItem( p_sd, p_input, luaL_checkstring( L, -1 ) );
+                else
+                    services_discovery_AddItem( p_sd, p_input, NULL );
+                input_item_t **udata = (input_item_t **)
+                                       lua_newuserdata( L, sizeof( input_item_t * ) );
+                *udata = p_input;
+                if( luaL_newmetatable( L, "node" ) )
+                {
+                    lua_newtable( L );
+                    luaL_register( L, NULL, vlclua_node_reg );
+                    lua_setfield( L, -2, "__index" );
+                }
+                lua_setmetatable( L, -2 );
+            }
+        }
+        else
+            msg_Err( p_sd, "vlc.sd.add_node: the \"title\" parameter can't be empty" );
+    }
+    else
+        msg_Err( p_sd, "Error parsing add_node arguments" );
+    return 1;
+}
+
 static int vlclua_sd_remove_item( lua_State *L )
 {
     services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
@@ -343,144 +421,70 @@ static int vlclua_sd_remove_node( lua_State *L )
     return 1;
 }
 
+static const luaL_Reg vlclua_sd_sd_reg[] = {
+    { "add_item", vlclua_sd_add_item },
+    { "add_node", vlclua_sd_add_node },
+    { "remove_item", vlclua_sd_remove_item },
+    { "remove_node", vlclua_sd_remove_node },
+    { NULL, NULL }
+};
 
-static int vlclua_node_add_subitem( lua_State *L )
+void luaopen_sd_sd( lua_State *L )
 {
-    services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
-    input_item_t **pp_node = (input_item_t **)luaL_checkudata( L, 1, "node" );
-    if( *pp_node )
-    {
-        if( lua_istable( L, -1 ) )
-        {
-            lua_getfield( L, -1, "path" );
-            if( lua_isstring( L, -1 ) )
-            {
-                const char *psz_path = lua_tostring( L, -1 );
+    lua_newtable( L );
+    luaL_register( L, NULL, vlclua_sd_sd_reg );
+    lua_setfield( L, -2, "sd" );
+}
 
-                /* The table must be at the top of the stack when calling
-                 * vlclua_read_options() */
-                char **ppsz_options = NULL;
-                int i_options = 0;
-                lua_pushvalue( L, -2 );
-                vlclua_read_options( p_sd, L, &i_options, &ppsz_options );
 
-                input_item_t *p_input = input_item_New( psz_path, psz_path );
-                lua_pop( L, 2 );
+/*** SD management (for user interfaces) ***/
 
-                if( p_input )
-                {
-                    input_item_AddOptions( p_input, i_options,
-                                           (const char **)ppsz_options,
-                                           VLC_INPUT_OPTION_TRUSTED );
-                    input_item_node_t *p_input_node = input_item_node_Create( *pp_node );
+static int vlclua_sd_get_services_names( lua_State *L )
+{
+    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+    char **ppsz_longnames;
+    char **ppsz_names = vlc_sd_GetNames( p_playlist, &ppsz_longnames, NULL );
+    if( !ppsz_names )
+        return 0;
 
-                    vlclua_read_meta_data( p_sd, L, p_input );
-                    /* This one is to be tested... */
-                    vlclua_read_custom_meta_data( p_sd, L, p_input );
-                    lua_getfield( L, -1, "duration" );
-                    if( lua_isnumber( L, -1 ) )
-                        input_item_SetDuration( p_input, (lua_tonumber( L, -1 )*1e6) );
-                    else if( !lua_isnil( L, -1 ) )
-                        msg_Warn( p_sd, "Item duration should be a number (in seconds)." );
-                    lua_pop( L, 1 );
-                    input_item_node_AppendItem( p_input_node, p_input );
-                    input_item_node_PostAndDelete( p_input_node );
-                    input_item_t **udata = (input_item_t **)
-                                           lua_newuserdata( L, sizeof( input_item_t * ) );
-                    *udata = p_input;
-                    if( luaL_newmetatable( L, "input_item_t" ) )
-                    {
-                        lua_newtable( L );
-                        luaL_register( L, NULL, vlclua_item_reg );
-                        lua_setfield( L, -2, "__index" );
-                        lua_pushliteral( L, "none of your business" );
-                        lua_setfield( L, -2, "__metatable" );
-                    }
-                    lua_setmetatable( L, -2 );
-                    input_item_Release( p_input );
-                }
-                while( i_options > 0 )
-                    free( ppsz_options[--i_options] );
-                free( ppsz_options );
-            }
-            else
-                msg_Err( p_sd, "node:add_subitem: the \"path\" parameter can't be empty" );
-        }
-        else
-            msg_Err( p_sd, "Error parsing add_subitem arguments" );
+    char **ppsz_longname = ppsz_longnames;
+    char **ppsz_name = ppsz_names;
+    lua_settop( L, 0 );
+    lua_newtable( L );
+    for( ; *ppsz_name; ppsz_name++,ppsz_longname++ )
+    {
+        lua_pushstring( L, *ppsz_longname );
+        lua_setfield( L, -2, *ppsz_name );
+        free( *ppsz_name );
+        free( *ppsz_longname );
     }
+    free( ppsz_names );
+    free( ppsz_longnames );
     return 1;
 }
 
-static int vlclua_node_add_subnode( lua_State *L )
+static int vlclua_sd_add( lua_State *L )
 {
-    services_discovery_t *p_sd = (services_discovery_t *)vlclua_get_this( L );
-    input_item_t **pp_node = (input_item_t **)luaL_checkudata( L, 1, "node" );
-    if( *pp_node )
-    {
-        if( lua_istable( L, -1 ) )
-        {
-            lua_getfield( L, -1, "title" );
-            if( lua_isstring( L, -1 ) )
-            {
-                const char *psz_name = lua_tostring( L, -1 );
-                input_item_t *p_input = input_item_NewExt( "vlc://nop",
-                                                           psz_name, -1,
-                                                           ITEM_TYPE_NODE, ITEM_NET_UNKNOWN );
-                lua_pop( L, 1 );
-
-                if( p_input )
-                {
-                    input_item_node_t *p_input_node = input_item_node_Create( *pp_node );
-
-                    lua_getfield( L, -1, "arturl" );
-                    if( lua_isstring( L, -1 ) && strcmp( lua_tostring( L, -1 ), "" ) )
-                    {
-                        char *psz_value = strdup( lua_tostring( L, -1 ) );
-                        EnsureUTF8( psz_value );
-                        msg_Dbg( p_sd, "ArtURL: %s", psz_value );
-                        input_item_SetArtURL( p_input, psz_value );
-                        free( psz_value );
-                    }
-                    input_item_node_AppendItem( p_input_node, p_input );
-                    input_item_node_PostAndDelete( p_input_node );
-                    input_item_t **udata = (input_item_t **)
-                                           lua_newuserdata( L, sizeof( input_item_t * ) );
-                    *udata = p_input;
-                    if( luaL_newmetatable( L, "node" ) )
-                    {
-                        lua_newtable( L );
-                        luaL_register( L, NULL, vlclua_node_reg );
-                        lua_setfield( L, -2, "__index" );
-                    }
-                    lua_setmetatable( L, -2 );
-                }
-            }
-            else
-                msg_Err( p_sd, "node:add_node: the \"title\" parameter can't be empty" );
-        }
-        else
-            msg_Err( p_sd, "Error parsing add_node arguments" );
-    }
-    return 1;
+    const char *psz_sd = luaL_checkstring( L, 1 );
+    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+    int i_ret = playlist_ServicesDiscoveryAdd( p_playlist, psz_sd );
+    return vlclua_push_ret( L, i_ret );
 }
 
-/*****************************************************************************
- *
- *****************************************************************************/
-static const luaL_Reg vlclua_sd_sd_reg[] = {
-    { "add_node", vlclua_sd_add_node },
-    { "add_item", vlclua_sd_add_item },
-    { "remove_item", vlclua_sd_remove_item },
-    { "remove_node", vlclua_sd_remove_node },
-    { NULL, NULL }
-};
+static int vlclua_sd_remove( lua_State *L )
+{
+    const char *psz_sd = luaL_checkstring( L, 1 );
+    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+    int i_ret = playlist_ServicesDiscoveryRemove( p_playlist, psz_sd );
+    return vlclua_push_ret( L, i_ret );
+}
 
-void luaopen_sd_sd( lua_State *L )
+static int vlclua_sd_is_loaded( lua_State *L )
 {
-    lua_newtable( L );
-    luaL_register( L, NULL, vlclua_sd_sd_reg );
-    lua_setfield( L, -2, "sd" );
+    const char *psz_sd = luaL_checkstring( L, 1 );
+    playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+    lua_pushboolean( L, playlist_IsServicesDiscoveryLoaded( p_playlist, psz_sd ));
+    return 1;
 }
 
 static const luaL_Reg vlclua_sd_intf_reg[] = {



More information about the vlc-commits mailing list