OSDN Git Service

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