OSDN Git Service

ddb0182814b2019d3a5de4b909a84e839fd7d687
[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-2010 Yukikaze
5 import datetime
6 import os
7 import os.path
8 import re
9 import sys
10 import time
11 import shutil
12
13 import auto_rec
14 import auto_process
15 import chdb
16 import checker
17 import configreader
18 import epgdb
19 import rec10d
20 import recdb
21 import status
22 import tv2avi
23 import tv2mkv
24 import tv2mp4
25 import install
26 import recdblist
27 recpath = configreader.getpath('recpath')
28 movepath = configreader.getpath('move_destpath')
29 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
30 def task():
31     """
32     数分毎に実行されるタスク処理
33     予定によって子プロセスを生成し処理する。
34     """
35     try:
36         if rec10d.rec10db.select_installed_in_status()==0:
37             install.install()
38     except:
39         install.install()
40     recdb.delete_old("24")
41     recdb.delete_old_auto_bayes("1")
42     recdb.delete_old_auto_keyword("1")
43     tasks = recdb.getnow("3")
44     inum = recdb.countRecNow_minutes("10")
45     recdblist.printutf8(u"rec10処理開始"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
46     recdblist.printutf8(u"直近録画予約件数:" + str(inum) + u"BS/CS録画中件数:" + str(status.getBSCSRecording()) + u"TE録画中件数:" + str(status.getTERecording()) )
47     encodenum=0
48     b25num=0
49     dnow=datetime.datetime.now()
50     if dnow.minute%10<5:
51         pid = os.fork()
52         if pid != 0:
53             ""
54         else:
55             for k in recdb.get_key():
56                 search_keyword(k)
57             sys.exit()
58     else:
59         pid = os.fork()
60         if pid!=0:
61             ""
62         else:
63             time.sleep(10)
64             auto_process.auto_check(recpath)
65             sys.exit()
66     update = chdb.update()
67     if len(update) > 0:
68         pid = os.fork()
69         if pid != 0:
70             ""
71         else:
72             i = 0
73             for bctype in update:
74                 recnum = 0
75                 if bctype.find('te') > -1:
76                     recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
77                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getTERecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_TE("10")))
78                     recnum = int(configreader.getenv("te_max")) -recnum
79                 else:
80                     recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
81                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getBSCSRecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_BSCS("10")))
82                     recnum = int(configreader.getenv("bscs_max")) -recnum
83                 if recnum >0 :
84                     print update
85                     rec10d.rec10db.update_status_by_bctype_epg_ch(bctype, "0")
86                     epgdb.updatebc(bctype)
87                     update = chdb.update()
88                     i = i + 1
89                 if i > 0:
90                     break
91             sys.exit()
92     for task in tasks:
93         typetxt = task["type"]
94         try:
95             chtxt = task['chtxt']
96         except:
97             chtxt = ""
98         try:
99             title = task['title']
100         except:
101             title = ""
102         try:
103             btime = task['btime']
104             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
105         except:
106             btime = ""
107             bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
108         try:
109             etime = task['etime']
110             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
111         except:
112             etime = ""
113             et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
114         try:
115             opt = task['opt']
116         except:
117             opt = ""
118         tnow = datetime.datetime.now()
119         dtt = bt-tnow
120         dt = dtt.days * 24 * 60 * 60 + dtt.seconds
121         if task["type"] == recdblist.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
122             pid = os.fork()
123             if pid != 0:#親プロセスの場合
124                 ""
125             else:#子プロセスの場合 アップデートを行って終了
126                 type_reserve(task["type"],chtxt,title,bt,et,opt)
127                 sys.exit()
128         elif task["type"] == recdblist.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
129             deltatime = task['deltatime']
130             pid = os.fork()
131             if pid != 0:#親プロセスの場合
132                 ""
133             else:#子プロセスの場合 アップデートを行って終了
134                 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
135                 sys.exit()
136         elif task["type"] == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
137             deltatime = task['deltatime']
138             deltaday = task['deltaday']
139             pid = os.fork()
140             if pid != 0:#親プロセスの場合
141                 ""
142             else:#子プロセスの場合 アップデートを行って終了
143                 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday)
144                 sys.exit()
145         elif task["type"] == recdblist.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
146             pid = os.fork()
147             if pid != 0:#親プロセスの場合
148                 ""
149             else:#子プロセスの場合 アップデートを行って終了
150                 type_final(task["type"],chtxt, title, bt, et, opt)
151                 sys.exit()
152         elif task["type"] == recdblist.REC_TS_DECODE_QUE:
153             b25num=b25num+1
154             pid = os.fork()
155             if pid != 0:#親プロセスの場合
156                 ""
157             else:#子プロセスの場合 アップデートを行って終了
158                 time.sleep(5*b25num)
159                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
160                 sys.exit()
161         elif task["type"] == recdblist.REC_ENCODE_QUE:
162             encodenum=encodenum+1
163             pid = os.fork()
164             if pid != 0:#親プロセスの場合
165                 ""
166             else:#子プロセスの場合 アップデートを行って終了
167                 time.sleep(5*encodenum)
168                 type_encode_que(task["type"],chtxt, title, bt, et, opt)
169                 sys.exit()
170         elif task["type"] == recdblist.REC_AVI_TO_MKV:
171             if dt < 10 * 60:
172                 pid = os.fork()
173                 if pid > 0:#親プロセスの場合
174                     ""
175                 else:
176                     recdb.del_reckey(recdblist.REC_AVI_TO_MKV, title, chtxt, btime)
177                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
178                     #tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"),opt)
179                     tv2mkv.avi2mkv(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"),opt)
180                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
181                     sys.exit()
182         elif task["type"] == recdblist.REC_AVI_TO_MP4:
183             if dt < 10 * 60:
184                 pid = os.fork()
185                 if pid > 0:#親プロセスの場合
186                     ""
187                 else:
188                     recdb.del_reckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)
189                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
190                     tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mp4"),opt)
191                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
192                     sys.exit()
193         elif task["type"] == recdblist.REC_MKV_TO_MP4:
194             if dt < 10 * 60:
195                 pid = os.fork()
196                 if pid > 0:#親プロセスの場合
197                     ""
198                 else:
199                     recdb.del_reckey(recdblist.REC_MKV_TO_MP4, title, chtxt, btime)
200                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
201                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
202                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
203                     sys.exit()
204     sys.exit()
205 def search_keyword(key):
206     tnow = datetime.datetime.now()
207     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
208     for k in key:
209         recdatum = epgdb.searchtime_auto(k,nows, "144")
210         for recdata in recdatum:
211             if recdata[1] != "":
212                 chtxtt = recdata[0]
213                 titlet = recdata[1]
214                 btimet = recdata[2]
215                 etimet = recdata[3]
216                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
217                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
218                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
219                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
220                 if status.getSettings_auto_jbk()==1:
221                     topt=status.getSettings_auto_opt()
222                     try:
223                         maxnum=0
224                         if len(ch['ch'])>2:
225                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[1]
226                             maxnum=int(configreader.getenv("bscs_max"))-maxnum
227                         else:
228                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[0]
229                             maxnum=int(configreader.getenv("te_max"))-maxnum
230                         if maxnum>0:
231                             topt=status.getSettings_auto_opt()
232                             recdb.recreserv(titlet,chtxtt, btimet, etimet,topt)
233                     except Exception, inst:
234                         print "error occures in search_keyword_auto_jbk"
235                         print type(inst)
236                         print inst
237                 else:
238                     try:
239                         recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet)
240                     except Exception, inst:
241                         print "error occures in search_keyword"
242                         print type(inst)
243                         print inst
244 def type_reserve(typetxt,chtxt,title,bt,et,opt):
245     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
246     etime = et.strftime("%Y-%m-%d %H:%M:%S")
247     typetxtnow=typetxt
248     typetxtfinal=""
249     if typetxt==recdblist.REC_RESERVE:
250         typetxtfinal=recdblist.REC_FINAL_RESERVE
251     tnow = datetime.datetime.now()
252     dtt = bt-tnow
253     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
254     if (dt < 58 * 60 and dt > 30 * 60):
255         bctypet = chdb.chtxtsearch(chtxt)['bctype']
256         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
257         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
258         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
259         if dt1 < 60 * 60:
260             recdata = epgdb.searchtime2(title, btime, "5", chtxt)
261             chtxtn = recdata[0]
262             titlen = recdata[1]
263             btimen = recdata[2]
264             etimen = recdata[3]
265             exp = recdata[4]
266             longexp = recdata[5]
267             category=recdata[6]
268             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
269             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
270             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
271             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
272             if chtxt != "":
273                 try:
274                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
275                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
276                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
277                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
278                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
279                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
280                 except Exception, inst:
281                     print "Error happened in Oikake DB"
282                     print type(inst)
283                     print inst
284             else:
285                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
286         else:
287             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
288                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
289         sys.exit()
290     elif (dt <= 30 * 60 and dt > 20 * 60):
291         recdata = epgdb.searchtime2(title, btime, "5", chtxt)
292         chtxtn = recdata[0]
293         titlen = recdata[1]
294         btimen = recdata[2]
295         etimen = recdata[3]
296         exp = recdata[4]
297         longexp = recdata[5]
298         category=recdata[6]
299         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
300         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
301         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
302         etimen = et.strftime("%Y-%m-%d %H:%M:%S")
303         if chtxt != "":
304             try:
305                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
306                 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
307                 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
308                 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
309                 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
310                 recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
311             except Exception, inst:
312                 print "Error happened in Oikake DB"
313                 print type(inst)
314                 print inst
315     elif dt <= 20 * 60:
316         try:
317             recdb.del_reckey(typetxtnow, title, chtxt, btime)
318             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
319         except Exception, inst:
320             print type(inst)
321             print inst
322 def type_final(typetxt,chtxt,title,bt,et,opt):
323     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
324     etime = et.strftime("%Y-%m-%d %H:%M:%S")
325     typetxtnow=typetxt
326     typetxting=""
327     typetxtdecque=""
328     if typetxt==recdblist.REC_FINAL_RESERVE:
329         typetxting=recdblist.REC_TS_RECORDING
330         typetxtdecque=recdblist.REC_TS_DECODE_QUE
331     tnow = datetime.datetime.now()
332     dtt = bt-tnow
333     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
334     print dt
335     if dt < 6 * 60 and dt > 0:
336         newtitle=title
337         recdb.del_reckey(typetxtnow, title, chtxt, btime)
338         testpath=[os.path.join(recpath,title+".ts.b25")]
339         testpath.append(os.path.join(recpath,title+".ts"))
340         testpath.append(os.path.join(recpath,title+".avi"))
341         testpath.append(os.path.join(recpath,title+".mp4"))
342         testpath.append(os.path.join(recpath,title+".log"))
343         tcheck=0
344         for ti in testpath:
345             if os.path.exists(ti):
346                 tcheck=tcheck+1
347         if re.search("N", opt) or tcheck>0:
348             iff=""
349             try:
350                 iff=u"("+configreader.getenv("iff")+u")_"
351             except:
352                 iff=""
353             newtime=bt
354             newtime=newtime+datetime.timedelta(seconds=10)
355             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")
356         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
357         recdblist.printutf8(u"録画開始 "+newtitle+" "+btime+" "+etime)
358         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
359         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
360         if not re.search("R", opt):
361             tnow = datetime.datetime.now()
362             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
363             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
364             dt = tnow-bt
365             bt = tnow + datetime.timedelta(seconds=600)
366             et = et + dt + datetime.timedelta(seconds=600)
367             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
368             etime = et.strftime("%Y-%m-%d %H:%M:%S")
369             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
370         else:
371             try:
372                 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
373             except:
374                 ""
375             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
376         sys.exit()
377 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
378     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
379     etime = et.strftime("%Y-%m-%d %H:%M:%S")
380     typetxtnow=typetxt
381     typetxtres=""
382     if typetxt==recdblist.REC_KEYWORD:
383         typetxtres=recdblist.REC_RESERVE
384     tnow = datetime.datetime.now()
385     dtt = bt-tnow
386     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
387     print dt
388     if dt < 90 * 60:
389         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
390         if recdata[1] != "":
391             chtxtt = recdata[0]
392             titlet = recdata[1]
393             btimet = recdata[2]
394             etimet = recdata[3]
395             exp = recdata[4]
396             longexp = recdata[5]
397             category=recdata[6]
398             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
399             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
400             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
401             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
402             #try:
403             recdb.del_reckey(typetxtnow, title, chtxt, btime)
404             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
405             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
406             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
407             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
408             recdblist.printutf8(u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet)
409             #except Exception, inst:
410             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
411             #    recdblist.printutf8(type(inst))
412             #    recdblist.printutf8(inst)
413         else:
414             recdblist.printutf8("nothing match")
415
416 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
417     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
418     etime = et.strftime("%Y-%m-%d %H:%M:%S")
419     tnow = datetime.datetime.now()
420     dtt = bt-tnow
421     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
422     dd = datetime.timedelta(days=int(deltaday))
423     if dtt.days < 0:
424         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
425         bt = bt + dd
426         et = et + dd
427         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
428         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
429         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
430     elif dt < 120 * 60:
431         recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
432         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
433         bt = bt + dd
434         et = et + dd
435         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
436         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
437         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
438
439
440 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
441     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
442     etime = et.strftime("%Y-%m-%d %H:%M:%S")
443     tnow = datetime.datetime.now()
444     dtt = bt-tnow
445     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
446     typetxtnow=typetxt
447     typetxting=""
448     typetxtmiss=""
449     typetxtencque=""
450     if typetxt== recdblist.REC_TS_DECODE_QUE:
451         typetxting=recdblist.REC_TS_DECODING
452         typetxtmiss=recdblist.REC_MISS_DECODE
453         typetxtencque=recdblist.REC_ENCODE_QUE
454     tnow = datetime.datetime.now()
455     dtt = bt-tnow
456     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
457     if dt < 10 * 60:
458         if status.getB25Decoding() < 2:
459             pin = recpath + "/" + title
460             recdb.del_reckey(typetxtnow, title, chtxt, btime)
461             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
462             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
463             recdb.del_reckey(typetxting, title, chtxt, btime)
464             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
465                 recdb.del_reckey(typetxting, title, chtxt, btime)
466                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
467             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
468             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
469             dt = et-bt
470             if not re.search("D", opt):
471                 tnow = datetime.datetime.now()
472                 bt = tnow + datetime.timedelta(seconds=600)
473                 et = bt + dt
474                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
475                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
476                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
477             else:
478                 try:
479                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
480                 except Exception, inst:
481                     errtxt="Error happened in type_decode_que in timerec.\n"
482                     errtxt=errtxt+"move ts error.\n"
483                     errtxt=errtxt+str(type(inst))+"\n"
484                     errtxt=errtxt+inst
485                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Decode) error")
486                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
487             if checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts") == 1:
488                 os.remove(recpath + "/" + title + ".ts.b25")
489         else:
490             recdb.del_reckey(typetxtnow, title, chtxt, btime)
491             bt = bt + datetime.timedelta(seconds=600)
492             et = et + datetime.timedelta(seconds=600)
493             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
494             etime = et.strftime("%Y-%m-%d %H:%M:%S")
495             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
496     sys.exit()
497
498 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
499     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
500     etime = et.strftime("%Y-%m-%d %H:%M:%S")
501     tnow = datetime.datetime.now()
502     dtt = bt-tnow
503     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
504     typetxtnow=typetxt
505     typetxting=""
506     typetxtfin=""
507     if typetxt==recdblist.REC_ENCODE_QUE:
508         typetxting=recdblist.REC_ENCODE_LOCAL
509         typetxtfin=recdblist.REC_FIN_LOCAL
510     if dt < 10 * 60:
511         if status.getEncoding() < int(configreader.getenv("enc_max")):
512             recdb.del_reckey(typetxtnow, title, chtxt, btime)
513             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
514             recdblist.printutf8(opt)
515             pin = recpath + "/" + title + ".ts"
516             if re.search("d", opt):
517                 pin = recpath + "/" + title + ".m2v"
518                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
519                     tv2avi.dualaudio2sep(os.path.join(recpath, title+".ts"),"167")
520                 time.sleep(3)
521             if re.search("5", opt):
522                 pin = recpath + "/" + title + ".m2v"
523                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
524                     tv2avi.pentaaudio2sep(os.path.join(recpath, title+".ts"))
525                 time.sleep(3)
526             pout = recpath + "/" + title + ".mkv"
527             recdblist.printutf8(pin)
528             tv2mkv.ts2mkv(pin, pout, opt)
529             recdb.del_reckey(typetxting, title, chtxt, btime)
530             time.sleep(10)
531             if re.search("E", opt):
532                 try:
533                     if os.path.exists(os.path.join(recpath,title+".mp4")):
534                         shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
535                     elif os.path.exists(os.path.join(recpath,title+".mkv")):
536                         shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))
537                 except Exception, inst:
538                     errtxt="Error happened in type_encode_que in timerec.\n"
539                     errtxt=errtxt+"move mkv/mp4 error.\n"
540                     errtxt=errtxt+type(inst)+"\n"
541                     errtxt=errtxt+inst
542                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Encode) error")
543                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
544             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
545             sys.exit()
546         else:
547             recdb.del_reckey(typetxtnow, title, chtxt, btime)
548             bt = bt + datetime.timedelta(seconds=600)
549             et = et + datetime.timedelta(seconds=600)
550             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
551             etime = et.strftime("%Y-%m-%d %H:%M:%S")
552             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
553             sys.exit()