]> git.sesse.net Git - vlc/commitdiff
Implement "@name var val" style commands in rc.lua (and other misc changes)
authorAntoine Cellerier <dionoea@videolan.org>
Mon, 19 Jan 2009 21:02:44 +0000 (22:02 +0100)
committerAntoine Cellerier <dionoea@videolan.org>
Mon, 19 Jan 2009 21:24:25 +0000 (22:24 +0100)
modules/misc/lua/libs/variables.c
share/lua/README.txt
share/lua/intf/dummy.lua
share/lua/intf/rc.lua

index 8b8d0450ac1e02e662f9ec544adf0242a6c77fc9..16833bc6c405ead000018a01504bfbd1e4b5d739 100644 (file)
@@ -211,11 +211,12 @@ static int vlclua_command( lua_State *L )
     const char *psz_cmd;
     const char *psz_arg;
     char *psz_msg;
+    int ret;
     psz_name = luaL_checkstring( L, 1 );
     psz_cmd = luaL_checkstring( L, 2 );
     psz_arg = luaL_checkstring( L, 3 );
     lua_pop( L, 3 );
-    var_Command( p_this, psz_name, psz_cmd, psz_arg, &psz_msg );
+    ret = var_Command( p_this, psz_name, psz_cmd, psz_arg, &psz_msg );
     if( psz_msg )
     {
         lua_pushstring( L, psz_msg );
@@ -225,7 +226,7 @@ static int vlclua_command( lua_State *L )
     {
         lua_pushstring( L, "" );
     }
-    return 1;
+    return vlclua_push_ret( L, ret ) + 1;
 }
 
 static int vlclua_libvlc_command( lua_State *L )
index 3dd3fc87cf4b6f52b20e79d016455147ad9dbae9..1048176be98578192dbfb1e81fe957b606ef3988 100644 (file)
@@ -95,7 +95,8 @@ misc.homedir(): Get the user's home directory.
 misc.configdir(): Get the user's VLC config directory.
 misc.cachedir(): Get the user's VLC cache directory.
 
-misc.datadir_list( name ): FIXME: write description ... or ditch function if it isn't usefull anymore, we have datadir and userdatadir :)
+misc.datadir_list( name ): FIXME: write description ... or ditch function
+  if it isn't usefull anymore, we have datadir and userdatadir :)
 
 misc.mdate(): Get the current date (in milliseconds).
 misc.mwait(): Wait for the given date (in milliseconds).
@@ -124,7 +125,9 @@ end
 net.close( fd ): Close file descriptor.
 net.send( fd, string, [length] ): Send data on fd.
 net.recv( fd, [max length] ): Receive data from fd.
-net.select( nfds, fds_read, fds_write, timeout ): Monitor a bunch of file descriptors. Returns number of fds to handle and the amount of time not slept. See "man select".
+net.select( nfds, fds_read, fds_write, timeout ): Monitor a bunch of file
+  descriptors. Returns number of fds to handle and the amount of time not
+  slept. See "man select".
 net.fd_set_new(): Create a new fd_set.
 local fds = vlc.net.fd_set_new()
 fds:clr( fd ) -- remove fd from set
@@ -315,6 +318,7 @@ a reference to it, all VLM items will be deleted.
 Volume
 ------
 volume.set( level ): Set volume to an absolute level between 0 and 1024.
+  256 is 100%.
 volume.get(): Get volume.
 volume.up( [n] ): Increment volume by n steps of 32. n defaults to 1.
 volume.down( [n] ): Decrement volume by n steps of 32. n defaults to 1.
index 7193043c8eda743d56b9484ed2e854deac862690..3a5fea49b9d32e70ea6bcf48860badcc4ca97e20 100644 (file)
@@ -3,7 +3,7 @@
 msg = [[
 This is the `dummy' VLC Lua interface module.
 Please specify a VLC Lua interface to load with the --lua-intf option.
-VLC Lua interface modules include: `rc', `telnet' and `hotkeys'.
+VLC Lua interface modules include: `rc', `telnet' and `http'.
 For example: vlc -I lua --lua-intf rc]]
 --You can also use the alternate syntax: vlc -I "lua{intf=rc}"]]
 
index 5492625f560c987297eeaf42a96e7067e4f5200e..91b115599e4831fc46f504d7c21c225242af8a33 100644 (file)
@@ -1,7 +1,7 @@
 --[==========================================================================[
  rc.lua: remote control module for VLC
 --[==========================================================================[
- Copyright (C) 2007 the VideoLAN team
+ Copyright (C) 2007-2009 the VideoLAN team
  $Id$
 
  Authors: Antoine Cellerier <dionoea at videolan dot org>
@@ -513,7 +513,7 @@ do
         end
     end
     list = list..")"
-    if count ~= 0 then
+    if count ~= 0 and env.welcome then
         env.welcome = env.welcome .. "\r\nWarning: "..count.." functions are still unimplemented "..list.."."
     end
 end
@@ -556,6 +556,18 @@ function call_libvlc_command(cmd,client,arg)
     return vlcerr
 end
 
+function call_object_command(cmd,client,arg)
+    local var, val = split_input(arg)
+    local ok, vlcmsg, vlcerr, vlcerrmsg = pcall( vlc.var.command, cmd, var, val )
+    if not ok then
+        client:append("Error in `"..cmd.." "..var.." "..val.."' ".. vlcmsg) -- when pcall fails the 2nd arg is the error message
+    end
+    if vlcmsg ~= "" then
+        client:append(vlcmsg)
+    end
+    return vlcerr
+end
+
 --[[ Setup host ]]
 require("host")
 h = host.host()
@@ -604,36 +616,38 @@ while not vlc.misc.should_die() do
             client:switch_status(host.status.write)
             if commands[cmd] then
                 call_command(cmd,client,arg)
+            elseif string.sub(cmd,0,1)=='@'
+            and call_object_command(string.sub(cmd,2,#cmd),client,arg) == 0 then
+                --
+            elseif client.type == host.client_type.stdio
+            and call_libvlc_command(cmd,client,arg) == 0 then
+                --
             else
-                if client.type == host.client_type.stdio 
-                and call_libvlc_command(cmd,client,arg) == 0 then
-                else
-                    local choices = {}
-                    if client.env.autocompletion ~= 0 then
-                        for v,_ in common.pairs_sorted(commands) do
-                            if string.sub(v,0,#cmd)==cmd then
-                                table.insert(choices, v)
-                            end
+                local choices = {}
+                if client.env.autocompletion ~= 0 then
+                    for v,_ in common.pairs_sorted(commands) do
+                        if string.sub(v,0,#cmd)==cmd then
+                            table.insert(choices, v)
                         end
                     end
-                    if #choices == 1 and client.env.autoalias ~= 0 then
-                        -- client:append("Aliasing to \""..choices[1].."\".")
-                        cmd = choices[1]
-                        call_command(cmd,client,arg)
-                    else
-                        client:append("Unknown command `"..cmd.."'. Type `help' for help.")
-                        if #choices ~= 0 then
-                            client:append("Possible choices are:")
-                            local cols = math.floor(client.env.width/(client.env.colwidth+1))
-                            local fmt = "%-"..client.env.colwidth.."s"
-                            for i = 1, #choices do
-                                choices[i] = string.format(fmt,choices[i])
-                            end
-                            for i = 1, #choices, cols do
-                                local j = i + cols - 1
-                                if j > #choices then j = #choices end
-                                client:append("  "..table.concat(choices," ",i,j))
-                            end
+                end
+                if #choices == 1 and client.env.autoalias ~= 0 then
+                    -- client:append("Aliasing to \""..choices[1].."\".")
+                    cmd = choices[1]
+                    call_command(cmd,client,arg)
+                else
+                    client:append("Unknown command `"..cmd.."'. Type `help' for help.")
+                    if #choices ~= 0 then
+                        client:append("Possible choices are:")
+                        local cols = math.floor(client.env.width/(client.env.colwidth+1))
+                        local fmt = "%-"..client.env.colwidth.."s"
+                        for i = 1, #choices do
+                            choices[i] = string.format(fmt,choices[i])
+                        end
+                        for i = 1, #choices, cols do
+                            local j = i + cols - 1
+                            if j > #choices then j = #choices end
+                            client:append("  "..table.concat(choices," ",i,j))
                         end
                     end
                 end