]> git.sesse.net Git - vlc/blobdiff - modules/misc/lua/extension.c
Revert "lua_extension: factorize."
[vlc] / modules / misc / lua / extension.c
index 51769ca86c51dbb9362c07df4cc452359e4de420..fe4e2f2ce98ccc964e39a8d2e435624f931ba353 100644 (file)
@@ -56,7 +56,7 @@ const char* const ppsz_capabilities[] = {
 
 static int ScanExtensions( extensions_manager_t *p_this );
 static int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
-                            void *pb_continue );
+                            void *dummy );
 static int Control( extensions_manager_t *, int, va_list );
 static int GetMenuEntries( extensions_manager_t *p_mgr, extension_t *p_ext,
                     char ***pppsz_titles, uint16_t **ppi_ids );
@@ -181,12 +181,11 @@ void Close_Extension( vlc_object_t *p_this )
  **/
 static int ScanExtensions( extensions_manager_t *p_mgr )
 {
-    bool b_true = true;
     int i_ret =
         vlclua_scripts_batch_execute( VLC_OBJECT( p_mgr ),
                                       "extensions",
                                       &ScanLuaCallback,
-                                      &b_true );
+                                      NULL );
 
     if( !i_ret )
         return VLC_EGENERIC;
@@ -194,16 +193,29 @@ static int ScanExtensions( extensions_manager_t *p_mgr )
     return VLC_SUCCESS;
 }
 
+/**
+ * Dummy Lua function: does nothing
+ * @note This function can be used to replace "require" while scanning for
+ * extensions
+ * Even the built-in libraries are not loaded when calling descriptor()
+ **/
+static int vlclua_dummy_require( lua_State *L )
+{
+    (void) L;
+    return 0;
+}
+
 /**
  * Batch scan all Lua files in folder "extensions": callback
  * @param p_this This extensions_manager_t object
  * @param psz_script Name of the script to run
  * @param L Lua State, common to all scripts here
- * @param pb_continue bool* that indicates whether to continue batch or not
+ * @param dummy: unused
  **/
 int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
-                     void *pb_continue )
+                     void *dummy )
 {
+    VLC_UNUSED(dummy);
     extensions_manager_t *p_mgr = ( extensions_manager_t* ) p_this;
     bool b_ok = false;
 
@@ -236,8 +248,11 @@ int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
     vlc_mutex_init( &p_ext->p_sys->running_lock );
     vlc_cond_init( &p_ext->p_sys->wait );
 
-    /* Load and run the script(s) */
+    /* Prepare Lua state */
     lua_State *L = luaL_newstate();
+    lua_register( L, "require", &vlclua_dummy_require );
+
+    /* Let's run it */
     if( luaL_dofile( L, psz_script ) )
     {
         msg_Warn( p_mgr, "Error loading script %s: %s", psz_script,
@@ -251,14 +266,14 @@ int ScanLuaCallback( vlc_object_t *p_this, const char *psz_script,
 
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function descriptor() not found", psz_script );
         goto exit;
     }
 
     if( lua_pcall( L, 0, 1, 0 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function descriptor(): %s", psz_script,
                   lua_tostring( L, lua_gettop( L ) ) );
         goto exit;
@@ -426,7 +441,7 @@ exit:
 
     vlc_mutex_unlock( &p_mgr->lock );
     /* Continue batch execution */
-    return pb_continue ? ( (* (bool*)pb_continue) ? -1 : 0 ) : -1;
+    return VLC_EGENERIC;
 }
 
 static int Control( extensions_manager_t *p_mgr, int i_control, va_list args )
@@ -605,7 +620,7 @@ int lua_ExtensionWidgetClick( extensions_manager_t *p_mgr,
  * @param p_mgr
  * @param p_ext
  * @param pppsz_titles Pointer to NULL. All strings must be freed by the caller
- * @param ppi_ids Pointer to NULL. Must be feed by the caller.
+ * @param ppi_ids Pointer to NULL. Must be freed by the caller.
  * @note This function is allowed to run in the UI thread. This means
  *       that it MUST respond very fast.
  * @todo Remove the menu() hook and provide a new function vlc.set_menu()
@@ -641,14 +656,14 @@ static int GetMenuEntries( extensions_manager_t *p_mgr, extension_t *p_ext,
 
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function menu() not found", p_ext->psz_name );
         goto exit;
     }
 
     if( lua_pcall( L, 0, 1, 0 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function menu(): %s", p_ext->psz_name,
                   lua_tostring( L, lua_gettop( L ) ) );
         goto exit;
@@ -776,13 +791,6 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             p_ext->p_sys->L = L;
         }
     }
-#ifndef NDEBUG
-    else
-    {
-        msg_Dbg( p_mgr, "Reusing old Lua state for extension '%s'",
-                 p_ext->psz_name );
-    }
-#endif
 
     return L;
 }
@@ -820,7 +828,7 @@ int lua_ExecuteFunctionVa( extensions_manager_t *p_mgr, extension_t *p_ext,
 
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function %s() not found", p_ext->psz_name, psz_function );
         goto exit;
     }
@@ -846,7 +854,7 @@ int lua_ExecuteFunctionVa( extensions_manager_t *p_mgr, extension_t *p_ext,
     }
     if( lua_pcall( L, i_args, 1, 0 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function %s(): %s", p_ext->psz_name, psz_function,
                   lua_tostring( L, lua_gettop( L ) ) );
         goto exit;
@@ -877,7 +885,7 @@ int lua_ExtensionTriggerMenu( extensions_manager_t *p_mgr,
     lua_getglobal( L, "trigger_menu" );
     if( !lua_isfunction( L, -1 ) )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function trigger_menu() not found", p_ext->psz_name );
         return VLC_EGENERIC;
     }
@@ -887,7 +895,7 @@ int lua_ExtensionTriggerMenu( extensions_manager_t *p_mgr,
 
     if( lua_pcall( L, 1, 1, 0 ) != 0 )
     {
-        msg_Warn( p_mgr, "Error while runing script %s, "
+        msg_Warn( p_mgr, "Error while running script %s, "
                   "function trigger_menu(): %s", p_ext->psz_name,
                   lua_tostring( L, lua_gettop( L ) ) );
         return VLC_EGENERIC;
@@ -988,7 +996,7 @@ static int vlclua_extension_dialog_callback( vlc_object_t *p_this,
     {
         case EXTENSION_EVENT_CLICK:
             assert( p_widget != NULL );
-            PushCommand( p_ext, CMD_CLICK, p_widget );
+            PushCommandUnique( p_ext, CMD_CLICK, p_widget );
             break;
         case EXTENSION_EVENT_CLOSE:
             PushCommandUnique( p_ext, CMD_CLOSE );