OSDN Git Service

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