OSDN Git Service

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