OSDN Git Service

implements extending programs following function.
[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("2")
28     print "now-rectask"
29     print inum+status.getBSCSRecording()+status.getTERecording()
30     if inum+status.getBSCSRecording()+status.getTERecording() < 2:
31     #if ( inum < 2 ) and ( status.getBSCSRecording()+status.getTERecording() < 2 ):#1個ならTE|BS/CSのどちらかが埋まってる可能性はないので1以下にした。
32         update=chdb.update()
33         #print "番組表更新処理"
34         print update
35         if len(update)>0:
36             print "番組表を更新"
37             print update
38             pid=os.fork()
39             if pid>0:#親プロセスの場合
40                 ""
41             else:#子プロセスの場合 アップデートを行って終了
42                 for bctype in update:
43                     time.sleep(1)
44                     print bctype
45                     epgdb.updatebc(bctype)
46                 sys.exit(0)
47
48     for task in tasks:
49         #print task
50         try:
51             chtxt=task['chtxt']
52         except:
53             chtxt=""
54         try:
55             title=task['title']
56         except:
57             title=""
58         try:
59             btime=task['btime']
60             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
61         except:
62             btime=""
63             bt=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
64         try:
65             etime=task['etime']
66             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
67         except:
68             etime=""
69             et=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
70         try:
71             opt=task['opt']
72         except:
73             opt=""
74         tnow=datetime.datetime.now()
75         dtt=bt-tnow#
76         dt=dtt.days*24*60*60+dtt.seconds
77         
78         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
79             isUpdate=0
80             if (dt<58*60 and dt>10*60):
81                 if len(chdb.chtxtsearch(chtxt)['ch'])>2:
82                     if recdb.countRecNow_minutes_BSCS("10")+status.getBSCSRecording() <2:
83                         epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
84                         time.sleep(10)
85                         isUpdate=1
86                     else:
87                         isUpdate=0
88                 if len(chdb.chtxtsearch(chtxt)['ch'])<3:
89                     if recdb.countRecNow_minutes_TE("10")+status.getTERecording() <2:
90                         epgdb.updatebc(chdb.chtxtsearch(chtxt)['bctype'])
91                         time.sleep(10)
92                         isUpdate=1
93                     else:
94                         isUpdate=0
95                 if isUpdate:
96                     recdata=epgdb.searchtime2(title.decode('utf-8'),btime,"5",chtxt)
97                     chtxtn=recdata[0]
98                     titlen=recdata[1]
99                     btimen=recdata[2]
100                     etimen=recdata[3]
101                     bt=datetime.datetime.strptime(btimen,"%Y-%m-%d %H:%M:%S")
102                     et=datetime.datetime.strptime(etimen,"%Y-%m-%d %H:%M:%S")
103                     btimen=bt.strftime("%Y-%m-%d %H:%M:%S")
104                     etimen=et.strftime("%Y-%m-%d %H:%M:%S")
105                     if chtxt!="":
106                         recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
107                         recdb.rec_reckey(recdb.REC_FINAL_RESERVE, titlen, chtxtn, btimen, etimen, opt)
108                     else:
109                         print "nothing match"
110                 else:
111                     ""
112             elif dt<=10*60:
113                 recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
114                 recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
115         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
116             deltatime=task['deltatime']
117             if dt<90*60:
118                 recdata=epgdb.searchtime2(title.decode('utf-8'),btime,deltatime,chtxt)
119                 chtxt=recdata[0]
120                 title=recdata[1]
121                 btime=recdata[2]
122                 etime=recdata[3]
123                 bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
124                 et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
125                 btime=bt.strftime("%Y-%m-%d %H:%M:%S")
126                 etime=et.strftime("%Y-%m-%d %H:%M:%S")
127                 if chtxt!="":
128                     recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
129                 else:
130                     print "nothing match"
131         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
132             deltatime=task['deltatime']
133             deltaday=task['deltaday']
134             dd=datetime.timedelta(days=int(deltaday))
135             if dtt.days<0:
136                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
137                 bt=bt+dd
138                 et=et+dd
139                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
140                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
141                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
142             elif dt<30*60*60:
143                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
144                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
145                 bt=bt+dd
146                 et=et+dd
147                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
148                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
149                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
150             
151         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
152             print dt
153             if dt<6*60:
154                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
155                 recdb.rec_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime, etime, opt)
156                 print "録画開始"
157                 pid=os.fork()
158                 if pid>0:#親プロセスの場合
159                     ""
160                 else:
161                     #print title
162                     tv2avi.timetv2b25(recpath+"/"+title, chtxt, btime, etime, opt)
163                     recdb.del_reckey(recdb.REC_TS_RECORDING, title, chtxt, btime)
164                     tnow=datetime.datetime.now()
165                     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
166                     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
167                     dt=tnow-bt
168                     bt=tnow+datetime.timedelta(seconds=600)
169                     et=et+dt+datetime.timedelta(seconds=600)
170                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
171                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
172                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
173                     sys.exit(0)
174         elif task["type"]==recdb.REC_TS_DECODE_QUE:
175             if dt<10*60:
176                 if status.getB25Decoding()<2:
177                     pid=os.fork()
178                     if pid>0:#親プロセスの場合
179                             ""
180                     else:
181                         pin=recpath+"/"+title
182                         recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
183                         recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
184                         tv2avi.b252ts(pin, chtxt, btime, etime, opt)
185                         recdb.del_reckey(recdb.REC_TS_DECODING,title,chtxt,btime)
186                         if not os.access(recpath+"/"+title+".ts", os.F_OK):
187                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
188                             recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
189                         tnow=datetime.datetime.now()
190                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
191                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
192                         dt=tnow-bt
193                         bt=tnow+datetime.timedelta(seconds=600)
194                         et=et+dt+datetime.timedelta(seconds=600)
195                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
196                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
197                         recdb.rec_reckey(recdb.REC_ENCODE_QUE, title, chtxt, btime, etime, opt)
198                         if checker.checkB25Decode(recpath+"/"+title+".ts.b25",recpath+"/"+title+".ts"):
199                             os.remove(recpath+"/"+title+".ts.b25")
200                         sys.exit(0)
201                 else:
202                     recdb.del_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime)
203                     bt=bt+datetime.timedelta(seconds=600)
204                     et=et+datetime.timedelta(seconds=600)
205                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
206                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
207                     recdb.rec_reckey(recdb.REC_TS_DECODE_QUE,title,chtxt,btime,etime,opt)
208         elif task["type"]==recdb.REC_ENCODE_QUE:
209             if dt<10*60:
210                 if status.getEncoding()<2:
211                     pid=os.fork()
212                     if pid>0:#親プロセスの場合
213                             ""
214                     else:
215                         pin=recpath+"/"+title+".ts"
216                         if re.search("d",opt):
217                             pin=recpath+"/"+title+"sa.avi"
218                         if re.search("5",opt):
219                             pin=recpath+"/"+title+"sa.avi"
220                         pout=recpath+"/"+title+".avi"
221                         print pin+":"+pout+":"+opt
222                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
223                         recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
224                         tv2avi.ts2avi(pin, pout, opt)
225                         recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
226                         recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
227                         sys.exit(0)
228                 else:
229                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
230                     bt=bt+datetime.timedelta(seconds=600)
231                     et=et+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)