mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 11:36:52 +00:00
Initial version of channel scanning (WIP)
This commit is contained in:
1
octoserve/var/channels/TransponderList.json
Normal file
1
octoserve/var/channels/TransponderList.json
Normal file
File diff suppressed because one or more lines are too long
153
octoserve/var/channels/doscan.lua
Executable file
153
octoserve/var/channels/doscan.lua
Executable file
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/lua
|
||||
|
||||
--
|
||||
local newdecoder = require("lunajson.decoder")
|
||||
local newencoder = require("lunajson.encoder")
|
||||
|
||||
|
||||
function GetIPAddr()
|
||||
local myip = nil
|
||||
local ifconfig = io.popen("ifconfig eth0")
|
||||
if ifconfig then
|
||||
local eth0 = ifconfig:read("*a")
|
||||
ifconfig:close()
|
||||
myip = string.match(eth0,"inet addr%:(%d+%.%d+%.%d+%.%d+)")
|
||||
end
|
||||
return myip
|
||||
end
|
||||
|
||||
function LoadTransponderList()
|
||||
local tl = nil
|
||||
local f = io.open("/config/TransponderList.json","r")
|
||||
if not f then
|
||||
f = io.open("/var/channels/TransponderList.json","r")
|
||||
end
|
||||
|
||||
if f then
|
||||
local t = f:read("*a")
|
||||
f:close()
|
||||
print(#t)
|
||||
|
||||
local decode = newdecoder()
|
||||
tl = decode(t)
|
||||
end
|
||||
return tl
|
||||
end
|
||||
|
||||
function GetGroup(ChannelList,Title)
|
||||
local Group
|
||||
for _,c in ipairs(ChannelList.GroupList) do
|
||||
if c.Title == Title then
|
||||
Group = c
|
||||
end
|
||||
end
|
||||
if not Group then
|
||||
Group = { Title=Title, ChannelList = { [0] = 0 } }
|
||||
table.insert(ChannelList.GroupList,Group)
|
||||
end
|
||||
return Group
|
||||
end
|
||||
|
||||
local key = arg[1]
|
||||
|
||||
local ipAddr = GetIPAddr()
|
||||
local tl = LoadTransponderList()
|
||||
|
||||
local ChannelList = {}
|
||||
ChannelList.GroupList = {}
|
||||
|
||||
local Max = 999999
|
||||
local Count = 0
|
||||
|
||||
if arg[2] then
|
||||
Max = tonumber(arg[2])
|
||||
end
|
||||
|
||||
if tl.SourceList then
|
||||
for _,Source in ipairs(tl.SourceList) do
|
||||
print(Source.Title)
|
||||
if key == Source.Key then
|
||||
local req = ""
|
||||
if Source.Type == "S" then
|
||||
req = 'src=1&'
|
||||
end
|
||||
for _,Transponder in ipairs(Source.TransponderList) do
|
||||
Count = Count + 1
|
||||
if Count > Max then
|
||||
break
|
||||
end
|
||||
|
||||
print("--------------------------------------------------------------")
|
||||
print(Transponder.Request)
|
||||
local octoscan = io.popen('octoscan '..ipAddr..' "'..req..Transponder.Request..'"',"r")
|
||||
if octoscan then
|
||||
while true do
|
||||
local line = octoscan:read("*l")
|
||||
if not line then
|
||||
break
|
||||
end
|
||||
print(line)
|
||||
local pname = "?"
|
||||
local sname = "?"
|
||||
local sid = 0
|
||||
local pids = ""
|
||||
local tracks= { [0] = 0 }
|
||||
local isradio = false
|
||||
if line == "BEGIN" then
|
||||
while true do
|
||||
line = octoscan:read("*l")
|
||||
if not line then
|
||||
break
|
||||
end
|
||||
print(line)
|
||||
if line == "END" then
|
||||
local channel = { Title=sname, Service=sid, Request = req..Transponder.Request.."&pids=0,"..pids, Tracks=tracks }
|
||||
local cname = pname
|
||||
if isradio then
|
||||
cname = "Radio - "..pname
|
||||
end
|
||||
local category = GetGroup(ChannelList,cname)
|
||||
if category then
|
||||
category.ChannelList[0] = category.ChannelList[0] + 1
|
||||
table.insert(category.ChannelList,channel)
|
||||
end
|
||||
break
|
||||
end
|
||||
local par,val = line:match("^ (%a+):(.*)")
|
||||
if par == "RADIO" then
|
||||
isradio = true
|
||||
elseif par == "PNAME" then
|
||||
pname = val
|
||||
elseif par == "SNAME" then
|
||||
sname = val
|
||||
elseif par == "SID" then
|
||||
sid = tonumber(value)
|
||||
elseif par == "PIDS" then
|
||||
pids = val
|
||||
elseif par == "APIDS" then
|
||||
local track
|
||||
for track in val:gmatch("%d+") do
|
||||
tracks[0] = tracks[0] + 1
|
||||
table.insert(tracks,tonumber(track))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
octoscan:close()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local encode = newencoder()
|
||||
cl = encode(ChannelList)
|
||||
|
||||
if cl then
|
||||
local f = io.open("/config/ChannelList.json","w+")
|
||||
if f then
|
||||
f:write(cl)
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user