#include <assert.h>
#include <sys/stat.h>
-#include <vlc_common.h>
+#include "vlc.h"
+
#include <vlc_plugin.h>
-#include <vlc_meta.h>
#include <vlc_charset.h>
#include <vlc_fs.h>
#include <vlc_services_discovery.h>
#include <vlc_stream.h>
-#include "vlc.h"
-
/*****************************************************************************
* Module descriptor
*****************************************************************************/
#define CONFIG_TEXT N_("Lua interface configuration")
#define CONFIG_LONGTEXT N_("Lua interface configuration string. Format is: '[\"<interface module name>\"] = { <option> = <value>, ...}, ...'.")
+#define PASS_TEXT N_( "Password" )
+#define PASS_LONGTEXT N_( "A single password restricts access " \
+ "to this interface." )
#define SRC_TEXT N_( "Source directory" )
#define SRC_LONGTEXT N_( "Source directory" )
#define INDEX_TEXT N_( "Directory index" )
#define TELNETPORT_LONGTEXT N_( "This is the TCP port on which this " \
"interface will listen. It defaults to 4212." )
#define TELNETPWD_TEXT N_( "Password" )
-#define TELNETPWD_LONGTEXT N_( "A single administration password is used " \
- "to protect this interface. The default value is \"admin\"." )
-#define TELNETPWD_DEFAULT "admin"
+#define TELNETPWD_LONGTEXT N_( "A single password restricts access " \
+ "to this interface." )
#define RCHOST_TEXT N_("TCP command input")
#define RCHOST_LONGTEXT N_("Accept commands over a socket rather than stdin. " \
"You can set the address and port the interface will bind to." )
add_submodule ()
set_section( N_("Lua HTTP"), 0 )
+ add_password ( "http-password", NULL, PASS_TEXT, PASS_LONGTEXT, false )
add_string ( "http-src", NULL, SRC_TEXT, SRC_LONGTEXT, true )
add_bool ( "http-index", false, INDEX_TEXT, INDEX_LONGTEXT, true )
set_capability( "interface", 0 )
set_capability( "interface", 25 )
set_description( N_("Command-line interface") )
set_callbacks( Open_LuaCLI, Close_LuaIntf )
-#ifndef WIN32
+#ifndef _WIN32
add_shortcut( "luacli", "luarc", "cli", "rc" )
#else
add_shortcut( "luacli", "luarc" )
TELNETHOST_LONGTEXT, true )
add_integer( "telnet-port", TELNETPORT_DEFAULT, TELNETPORT_TEXT,
TELNETPORT_LONGTEXT, true )
- add_password( "telnet-password", TELNETPWD_DEFAULT, TELNETPWD_TEXT,
+ change_integer_range( 1, 65535 )
+ add_password( "telnet-password", NULL, TELNETPWD_TEXT,
TELNETPWD_LONGTEXT, true )
set_capability( "interface", 0 )
set_description( N_("Lua Telnet") )
add_shortcut( "luatelnet", "telnet" )
- /* add_shortcut( "luahotkeys" ) */
- /* add_shortcut( "hotkeys" ) */
-
add_submodule ()
set_shortname( N_( "Lua Meta Fetcher" ) )
set_description( N_("Fetch meta data using lua scripts") )
return strcmp( *a, *b );
}
-int vlclua_dir_list( vlc_object_t *p_this, const char *luadirname,
- char ***pppsz_dir_list )
+int vlclua_dir_list( const char *luadirname, char ***pppsz_dir_list )
{
#define MAX_DIR_LIST_SIZE 5
*pppsz_dir_list = malloc(MAX_DIR_LIST_SIZE*sizeof(char *));
i++;
free( datadir );
-#if !(defined(__APPLE__) || defined(WIN32) || defined(__OS2__))
+#if !(defined(__APPLE__) || defined(_WIN32))
char *psz_libpath = config_GetLibDir();
if( likely(psz_libpath != NULL) )
{
}
#endif
- char *psz_datapath = config_GetDataDir( p_this );
+ char *psz_datapath = config_GetDataDir();
if( likely(psz_datapath != NULL) )
{
if( likely(asprintf( &ppsz_dir_list[i], "%s"DIR_SEP"lua"DIR_SEP"%s",
*****************************************************************************/
int vlclua_scripts_batch_execute( vlc_object_t *p_this,
const char * luadirname,
- int (*func)(vlc_object_t *, const char *, void *),
+ int (*func)(vlc_object_t *, const char *, const luabatch_context_t *),
void * user_data)
{
char **ppsz_dir_list = NULL;
int i_ret;
- if( (i_ret = vlclua_dir_list( p_this, luadirname, &ppsz_dir_list )) != VLC_SUCCESS)
+ if( (i_ret = vlclua_dir_list( luadirname, &ppsz_dir_list )) != VLC_SUCCESS)
return i_ret;
i_ret = VLC_EGENERIC;
if( likely(psz_filename != NULL) )
{
- msg_Dbg( p_this, "Trying Lua playlist script %s",
- psz_filename );
+ msg_Dbg( p_this, "Trying Lua playlist script %s", psz_filename );
i_ret = func( p_this, psz_filename, user_data );
free( psz_filename );
if( i_ret == VLC_SUCCESS )
return i_ret;
}
-char *vlclua_find_file( vlc_object_t *p_this, const char *psz_luadirname, const char *psz_name )
+char *vlclua_find_file( const char *psz_luadirname, const char *psz_name )
{
char **ppsz_dir_list = NULL;
- vlclua_dir_list( p_this, psz_luadirname, &ppsz_dir_list );
+ vlclua_dir_list( psz_luadirname, &ppsz_dir_list );
for( char **ppsz_dir = ppsz_dir_list; *ppsz_dir; ppsz_dir++ )
{
TRY_META( "date", Date );
TRY_META( "setting", Setting );
TRY_META( "url", URL );
- TRY_META( "language", Language );
+ TRY_META( "language", Language );
TRY_META( "nowplaying", NowPlaying );
- TRY_META( "publisher", Publisher );
- TRY_META( "encodedby", EncodedBy );
- TRY_META( "arturl", ArtURL );
- TRY_META( "trackid", TrackID );
+ TRY_META( "publisher", Publisher );
+ TRY_META( "encodedby", EncodedBy );
+ TRY_META( "arturl", ArtURL );
+ TRY_META( "trackid", TrackID );
+ TRY_META( "director", Director );
+ TRY_META( "season", Season );
+ TRY_META( "episode", Episode );
+ TRY_META( "show_name", ShowName );
+ TRY_META( "actors", Actors );
}
#undef vlclua_read_custom_meta_data
/* playlist key item path */
if( lua_isstring( L, -1 ) )
{
+ char *psz_oldurl = NULL;
const char *psz_path = NULL;
char *psz_u8path = NULL;
const char *psz_name = NULL;
input_item_t *p_input;
/* Read path and name */
+ if (p_parent) {
+ psz_oldurl = input_item_GetURI( p_parent );
+ msg_Dbg( p_this, "old path: %s", psz_oldurl );
+ }
psz_path = lua_tostring( L, -1 );
msg_Dbg( p_this, "Path: %s", psz_path );
lua_getfield( L, -2, "name" );
/* Read meta data: item must be on top of stack */
vlclua_read_meta_data( p_this, L, p_input );
+ /* copy the original URL to the meta data, if "URL" is still empty */
+ char* url = input_item_GetURL( p_input );
+ if( url == NULL && p_parent)
+ {
+ EnsureUTF8( psz_oldurl );
+ msg_Dbg( p_this, "meta-URL: %s", psz_oldurl );
+ input_item_SetURL ( p_input, psz_oldurl );
+ }
+ free( psz_oldurl );
+ free( url );
+
+ /* copy the psz_name to the meta data, if "Title" is still empty */
+ char* title = input_item_GetTitle( p_input );
+ if( title == NULL )
+ input_item_SetTitle ( p_input, psz_name );
+ free( title );
+
/* Read custom meta data: item must be on top of stack*/
vlclua_read_custom_meta_data( p_this, L, p_input );
char **ppsz_dir_list = NULL;
char **ppsz_dir;
lua_State *L = NULL;
- vlclua_dir_list( obj, "sd", &ppsz_dir_list );
+ vlclua_dir_list( "sd", &ppsz_dir_list );
for( ppsz_dir = ppsz_dir_list; *ppsz_dir; ppsz_dir++ )
{
int i_files;
goto error;
}
luaL_openlibs( L );
- if( vlclua_add_modules_path( probe, L, psz_filename ) )
+ if( vlclua_add_modules_path( L, psz_filename ) )
{
msg_Err( probe, "Error while setting the module search path for %s",
psz_filename );
free( psz_filename );
goto error;
}
- if( luaL_dofile( L, psz_filename ) )
+ if( vlclua_dofile( VLC_OBJECT(probe), L, psz_filename ) )
{
msg_Err( probe, "Error loading script %s: %s", psz_filename,
return count;
}
-#undef vlclua_add_modules_path
-int vlclua_add_modules_path( vlc_object_t *obj, lua_State *L, const char *psz_filename )
+int vlclua_add_modules_path( lua_State *L, const char *psz_filename )
{
/* Setup the module search path:
* * "The script's directory"/modules
count += vlclua_add_modules_path_inner( L, psz_path );
char **ppsz_dir_list = NULL;
- vlclua_dir_list( obj, psz_char+1/* gruik? */, &ppsz_dir_list );
+ vlclua_dir_list( psz_char+1/* gruik? */, &ppsz_dir_list );
char **ppsz_dir = ppsz_dir_list;
for( ; *ppsz_dir && strcmp( *ppsz_dir, psz_path ); ppsz_dir++ );
}
/** Replacement for luaL_dofile, using VLC's input capabilities */
-int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *uri )
+int vlclua_dofile( vlc_object_t *p_this, lua_State *L, const char *curi )
{
- if( !strstr( uri, "://" ) )
- return luaL_dofile( L, uri );
- if( !strncasecmp( uri, "file://", 7 ) )
- return luaL_dofile( L, uri + 7 );
+ char *uri = ToLocaleDup( curi );
+ if( !strstr( uri, "://" ) ) {
+ int ret = luaL_dofile( L, uri );
+ free( uri );
+ return ret;
+ }
+ if( !strncasecmp( uri, "file://", 7 ) ) {
+ int ret = luaL_dofile( L, uri + 7 );
+ free( uri );
+ return ret;
+ }
stream_t *s = stream_UrlNew( p_this, uri );
if( !s )
{
+ free( uri );
return 1;
}
int64_t i_size = stream_Size( s );
{
// FIXME: read the whole stream until we reach the end (if no size)
stream_Delete( s );
+ free( uri );
return 1;
}
int64_t i_read = stream_Read( s, p_buffer, (int) i_size );
i_ret = lua_pcall( L, 0, LUA_MULTRET, 0 );
stream_Delete( s );
free( p_buffer );
+ free( uri );
return i_ret;
}