OSDN Git Service

verbose mode test.
[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 from recdblist import verbose_level_now
27 import recdblist
28 recpath = configreader.getpath('recpath')
29 movepath = configreader.getpath('move_destpath')
30 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
31 def task():
32     """
33     数分毎に実行されるタスク処理
34     予定によって子プロセスを生成し処理する。
35     """
36     try:
37         if rec10d.rec10db.select_installed_in_status()==0 or rec10d.rec10db.select_version_in_status()<recdblist.version:
38             install.install()
39     except:
40         install.install()
41     recdb.delete_old("24")
42     recdb.delete_old_auto_bayes("1")
43     recdb.delete_old_auto_keyword("1")
44     tasks = recdb.getnow("3")
45     inum = recdb.countRecNow_minutes("10")
46     recdblist.printutf8(u"rec10処理開始"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),verbose_level=800)
47     recdblist.printutf8(u"直近録画予約件数:" + str(inum) + u"BS/CS録画中件数:" + str(status.getBSCSRecording()) + u"TE録画中件数:" + str(status.getTERecording()) ,verbose_level=800)
48     encodenum=0
49     b25num=0
50     dnow=datetime.datetime.now()
51     if dnow.minute%10<5:
52         pid = os.fork()
53         if pid != 0:
54             ""
55         else:
56             for k in recdb.get_key():
57                 search_keyword(k)
58             sys.exit()
59     else:
60         pid = os.fork()
61         if pid!=0:
62             ""
63         else:
64             time.sleep(10)
65             auto_process.auto_check(recpath)
66             time.sleep(10)
67             auto_process.kill_dead_encode(recpath)
68             sys.exit()
69     update = chdb.update()
70     if len(update) > 0:
71         pid = os.fork()
72         if pid != 0:
73             ""
74         else:
75             i = 0
76             for bctype in update:
77                 recnum = 0
78                 if bctype.find('te') > -1:
79                     recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
80                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getTERecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_TE("10")),verbose_level=800)
81                     recnum = int(configreader.getenv("te_max")) -recnum
82                 else:
83                     recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
84                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getBSCSRecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_BSCS("10")),verbose_level=800)
85                     recnum = int(configreader.getenv("bscs_max")) -recnum
86                 if recnum >0 :
87                     recdblist.printutf8(str(update))
88                     rec10d.rec10db.update_status_by_bctype_epg_ch(bctype, "0",verbose_level=750)
89                     epgdb.updatebc(bctype)
90                     update = chdb.update()
91                     i = i + 1
92                 if i > 0:
93                     break
94             time.sleep(5)
95             auto_process.update_all_timeline_epg()
96             sys.exit()
97     else:
98         pid = os.fork()
99         if pid != 0:
100             ""
101         else:
102             auto_process.update_all_timeline_epg()
103             sys.exit()
104     for task in tasks:
105         typetxt = task["type"]
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             try:
152                 keyeverycounter=task['counter']
153             except:
154                 keyeverycounter=-1
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                         recdblist.Commonlogex("Error", "search_keyword_auto_jbk(timerec.py)", str(type(inst)),str(inst),log_level=200)
277                 else:
278                     try:
279                         recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet)
280                     except Exception, inst:
281                         recdblist.Commonlogex("Error", "search_keyword(timerec.py)", str(type(inst)),str(inst),log_level=200)
282 def type_reserve(typetxt,chtxt,title,bt,et,opt):
283     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
284     etime = et.strftime("%Y-%m-%d %H:%M:%S")
285     typetxtnow=typetxt
286     typetxtfinal=""
287     if typetxt==recdblist.REC_RESERVE:
288         typetxtfinal=recdblist.REC_FINAL_RESERVE
289     tnow = datetime.datetime.now()
290     dtt = bt-tnow
291     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
292     if (dt < 58 * 60 and dt > 30 * 60):
293         bctypet = chdb.chtxtsearch(chtxt)['bctype']
294         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
295         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
296         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
297         if dt1 < 60 * 60:
298             recdata = epgdb.searchtime2(title, btime, "5", chtxt)
299             chtxtn = recdata[0]
300             titlen = recdata[1]
301             btimen = recdata[2]
302             etimen = recdata[3]
303             exp = recdata[4]
304             longexp = recdata[5]
305             category=recdata[6]
306             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
307             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
308             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
309             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
310             if chtxt != "":
311                 try:
312                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
313                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
314                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
315                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
316                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
317                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
318                 except Exception, inst:
319                     recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
320             else:
321                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
322         else:
323             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
324                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
325         sys.exit()
326     elif (dt <= 30 * 60 and dt > 20 * 60):
327         recdata = epgdb.searchtime2(title, btime, "5", chtxt)
328         chtxtn = recdata[0]
329         titlen = recdata[1]
330         btimen = recdata[2]
331         etimen = recdata[3]
332         exp = recdata[4]
333         longexp = recdata[5]
334         category=recdata[6]
335         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
336         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
337         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
338         etimen = et.strftime("%Y-%m-%d %H:%M:%S")
339         if chtxt != "":
340             try:
341                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
342                 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
343                 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
344                 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
345                 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
346                 #recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
347                 recdblist.Commonlogex(u"通常", "Oikake (timerec.py)",u"追いかけ機能実行中",u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen,log_level=500)
348             except Exception, inst:
349                 recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
350     elif dt <= 20 * 60:
351         try:
352             recdb.del_reckey(typetxtnow, title, chtxt, btime)
353             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
354         except Exception, inst:
355             recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
356 def type_final(typetxt,chtxt,title,bt,et,opt):
357     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
358     etime = et.strftime("%Y-%m-%d %H:%M:%S")
359     typetxtnow=typetxt
360     typetxting=""
361     typetxtdecque=""
362     if typetxt==recdblist.REC_FINAL_RESERVE:
363         typetxting=recdblist.REC_TS_RECORDING
364         typetxtdecque=recdblist.REC_TS_DECODE_QUE
365     tnow = datetime.datetime.now()
366     dtt = bt-tnow
367     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
368     if dt < 6 * 60 and dt > 0:
369         newtitle=title
370         recdb.del_reckey(typetxtnow, title, chtxt, btime)
371         testpath=[os.path.join(recpath,title+".ts.b25")]
372         testpath.append(os.path.join(recpath,title+".ts"))
373         testpath.append(os.path.join(recpath,title+".avi"))
374         testpath.append(os.path.join(recpath,title+".mp4"))
375         testpath.append(os.path.join(recpath,title+".log"))
376         tcheck=0
377         for ti in testpath:
378             if os.path.exists(ti):
379                 tcheck=tcheck+1
380         if re.search("N", opt) or tcheck>0:
381             iff=""
382             try:
383                 iff=u"("+configreader.getenv("iff")+u")_"
384             except:
385                 iff=""
386             newtime=bt
387             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")
388         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
389         recdblist.Commonlogex(u"通常","timerec.py",u"録画開始 "+newtitle+" "+btime+" "+etime,"",log_level=500)
390         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
391         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
392         if not re.search("R", opt):
393             tnow = datetime.datetime.now()
394             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
395             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
396             dt = tnow-bt
397             bt = tnow + datetime.timedelta(seconds=600)
398             et = et + dt + datetime.timedelta(seconds=600)
399             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
400             etime = et.strftime("%Y-%m-%d %H:%M:%S")
401             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
402         else:
403             try:
404                 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
405             except:
406                 ""
407             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
408         sys.exit()
409 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
410     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
411     etime = et.strftime("%Y-%m-%d %H:%M:%S")
412     typetxtnow=typetxt
413     typetxtres=""
414     if typetxt==recdblist.REC_KEYWORD:
415         typetxtres=recdblist.REC_RESERVE
416     tnow = datetime.datetime.now()
417     dtt = bt-tnow
418     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
419     print dt
420     if dt < 90 * 60:
421         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
422         if recdata[1] != "":
423             chtxtt = recdata[0]
424             titlet = recdata[1]
425             btimet = recdata[2]
426             etimet = recdata[3]
427             exp = recdata[4]
428             longexp = recdata[5]
429             category=recdata[6]
430             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
431             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
432             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
433             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
434             #try:
435             recdb.del_reckey(typetxtnow, title, chtxt, btime)
436             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
437             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
438             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
439             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
440             recdblist.Commonlogex(u"通常","timerec.py",u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet,"",log_level=500)
441             #except Exception, inst:
442             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
443             #    recdblist.printutf8(type(inst))
444             #    recdblist.printutf8(inst)
445         else:
446             recdblist.printutf8("nothing match")
447 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday,counter):
448     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
449     etime = et.strftime("%Y-%m-%d %H:%M:%S")
450     tnow = datetime.datetime.now()
451     dtt = bt-tnow
452     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
453     dd = datetime.timedelta(days=int(deltaday))
454     if dtt.days < 0:
455         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
456         bt = bt + dd
457         et = et + dd
458         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
459         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
460         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
461     elif dt < 120 * 60:
462         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
463         bt = bt + dd
464         et = et + dd
465         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
466         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
467         if counter>0:
468             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,counter-1)
469         elif counter==-1:
470             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,-1)
471         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
472         if recdata[1] != "":
473             chtxtt = recdata[0]
474             titlet = recdata[1]
475             btimet = recdata[2]
476             etimet = recdata[3]
477             exp = recdata[4]
478             longexp = recdata[5]
479             category=recdata[6]
480             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
481             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
482             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
483             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
484             #try:
485             recdb.keyreserv(titlet, chtxtt, btimet, etimet, deltatime, opt)
486         else:
487             recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
488 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
489     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
490     etime = et.strftime("%Y-%m-%d %H:%M:%S")
491     tnow = datetime.datetime.now()
492     dtt = bt-tnow
493     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
494     typetxtnow=typetxt
495     typetxting=""
496     typetxtmiss=""
497     typetxtencque=""
498     if typetxt== recdblist.REC_TS_DECODE_QUE:
499         typetxting=recdblist.REC_TS_DECODING
500         typetxtmiss=recdblist.REC_MISS_DECODE
501         typetxtencque=recdblist.REC_ENCODE_QUE
502     tnow = datetime.datetime.now()
503     dtt = bt-tnow
504     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
505     if dt < 10 * 60:
506         if status.getB25Decoding() < 2:
507             pin = recpath + "/" + title
508             recdb.del_reckey(typetxtnow, title, chtxt, btime)
509             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
510             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
511             recdb.del_reckey(typetxting, title, chtxt, btime)
512             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
513                 recdb.del_reckey(typetxting, title, chtxt, btime)
514                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
515             else:
516                 auto_process.deltmpfile(recpath, title, ".ts")
517             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
518             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
519             dt = et-bt
520             if not re.search("D", opt):
521                 tnow = datetime.datetime.now()
522                 bt = tnow + datetime.timedelta(seconds=600)
523                 et = bt + dt
524                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
525                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
526                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
527             else:
528                 try:
529                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
530                     time.sleep(5)
531                     if os.path.getsize(os.path.join(recpath,title+".ts"))==os.path.getsize(os.path.join(movepath,title+".ts")):
532                         os.remove(os.path.join(recpath,title+".ts"))
533                 except Exception, inst:
534                     errtxt1="move ts error.\n"
535                     errtxt2=str(type(inst))+"\n"
536                     errtxt2=errtxt2+str(inst)
537                     recdblist.Commonlogex("Error", "type_decode_que(timerec.py)", errtxt1,errtxt2,log_level=200)
538                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
539         else:
540             recdb.del_reckey(typetxtnow, title, chtxt, btime)
541             bt = bt + datetime.timedelta(seconds=600)
542             et = et + datetime.timedelta(seconds=600)
543             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
544             etime = et.strftime("%Y-%m-%d %H:%M:%S")
545             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
546     sys.exit()
547
548 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
549     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
550     etime = et.strftime("%Y-%m-%d %H:%M:%S")
551     tnow = datetime.datetime.now()
552     dtt = bt-tnow
553     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
554     typetxtnow=typetxt
555     typetxting=""
556     typetxtfin=""
557     if typetxt==recdblist.REC_ENCODE_QUE:
558         typetxting=recdblist.REC_ENCODE_LOCAL
559         typetxtfin=recdblist.REC_FIN_LOCAL
560     if dt < 10 * 60:
561         if status.getEncoding() < int(configreader.getenv("enc_max")):
562             recdb.del_reckey(typetxtnow, title, chtxt, btime)
563             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
564             recdblist.printutf8(opt)
565             pin = recpath + "/" + title + ".ts"
566             if re.search("d", opt):
567                 pin = recpath + "/" + title + ".m2v"
568                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
569                     paac2 = recpath + "/" + title + "_2.aac"
570                     pmp32 = recpath + "/" + title + "_2.mp3"
571                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
572                         tv2avi.dualaudio2sep(os.path.join(recpath, title+".ts"),"167")
573                 time.sleep(3)
574             elif re.search("5", opt):
575                 pin = recpath + "/" + title + ".m2v"
576                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
577                     paac2 = recpath + "/" + title + "_2.aac"
578                     pmp32 = recpath + "/" + title + "_2.mp3"
579                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
580                         tv2avi.pentaaudio2sep(os.path.join(recpath, title+".ts"))
581                 time.sleep(3)
582             elif re.search("b", opt):
583                 pin = recpath + "/" + title + ".m2v"
584                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
585                     paac2 = recpath + "/" + title + "_1.aac"
586                     pmp32 = recpath + "/" + title + "_1.mp3"
587                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
588                         tv2avi.singleaudio2sep(os.path.join(recpath, title+".ts"))
589                 time.sleep(3)
590             makeMP4=0
591             try:
592                 if configreader.getenv("make_mp4")=="1":
593                     makeMP4=1
594             except:
595                 ""
596             if re.search("m", opt):
597                 makeMP4=0
598             if re.search("4", opt):
599                 makeMP4=1
600             recdblist.printutf8(pin)
601             if not re.search("0", opt):
602                 if makeMP4==1:
603                     pout = recpath + "/" + title + ".mp4"
604                     tv2mp4.ts2mp4(pin, pout, opt)
605                 else:
606                     pout = recpath + "/" + title + ".mkv"
607                     tv2mkv.ts2mkv(pin, pout, opt)
608                 if re.search("8", opt) or re.search("9", opt):
609                     optt=opt
610                     optt=optt.replace("8","MW8")
611                     optt=optt.replace("9","MW9")
612                     poutt = recpath + "/" + "m_"+title + ".mp4"
613                     if re.search("d", opt) or re.search("5", opt):
614                         if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):
615                             shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))
616                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):
617                             shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))
618                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):
619                             shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))
620                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):
621                             shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))
622                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):
623                             shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))
624                     shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))
625                     tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)
626                     shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))
627             else:
628                 optt=opt
629                 optt=optt.replace("8","MW8")
630                 optt=optt.replace("9","MW9")
631                 poutt = recpath + "/" + "m_"+title + ".mp4"
632                 shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))
633                 if re.search("d", opt) or re.search("5", opt):
634                     if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):
635                         shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))
636                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):
637                         shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))
638                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):
639                         shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))
640                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):
641                         shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))
642                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):
643                         shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))
644                 tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)
645                 shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))
646             recdb.del_reckey(typetxting, title, chtxt, btime)
647             time.sleep(10)
648             if re.search("E", opt):
649                 try:
650                     if os.path.exists(os.path.join(recpath,title+".mp4")):
651                         shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
652                     elif os.path.exists(os.path.join(recpath,title+".mkv")):
653                         shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))
654                 except Exception, inst:
655                     errtxt1="move mkv/mp4 error."
656                     errtxt2=str(type(inst))+"\n"
657                     errtxt2=errtxt2+str(inst)
658                     recdblist.Commonlogex("Error", "type_encode_que(timerec.py)", errtxt1,errtxt2,log_level=200)
659                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
660             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
661             sys.exit()
662         else:
663             recdb.del_reckey(typetxtnow, title, chtxt, btime)
664             bt = bt + datetime.timedelta(seconds=600)
665             et = et + datetime.timedelta(seconds=600)
666             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
667             etime = et.strftime("%Y-%m-%d %H:%M:%S")
668             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
669             sys.exit()