OSDN Git Service

fix sth.
[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     if len(tasks)==0:
28         update=chdb.update()
29         print "番組表更新処理"
30         print update
31         if len(update)>0:
32             print "番組表を更新"
33             print update
34             pid=os.fork()
35             if pid>0:#親プロセスの場合
36                 ""
37             else:#子プロセスの場合 アップデートを行って終了
38                 for bctype in update:
39                     time.sleep(1)
40                     print bctype
41                     epgdb.updatebc(bctype)
42                 sys.exit(0)
43
44     for task in tasks:
45         try:
46             chtxt=task['chtxt']
47         except:
48             chtxt=""
49         try:
50             title=task['title']
51         except:
52             title=""
53         try:
54             btime=task['btime']
55             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
56         except:
57             btime=""
58             bt=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
59         try:
60             etime=task['etime']
61             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
62         except:
63             etime=""
64             et=datetime.datetime.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")
65         try:
66             opt=task['opt']
67         except:
68             opt=""
69         tnow=datetime.datetime.now()
70         dtt=bt-tnow#
71         dt=dtt.days*24*60*60+dtt.seconds
72         
73         if task["type"]==recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
74             if dt<58*60:
75                 recdb.del_reckey(recdb.REC_RESERVE, title, chtxt, btime)
76                 recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
77
78         elif task["type"]==recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
79             deltatime=task['deltatime']
80             if dt<30*60:
81                 recdatum=epgdb.searchtime(title,btime,deltatime)
82                 if len(recdatum)>0:
83                     recdb.del_reckey(recdb.REC_KEYWORD, title, chtxt, btime)
84                     for recdata in recdatum:
85                         recds=recdata.split(",")
86                         chtxt=recds[0]
87                         title=recds[1]
88                         btime=recds[2]
89                         etime=recds[3]
90                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
91                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
92                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
93                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
94                         recdb.rec_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime, etime, opt)
95                 else :
96                     print "nothing match"
97
98         elif task["type"]==recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
99             deltatime=task['deltatime']
100             deltaday=task['deltaday']
101             if deltatime="":
102                 deltatime=3
103             dd=datetime.timedelta(days=int(deltaday))
104             if dtt.days<0:
105                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
106                 bt=bt+dd
107                 et=et+dd
108                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
109                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
110                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
111             elif dt<30*60*60:
112                 recdb.keyreserv(title,chtxt,btime,etime,deltatime,opt)
113                 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
114                 bt=bt+dd
115                 et=et+dd
116                 btxt=bt.strftime("%Y-%m-%d %H:%M:%S")
117                 etxt=et.strftime("%Y-%m-%d %H:%M:%S")
118                 recdb.everyreserv(title,chtxt,btxt,etxt,deltatime,opt,deltaday)
119             
120         elif task["type"]==recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
121             print dt
122             if dt<6*60:
123                 recdb.del_reckey(recdb.REC_FINAL_RESERVE, title, chtxt, btime)
124                 recdb.rec_reckey(recdb.REC_TS_DECODING, title, chtxt, btime, etime, opt)
125                 print "録画開始"
126                 pid=os.fork()
127                 if pid>0:#親プロセスの場合
128                     ""
129                 else:
130                     #print title
131                     tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
132                     if not os.access(recpath+"/"+title+".ts", os.F_OK):
133                         time.sleep(60)
134                         tnow2=datetime.datetime.now()
135                         dtt2=et-tnow
136                         dt2=dtt2.days*24*60*60+dtt2.seconds
137                         if dt2>0:
138                             title="rt-"+title
139                             tv2avi.timetv2avi(recpath+"/"+title+".avi",chtxt,btime,etime,opt)
140                         if not os.access(recpath+"/"+title+".ts", os.F_OK):
141                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
142                             recdb.rec_reckey(recdb.REC_MISS_DECODE, title, chtxt, btime, etime, opt)
143                         else:
144                             recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
145                             tnow=datetime.datetime.now()
146                             bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
147                             et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
148                             dt=tnow-bt
149                             bt=tnow+datetime.timedelta(seconds=600)
150                             et=et+dt+datetime.timedelta(seconds=600)
151                             btime=bt.strftime("%Y-%m-%d %H:%M:%S")
152                             etime=et.strftime("%Y-%m-%d %H:%M:%S")
153                             recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
154                             recdb.rec_reckey(recdb.REC_FIN_DECODE,title,chtxt,btime,etime,opt)
155                     else:
156                         recdb.del_reckey(recdb.REC_TS_DECODING, title, chtxt, btime)
157                         tnow=datetime.datetime.now()
158                         bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
159                         et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
160                         dt=tnow-bt
161                         bt=tnow+datetime.timedelta(seconds=600)
162                         et=et+dt+datetime.timedelta(seconds=600)
163                         btime=bt.strftime("%Y-%m-%d %H:%M:%S")
164                         etime=et.strftime("%Y-%m-%d %H:%M:%S")
165                         recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)
166                         recdb.rec_reckey(recdb.REC_FIN_DECODE,title,chtxt,btime,etime,opt)
167                     sys.exit(0)
168
169         elif task["type"]==recdb.REC_ENCODE_QUE:
170             if dt<10*60:
171                 if status.getEncoding()<2:
172                     pid=os.fork()
173                     if pid>0:#親プロセスの場合
174                             ""
175                     else:
176                         pin=recpath+"/"+title+".ts"
177                         if re.search("d",opt):
178                             pin=recpath+"/"+title+"sa.avi"
179                         if re.search("5",opt):
180                             pin=recpath+"/"+title+"sa.avi"
181                         pout=recpath+"/"+title+".avi"
182                         print pin+":"+pout+":"+opt
183                         recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
184                         recdb.rec_reckey(recdb.REC_ENCODE_LOCAL, title, chtxt, btime, etime, opt)
185                         ts2x264.ts2x264(pin, pout, opt)
186                         recdb.del_reckey(recdb.REC_ENCODE_LOCAL,title,chtxt,btime)
187                         recdb.rec_reckey(recdb.REC_FIN_LOCAL, title, chtxt, btime, etime, opt)
188                         sys.exit(0)
189                 else:
190                     recdb.del_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime)
191                     bt=bt+datetime.timedelta(seconds=600)
192                     et=et+datetime.timedelta(seconds=600)
193                     btime=bt.strftime("%Y-%m-%d %H:%M:%S")
194                     etime=et.strftime("%Y-%m-%d %H:%M:%S")
195                     recdb.rec_reckey(recdb.REC_ENCODE_QUE,title,chtxt,btime,etime,opt)