X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=share%2Flua%2Fintf%2Fmodules%2Fcommon.lua;h=a6da379fad0e996249d7fa978c32ae47a33e56a4;hb=20da20364f00d55e60df831918097386ca5e9e03;hp=b3fef02f112e77d7755b44652a60358a1a3684d7;hpb=e6cd528635caf98867b5182bb9d7c6aca02ae1dc;p=vlc 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