octonet/octoserve/var/channels/DataBase.lua

130 lines
4.8 KiB
Lua

local DataBase = {}
local SourceList = {}
local ChannelList = {}
local function AddSource(refid,title,system,src)
table.insert(SourceList, { refid = refid, title = title, src = src, system = system } )
end
local function AddChannel(sourceid,title,request,tracks)
table.insert(ChannelList, { refid = sourceid, title = title, request = request, tracks = tracks } )
end
local function ReadFile(sourceid,file,system)
while true do
line = file:read()
if not line then break end
local cat,title,sys,freq,sr,pol,mtype,bw,ds,plp,t2lite,radio,enc,pids,tracks
local request = ""
if system == "dvbs" or system == "dvbs2" then
cat,title,sys,freq,sr,pol,radio,enc,pids,tracks = string.match(line,'%"(.*)%",%"(.*)%",%"(.*)%",(%d+),(%d+),%"(.*)%",(%d+),(%d+),%"P(.*)%",%"A(.*)%"')
if not tracks then break end
if sys == "dvbs" or "dvbs2" then
pids = string.gsub(pids,":",",")
tracks = string.gsub(tracks,":",",")
request = "freq="..freq.."&pol="..pol.."&msys="..sys.."&sr="..sr.."&pids=0,"..pids
end
elseif system == "dvbc" then
cat,title,sys,freq,sr,mtype,radio,enc,pids,tracks = string.match(line,'%"(.*)%",%"(.*)%",%"(.*)%",(%d+),(%d+),%"(.*)%",(%d+),(%d+),%"P(.*)%",%"A(.*)%"')
if not tracks then break end
pids = string.gsub(pids,":",",")
tracks = string.gsub(tracks,":",",")
local f = string.sub(freq,1,3).."."..string.sub(freq,4,6)
if sys == "dvbc" then
request = "freq="..f.."&msys=dvbc&sr="..sr.."&mtype="..mtype.."&pids=0,"..pids
end
elseif system == "dvbc2" then
cat,title,sys,freq,bw,ds,plp,mtype,radio,enc,pids,tracks = string.match(line,'%"(.*)%",%"(.*)%",%"(.*)%",(%d+),(%d+),(%d+),(%d+),%"(.*)%",(%d+),(%d+),%"P(.*)%",%"A(.*)%"')
if not tracks then break end
pids = string.gsub(pids,":",",")
tracks = string.gsub(tracks,":",",")
local f = string.sub(freq,1,3).."."..string.sub(freq,4,6)
if sys == "dvbc" then
request = "freq="..f.."&msys=dvbc&sr="..bw.."&mtype="..ds.."&pids=0,"..pids
elseif sys == "dvbc2" then
request = "freq="..f.."&msys=dvbc2&bw="..bw.."&x_ds="..ds.."&plp="..plp.."&pids=0,"..pids
end
elseif system == "dvbt" or system == "dvbt2" then
cat,title,sys,freq,bw,plp,t2lite,radio,enc,pids,tracks = string.match(line,'%"(.*)%",%"(.*)%",%"(.*)%",(%d+),(%d+),(%d+),(%d+),(%d+),(%d+),%"P(.*)%",%"A(.*)%"')
if not tracks then break end
pids = string.gsub(pids,":",",")
tracks = string.gsub(tracks,":",",")
local f = string.sub(freq,1,3).."."..string.sub(freq,4,6)
if sys == "dvbt" then
request = "freq="..f.."&msys=dvbt&bw="..bw.."&pids=0,"..pids
elseif sys == "dvbt2" then
if bw == "1" then bw = "1.712" end
request = "freq="..f.."&msys=dvbt2&bw="..bw.."&plp="..plp.."&pids=0,"..pids
end
end
if request ~= "" then
if enc ~= "0" then request = request.."&x_pmt="..enc end
AddChannel(sourceid,title,request, tracks)
end
end
file:close()
end
local function OpenCSV(name,line1)
local file = io.open("/config/channels/"..name..".csv","r")
if file then
local line = file:read()
line = string.gsub(line,'"','')
if string.match(line,line1) then
return file
end
file:close()
end
file = io.open("/var/channels/"..name..".csv","r")
if file then
local line = file:read()
end
return file
end
local srcfile = OpenCSV("sourcelist","KEY,CSVFILE,NAME,SYSTEM,SRC")
if srcfile then
while true do
line = srcfile:read()
if not line then break end
local key,csvfile,name,system,src = string.match(line,'%"(.*)%",%"(.*)%",%"(.*)%",%"(.*)%",(%d+)')
if not key or not csvfile or not name or not system or not src then
break
end
if system == "dvbs" or system == "dvbs2" then
AddSource(key,name,system,src)
elseif system == "dvbc" or system == "dvbc2" or system == "dvbt" or system == "dvbt2" then
AddSource(key,name,system,nil)
else
csvfile = nil
end
if csvfile then
local header = "?"
if system == "dvbs" or system == "dvbs2" then
header = "CATEGORY,TITLE,SYSTEM,FREQ,SR,POL,RADIO,ENC,PIDS,TRACKS"
elseif system == "dvbc" then
header = "CATEGORY,TITLE,SYSTEM,FREQ,SR,MOD,RADIO,ENC,PIDS,TRACKS"
elseif system == "dvbc2" then
header = "CATEGORY,TITLE,SYSTEM,FREQ,BW/SR,DS,PLP,MOD,RADIO,ENC,PIDS,TRACKS"
elseif system == "dvbt" or system == "dvbt2" then
header = "CATEGORY,TITLE,SYSTEM,FREQ,BW,PLP,LITE,RADIO,ENC,PIDS,TRACKS"
end
local file = OpenCSV(csvfile,header)
if file then
ReadFile(key,file,system)
end
end
end
srcfile:close()
end
DataBase.SourceList = SourceList
DataBase.ChannelList = ChannelList
return DataBase