OSDN Git Service

fec8b0b84f9039747792eaf7d040e8a0a57eb222
[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         tnow = datetime.datetime.now()
131         dtt = bt-tnow
132         dt = dtt.days * 24 * 60 * 60 + dtt.seconds
133         if task["type"] == recdblist.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
134             pid = os.fork()
135             if pid != 0:#親プロセスの場合
136                 ""
137             else:#子プロセスの場合 アップデートを行って終了
138                 type_reserve(task["type"],chtxt,title,bt,et,opt)
139                 sys.exit()
140         elif task["type"] == recdblist.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
141             deltatime = task['deltatime']
142             pid = os.fork()
143             if pid != 0:#親プロセスの場合
144                 ""
145             else:#子プロセスの場合 アップデートを行って終了
146                 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
147                 sys.exit()
148         elif task["type"] == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
149             deltatime = task['deltatime']
150             deltaday = task['deltaday']
151             print task
152             try:
153                 keyeverycounter=task['counter']
154             except:
155                 keyeverycounter=-1
156             pid = os.fork()
157             if pid != 0:#親プロセスの場合
158                 ""
159             else:#子プロセスの場合 アップデートを行って終了
160                 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday,keyeverycounter)
161                 sys.exit()
162         elif task["type"] == recdblist.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
163             pid = os.fork()
164             if pid != 0:#親プロセスの場合
165                 ""
166             else:#子プロセスの場合 アップデートを行って終了
167                 type_final(task["type"],chtxt, title, bt, et, opt)
168                 sys.exit()
169         elif task["type"] == recdblist.REC_TS_DECODE_QUE:
170             b25num=b25num+1
171             pid = os.fork()
172             if pid != 0:#親プロセスの場合
173                 ""
174             else:#子プロセスの場合 アップデートを行って終了
175                 time.sleep(5*b25num)
176                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
177                 sys.exit()
178         elif task["type"] == recdblist.REC_ENCODE_QUE:
179             encodenum=encodenum+1
180             pid = os.fork()
181             if pid != 0:#親プロセスの場合
182                 ""
183             else:#子プロセスの場合 アップデートを行って終了
184                 time.sleep(5*encodenum)
185                 type_encode_que(task["type"],chtxt, title, bt, et, opt)
186                 sys.exit()
187         elif task["type"] == recdblist.REC_AVI_TO_MKV:
188             if dt < 10 * 60:
189                 pid = os.fork()
190                 if pid > 0:#親プロセスの場合
191                     ""
192                 else:
193                     makeMP4=0
194                     try:
195                         if configreader.getenv("make_mp4")==1:
196                             makeMP4=1
197                     except:
198                         ""
199                     if re.search("m", opt):
200                         makeMP4=0
201                     if re.search("4", opt):
202                         makeMP4=1
203                     recdb.del_reckey(recdblist.REC_AVI_TO_MKV, title, chtxt, btime)
204                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
205                     if makeMP4==1:
206                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)
207                     else:
208                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)
209                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
210                     sys.exit()
211         elif task["type"] == recdblist.REC_AVI_TO_MP4:
212             if dt < 10 * 60:
213                 pid = os.fork()
214                 if pid > 0:#親プロセスの場合
215                     ""
216                 else:
217                     makeMP4=0
218                     try:
219                         if configreader.getenv("make_mp4")==1:
220                             makeMP4=1
221                     except:
222                         ""
223                     if re.search("m", opt):
224                         makeMP4=0
225                     if re.search("4", opt):
226                         makeMP4=1
227                     recdb.del_reckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)
228                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
229                     if makeMP4==1:
230                         tv2mp4.ts2mp4(pin, pout, opt)
231                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)
232                     else:
233                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)
234                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
235                     sys.exit()
236         elif task["type"] == recdblist.REC_MKV_TO_MP4:
237             if dt < 10 * 60:
238                 pid = os.fork()
239                 if pid > 0:#親プロセスの場合
240                     ""
241                 else:
242                     recdb.del_reckey(recdblist.REC_MKV_TO_MP4, title, chtxt, btime)
243                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
244                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
245                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
246                     sys.exit()
247     sys.exit()
248 def search_keyword(key):
249     tnow = datetime.datetime.now()
250     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
251     for k in key:
252         recdatum = epgdb.searchtime_auto(k,nows, "144")
253         for recdata in recdatum:
254             if recdata[1] != "":
255                 chtxtt = recdata[0]
256                 titlet = recdata[1]
257                 btimet = recdata[2]
258                 etimet = recdata[3]
259                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
260                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
261                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
262                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
263                 if status.getSettings_auto_jbk()==1:
264                     topt=status.getSettings_auto_opt()
265                     try:
266                         maxnum=0
267                         if len(ch['ch'])>2:
268                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[1]
269                             maxnum=int(configreader.getenv("bscs_max"))-maxnum
270                         else:
271                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[0]
272                             maxnum=int(configreader.getenv("te_max"))-maxnum
273                         if maxnum>0:
274                             topt=status.getSettings_auto_opt()
275                             recdb.recreserv(titlet,chtxtt, btimet, etimet,topt)
276                     except Exception, inst:
277                         print "error occures in search_keyword_auto_jbk"
278                         print str(type(inst))
279                         print str(inst)
280                 else:
281                     try:
282                         recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet)
283                     except Exception, inst:
284                         print "error occures in search_keyword"
285                         print str(type(inst))
286                         print str(inst)
287 def type_reserve(typetxt,chtxt,title,bt,et,opt):
288     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
289     etime = et.strftime("%Y-%m-%d %H:%M:%S")
290     typetxtnow=typetxt
291     typetxtfinal=""
292     if typetxt==recdblist.REC_RESERVE:
293         typetxtfinal=recdblist.REC_FINAL_RESERVE
294     tnow = datetime.datetime.now()
295     dtt = bt-tnow
296     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
297     if (dt < 58 * 60 and dt > 30 * 60):
298         bctypet = chdb.chtxtsearch(chtxt)['bctype']
299         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
300         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
301         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
302         if dt1 < 60 * 60:
303             recdata = epgdb.searchtime2(title, btime, "5", chtxt)
304             chtxtn = recdata[0]
305             titlen = recdata[1]
306             btimen = recdata[2]
307             etimen = recdata[3]
308             exp = recdata[4]
309             longexp = recdata[5]
310             category=recdata[6]
311             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
312             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
313             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
314             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
315             if chtxt != "":
316                 try:
317                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
318                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
319                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
320                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
321                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
322                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
323                 except Exception, inst:
324                     print "Error happened in Oikake DB"
325                     print str(type(inst))
326                     print str(inst)
327             else:
328                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
329         else:
330             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
331                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
332         sys.exit()
333     elif (dt <= 30 * 60 and dt > 20 * 60):
334         recdata = epgdb.searchtime2(title, btime, "5", chtxt)
335         chtxtn = recdata[0]
336         titlen = recdata[1]
337         btimen = recdata[2]
338         etimen = recdata[3]
339         exp = recdata[4]
340         longexp = recdata[5]
341         category=recdata[6]
342         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
343         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
344         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
345         etimen = et.strftime("%Y-%m-%d %H:%M:%S")
346         if chtxt != "":
347             try:
348                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
349                 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
350                 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
351                 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
352                 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
353                 recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
354             except Exception, inst:
355                 print "Error happened in Oikake DB"
356                 print type(inst)
357                 print inst
358     elif dt <= 20 * 60:
359         try:
360             recdb.del_reckey(typetxtnow, title, chtxt, btime)
361             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
362         except Exception, inst:
363             print type(inst)
364             print inst
365 def type_final(typetxt,chtxt,title,bt,et,opt):
366     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
367     etime = et.strftime("%Y-%m-%d %H:%M:%S")
368     typetxtnow=typetxt
369     typetxting=""
370     typetxtdecque=""
371     if typetxt==recdblist.REC_FINAL_RESERVE:
372         typetxting=recdblist.REC_TS_RECORDING
373         typetxtdecque=recdblist.REC_TS_DECODE_QUE
374     tnow = datetime.datetime.now()
375     dtt = bt-tnow
376     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
377     print dt
378     if dt < 6 * 60 and dt > 0:
379         newtitle=title
380         recdb.del_reckey(typetxtnow, title, chtxt, btime)
381         testpath=[os.path.join(recpath,title+".ts.b25")]
382         testpath.append(os.path.join(recpath,title+".ts"))
383         testpath.append(os.path.join(recpath,title+".avi"))
384         testpath.append(os.path.join(recpath,title+".mp4"))
385         testpath.append(os.path.join(recpath,title+".log"))
386         tcheck=0
387         for ti in testpath:
388             if os.path.exists(ti):
389                 tcheck=tcheck+1
390         if re.search("N", opt) or tcheck>0:
391             iff=""
392             try:
393                 iff=u"("+configreader.getenv("iff")+u")_"
394             except:
395                 iff=""
396             newtime=bt
397             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")
398         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
399         recdblist.printutf8(u"録画開始 "+newtitle+" "+btime+" "+etime)
400         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
401         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
402         if not re.search("R", opt):
403             tnow = datetime.datetime.now()
404             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
405             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
406             dt = tnow-bt
407             bt = tnow + datetime.timedelta(seconds=600)
408             et = et + dt + datetime.timedelta(seconds=600)
409             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
410             etime = et.strftime("%Y-%m-%d %H:%M:%S")
411             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
412         else:
413             try:
414                 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
415             except:
416                 ""
417             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
418         sys.exit()
419 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
420     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
421     etime = et.strftime("%Y-%m-%d %H:%M:%S")
422     typetxtnow=typetxt
423     typetxtres=""
424     if typetxt==recdblist.REC_KEYWORD:
425         typetxtres=recdblist.REC_RESERVE
426     tnow = datetime.datetime.now()
427     dtt = bt-tnow
428     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
429     print dt
430     if dt < 90 * 60:
431         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
432         if recdata[1] != "":
433             chtxtt = recdata[0]
434             titlet = recdata[1]
435             btimet = recdata[2]
436             etimet = recdata[3]
437             exp = recdata[4]
438             longexp = recdata[5]
439             category=recdata[6]
440             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
441             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
442             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
443             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
444             #try:
445             recdb.del_reckey(typetxtnow, title, chtxt, btime)
446             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
447             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
448             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
449             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
450             recdblist.printutf8(u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet)
451             #except Exception, inst:
452             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
453             #    recdblist.printutf8(type(inst))
454             #    recdblist.printutf8(inst)
455         else:
456             recdblist.printutf8("nothing match")
457 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday,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()