OSDN Git Service

implement new mp4 encoding(beta).
[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 str(type(inst))
236                         print str(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 str(type(inst))
243                         print str(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 str(type(inst))
283                     print str(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             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")
355         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
356         recdblist.printutf8(u"録画開始 "+newtitle+" "+btime+" "+etime)
357         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
358         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
359         if not re.search("R", opt):
360             tnow = datetime.datetime.now()
361             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
362             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
363             dt = tnow-bt
364             bt = tnow + datetime.timedelta(seconds=600)
365             et = et + dt + datetime.timedelta(seconds=600)
366             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
367             etime = et.strftime("%Y-%m-%d %H:%M:%S")
368             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
369         else:
370             try:
371                 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
372             except:
373                 ""
374             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
375         sys.exit()
376 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
377     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
378     etime = et.strftime("%Y-%m-%d %H:%M:%S")
379     typetxtnow=typetxt
380     typetxtres=""
381     if typetxt==recdblist.REC_KEYWORD:
382         typetxtres=recdblist.REC_RESERVE
383     tnow = datetime.datetime.now()
384     dtt = bt-tnow
385     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
386     print dt
387     if dt < 90 * 60:
388         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
389         if recdata[1] != "":
390             chtxtt = recdata[0]
391             titlet = recdata[1]
392             btimet = recdata[2]
393             etimet = recdata[3]
394             exp = recdata[4]
395             longexp = recdata[5]
396             category=recdata[6]
397             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
398             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
399             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
400             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
401             #try:
402             recdb.del_reckey(typetxtnow, title, chtxt, btime)
403             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
404             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
405             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
406             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
407             recdblist.printutf8(u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet)
408             #except Exception, inst:
409             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
410             #    recdblist.printutf8(type(inst))
411             #    recdblist.printutf8(inst)
412         else:
413             recdblist.printutf8("nothing match")
414
415 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
416     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
417     etime = et.strftime("%Y-%m-%d %H:%M:%S")
418     tnow = datetime.datetime.now()
419     dtt = bt-tnow
420     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
421     dd = datetime.timedelta(days=int(deltaday))
422     if dtt.days < 0:
423         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
424         bt = bt + dd
425         et = et + dd
426         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
427         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
428         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
429     elif dt < 120 * 60:
430         recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
431         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
432         bt = bt + dd
433         et = et + dd
434         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
435         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
436         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
437
438
439 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
440     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
441     etime = et.strftime("%Y-%m-%d %H:%M:%S")
442     tnow = datetime.datetime.now()
443     dtt = bt-tnow
444     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
445     typetxtnow=typetxt
446     typetxting=""
447     typetxtmiss=""
448     typetxtencque=""
449     if typetxt== recdblist.REC_TS_DECODE_QUE:
450         typetxting=recdblist.REC_TS_DECODING
451         typetxtmiss=recdblist.REC_MISS_DECODE
452         typetxtencque=recdblist.REC_ENCODE_QUE
453     tnow = datetime.datetime.now()
454     dtt = bt-tnow
455     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
456     if dt < 10 * 60:
457         if status.getB25Decoding() < 2:
458             pin = recpath + "/" + title
459             recdb.del_reckey(typetxtnow, title, chtxt, btime)
460             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
461             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
462             recdb.del_reckey(typetxting, title, chtxt, btime)
463             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
464                 recdb.del_reckey(typetxting, title, chtxt, btime)
465                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
466             else:
467                 ch=checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts")
468                 print ch
469                 if ch == 1:
470                     os.remove(recpath + "/" + title + ".ts.b25")
471             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
472             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
473             dt = et-bt
474             if not re.search("D", opt):
475                 tnow = datetime.datetime.now()
476                 bt = tnow + datetime.timedelta(seconds=600)
477                 et = bt + dt
478                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
479                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
480                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
481             else:
482                 try:
483                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
484                 except Exception, inst:
485                     errtxt="Error happened in type_decode_que in timerec.\n"
486                     errtxt=errtxt+"move ts error.\n"
487                     errtxt=errtxt+str(type(inst))+"\n"
488                     errtxt=errtxt+str(inst)
489                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Decode) error")
490                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
491         else:
492             recdb.del_reckey(typetxtnow, title, chtxt, btime)
493             bt = bt + datetime.timedelta(seconds=600)
494             et = et + datetime.timedelta(seconds=600)
495             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
496             etime = et.strftime("%Y-%m-%d %H:%M:%S")
497             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
498     sys.exit()
499
500 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
501     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
502     etime = et.strftime("%Y-%m-%d %H:%M:%S")
503     tnow = datetime.datetime.now()
504     dtt = bt-tnow
505     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
506     typetxtnow=typetxt
507     typetxting=""
508     typetxtfin=""
509     if typetxt==recdblist.REC_ENCODE_QUE:
510         typetxting=recdblist.REC_ENCODE_LOCAL
511         typetxtfin=recdblist.REC_FIN_LOCAL
512     if dt < 10 * 60:
513         if status.getEncoding() < int(configreader.getenv("enc_max")):
514             recdb.del_reckey(typetxtnow, title, chtxt, btime)
515             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
516             recdblist.printutf8(opt)
517             pin = recpath + "/" + title + ".ts"
518             if re.search("d", opt):
519                 pin = recpath + "/" + title + ".m2v"
520                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
521                     paac2 = recpath + "/" + title + "_2.aac"
522                     pmp32 = recpath + "/" + title + "_2.mp3"
523                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
524                         tv2avi.dualaudio2sep(os.path.join(recpath, title+".ts"),"167")
525                 time.sleep(3)
526             elif re.search("5", opt):
527                 pin = recpath + "/" + title + ".m2v"
528                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
529                     paac2 = recpath + "/" + title + "_2.aac"
530                     pmp32 = recpath + "/" + title + "_2.mp3"
531                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
532                         tv2avi.pentaaudio2sep(os.path.join(recpath, title+".ts"))
533                 time.sleep(3)
534             makeMP4=0
535             try:
536                 if configreader.getenv("make_mp4")==1:
537                     makeMP4=1
538             except:
539                 ""
540             if re.search("m", opt):
541                 makeMP4=0
542             if re.search("4", opt):
543                 makeMP4=1
544             recdblist.printutf8(pin)
545             if makeMP4==1:
546                 pout = recpath + "/" + title + ".mp4"
547                 tv2mp4.ts2mp4(pin, pout, opt)
548             else:
549                 pout = recpath + "/" + title + ".mkv"
550                 tv2mkv.ts2mkv(pin, pout, opt)
551             recdb.del_reckey(typetxting, title, chtxt, btime)
552             time.sleep(10)
553             if re.search("E", opt):
554                 try:
555                     if os.path.exists(os.path.join(recpath,title+".mp4")):
556                         shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
557                     elif os.path.exists(os.path.join(recpath,title+".mkv")):
558                         shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))
559                 except Exception, inst:
560                     errtxt="Error happened in type_encode_que in timerec.\n"
561                     errtxt=errtxt+"move mkv/mp4 error.\n"
562                     errtxt=errtxt+str(type(inst))+"\n"
563                     errtxt=errtxt+str(inst)
564                     recdblist.addlog(os.path.join(recpath,title+".ts"), errtxt, "timerec-move(Encode) error")
565                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
566             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
567             sys.exit()
568         else:
569             recdb.del_reckey(typetxtnow, title, chtxt, btime)
570             bt = bt + datetime.timedelta(seconds=600)
571             et = et + datetime.timedelta(seconds=600)
572             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
573             etime = et.strftime("%Y-%m-%d %H:%M:%S")
574             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
575             sys.exit()