X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Flua%2Flibs%2Fmisc.c;h=09a8e272701b7f9e91fb68c141b15f6c8b938347;hb=16cb266cb6f46c62213d0a5723b21a11110267b9;hp=2f8a5b53e3736a3f7d7629235486e8cbe071f034;hpb=95addd57388b78fdfb6a58c90437085de8bbbc33;p=vlc diff --git a/modules/misc/lua/libs/misc.c b/modules/misc/lua/libs/misc.c index 2f8a5b53e3..09a8e27270 100644 --- a/modules/misc/lua/libs/misc.c +++ b/modules/misc/lua/libs/misc.c @@ -39,6 +39,7 @@ #include #include #include +#include #include /* Low level lua C API */ #include /* Higher level C API */ @@ -105,7 +106,7 @@ static int vlclua_quit( lua_State *L ) vlc_object_t *p_this = vlclua_get_this( L ); /* The rc.c code also stops the playlist ... not sure if this is needed * though. */ - vlc_object_kill( p_this->p_libvlc ); + libvlc_Quit( p_this->p_libvlc ); return 0; } @@ -114,19 +115,31 @@ static int vlclua_quit( lua_State *L ) *****************************************************************************/ static int vlclua_datadir( lua_State *L ) { - lua_pushstring( L, config_GetDataDir() ); + char *psz_data = config_GetDataDir( vlclua_get_this( L ) ); + lua_pushstring( L, psz_data ); + free( psz_data ); + return 1; +} + +static int vlclua_userdatadir( lua_State *L ) +{ + char *dir = config_GetUserDir( VLC_DATA_DIR ); + lua_pushstring( L, dir ); + free( dir ); return 1; } static int vlclua_homedir( lua_State *L ) { - lua_pushstring( L, config_GetHomeDir() ); + char *home = config_GetUserDir( VLC_HOME_DIR ); + lua_pushstring( L, home ); + free( home ); return 1; } static int vlclua_configdir( lua_State *L ) { - char *dir = config_GetUserConfDir(); + char *dir = config_GetUserDir( VLC_CONFIG_DIR ); lua_pushstring( L, dir ); free( dir ); return 1; @@ -134,7 +147,7 @@ static int vlclua_configdir( lua_State *L ) static int vlclua_cachedir( lua_State *L ) { - char *dir = config_GetCacheDir(); + char *dir = config_GetUserDir( VLC_CACHE_DIR ); lua_pushstring( L, dir ); free( dir ); return 1; @@ -147,7 +160,8 @@ static int vlclua_datadir_list( lua_State *L ) char **ppsz_dir = ppsz_dir_list; int i = 1; - if( vlclua_dir_list( psz_dirname, ppsz_dir_list ) != VLC_SUCCESS ) + if( vlclua_dir_list( vlclua_get_this( L ), psz_dirname, ppsz_dir_list ) + != VLC_SUCCESS ) return 0; lua_newtable( L ); for( ; *ppsz_dir; ppsz_dir++ ) @@ -156,6 +170,7 @@ static int vlclua_datadir_list( lua_State *L ) lua_rawseti( L, -2, i ); i ++; } + vlclua_dir_list_free( ppsz_dir_list ); return 1; } /***************************************************************************** @@ -163,17 +178,16 @@ static int vlclua_datadir_list( lua_State *L ) *****************************************************************************/ static int vlclua_lock_and_wait( lua_State *L ) { - vlc_object_t *p_this = vlclua_get_this( L ); - int b_quit = vlc_object_lock_and_wait( p_this ); - lua_pushboolean( L, b_quit ); - return 1; -} + intf_thread_t *p_intf = (intf_thread_t *)vlclua_get_this( L ); + intf_sys_t *p_sys = p_intf->p_sys; -static int vlclua_signal( lua_State *L ) -{ - vlc_object_t *p_this = vlclua_get_this( L ); - vlc_object_signal( p_this ); - return 0; + vlc_mutex_lock( &p_sys->lock ); + mutex_cleanup_push( &p_sys->lock ); + while( !p_sys->exiting ) + vlc_cond_wait( &p_sys->wait, &p_sys->lock ); + vlc_cleanup_pop(); + lua_pushboolean( L, 1 ); + return 1; } static int vlclua_mdate( lua_State *L ) @@ -182,10 +196,26 @@ static int vlclua_mdate( lua_State *L ) return 1; } +static int vlclua_mwait( lua_State *L ) +{ + double f = luaL_checknumber( L, 1 ); + mwait( (int64_t)f ); + return 0; +} + static int vlclua_intf_should_die( lua_State *L ) { intf_thread_t *p_intf = (intf_thread_t*)vlclua_get_this( L ); - lua_pushboolean( L, intf_ShouldDie( p_intf ) ); + lua_pushboolean( L, p_intf->p_sys->exiting ); + return 1; +} + +static int vlclua_action_id( lua_State *L ) +{ + vlc_key_t i_key = vlc_GetActionId( luaL_checkstring( L, 1 ) ); + if (i_key == 0) + return 0; + lua_pushnumber( L, i_key ); return 1; } @@ -198,15 +228,18 @@ static const luaL_Reg vlclua_misc_reg[] = { { "license", vlclua_license }, { "datadir", vlclua_datadir }, + { "userdatadir", vlclua_userdatadir }, { "homedir", vlclua_homedir }, { "configdir", vlclua_configdir }, { "cachedir", vlclua_cachedir }, { "datadir_list", vlclua_datadir_list }, + { "action_id", vlclua_action_id }, + { "mdate", vlclua_mdate }, + { "mwait", vlclua_mwait }, { "lock_and_wait", vlclua_lock_and_wait }, - { "signal", vlclua_signal }, { "should_die", vlclua_intf_should_die }, { "quit", vlclua_quit },