#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
# Copyright (C) 2009-2011 Yukikaze
#import sys # モジュール属性 argv を取得するため
import commands
import os
import os.path
import time
import traceback

import configreader
import status
import recdblist
mypath = str(os.path.dirname(os.path.abspath(__file__))) + "/"
def tv2tsmix(pout, ch, time,getlog=0):
    tv2b25ts(pout + ".b25", ch, time)
    txt=b252tsmix(pout + ".b25", pout)
    return txt
    #if os.access(pout, os.F_OK):
    #    try:
    #        os.remove(pout + ".b25")
    #    except:
    #        ""
def tv2ts(pout, ch, csch, time):
    if ch.replace(" ","").replace("CS","").isdigit():
        if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
            status.changeBSCSRecording(1)
        else:
            status.changeTERecording(1)
        try:
            tv2b25ts(pout + ".b25", ch, time)
        except Exception, inst:
            recdblist.addCommonlogEX(u"Error",u"tv2ts(tv2ts.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
        if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
            status.changeBSCSRecording(-1)
        else:
            status.changeTERecording(-1)
    else:
         ch="0"
         csch="0"
    b252tsmix(pout + ".b25", pout + ".tsmix")
    tch="0"
    if csch!=u"0":
        tch=csch
    elif ch==u"101":
        tch="101"
    elif ch==u"102":
        tch="102"
    #else:
    #    tch=ch
    tsmix2ts(pout + ".tsmix", pout, tch)
    if os.access(pout, os.F_OK):
        try:
            #os.remove(path + "/" + t + ext)
            ""
        except:
            ""
def b252ts(pout, ch, csch):
    b252tsmix(pout + ".b25", pout + ".tsmix")
    tch=u"0"
    if ch.replace(" ","").replace("CS","").isdigit():
        if csch!=u"0":
            tch=csch
        elif ch==u"101":
            tch=u"101"
        elif ch==u"102":
            tch=u"102"
    else:
        tch="0"
    tsmix2ts(pout + ".tsmix", pout, tch)
def tv2b25ts(pout, ch, time):
    exe = configreader.getConfPath('recpt1')
    if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
        status.changeBSCSRecording(1)
    else:
        status.changeTERecording(1)
    try:
        doexe = exe + ' ' + ch + ' ' + time + ' \'' + pout + '\''
        recdblist.printutf8(doexe)
        recdblist.addLog(pout, doexe, u"recpt1ログ-コマンド")
        recdblist.addLog(pout, unicode(commands.getoutput(doexe.encode('utf-8')),'utf-8'), u"recpt1ログ-詳細")
    except Exception, inst:
        recdblist.addCommonlogEX(u"Error",u"tv2b25ts(tv2ts.py)", str(type(inst)),str(inst))
    if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
        status.changeBSCSRecording(-1)
    else:
        status.changeTERecording(-1)
def b252tsmix(pin, pout):
    if not (os.path.exists(pout) and os.path.getsize(pin)>os.path.getsize(pout)*0.95 and os.path.getsize(pin)<os.path.getsize(pout)*1.05):
        exe=""
        if configreader.getConfPath('b25_remote')=="1":
            try:
                exe = configreader.getConfPath('b25_env')+" && "
            except:
                inst=u"b25_remoteがオンになっていますが、b25_envが設定されていないかコメントアウトされています。"
                recdblist.addCommonlogEX(u"Error",u"b252tsmix(tv2ts.py)", "",inst)
        exe = exe + "nice -n 17 " + configreader.getConfPath('b25')
        doexe = exe + u' \"' + pin + u'\" \"' + pout + u'\"'
        recdblist.printutf8(doexe)
        recdblist.addCommandSelfLog(pin,doexe)
        txt = unicode(commands.getoutput(doexe.encode('utf-8')),'utf-8')
        recdblist.addLog(pin, doexe, u"b25ログ-コマンド")
        recdblist.addLog(pin, txt, u"b25ログ-詳細")
        recdblist.addCommandLogZip(pin, "b25", "b25", doexe, txt)
        return txt
def tsmix2ts(pin, pout, csch):#csch=0ならcsの処理をしない
    tssplitterex=configreader.getConfPath("java")+" -jar "+configreader.getConfPath("jTsSplitter")
    doexe =tssplitterex + " \""+ pin + "\" \""+ pout + "\" " + str(csch)
    doexe = "nice -n 18 " + doexe
    os.environ['LANG']="ja_JP.UTF-8"
    txt = unicode(commands.getoutput(doexe.encode('utf-8')),'utf-8')
    recdblist.addLog(pin, doexe, u"TsSplitログ-コマンド")
    recdblist.addLog(pin, txt, u"TsSplitログ-詳細")
    time.sleep(1)
    if os.access(pout, os.F_OK) and os.path.getsize(pout)>10*1000*1000:
        os.remove(pin)
        
