static int fetch_art( vlc_object_t *p_this, const char * psz_filename, const luabatch_context_t *p_context ) { lua_State *L = init( p_this, p_context->p_item, psz_filename ); if( !L ) return VLC_EGENERIC; int i_ret = run(p_this, psz_filename, L, "fetch_art", p_context); if(i_ret != VLC_SUCCESS) { lua_close( L ); return i_ret; } if(lua_gettop( L )) { const char * psz_value; if( lua_isstring( L, -1 ) ) { psz_value = lua_tostring( L, -1 ); if( psz_value && *psz_value != 0 ) { lua_Dbg( p_this, "setting arturl: %s", psz_value ); input_item_SetArtURL ( p_context->p_item, psz_value ); lua_close( L ); return VLC_SUCCESS; } } else if( !lua_isnoneornil( L, -1 ) ) { msg_Err( p_this, "Lua art fetcher script %s: " "didn't return a string", psz_filename ); } } else { msg_Err( p_this, "Script went completely foobar" ); } lua_close( L ); return VLC_EGENERIC; }
/***************************************************************************** * Called through lua_scripts_batch_execute to call 'fetch_art' on the script * pointed by psz_filename. *****************************************************************************/ static int fetch_art( vlc_object_t *p_this, const char * psz_filename, lua_State * L, void * user_data ) { int i_ret = VLC_EGENERIC; input_item_t * p_input = user_data; int s; /* Ugly hack to delete previous versions of the fetchart() * functions. */ lua_pushnil( L ); lua_setglobal( L, "fetch_art" ); /* Load and run the script(s) */ if( luaL_dofile( L, psz_filename ) ) { msg_Warn( p_this, "Error loading script %s: %s", psz_filename, lua_tostring( L, lua_gettop( L ) ) ); lua_pop( L, 1 ); return VLC_EGENERIC; } lua_getglobal( L, "fetch_art" ); if( !lua_isfunction( L, lua_gettop( L ) ) ) { msg_Warn( p_this, "Error while runing script %s, " "function fetch_art() not found", psz_filename ); lua_pop( L, 1 ); return VLC_EGENERIC; } if( lua_pcall( L, 0, 1, 0 ) ) { msg_Warn( p_this, "Error while runing script %s, " "function fetch_art(): %s", psz_filename, lua_tostring( L, lua_gettop( L ) ) ); lua_pop( L, 1 ); return VLC_EGENERIC; } if((s = lua_gettop( L ))) { const char * psz_value; if( lua_isstring( L, s ) ) { psz_value = lua_tostring( L, s ); if( psz_value && *psz_value != 0 ) { lua_Dbg( p_this, "setting arturl: %s", psz_value ); input_item_SetArtURL ( p_input, psz_value ); i_ret = VLC_SUCCESS; } } else if( !lua_isnil( L, s ) ) { msg_Err( p_this, "Lua art fetcher script %s: " "didn't return a string", psz_filename ); } } else { msg_Err( p_this, "Script went completely foobar" ); } return i_ret; }