[vlc-devel] [PATCH] LUA HTTP Interface: Implementation of missing seeking funtionality
GBX
g.b.x at web.de
Thu Sep 30 14:32:16 CEST 2010
Implementation of missing seeking funtionality when using status.xml from the
lua http interface.
Seeking is now possible with relative values instead of just absolute ones.
Also the time format as mentioned in the readme file is now recognized:
[+ or -][<int><H or h>:][<int><M or m or '>:][<int><nothing or S or s or ">]
---
share/lua/intf/modules/common.lua | 51 ++++++++++++++++++++++++++++++++++---
1 files changed, 47 insertions(+), 4 deletions(-)
mode change 100644 => 100755 share/lua/intf/modules/common.lua
diff --git a/share/lua/intf/modules/common.lua b/share/lua/intf/modules/common.lua
old mode 100644
new mode 100755
index b3fef02..a0ed80d
--- a/share/lua/intf/modules/common.lua
+++ b/share/lua/intf/modules/common.lua
@@ -86,13 +86,56 @@ function realpath(path)
return
string.gsub(string.gsub(string.gsub(string.gsub(path,"/%.%./[^/]+","/"),"/[^/]+/%.%./","/"),"/%./","/"),"//","/")
end
+-- parse the time from a string and return the seconds
+-- time format: [+ or -][<int><H or h>:][<int><M or m or '>:][<int><nothing or
S or s or ">]
+function parsetime(timestring)
+ local seconds = 0
+ local hourspattern = "(%d+)[hH]"
+ local minutespattern = "(%d+)[mM']"
+ local secondspattern = "(%d+)[sS\"]?$"
+
+ local _, _, hoursmatch = string.find(timestring, hourspattern)
+ if hoursmatch ~= nil then
+ seconds = seconds + tonumber(hoursmatch) * 3600
+ end
+ local _, _, minutesmatch = string.find(timestring, minutespattern)
+ if minutesmatch ~= nil then
+ seconds = seconds + tonumber(minutesmatch) * 60
+ end
+ local _, _, secondsmatch = string.find(timestring, secondspattern)
+ if secondsmatch ~= nil then
+ seconds = seconds + tonumber(secondsmatch)
+ end
+
+ if string.sub(timestring,1,1) == "-" then
+ seconds = seconds * -1
+ end
+
+ return seconds
+end
+
-- seek
function seek(value)
local input = vlc.object.input()
- if string.sub(value,#value)=="%" then
- vlc.var.set(input,"position",tonumber(string.sub(value,1,#value-1))/100.)
- else
- vlc.var.set(input,"time",tonumber(value))
+ if input ~= nil and value ~= nil then
+ if string.sub(value,-1) == "%" then
+ local number = tonumber(string.sub(value,1,-2))
+ if number ~= nil then
+ local posPercent = tonumber( string.sub(value,1,-2))/100.
+ if string.sub(value,1,1) == "+" or string.sub(value,1,1) == "-"
then
+ vlc.var.set(input,"position",vlc.var.get(input,"position")
+ posPercent)
+ else
+ vlc.var.set(input,"position",posPercent)
+ end
+ end
+ else
+ local posTime = parsetime(value)
+ if string.sub(value,1,1) == "+" or string.sub(value,1,1) == "-" then
+ vlc.var.set(input,"time",vlc.var.get(input,"time") + posTime)
+ else
+ vlc.var.set(input,"time",posTime)
+ end
+ end
end
end
--
1.7.0.4
More information about the vlc-devel
mailing list