-- vim:set ft=lua: dofile(mg.script_name:gsub('[^\\/]*$','')..'util.lua') if JKRDLOG_PATH then dofile(mg.script_name:gsub('[^\\/]*$','')..'jkconst.lua') end --<0:再生画面へのリンク, 0:DLリンク, 1:トランスコード再生画面, 2～:直接再生画面(偶数:ローカルファイル再生) vtag=GetVarInt(mg.request_info.query_string,'vtag') or -1 ct=CreateContentBuilder(GZIP_THRESHOLD_BYTE) ct:Append((vtag<=0 and DOCTYPE_HTML4_STRICT or '\n')..[=[
]=]..DefaultHeadContents()..[=[

# 録画済み詳細

]=]) id=GetVarInt(mg.request_info.query_string,'id') or 0 xq=GetTranscodeQueries(mg.request_info.query_string) w=edcb.GetRecFileInfoBasic(id) post=AssertPost() if post then if mg.get_var(post,'protect') then edcb.ChgProtectRecFileInfo(id,mg.get_var(post,'protect')=='y') ct:Append('
変更しました
\n') elseif mg.get_var(post,'ren') then ren=DocumentToNativePath(mg.get_var(post,'ren')) if not w or not ren then ct:Append('
パスが不正のためリネームできません
\n') elseif not ren:find('[^'..DIR_SEPS..']%.[0-9A-Za-z]+$') or not IsEqualPath(ren:match('%.[0-9A-Za-z]+$'),w.recFilePath:match('%.[0-9A-Za-z]+$') or '') then ct:Append('
拡張子はリネームできません
\n') elseif not ren:find('['..DIR_SEPS..'][^'..DIR_SEPS..']+$') or not (EdcbFindFilePlain(ren:gsub('['..DIR_SEPS..'][^'..DIR_SEPS..']+$','')) or {}).isdir then ct:Append('
移動先のディレクトリが存在しません
\n') elseif not EdcbFindFilePlain(w.recFilePath) then --情報だけ変更 edcb.ChgPathRecFileInfo(id,ren) w.recFilePath=ren ct:Append('
リネームしました
\n') elseif not IsEqualPath(ren,w.recFilePath) and EdcbFindFilePlain(ren) then ct:Append('
移動先にファイルが存在します
\n') elseif not edcb.os.rename(w.recFilePath,ren) then ct:Append('
ファイルを移動できません
\n') else --拡張子が付加されたファイルも移動する oriName=w.recFilePath:match('[^'..DIR_SEPS..']*$') for i,v in ipairs(edcb.FindFile(w.recFilePath:sub(1,#w.recFilePath-#oriName)..oriName:gsub('%*','?')..'.*',0) or {}) do if #oriName<#v.name and IsEqualPath(oriName,v.name:sub(1,#oriName)) then edcb.os.rename(w.recFilePath..v.name:sub(#oriName+1),ren..v.name:sub(#oriName+1)) end end --録画情報保存フォルダのファイルも移動する recInfoFolder=edcb.GetPrivateProfile('SET','RecInfoFolder','','Common.ini') if recInfoFolder~='' then renName=ren:match('[^'..DIR_SEPS..']*$') for i,v in ipairs({'.err','.program.txt'}) do edcb.os.rename(PathAppend(recInfoFolder,oriName..v),PathAppend(recInfoFolder,renName..v)) end end edcb.ChgPathRecFileInfo(id,ren) w.recFilePath=ren ct:Append('
リネームしました
\n') end end end thumbs={''} edcb.htmlEscape=15 v=edcb.GetRecFileInfo(id) if v then 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 v.programInfo=ConvertProgramText(ev[1]) 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 v.programInfo=ConvertProgramText(ev) end end end ct:Append('

\n' ..'
番組名
  '..FormatTimeAndDuration(v.startTime, v.durationSecond)..'
  '..v.serviceName..'
  '..v.title..'
\n' ..'
結果
  '..v.comment..'
\n' ..'
ドロップ
  '..v.drops..'
\n' ..'
スクランブル
  '..v.scrambles..'
\n' ..'
ファイル
  \n') ref=w and NativeToDocumentPath(w.recFilePath) if ref then xlist={table.unpack(MEDIA_EXTENSION_LIST)} xlist[#xlist+1]='' for i,ext in ipairs(xlist) do ff=EdcbFindFilePlain(w.recFilePath..ext) if ff then if vtag==i*2 or vtag==i*2+1 then if vtag%2==0 then ct:Append('
  '..(ext=='' and '(filename:'..mg.md5(ref:upper()):sub(27)..')' or '')..'
  ') end ct:Append(VideoWrapperBegin() ..'/'..EdcbHtmlEscape(ref..ext) ..'' ..''..VideoWrapperEnd(JKRDLOG_PATH and GetChatStreamNameList(),true)..'\n'..VideoScriptTemplate(ext=='')) else ct:Append((ext=='' and '' or '') ..'/'..EdcbHtmlEscape(ref..ext)..(ext=='' and '' or '') ..'\n[OpenFile]' ..'\n[DL]') end if ext=='' then fsec,fsize=0,0 shiftable=false f=edcb.io.open(w.recFilePath,'rb') if f then fsec,fsize=GetDurationSec(f) if vtag<=0 then thumbs=ThumbnailTemplate(f,fsec,fsize,ref) end if JKRDLOG_PATH and vtag==1 then --終端が現在時刻よりも昔ならば実況を逐次取得する必要はないのでshiftableにする tot=GetTotAndServiceID(f) shiftable=tot and tot+fsec+60edit\n' ..'
  \n' ..'\n' ..'
  \n' ..'※拡張子が付加されたファイルも移動します(.err, .program.txtなど)\n' ..'
  \n' ..'
  \n' ..(vtag==0 and '\n' or '\n' ..'\n' ..'\n') ..'
  \n' ..'→Video' or '0">DL')..'\n' ..TranscodeSettingTemplate(xq,vtag==0,fsec) ..(vtag==0 and '
  ※OpenFile用のファイルを作成するときは[TS-Live!以外][0m00s][x1.0]を選択してxcodeしてください\n' or '') ..'
  '..thumbs[1]) if vtag==1 then src='xcode.lua?fname='..mg.url_encode(ref)..ConstructTranscodeQueries(xq) ct:Append('\n'..VideoWrapperBegin() ..(xq.tslive and '
  ' or 'xcode') ..VideoWrapperEnd(JKRDLOG_PATH and GetChatStreamNameList(),shiftable)..'\n'..TranscodeScriptTemplate(false,xq.caption,xq.jikkyo,{ofssec=fsec*(xq.offset or 0)/100,fast=xq.fast})) if xq.tslive then ct:Append(TsliveScriptTemplate(xq.autoCinema)) elseif ALLOW_HLS then ct:Append(HlsScriptTemplate('xcode.lua')) end end ct:Append([=[
  字幕リスト
  ]=]) else ct:Append((vtag~=i*2 and vtag~=i*2+1 and '\n[Mux-to-TS]' or '') ..' ('..math.floor(ff.size/1048576)..'M)
  \n') end else --ファイルが見つからない場合もリネームはできるようにしておく if ext=='' then ct:Append('
  \n' ..'\n' ..'
  \n' ..'
  \n') end end end end ct:Append('
\n' ..'
プロテクト
  \n' ..'
  \n' ..'\n' ..'\n' ..'
\n' ..(#v.programInfo>0 and '
番組情報
  '..DecorateProgramText(v.programInfo)..'
\n' or '') ..(#v.errInfo>0 and '
エラーログ
  \n'..v.errInfo:gsub('\r?\n', '
  \n')..'
\n' or '') ..'
-
  \n' ..'
  \n' ..'\n' ..'\n' ..'
\n' ..'

\n') end ct:Append([=[
]=]) for i=2,#thumbs do ct:Append(thumbs[i]) end ct:Append([=[
]=]) ct:Finish() 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'))