OSDN Git Service

implement mysql function.(RC1)
[rec10/rec10-git.git] / rec10 / trunk / src / timerec.py
index 87f038a..9cc4f9d 100644 (file)
@@ -8,15 +8,14 @@ import os
 import datetime
 import epgdb
 import configreader
-#import japanesenkf
-import ts2x264
+import checker
 import tv2avi
 import recdb
 import chdb
 import status
 import re
-#japanesenkf.overrideEncodings()
 recpath=configreader.getpath('recpath')
+tmppath=configreader.getpath('temppath')
 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
 def task():
     """
@@ -24,25 +23,36 @@ def task():
     予定によって子プロセスを生成し処理する。
     """
     recdb.delete_old("6")
-    tasks=recdb.getnow("1")
-    if len(tasks)==0:
+    tasks=recdb.getnow("2")
+    #print tasks
+    inum=recdb.countRecNow("1")
+    print "now-rectask"
+    print "inum:"+str(inum)+"bscsrec:"+str(status.getBSCSRecording())+"terec:"+str(status.getTERecording())
+    if inum+status.getBSCSRecording()+status.getTERecording() < 2:
         update=chdb.update()
-        print "番組表更新処理"
+        #print "番組表更新処理"
         print update
-        if len(update)>0:
+        if len(update)>0 and status.getEPGUpdating()==0:
             print "番組表を更新"
-            print update
+            status.setEPGUpdating(1)
             pid=os.fork()
-            if pid>0:#親プロセスの場合
+            if pid!=0:#親プロセスの場合
                 ""
             else:#子プロセスの場合 アップデートを行って終了
+                i=0
                 for bctype in update:
                     time.sleep(1)
                     print bctype
                     epgdb.updatebc(bctype)
-                sys.exit(0)
-
+                    update=chdb.update()
+                    i=i+1
+                    print update
+                    if i>10:
+                        break
+                status.setEPGUpdating(0)
+                sys.exit()
     for task in tasks:
+        #print task
         try:
             chtxt=task['chtxt']
         except:
@@ -68,46 +78,92 @@ def task():
         except:
             opt=""
         tnow=datetime.datetime.now()
-        dtt=bt-tnow#
+        dtt=bt-tnow
         dt=dtt.days*24*60*60+dtt.seconds
-        #value=line.split(",")
         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
-            if dt<58*60:
-                recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
-                #recdb.delrec(title,chtxt,btime)
-                recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
-                #recdb.lastrecreserv(title,chtxt,btime,etime,opt)
-                """if dt >30*60:
-                    pid=os.fork()
-                    if pid>0:#親プロセスの場合
+            isUpdate=0
+            print dt
+            if (dt<58*60 and dt>20*60):
+                pid=os.fork()
+                if pid!=0:#親プロセスの場合
+                    ""
+                else:#子プロセスの場合 アップデートを行って終了
+                    cht=chdb.chtxtsearch(chtxt)['bctype']
+                    if cht.find('te')!=-1:
+                        cht='te'
+                    else:
+                        cht='bscs'
+                    if cht=='bscs':
+                        gettaskbscs=recdb.countRecNow_minutes_BSCS("10")
+                        getnowbscs=status.getBSCSRecording()
+                        bscs=getnowbscs+gettaskbscs
+                        if bscs <2:
+                            print "now(bscs):"+str(getnowbscs)+" task(bscs):"+str(gettaskbscs)
+                            epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
+                            time.sleep(10)
+                            isUpdate=1
+                        else:
+                            isUpdate=0
+                    if cht=="te":
+                        gettaskte=recdb.countRecNow_minutes_TE("10")
+                        getnowte=status.getTERecording()
+                        bscs=getnowte+gettaskte
+                        if recdb.countRecNow_minutes_TE("10")+status.getTERecording() <2:
+                            print "now(te):"+str(getnowte)+" task(te):"+str(gettaskte)
+                            epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
+                            time.sleep(10)
+                            isUpdate=1
+                        else:
+                            isUpdate=0
+                    if isUpdate:
+                        recdata=epgdb.searchtime2(title.decode('utf-8'),btime,"5",chtxt)
+                        chtxtn=recdata[0]
+                        titlen=recdata[1]
+                        btimen=recdata[2]
+                        etimen=recdata[3]
+                        bt=datetime.datetime.strptime(btimen,"%Y-%m-%d %H:%M:%S")
+                        et=datetime.datetime.strptime(etimen,"%Y-%m-%d %H:%M:%S")
+                        btimen=bt.strftime("%Y-%m-%d %H:%M:%S")
+                        etimen=et.strftime("%Y-%m-%d %H:%M:%S")
+                        if chtxt!="":
+                            try:
+                                recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
+                                recdb.rec_reckey(recdb.REC_FINAL_RESERVE, titlen, chtxtn, btimen, etimen, opt)
+                            except Exception,inst:
+                                print type(inst)
+                                print inst
+                        else:
+                            print "nothing match"
+                    else:
                         ""
-                    else:#子プロセスの場合 アップデートを行って終了
-                        epgdb.update(chtxt)
-                        sys.exit(0)
-                """
-                
+                    sys.exit()
+            elif dt<=10*60:
+                try:
+                    recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
+                    recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
+                except Exception,inst:
+                    print type(inst)
+                    print inst
         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
             deltatime=task['deltatime']
-
-            if dt<30*60:
-                recdatum=epgdb.searchtime(title,btime,deltatime)
-                if len(recdatum)>0:
-                    #recdb.delkey(title,chtxt,btime,deltatime)
-                    recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
-                    for recdata in recdatum:
-                        #recdata=recdata[0]
-                        #print recdata
-                        recds=recdata.split(",")
-                        chtxt=recds[0]
-                        title=recds[1]
-                        btime=recds[2]
-                        etime=recds[3]
-                        bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
-                        et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
-                        btime=bt.strftime("%Y-%m-%d %H:%M:%S")
-                        etime=et.strftime("%Y-%m-%d %H:%M:%S")
-                        recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
-                else :
+            if dt<90*60:
+                recdata=epgdb.searchtime2(title.decode('utf-8'),btime,deltatime,chtxt)
+                if recdata[1]!="":
+                    chtxtt=recdata[0]
+                    titlet=recdata[1]
+                    btimet=recdata[2]
+                    etimet=recdata[3]
+                    bt=datetime.datetime.strptime(btimet,"%Y-%m-%d %H:%M:%S")
+                    et=datetime.datetime.strptime(etimet,"%Y-%m-%d %H:%M:%S")
+                    btimet=bt.strftime("%Y-%m-%d %H:%M:%S")
+                    etimet=et.strftime("%Y-%m-%d %H:%M:%S")
+                    try:
+                        recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
+                        recdb.rec_reckey(recdb.REC_RESERVE, titlet, chtxtt, btimet, etimet, opt)
+                    except Exception,inst:
+                        print type(inst)
+                        print inst
+                else:
                     print "nothing match"
         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
             deltatime=task['deltatime']
@@ -120,34 +176,53 @@ def task():
                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
-            elif dt<30*60*60:
+            elif dt<120*60:
                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
-                #recdb.delevery(keyword,chtxt,btime,deltatime,deltaday)
                 bt=bt+dd
                 et=et+dd
                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
+            
         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
             print dt
-            if dt<6*60:
-                #recdb.dellastrec(title,chtxt,btime)
+            if dt<6*60 and dt>0:
                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
-                #recdb.recend(title,chtxt,btime,etime,opt)
-                recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
+                recdb.rec_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime, etime, opt)
                 print "録画開始"
                 pid=os.fork()
-                if pid>0:#親プロセスの場合
+                if pid!=0:#親プロセスの場合
                     ""
                 else:
                     #print title
-                    tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
-                    if not os.access(recpath+"/"+title+".ts", os.F_OK):
-                        #recdb.del_reckey("tsfin", title, chtxt, btime)
-                        recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
-                        recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
+                    tv2avi.timetv2b25(recpath+"/"+title+".avi", chtxt, btime, etime, opt)
+                    recdb.del_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime)
+                    tnow=datetime.datetime.now()
+                    bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
+                    et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
+                    dt=tnow-bt
+                    bt=tnow+datetime.timedelta(seconds=600)
+                    et=et+dt+datetime.timedelta(seconds=600)
+                    btime=bt.strftime("%Y-%m-%d %H:%M:%S")
+                    etime=et.strftime("%Y-%m-%d %H:%M:%S")
+                    recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
+                    sys.exit()
+        elif task["type"]==recdb.REC_TS_DECODE_QUE:
+            if dt<10*60:
+                if status.getB25Decoding()<2:
+                    pid=os.fork()
+                    if pid!=0:#親プロセスの場合
+                            ""
                     else:
+                        pin=recpath+"/"+title
+                        recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
+                        recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
+                        tv2avi.b252ts(pin, chtxt, btime, etime, opt)
+                        recdb.del_reckey(recdb.REC_TS_DECODING,title,chtxt,btime)
+                        if not os.access(recpath+"/"+title+".ts", os.F_OK):
+                            recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
+                            recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
                         tnow=datetime.datetime.now()
                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
@@ -156,19 +231,26 @@ def task():
                         et=et+dt+datetime.timedelta(seconds=600)
                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
-                        recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
-                        recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
-                        recdb.rec_reckey(recdb.REC_FIN_DECODE,title,chtxt,btime,etime,opt)
-                    sys.exit(0)
+                        recdb.rec_reckey(recdb.REC_ENCODE_QUE, title, chtxt, btime, etime, opt)
+                        print "b25check "+recpath+"/"+title+".ts.b25 "+recpath+"/"+title+".ts"
+                        print checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")
+                        if checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")==1:
+                            os.remove(recpath+"/"+title+".ts.b25")
+                        sys.exit()
+                else:
+                    recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
+                    bt=bt+datetime.timedelta(seconds=600)
+                    et=et+datetime.timedelta(seconds=600)
+                    btime=bt.strftime("%Y-%m-%d %H:%M:%S")
+                    etime=et.strftime("%Y-%m-%d %H:%M:%S")
+                    recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
         elif task["type"]==recdb.REC_ENCODE_QUE:
             if dt<10*60:
-                if status.getEncoding()<2:
+                if status.getEncoding()<int(configreader.getenv("enc_max")):
                     pid=os.fork()
                     if pid>0:#親プロセスの場合
                             ""
                     else:
-                        #print title
-                        #tv2avi.b252avi(recpath+"/"+title+".avi", chtxt,opt)
                         pin=recpath+"/"+title+".ts"
                         if re.search("d",opt):
                             pin=recpath+"/"+title+"sa.avi"
@@ -177,15 +259,15 @@ def task():
                         pout=recpath+"/"+title+".avi"
                         print pin+":"+pout+":"+opt
                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
-                        recdb.rec_reckey("local", title, chtxt, btime, etime, opt)
-                        ts2x264.ts2x264(pin, pout, opt)
-                        
-                        #tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
-                        sys.exit(0)
+                        recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
+                        tv2avi.ts2avi(pin, pout, opt)
+                        recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
+                        recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
+                        sys.exit()
                 else:
                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
                     bt=bt+datetime.timedelta(seconds=600)
                     et=et+datetime.timedelta(seconds=600)
                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
-                    recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
+                    recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
\ No newline at end of file