-- vim:set ft=lua: dofile(mg.script_name:gsub('[^\\/]*$','')..'util.lua') ct={ title='録画結果', js='
\n', fixedTabs=true, searchlinks=true } id=GetVarInt(mg.request_info.query_string,'id') or 0 w=edcb.GetRecFileInfo(id) edcb.htmlEscape=15 v=edcb.GetRecFileInfo(id) if v then -- トランスコード済みのファイルがvideoフォルダにあればそっち使う fname=string.match(w.recFilePath, '[^'..DIR_SEPS..']*$') or '' for i,ext in ipairs({'.mp4','.webm'}) do f=edcb.io.open(PathAppend(mg.document_root, 'video'..DIR_SEP..fname..ext), 'rb') if f then video=PathToRoot()..'video/'..mg.url_encode(fname)..ext break end end if not video then f=edcb.io.open(w.recFilePath, 'rb') if f then video=v.id ori=true end end if video then dur,fsize=GetDurationSec(f) f:close() end RecInfo='
movie
\n' ..'
description
' ..MdlChip:tag(v.comment) ..'
' ..MdlChip:tag('ドロップ : '..v.drops, MdlChip:getColorClass('ドロップ : '), v.drops>0 and ' mdl-color-text--red-A700') ..MdlChip:tag('スクランブル : '..v.scrambles, MdlChip:getColorClass('スクランブル : '), v.scrambles>0 and ' mdl-color-text--red-A700') ..'
' if #v.programInfo==0 and v.eid~=65535 then --過去番組情報を探してみる ev=edcb.EnumEventInfoArchive and edcb.EnumEventInfoArchive({{onid=v.onid,tsid=v.tsid,sid=v.sid}},{startTime=v.startTime,durationSecond=1}) if ev and #ev>0 then epgInfo, audio=ConvertEpgInfoText2(ev[1],RecInfo) else --番組情報を探してみる ev=edcb.SearchEpg(v.onid,v.tsid,v.sid,v.eid) if ev and ev.startTime and os.time(ev.startTime)==os.time(v.startTime) then epgInfo, audio=ConvertEpgInfoText2(ev,RecInfo) end end end if not epgInfo then if string.find(v.programInfo, '詳細情報') then info,extInfo,genreInfo,videoInfo,audioInfo,otherInfo=v.programInfo:match('^.-\r?\n\r?\n(.-)\r?\n\r?\n詳細情報\r?\n(.-)%s*ジャンル : \r?\n(.*)\r?\n\r?\n映像 : (.*)\r?\n音声 : (.-)\r?\n\r?\n(.*)\r?\n$') else info,genreInfo,videoInfo,audioInfo,otherInfo=v.programInfo:match('^.-\r?\n\r?\n(.-)\r?\nジャンル : \r?\n(.*)\r?\n\r?\n映像 : (.*)\r?\n音声 : (.-)\r?\n\r?\n(.*)\r?\n$') end if genreInfo then local s='' for i,v in ipairs(Split(genreInfo:gsub('\r?\n', '\n'), '\n')) do s=s..MdlChip:tag(v, 'cont-'..(v:find('^ニュース／報道') and 1 or v:find('^スポーツ') and 2 or v:find('^情報／ワイドショー') and 3 or v:find('^ドラマ') and 4 or v:find('^音楽') and 5 or v:find('^バラエティ') and 6 or v:find('^映画') and 7 or v:find('^アニメ／特撮') and 8 or v:find('^ドキュメンタリー／教養') and 9 or v:find('^劇場／公演') and 10 or v:find('^趣味／教育') and 11 or v:find('^福祉') and 12 or 16)) end genreInfo=s end if videoInfo then local s='' for i,v in ipairs(Split(videoInfo:gsub('\r?\n', '\n'), '\n')) do for j,w in ipairs(Split(v, '、')) do if i==1 then s=s..MdlChip:tag(w) else for k,x in ipairs(Split(w, ' ')) do s=s..MdlChip:tag(x) end end end end videoInfo=s end if audioInfo then local s='' local wrap=true for i,v in ipairs(Split(audioInfo:gsub('\r?\n', '\n'), '\n')) do local a, b = v:gsub('サンプリングレート : ', '') s=s..(wrap and '
' or '')..MdlChip:tag(a)..(b>0 and '
' or '') wrap=b>0 and true or false end audioInfo=s end if otherInfo then local s='' for i,v in ipairs(Split(otherInfo:gsub('\r?\n\r?\n', '\n'):gsub('\r?\n', '\n'), '\n')) do if not v:match('ID:%d*') then s=s..MdlChip:tag(v) end end otherInfo=s..MdlChip:tag(v.onid..'-'..v.tsid..'-'..v.sid..'-'..v.eid) end epgInfo='
\n

#### ' ..ConvertTitle(v.title)..'\n' ..FormatTimeAndDuration(v.startTime, v.durationSecond)..'' ..v.serviceName..''..SearchConverter(v, v.serviceName)..'

\n

' ..(info or '')..'

\n
\n
\n' ..(extInfo and '
'..DecorateUri(extInfo):gsub('\r?\n', '
\n')..'
\n' or '') ..'
'..RecInfo ..(genreInfo and '
category
'..genreInfo..'
\n' or '') ..(videoInfo and '
videocam
'..videoInfo..'
\n' or '') ..(audioInfo and '
headphones
'..audioInfo..'
\n' or '') ..(otherInfo and '
info
'..otherInfo..'
\n' or '') ..'
' end ct.main='
\n' ..'
\n
' ..epgInfo ..(video and '
\n
\n' ..PlayerTemplate('preload="none"') ..'
' ..'
\n
\n' or '') ..(#v.errInfo>0 and '
\n
\n

    '..v.errInfo..'

\n
\n
\n' or '') ..'
\n' ..'
\n' ..'
\n' ..'\n' ..'
\n' ..'
\n' ..'
\n' ct.tab='番組詳細\n' ..(video and '再生\n' or '') ..(#v.errInfo>0 and 'エラーログ\n' or '') end ct=Template(ct) mg.write(ct:Pop(Response(200,'text/html','utf-8',ct.len,ct.gzip) ..'Cross-Origin-Embedder-Policy: require-corp\r\n' ..'Cross-Origin-Opener-Policy: same-origin\r\n' ..'\r\n'))