OSDN Git Service

enc_max option
[rec10/rec10-git.git] / rec10 / trunk / src / timerec.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 import sys
6 import time
7 import os
8 import datetime
9 import epgdb
10 import configreader
11 import checker
12 import tv2avi
13 import recdb
14 import chdb
15 import status
16 import re
17 recpath=configreader.getpath('recpath')
18 tmppath=configreader.getpath('temppath')
19 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
20 def task():
21     """
22     数分毎に実行されるタスク処理
23     予定によって子プロセスを生成し処理する。
24     """
25     recdb.delete_old("6")
26     tasks=recdb.getnow("1")
27     inum=recdb.countRecNow("1")
28     print "now-rectask"
29     print inum+status.getBSCSRecording()+status.getTERecording()
30     if inum+status.getBSCSRecording()+status.getTERecording() < 2:
31         update=chdb.update()
32         #print "番組表更新処理"
33         print update
34         if len(update)>0:
35             print "番組表を更新"
36             print update
37             pid=os.fork()
38             if pid>0:#親プロセスの場合
39                 ""
40             else:#子プロセスの場合 アップデートを行って終了
41                 for bctype in update:
42                     time.sleep(1)
43                     print bctype
44                     epgdb.updatebc(bctype)
45                 sys.exit(0)
46
47     for task in tasks:
48         try:
49             chtxt=task['chtxt']
50         except:
51             chtxt=""
52         try:
53             title=task['title']
54         except:
55             title=""
56         try:
57             btime=task['btime']
58             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
59         except:
60             btime=""
61             bt=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
62         try:
63             etime=task['etime']
64             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
65         except:
66             etime=""
67             et=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
68         try:
69             opt=task['opt']
70         except:
71             opt=""
72         tnow=datetime.datetime.now()
73         dtt=bt-tnow
74         dt=dtt.days*24*60*60+dtt.seconds
75         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
76             isUpdate=0
77             print dt
78             if (dt<58*60 and dt>10*60):
79                 pid=os.fork()
80                 if pid>0:#親プロセスの場合
81                     ""
82                 else:#子プロセスの場合 アップデートを行って終了
83                     if len(chdb.chtxtsearch(chtxt)['ch'])>2:
84                         if recdb.countRecNow_minutes_BSCS("10")+status.getBSCSRecording() <2:
85                             epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
86                             time.sleep(10)
87                             isUpdate=1
88                         else:
89                             isUpdate=0
90                     if len(chdb.chtxtsearch(chtxt)['ch'])<3:
91                         if recdb.countRecNow_minutes_TE("10")+status.getTERecording() <2:
92                             epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
93                             time.sleep(10)
94                             isUpdate=1
95                         else:
96                             isUpdate=0
97                     if isUpdate:
98                         recdata=epgdb.searchtime2(title.decode('utf-8'),btime,"5",chtxt)
99                         chtxtn=recdata[0]
100                         titlen=recdata[1]
101                         btimen=recdata[2]
102                         etimen=recdata[3]
103                         bt=datetime.datetime.strptime(btimen,"%Y-%m-%d %H:%M:%S")
104                         et=datetime.datetime.strptime(etimen,"%Y-%m-%d %H:%M:%S")
105                         btimen=bt.strftime("%Y-%m-%d %H:%M:%S")
106                         etimen=et.strftime("%Y-%m-%d %H:%M:%S")
107                         if chtxt!="":
108                             try:
109                                 recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
110                                 recdb.rec_reckey(recdb.REC_FINAL_RESERVE, titlen, chtxtn, btimen, etimen, opt)
111                             except Exception,inst:
112                                 print type(inst)
113                                 print inst
114                         else:
115                             print "nothing match"
116                     else:
117                         ""
118                     sys.exit(0)
119             elif dt<=10*60:
120                 try:
121                     recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
122                     recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
123                 except Exception,inst:
124                     print type(inst)
125                     print inst
126         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
127             deltatime=task['deltatime']
128             if dt<90*60:
129                 recdata=epgdb.searchtime2(title.decode('utf-8'),btime,deltatime,chtxt)
130                 chtxtt=recdata[0]
131                 titlet=recdata[1]
132                 btimet=recdata[2]
133                 etimet=recdata[3]
134                 bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
135                 et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
136                 btimet=bt.strftime("%Y-%m-%d %H:%M:%S")
137                 etimet=et.strftime("%Y-%m-%d %H:%M:%S")
138                 if chtxt!="":
139                     try:
140                         recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
141                         recdb.rec_reckey(recdb.REC_FINAL_RESERVE, titlet, chtxtt, btimet, etimet, opt)
142                     except Exception,inst:
143                         print type(inst)
144                         print inst
145                 else:
146                     print "nothing match"
147         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
148             deltatime=task['deltatime']
149             deltaday=task['deltaday']
150             dd=datetime.timedelta(days=int(deltaday))
151             if dtt.days<0:
152                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
153                 bt=bt+dd
154                 et=et+dd
155                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
156                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
157                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
158             elif dt<30*60*60:
159                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
160                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
161                 bt=bt+dd
162                 et=et+dd
163                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
164                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
165                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
166             
167         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
168             print dt
169             if dt<6*60 and dt>0:
170                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
171                 recdb.rec_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime, etime, opt)
172                 print "録画開始"
173                 pid=os.fork()
174                 if pid>0:#親プロセスの場合
175                     ""
176                 else:
177                     #print title
178                     tv2avi.timetv2b25(recpath+"/"+title+".avi", chtxt, btime, etime, opt)
179                     recdb.del_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime)
180                     tnow=datetime.datetime.now()
181                     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
182                     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
183                     dt=tnow-bt
184                     bt=tnow+datetime.timedelta(seconds=600)
185                     et=et+dt+datetime.timedelta(seconds=600)
186                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
187                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
188                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
189                     sys.exit(0)
190         elif task["type"]==recdb.REC_TS_DECODE_QUE:
191             if dt<10*60:
192                 if status.getB25Decoding()<2:
193                     pid=os.fork()
194                     if pid>0:#親プロセスの場合
195                             ""
196                     else:
197                         pin=recpath+"/"+title
198                         recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
199                         recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
200                         tv2avi.b252ts(pin, chtxt, btime, etime, opt)
201                         recdb.del_reckey(recdb.REC_TS_DECODING,title,chtxt,btime)
202                         if not os.access(recpath+"/"+title+".ts", os.F_OK):
203                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
204                             recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
205                         tnow=datetime.datetime.now()
206                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
207                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
208                         dt=tnow-bt
209                         bt=tnow+datetime.timedelta(seconds=600)
210                         et=et+dt+datetime.timedelta(seconds=600)
211                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
212                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
213                         recdb.rec_reckey(recdb.REC_ENCODE_QUE, title, chtxt, btime, etime, opt)
214                         print "b25check "+recpath+"/"+title+".ts.b25 "+recpath+"/"+title+".ts"
215                         print checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")
216                         if checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")==1:
217                             os.remove(recpath+"/"+title+".ts.b25")
218                         sys.exit(0)
219                 else:
220                     recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
221                     bt=bt+datetime.timedelta(seconds=600)
222                     et=et+datetime.timedelta(seconds=600)
223                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
224                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
225                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
226         elif task["type"]==recdb.REC_ENCODE_QUE:
227             if dt<10*60:
228                 if status.getEncoding()<int(configreader.getenv("enc_max")):
229                     pid=os.fork()
230                     if pid>0:#親プロセスの場合
231                             ""
232                     else:
233                         pin=recpath+"/"+title+".ts"
234                         if re.search("d",opt):
235                             pin=recpath+"/"+title+"sa.avi"
236                         if re.search("5",opt):
237                             pin=recpath+"/"+title+"sa.avi"
238                         pout=recpath+"/"+title+".avi"
239                         print pin+":"+pout+":"+opt
240                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
241                         recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
242                         tv2avi.ts2avi(pin, pout, opt)
243                         recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
244                         recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
245                         sys.exit(0)
246                 else:
247                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
248                     bt=bt+datetime.timedelta(seconds=600)
249                     et=et+datetime.timedelta(seconds=600)
250                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
251                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
252                     recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)