OSDN Git Service

implement count key system.
[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     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
458     etime = et.strftime("%Y-%m-%d %H:%M:%S")
459     tnow = datetime.datetime.now()
460     dtt = bt-tnow
461     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
462     dd = datetime.timedelta(days=int(deltaday))
463     if dtt.days < 0:
464         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
465         bt = bt + dd
466         et = et + dd
467         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
468         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
469         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
470     elif dt < 120 * 60:
471         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
472         bt = bt + dd
473         et = et + dd
474         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
475         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
476         if counter>0:
477             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,counter-1)
478         elif counter==-1:
479             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,-1)
480         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
481         if recdata[1] != "":
482             chtxtt = recdata[0]
483             titlet = recdata[1]
484             btimet = recdata[2]
485             etimet = recdata[3]
486             exp = recdata[4]
487             longexp = recdata[5]
488             category=recdata[6]
489             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
490             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
491             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
492             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
493             #try:
494             recdb.keyreserv(titlet, chtxtt, btimet, etimet, deltatime, opt)
495         else:
496             recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
497 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
498     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
499     etime = et.strftime("%Y-%m-%d %H:%M:%S")
500     tnow = datetime.datetime.now()
501     dtt = bt-tnow
502     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
503     typetxtnow=typetxt
504     typetxting=""
505     typetxtmiss=""
506     typetxtencque=""
507     if typetxt== recdblist.REC_TS_DECODE_QUE:
508         typetxting=recdblist.REC_TS_DECODING
509         typetxtmiss=recdblist.REC_MISS_DECODE
510         typetxtencque=recdblist.REC_ENCODE_QUE
511     tnow = datetime.datetime.now()
512     dtt = bt-tnow
513     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
514     if dt < 10 * 60:
515         if status.getB25Decoding() < 2:
516             pin = recpath + "/" + title
517             recdb.del_reckey(typetxtnow, title, chtxt, btime)
518             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
519             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
520             recdb.del_reckey(typetxting, title, chtxt, btime)
521             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
522                 recdb.del_reckey(typetxting, title, chtxt, btime)
523                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
524             else:
525                 ch=checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts")
526                 print ch
527                 if ch == 1:
528                     os.remove(recpath + "/" + title + ".ts.b25")
529             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
530             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
531             dt = et-bt
532             if not re.search("D", opt):
533                 tnow = datetime.datetime.now()
534                 bt = tnow + datetime.timedelta(seconds=600)
535                 et = bt + dt
536                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
537                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
538                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
539             else:
540                 try:
541                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
542                 except Exception, inst:
543                     errtxt="Error happened in type_decode_que in timerec.\n"
544                     errtxt=errtxt+"move ts error.\n"
545                     errtxt=errtxt+str(type(inst))+"\n"
546                     errtxt=errtxt+str(inst)
547                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Decode) error")
548                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
549         else:
550             recdb.del_reckey(typetxtnow, title, chtxt, btime)
551             bt = bt + datetime.timedelta(seconds=600)
552             et = et + datetime.timedelta(seconds=600)
553             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
554             etime = et.strftime("%Y-%m-%d %H:%M:%S")
555             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
556     sys.exit()
557
558 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
559     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
560     etime = et.strftime("%Y-%m-%d %H:%M:%S")
561     tnow = datetime.datetime.now()
562     dtt = bt-tnow
563     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
564     typetxtnow=typetxt
565     typetxting=""
566     typetxtfin=""
567     if typetxt==recdblist.REC_ENCODE_QUE:
568         typetxting=recdblist.REC_ENCODE_LOCAL
569         typetxtfin=recdblist.REC_FIN_LOCAL
570     if dt < 10 * 60:
571         if status.getEncoding() < int(configreader.getenv("enc_max")):
572             recdb.del_reckey(typetxtnow, title, chtxt, btime)
573             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
574             recdblist.printutf8(opt)
575             pin = recpath + "/" + title + ".ts"
576             if re.search("d", opt):
577                 pin = recpath + "/" + title + ".m2v"
578                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
579                     paac2 = recpath + "/" + title + "_2.aac"
580                     pmp32 = recpath + "/" + title + "_2.mp3"
581                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
582                         tv2avi.dualaudio2sep(os.path.join(recpath, title+".ts"),"167")
583                 time.sleep(3)
584             elif re.search("5", opt):
585                 pin = recpath + "/" + title + ".m2v"
586                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
587                     paac2 = recpath + "/" + title + "_2.aac"
588                     pmp32 = recpath + "/" + title + "_2.mp3"
589                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
590                         tv2avi.pentaaudio2sep(os.path.join(recpath, title+".ts"))
591                 time.sleep(3)
592             makeMP4=0
593             try:
594                 if configreader.getenv("make_mp4")=="1":
595                     makeMP4=1
596             except:
597                 ""
598             if re.search("m", opt):
599                 makeMP4=0
600             if re.search("4", opt):
601                 makeMP4=1
602             recdblist.printutf8(pin)
603             if makeMP4==1:
604                 pout = recpath + "/" + title + ".mp4"
605                 tv2mp4.ts2mp4(pin, pout, opt)
606             else:
607                 pout = recpath + "/" + title + ".mkv"
608                 tv2mkv.ts2mkv(pin, pout, opt)
609             recdb.del_reckey(typetxting, title, chtxt, btime)
610             time.sleep(10)
611             if re.search("E", opt):
612                 try:
613                     if os.path.exists(os.path.join(recpath,title+".mp4")):
614                         shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
615                     elif os.path.exists(os.path.join(recpath,title+".mkv")):
616                         shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))
617                 except Exception, inst:
618                     errtxt="Error happened in type_encode_que in timerec.\n"
619                     errtxt=errtxt+"move mkv/mp4 error.\n"
620                     errtxt=errtxt+str(type(inst))+"\n"
621                     errtxt=errtxt+str(inst)
622                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Encode) error")
623                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
624             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
625             sys.exit()
626         else:
627             recdb.del_reckey(typetxtnow, title, chtxt, btime)
628             bt = bt + datetime.timedelta(seconds=600)
629             et = et + datetime.timedelta(seconds=600)
630             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
631             etime = et.strftime("%Y-%m-%d %H:%M:%S")
632             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
633             sys.exit()