68 lines
1.7 KiB
Lua
68 lines
1.7 KiB
Lua
local api = ...
|
|
local ecs = api.ecs
|
|
local util = api.util
|
|
|
|
return {
|
|
name = "janusxr",
|
|
enabled = true,
|
|
|
|
onURI = function(obj)
|
|
if obj.URL ~= nil and obj.URLResponse ~= nil and obj.URLResponse.ok then
|
|
local res = obj.URLResponse
|
|
-- JML heuristic
|
|
if res.data:lower():match("<fireboxroom>") or res.data:lower():match("<room[ >]") then
|
|
local JML0
|
|
local JML
|
|
res.xml = api.parser.xml.newParser()
|
|
local xmlstr = res.data
|
|
-- cleanup JML0
|
|
local JML0 = xmlstr:gsub(".*<[Rr]oom","<room")
|
|
JML0 = JML0:gsub("</[Rr]oom>.*","</room>")
|
|
api.ext.janusxr.loadXML( JML0, res, obj )
|
|
end
|
|
end
|
|
end,
|
|
|
|
loadXML = function(xml,res,obj)
|
|
print("[i] janusxr: loading JML:\n\n" .. xml .. "\n\n")
|
|
util.traverseXML( res.xml:ParseXmlText(xml), function(node,raw)
|
|
if node.tag == 'object' and node.prop.id ~= nil then
|
|
local protocol = nil
|
|
foreach( api.protocol, function(name, p)
|
|
if node.prop.id:match("^"..name) then
|
|
protocol = p
|
|
end
|
|
end)
|
|
if protocol ~= nil then
|
|
local newobj = {
|
|
URI = { url = node.prop.id, method = 'GET' },
|
|
janusxr = node
|
|
}
|
|
api.ext.janusxr.parseProps(node, newobj)
|
|
api.ecs.add( api.world, newobj )
|
|
end
|
|
end
|
|
end)
|
|
end,
|
|
|
|
parseProps = function(node,obj)
|
|
local me = api.ext.janusxr
|
|
foreach( node.prop, function(k,v)
|
|
if k == 'pos' then
|
|
local xyz = me.parseFloats(v)
|
|
obj.x = xyz[1]
|
|
obj.y = xyz[2]
|
|
obj.z = xyz[3]
|
|
end
|
|
end)
|
|
end,
|
|
|
|
parseFloats = function(s)
|
|
local t = {}
|
|
for num in s:gmatch("%S+") do
|
|
t[#t+1] = tonumber(num)
|
|
end
|
|
return t
|
|
end
|
|
|
|
}
|