OSDN Git Service

implement mysql function.(RC1)
[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("2")
27     #print tasks
28     inum=recdb.countRecNow("1")
29     print "now-rectask"
30     print "inum:"+str(inum)+"bscsrec:"+str(status.getBSCSRecording())+"terec:"+str(status.getTERecording())
31     if inum+status.getBSCSRecording()+status.getTERecording() < 2:
32         update=chdb.update()
33         #print "番組表更新処理"
34         print update
35         if len(update)>0 and status.getEPGUpdating()==0:
36             print "番組表を更新"
37             status.setEPGUpdating(1)
38             pid=os.fork()
39             if pid!=0:#親プロセスの場合
40                 ""
41             else:#子プロセスの場合 アップデートを行って終了
42                 i=0
43                 for bctype in update:
44                     time.sleep(1)
45                     print bctype
46                     epgdb.updatebc(bctype)
47                     update=chdb.update()
48                     i=i+1
49                     print update
50                     if i>10:
51                         break
52                 status.setEPGUpdating(0)
53                 sys.exit()
54     for task in tasks:
55         #print task
56         try:
57             chtxt=task['chtxt']
58         except:
59             chtxt=""
60         try:
61             title=task['title']
62         except:
63             title=""
64         try:
65             btime=task['btime']
66             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
67         except:
68             btime=""
69             bt=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
70         try:
71             etime=task['etime']
72             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
73         except:
74             etime=""
75             et=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
76         try:
77             opt=task['opt']
78         except:
79             opt=""
80         tnow=datetime.datetime.now()
81         dtt=bt-tnow
82         dt=dtt.days*24*60*60+dtt.seconds
83         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
84             isUpdate=0
85             print dt
86             if (dt<58*60 and dt>20*60):
87                 pid=os.fork()
88                 if pid!=0:#親プロセスの場合
89                     ""
90                 else:#子プロセスの場合 アップデートを行って終了
91                     cht=chdb.chtxtsearch(chtxt)['bctype']
92                     if cht.find('te')!=-1:
93                         cht='te'
94                     else:
95                         cht='bscs'
96                     if cht=='bscs':
97                         gettaskbscs=recdb.countRecNow_minutes_BSCS("10")
98                         getnowbscs=status.getBSCSRecording()
99                         bscs=getnowbscs+gettaskbscs
100                         if bscs <2:
101                             print "now(bscs):"+str(getnowbscs)+" task(bscs):"+str(gettaskbscs)
102                             epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
103                             time.sleep(10)
104                             isUpdate=1
105                         else:
106                             isUpdate=0
107                     if cht=="te":
108                         gettaskte=recdb.countRecNow_minutes_TE("10")
109                         getnowte=status.getTERecording()
110                         bscs=getnowte+gettaskte
111                         if recdb.countRecNow_minutes_TE("10")+status.getTERecording() <2:
112                             print "now(te):"+str(getnowte)+" task(te):"+str(gettaskte)
113                             epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
114                             time.sleep(10)
115                             isUpdate=1
116                         else:
117                             isUpdate=0
118                     if isUpdate:
119                         recdata=epgdb.searchtime2(title.decode('utf-8'),btime,"5",chtxt)
120                         chtxtn=recdata[0]
121                         titlen=recdata[1]
122                         btimen=recdata[2]
123                         etimen=recdata[3]
124                         bt=datetime.datetime.strptime(btimen,"%Y-%m-%d %H:%M:%S")
125                         et=datetime.datetime.strptime(etimen,"%Y-%m-%d %H:%M:%S")
126                         btimen=bt.strftime("%Y-%m-%d %H:%M:%S")
127                         etimen=et.strftime("%Y-%m-%d %H:%M:%S")
128                         if chtxt!="":
129                             try:
130                                 recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
131                                 recdb.rec_reckey(recdb.REC_FINAL_RESERVE, titlen, chtxtn, btimen, etimen, opt)
132                             except Exception,inst:
133                                 print type(inst)
134                                 print inst
135                         else:
136                             print "nothing match"
137                     else:
138                         ""
139                     sys.exit()
140             elif dt<=10*60:
141                 try:
142                     recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
143                     recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
144                 except Exception,inst:
145                     print type(inst)
146                     print inst
147         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
148             deltatime=task['deltatime']
149             if dt<90*60:
150                 recdata=epgdb.searchtime2(title.decode('utf-8'),btime,deltatime,chtxt)
151                 if recdata[1]!="":
152                     chtxtt=recdata[0]
153                     titlet=recdata[1]
154                     btimet=recdata[2]
155                     etimet=recdata[3]
156                     bt=datetime.datetime.strptime(btimet,"%Y-%m-%d %H:%M:%S")
157                     et=datetime.datetime.strptime(etimet,"%Y-%m-%d %H:%M:%S")
158                     btimet=bt.strftime("%Y-%m-%d %H:%M:%S")
159                     etimet=et.strftime("%Y-%m-%d %H:%M:%S")
160                     try:
161                         recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
162                         recdb.rec_reckey(recdb.REC_RESERVE, titlet, chtxtt, btimet, etimet, opt)
163                     except Exception,inst:
164                         print type(inst)
165                         print inst
166                 else:
167                     print "nothing match"
168         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
169             deltatime=task['deltatime']
170             deltaday=task['deltaday']
171             dd=datetime.timedelta(days=int(deltaday))
172             if dtt.days<0:
173                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
174                 bt=bt+dd
175                 et=et+dd
176                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
177                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
178                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
179             elif dt<120*60:
180                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
181                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
182                 bt=bt+dd
183                 et=et+dd
184                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
185                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
186                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
187             
188         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
189             print dt
190             if dt<6*60 and dt>0:
191                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
192                 recdb.rec_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime, etime, opt)
193                 print "録画開始"
194                 pid=os.fork()
195                 if pid!=0:#親プロセスの場合
196                     ""
197                 else:
198                     #print title
199                     tv2avi.timetv2b25(recpath+"/"+title+".avi", chtxt, btime, etime, opt)
200                     recdb.del_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime)
201                     tnow=datetime.datetime.now()
202                     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
203                     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
204                     dt=tnow-bt
205                     bt=tnow+datetime.timedelta(seconds=600)
206                     et=et+dt+datetime.timedelta(seconds=600)
207                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
208                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
209                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
210                     sys.exit()
211         elif task["type"]==recdb.REC_TS_DECODE_QUE:
212             if dt<10*60:
213                 if status.getB25Decoding()<2:
214                     pid=os.fork()
215                     if pid!=0:#親プロセスの場合
216                             ""
217                     else:
218                         pin=recpath+"/"+title
219                         recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
220                         recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
221                         tv2avi.b252ts(pin, chtxt, btime, etime, opt)
222                         recdb.del_reckey(recdb.REC_TS_DECODING,title,chtxt,btime)
223                         if not os.access(recpath+"/"+title+".ts", os.F_OK):
224                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
225                             recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
226                         tnow=datetime.datetime.now()
227                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
228                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
229                         dt=tnow-bt
230                         bt=tnow+datetime.timedelta(seconds=600)
231                         et=et+dt+datetime.timedelta(seconds=600)
232                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
233                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
234                         recdb.rec_reckey(recdb.REC_ENCODE_QUE, title, chtxt, btime, etime, opt)
235                         print "b25check "+recpath+"/"+title+".ts.b25 "+recpath+"/"+title+".ts"
236                         print checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")
237                         if checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts")==1:
238                             os.remove(recpath+"/"+title+".ts.b25")
239                         sys.exit()
240                 else:
241                     recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
242                     bt=bt+datetime.timedelta(seconds=600)
243                     et=et+datetime.timedelta(seconds=600)
244                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
245                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
246                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
247         elif task["type"]==recdb.REC_ENCODE_QUE:
248             if dt<10*60:
249                 if status.getEncoding()<int(configreader.getenv("enc_max")):
250                     pid=os.fork()
251                     if pid>0:#親プロセスの場合
252                             ""
253                     else:
254                         pin=recpath+"/"+title+".ts"
255                         if re.search("d",opt):
256                             pin=recpath+"/"+title+"sa.avi"
257                         if re.search("5",opt):
258                             pin=recpath+"/"+title+"sa.avi"
259                         pout=recpath+"/"+title+".avi"
260                         print pin+":"+pout+":"+opt
261                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
262                         recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
263                         tv2avi.ts2avi(pin, pout, opt)
264                         recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
265                         recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
266                         sys.exit()
267                 else:
268                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
269                     bt=bt+datetime.timedelta(seconds=600)
270                     et=et+datetime.timedelta(seconds=600)
271                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
272                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
273                     recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)