-- vim:set ft=lua:
dofile(mg.script_name:gsub('[^\\/]*$','')..'util.lua')

edcb.htmlEscape=15

post=AssertPost()

edcbnosuspend=EdcbModulePath()..'\\Tools\\edcbnosuspend.exe'

if post then
  if mg.get_var(post,'suspend') or mg.get_var(post,'hibernate') then
    if INDEX_ENABLE_SUSPEND then
      for i=1,100 do
        f=edcb.io.open('\\\\.\\pipe\\EpgTimerSrvNoWaitPipe','r+b')
        if f then
          --CMD_EPG_SRV_SUSPEND(=1051)を送る
          f:write(string.char(1051%256,math.floor(1051/256),0,0))
          f:write(string.char(2,0,0,0,(mg.get_var(post,'hibernate') and 2 or 1),255))
          f:flush()
          --CMD_SUCCESS(=1)を確認
          ok=(f:read(4) or '')=='\1\0\0\0'
          f:close()
          break
        end
        edcb.Sleep(10)
      end
    end
    messege='スタンバイに移行'..(ok and 'します' or 'できません (もうすぐ予約が始まるなど)')
  elseif mg.get_var(post,'epgcap') then
    messege='EPG取得を開始'..(edcb.EpgCapNow() and 'しました' or 'できませんでした')
  elseif mg.get_var(post,'epgreload') then
    messege='EPG再読み込みを開始'..(edcb.ReloadEpg() and 'しました' or 'できませんでした')
  elseif mg.get_var(post,'nosuspend')=='y' then
    edcb.os.execute('start "" /b "'..edcbnosuspend..'" -')
    messege='edcbnosuspend.exeを起動しました'
  elseif mg.get_var(post,'nosuspend')=='n' then
    TerminateCommandlineLike('edcbnosuspend','%')
    messege='edcbnosuspend.exeを停止しました'
  end
elseif mg.get_var(mg.request_info.query_string,'notify') then
    messege=edcb.GetNotifyUpdateCount(mg.get_var(mg.request_info.query_string,'notify'))
elseif mg.get_var(mg.request_info.query_string,'storage') then --ストレージ容量を得る
  checked={}
  messege=''
  for i,v in ipairs(EdcbRecFolderPathList()) do
    if WIN32 then
      v=v:match('^%a:\\')
      if v and not checked[v:upper()] then
        checked[v:upper()]=true
        free=nil
        f=edcb.io.popen('fsutil volume diskfree '..v)
        if f then
          --最近のfsutilは数値に桁区切りがつく。さらに最近のものは項目が増えた。
          free,total,avail=f:read('*a'):gsub("[%s',.]",''):match(':(%d+).-:(%d+).-:(%d+)')
          f:close()
          messege=messege..'<storage><id>'..mg.md5(v)..'</id><name>'
            ..v..'</name><text>'
            ..(free and ('%.3f GiB / %.3f GiB'):format(free/1024/1024/1024,total/1024/1024/1024) or '不明')..'</text><free>'
            ..(free and 100-(free/total*100) or 0)..'</free></storage>'
        end
      end
    else
      total=nil
      f=edcb.io.popen('df -P -BM '..QuoteCommandArgForPath(v)..' 2>/dev/null | sed "s/  */ /g" | cut -f2-4 -d" "')
      if f then
        total,used,avail=f:read('*a'):match('(%d+)M (%d+)M (%d+)M')
        f:close()
      end
      if total then
        messege=messege..'<storage><id>'..mg.md5(v)..'</id><name>'
        ..EdcbHtmlEscape(v)..'</name><text>'
        ..('%.3f GiB (avail: %.3f GiB) / %.3f GiB'):format((total-used)/1024,avail/1024,total/1024)..'</text><free>'
        ..(100-((total-used)/total*100))..'</free></storage>'
      end
    end
  end
end

ct='<?xml version="1.0" encoding="UTF-8" ?><entry><info>'
  ..(messege or '不正値入力')..'</info></entry>'
mg.write(Response(200, 'text/xml', 'utf-8', #ct) ..'\r\n')
if mg.request_info.request_method~='HEAD' then
  mg.write(ct)
end
