OSDN Git Service

update epg only when recording task is less than 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 ts2x264
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
30     if ( inum < 2 ) and ( status.getBSCSRecording()+status.getTERecording() < 2 ):#1個ならTE|BS/CSのどちらかが埋まってる可能性はないので1以下にした。
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         
76         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
77             if dt<58*60:
78                 recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
79                 recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
80
81         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
82             deltatime=task['deltatime']
83             if dt<90*60:
84                 recdatum=epgdb.searchtime2(title.decode('utf-8'),btime,deltatime,chtxt)
85                 if len(recdatum)>0:
86                     recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
87                     for recdata in recdatum:
88                         recds=recdata.split(",")
89                         chtxt=recds[0]
90                         title=recds[1]
91                         btime=recds[2]
92                         etime=recds[3]
93                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
94                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
95                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
96                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
97                         recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
98                 else :
99                     print "nothing match"
100
101         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
102             deltatime=task['deltatime']
103             deltaday=task['deltaday']
104             dd=datetime.timedelta(days=int(deltaday))
105             if dtt.days<0:
106                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
107                 bt=bt+dd
108                 et=et+dd
109                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
110                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
111                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
112             elif dt<30*60*60:
113                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
114                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
115                 bt=bt+dd
116                 et=et+dd
117                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
118                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
119                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
120             
121         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
122             print dt
123             if dt<6*60:
124                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
125                 recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
126                 print "録画開始"
127                 pid=os.fork()
128                 if pid>0:#親プロセスの場合
129                     ""
130                 else:
131                     #print title
132                     tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
133                     if not os.access(recpath+"/"+title+".ts", os.F_OK):
134                         time.sleep(60)
135                         tnow2=datetime.datetime.now()
136                         dtt2=et-tnow
137                         dt2=dtt2.days*24*60*60+dtt2.seconds
138                         if dt2>0:
139                             title="rt-"+title
140                             tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
141                         if not os.access(recpath+"/"+title+".ts", os.F_OK):
142                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
143                             recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
144                         else:
145                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
146                             tnow=datetime.datetime.now()
147                             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
148                             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
149                             dt=tnow-bt
150                             bt=tnow+datetime.timedelta(seconds=600)
151                             et=et+dt+datetime.timedelta(seconds=600)
152                             btime=bt.strftime("%Y-%m-%d %H:%M:%S")
153                             etime=et.strftime("%Y-%m-%d %H:%M:%S")
154                             recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
155                             recdb.rec_reckey(recdb.REC_FIN_DECODE,title,chtxt,btime,etime,opt)
156                     else:
157                         recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
158                         tnow=datetime.datetime.now()
159                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
160                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
161                         dt=tnow-bt
162                         bt=tnow+datetime.timedelta(seconds=600)
163                         et=et+dt+datetime.timedelta(seconds=600)
164                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
165                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
166                         recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
167                         recdb.rec_reckey(recdb.REC_FIN_DECODE,title,chtxt,btime,etime,opt)
168                     sys.exit(0)
169
170         elif task["type"]==recdb.REC_ENCODE_QUE:
171             if dt<10*60:
172                 if status.getEncoding()<2:
173                     pid=os.fork()
174                     if pid>0:#親プロセスの場合
175                             ""
176                     else:
177                         pin=recpath+"/"+title+".ts"
178                         if re.search("d",opt):
179                             pin=recpath+"/"+title+"sa.avi"
180                         if re.search("5",opt):
181                             pin=recpath+"/"+title+"sa.avi"
182                         pout=recpath+"/"+title+".avi"
183                         print pin+":"+pout+":"+opt
184                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
185                         recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
186                         ts2x264.ts2x264(pin, pout, opt)
187                         recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
188                         recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
189                         sys.exit(0)
190                 else:
191                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
192                     bt=bt+datetime.timedelta(seconds=600)
193                     et=et+datetime.timedelta(seconds=600)
194                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
195                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
196                     recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)