From 20da20364f00d55e60df831918097386ca5e9e03 Mon Sep 17 00:00:00 2001 From: GBX Date: Sat, 2 Oct 2010 11:28:20 +0200 Subject: [PATCH] LUA HTTP Interface: Implementation of missing seeking funtionality when using status.xml from the lua http interface. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 -][:][:][] Signed-off-by: Rémi Duraffort --- share/lua/intf/modules/common.lua | 51 ++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/share/lua/intf/modules/common.lua b/share/lua/intf/modules/common.lua index b3fef02f11..a6da379fad 100644 --- 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 -][:][:][] +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 -- 2.39.2