From: Steinar H. Gunderson Date: Sat, 2 Oct 2010 09:47:26 +0000 (+0200) Subject: Merge branch 'master' into lpcm_encoder X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ddb6257679fb78c14c9fc4b28dcdd558af98903e;hp=8e1671820b7e13c25028548cc7c9a41bc753dc09;p=vlc Merge branch 'master' into lpcm_encoder --- diff --git a/share/lua/http/requests/README.txt b/share/lua/http/requests/README.txt index a4cfacbeea..c287acf690 100644 --- a/share/lua/http/requests/README.txt +++ b/share/lua/http/requests/README.txt @@ -23,7 +23,7 @@ status.xml: > add to playlist: ?command=in_enqueue&input= -> play playlist item : +> play playlist item . If is omitted, play last active item: ?command=pl_play&id= > toggle pause. If current state was 'stop', play item : diff --git a/share/lua/http/requests/status.xml b/share/lua/http/requests/status.xml index 123861fea7..6581c80cdf 100644 --- a/share/lua/http/requests/status.xml +++ b/share/lua/http/requests/status.xml @@ -55,7 +55,11 @@ if command == "in_play" then elseif command == "in_enqueue" then vlc.playlist.enqueue({{path=stripslashes(input),options=options}}) elseif command == "pl_play" then - vlc.playlist.goto(id) + if id == -1 then + vlc.playlist.play() + else + vlc.playlist.goto(id) + end elseif command == "pl_pause" then vlc.playlist.pause() elseif command == "pl_stop" then 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 diff --git a/src/playlist/control.c b/src/playlist/control.c index 38ddf48564..c2f8171f0f 100644 --- a/src/playlist/control.c +++ b/src/playlist/control.c @@ -158,9 +158,10 @@ static int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args case PLAYLIST_PAUSE: if( !pl_priv(p_playlist)->p_input ) - { /* FIXME: is this really useful without input? */ - pl_priv(p_playlist)->status.i_status = PLAYLIST_PAUSED; - break; + { /* FIXME: is this really useful without input? */ + pl_priv(p_playlist)->status.i_status = PLAYLIST_PAUSED; + /* return without notifying the playlist thread as there is nothing to do */ + return VLC_SUCCESS; } if( var_GetInteger( pl_priv(p_playlist)->p_input, "state" ) == PAUSE_S )