OSDN Git Service

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