module("httprequests",package.seeall)
+local common = require ("common")
local dkjson = require ("dkjson")
--Round the number to the specified precision
function round(what, precision)
- if what then return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision) else return "" end
+ if type(what) == "string" then
+ what = common.us_tonumber(what)
+ end
+ if type(what) == "number" then
+ return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision)
+ end
+ return nil
end
--split text where it matches the delimiter
end
local i=1
while 1 do
- i=i+1
local first, last = strfind(text, delimiter, pos)
if first then -- found?
tinsert(list,i, strsub(text, pos, first-1))
pos = last+1
else
tinsert(list,i, strsub(text, pos))
- break
+ break
end
+ i = i+1
end
return list
end
-function round(what, precision)
-if what then return math.floor(what*math.pow(10,precision)+0.5) / math.pow(10,precision) else return "" end
-end
-
--main function to process commands sent with the request
processcommands = function ()
local id = tonumber(_GET['id'] or -1)
local val = _GET['val']
local options = _GET['option']
- local band = _GET['band']
+ local band = tonumber(_GET['band'])
if type(options) ~= "table" then -- Deal with the 0 or 1 option case
- options = { options }
+ options = { options }
end
if command == "in_play" then
- --[[
- vlc.msg.err( "<options>" )
- for a,b in ipairs(options) do
+ --[[
+ vlc.msg.err( "<options>" )
+ for a,b in ipairs(options) do
vlc.msg.err(b)
- end
- vlc.msg.err( "</options>" )
- --]]
- vlc.playlist.add({{path=vlc.strings.make_uri(input),options=options}})
+ end
+ vlc.msg.err( "</options>" )
+ --]]
+ vlc.playlist.add({{path=vlc.strings.make_uri(input),options=options}})
elseif command == "addsubtitle" then
- vlc.input.add_subtitle (vlc.strings.make_uri(val))
+ vlc.input.add_subtitle (vlc.strings.make_uri(val))
elseif command == "in_enqueue" then
- vlc.playlist.enqueue({{path=vlc.strings.make_uri(input),options=options}})
+ vlc.playlist.enqueue({{path=vlc.strings.make_uri(input),options=options}})
elseif command == "pl_play" then
- if id == -1 then
- vlc.playlist.play()
- else
- vlc.playlist.goto(id)
- end
- elseif command == "pl_pause" then
- if vlc.playlist.status() == "stopped" then
if id == -1 then
- vlc.playlist.play()
+ vlc.playlist.play()
+ else
+ vlc.playlist.gotoitem(id)
+ end
+ elseif command == "pl_pause" then
+ if vlc.playlist.status() == "stopped" then
+ if id == -1 then
+ vlc.playlist.play()
+ else
+ vlc.playlist.gotoitem(id)
+ end
else
- vlc.playlist.goto(id)
+ vlc.playlist.pause()
end
- else
- vlc.playlist.pause()
- end
elseif command == "pl_forcepause" then
- if vlc.playlist.status() == "playing" then
- vlc.playlist.pause()
- end
+ if vlc.playlist.status() == "playing" then
+ vlc.playlist.pause()
+ end
elseif command == "pl_forceresume" then
- if vlc.playlist.status() == "paused" then
- vlc.playlist.pause()
- end
+ if vlc.playlist.status() == "paused" then
+ vlc.playlist.pause()
+ end
elseif command == "pl_stop" then
- vlc.playlist.stop()
+ vlc.playlist.stop()
elseif command == "pl_next" then
- vlc.playlist.next()
+ vlc.playlist.next()
elseif command == "pl_previous" then
- vlc.playlist.prev()
+ vlc.playlist.prev()
elseif command == "pl_delete" then
- vlc.playlist.delete(id)
+ vlc.playlist.delete(id)
elseif command == "pl_empty" then
- vlc.playlist.clear()
+ vlc.playlist.clear()
elseif command == "pl_sort" then
- vlc.playlist.sort( val, id > 0 )
+ vlc.playlist.sort( val, id > 0 )
elseif command == "pl_random" then
- vlc.playlist.random()
+ vlc.playlist.random()
elseif command == "pl_loop" then
- --if loop is set true, then repeat needs to be set false
- if vlc.playlist.loop() then
- vlc.playlist.repeat_("off")
- end
+ --if loop is set true, then repeat needs to be set false
+ if vlc.playlist.loop() then
+ vlc.playlist.repeat_("off")
+ end
elseif command == "pl_repeat" then
- --if repeat is set true, then loop needs to be set false
- if vlc.playlist.repeat_() then
- vlc.playlist.loop("off")
- end
+ --if repeat is set true, then loop needs to be set false
+ if vlc.playlist.repeat_() then
+ vlc.playlist.loop("off")
+ end
elseif command == "pl_sd" then
- if vlc.sd.is_loaded(val) then
- vlc.sd.remove(val)
- else
- vlc.sd.add(val)
- end
+ if vlc.sd.is_loaded(val) then
+ vlc.sd.remove(val)
+ else
+ vlc.sd.add(val)
+ end
elseif command == "fullscreen" then
- vlc.video.fullscreen()
+ vlc.video.fullscreen()
elseif command == "snapshot" then
- common.snapshot()
+ common.snapshot()
elseif command == "volume" then
- common.volume(val)
+ common.volume(val)
elseif command == "seek" then
- common.seek(val)
+ common.seek(val)
elseif command == "key" then
- common.hotkey("key-"..val)
+ common.hotkey("key-"..val)
elseif command == "audiodelay" then
- if vlc.object.input() and val then
- vlc.var.set(vlc.object.input(),"audio-delay",val)
- end
+ if vlc.object.input() and val then
+ val = common.us_tonumber(val)
+ vlc.var.set(vlc.object.input(),"audio-delay",val)
+ end
elseif command == "rate" then
- if vlc.object.input() and tonumber(val) >= 0 then
- vlc.var.set(vlc.object.input(),"rate",val)
- end
+ val = common.us_tonumber(val)
+ if vlc.object.input() and val >= 0 then
+ vlc.var.set(vlc.object.input(),"rate",val)
+ end
elseif command == "subdelay" then
- if vlc.object.input() then
- vlc.var.set(vlc.object.input(),"spu-delay",val)
- end
+ if vlc.object.input() then
+ val = common.us_tonumber(val)
+ vlc.var.set(vlc.object.input(),"spu-delay",val)
+ end
elseif command == "aspectratio" then
- if vlc.object.vout() then
- vlc.var.set(vlc.object.vout(),"aspect-ratio",val)
- end
+ if vlc.object.vout() then
+ vlc.var.set(vlc.object.vout(),"aspect-ratio",val)
+ end
elseif command == "preamp" then
- vlc.equalizer.preampset(val)
+ val = common.us_tonumber(val)
+ vlc.equalizer.preampset(val)
elseif command == "equalizer" then
- vlc.equalizer.equalizerset(band,val)
+ val = common.us_tonumber(val)
+ vlc.equalizer.equalizerset(band,val)
elseif command == "enableeq" then
- if val == '0' then vlc.equalizer.enable(false) else vlc.equalizer.enable(true) end
+ if val == '0' then vlc.equalizer.enable(false) else vlc.equalizer.enable(true) end
elseif command == "setpreset" then
- vlc.equalizer.setpreset(val)
+ vlc.equalizer.setpreset(val)
+ elseif command == "title" then
+ vlc.var.set(vlc.object.input(), "title", val)
+ elseif command == "chapter" then
+ vlc.var.set(vlc.object.input(), "chapter", val)
+ elseif command == "audio_track" then
+ vlc.var.set(vlc.object.input(), "audio-es", val)
+ elseif command == "video_track" then
+ vlc.var.set(vlc.object.input(), "video-es", val)
+ elseif command == "subtitle_track" then
+ vlc.var.set(vlc.object.input(), "spu-es", val)
end
local input = nil
--utilities for formatting output
function xmlString(s)
- if (type(s)=="string") then
- return vlc.strings.convert_xml_special_chars(s)
- else
- return tostring(s)
- end
+ if (type(s)=="string") then
+ return vlc.strings.convert_xml_special_chars(s)
+ elseif (type(s)=="number") then
+ return common.us_tostring(s)
+ else
+ return tostring(s)
+ end
end
--dkjson outputs numbered tables as arrays
end
if (k) then
- print("</"..xmlString(k)..">")
+ xs=xmlString(k)
+ space_loc=string.find(xs," ")
+ if space_loc == nil then
+ print("</"..xs..">")
+ else
+ xs=string.sub(xs,1,space_loc)
+ print("</"..xs..">")
+ end
end
end
--[[
function logTable(t,pre)
- local pre = pre or ""
- for k,v in pairs(t) do
- vlc.msg.err(pre..tostring(k).." : "..tostring(v))
- if type(v) == "table" then
- a(v,pre.." ")
- end
- end
+local pre = pre or ""
+for k,v in pairs(t) do
+vlc.msg.err(pre..tostring(k).." : "..tostring(v))
+if type(v) == "table" then
+a(v,pre.." ")
+end
+end
end
--]]
local p
if _GET["search"] then
- if _GET["search"] ~= "" then
- _G.search_key = _GET["search"]
- else
- _G.search_key = nil
- end
- local key = vlc.strings.decode_uri(_GET["search"])
- p = vlc.playlist.search(key)
+ if _GET["search"] ~= "" then
+ _G.search_key = _GET["search"]
+ else
+ _G.search_key = nil
+ end
+ local key = vlc.strings.decode_uri(_GET["search"])
+ p = vlc.playlist.search(key)
else
- p = vlc.playlist.get()
+ p = vlc.playlist.get()
end
--logTable(p) --Uncomment to debug
local result={}
local name, path = item.name or ""
local path = item.path or ""
- local current_item = vlc.input.item()
+ local current_item_id = vlc.playlist.current()
-- Is the item the one currently played
- if(current_item ~= nil) then
- if(vlc.input.item().uri(current_item) == path) then
+ if(current_item_id ~= nil) then
+ if(current_item_id == item.id) then
result.current = "current"
end
end
result.element._array={}
if dir then
- if dir == "~" or dir == "file://~" then dir = vlc.misc.homedir() end
+ if dir == "~" or dir == "file://~" then dir = vlc.config.homedir() end
-- FIXME: hack for Win32 drive list
if dir~="" then
dir = common.realpath(dir.."/")
local path, name = df, f
local element={}
- for k,v in pairs(s) do
- element[k]=v
+ if (s) then
+ for k,v in pairs(s) do
+ element[k]=v
+ end
+ else
+ element["type"]="unknown"
end
element["path"]=path
element["name"]=name
getstatus = function (includecategories)
-local input = vlc.object.input()
-local item = vlc.input.item()
-local playlist = vlc.object.playlist()
-local vout = vlc.object.vout()
-local aout = vlc.object.aout()
+ local input = vlc.object.input()
+ local item = vlc.input.item()
+ local playlist = vlc.object.playlist()
+ local vout = vlc.object.vout()
+ local aout = vlc.object.aout()
local s ={}
--update api version when new data/commands added
- s.apiversion=1
+ s.apiversion=3
s.version=vlc.misc.version()
s.volume=vlc.volume.get()
s.length=math.floor(vlc.var.get(input,"length"))
s.time=math.floor(vlc.var.get(input,"time"))
s.position=vlc.var.get(input,"position")
+ s.currentplid=vlc.playlist.current()
s.audiodelay=vlc.var.get(input,"audio-delay")
s.rate=vlc.var.get(input,"rate")
s.subtitledelay=vlc.var.get(input,"spu-delay")
s.length=0
s.time=0
s.position=0
+ s.currentplid=-1
s.audiodelay=0
s.rate=1
s.subtitledelay=0
s.loop=vlc.var.get(playlist,"loop")
s["repeat"]=vlc.var.get(playlist,"repeat")
- s.equalizer={}
- s.equalizer.preamp=round(vlc.equalizer.preampget(),2)
- s.equalizer.bands=vlc.equalizer.equalizerget()
- if s.equalizer.bands ~= null then
- for k,i in pairs(s.equalizer.bands) do s.equalizer.bands[k]=round(i,2) end
- s.equalizer.presets=vlc.equalizer.presets()
- end
+ s.equalizer={}
+ s.equalizer.preamp=round(vlc.equalizer.preampget(),2)
+ s.equalizer.bands=vlc.equalizer.equalizerget()
+ if s.equalizer.bands ~= null then
+ for k,i in pairs(s.equalizer.bands) do s.equalizer.bands[k]=round(i,2) end
+ s.equalizer.presets=vlc.equalizer.presets()
+ end
if (includecategories and item) then
s.information={}
s.stats={}
local statsdata = item:stats()
- for k,v in pairs(statsdata) do
+ for k,v in pairs(statsdata) do
local tag = string.gsub(k,"_","")
- s.stats[tag]=v
- end
+ s.stats[tag]=v
+ end
+
+ s.information.chapter=vlc.var.get(input, "chapter")
+ s.information.title=vlc.var.get(input, "title")
+
+ s.information.chapters=vlc.var.get_list(input, "chapter")
+ s.information.titles=vlc.var.get_list(input, "title")
+
end
return s
end