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 configreader
17 import epgdb
18 import rec10d
19 import recdb
20 import status
21 import tv2avi
22 import tv2mkv
23 import tv2mp4
24 import install
25 import recdblist
26 recpath = configreader.getpath('recpath')
27 movepath = configreader.getpath('move_destpath')
28 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
29 def task():
30     """
31     数分毎に実行されるタスク処理
32     予定によって子プロセスを生成し処理する。
33     """
34     try:
35         if rec10d.rec10db.select_installed_in_status()==0 or rec10d.rec10db.select_version_in_status()<recdblist.version:
36             install.install()
37     except:
38         install.install()
39     recdb.delete_old("24")
40     recdb.delete_old_auto_bayes("1")
41     recdb.delete_old_auto_keyword("1")
42     tasks = recdb.getnow("3")
43     inum = recdb.countRecNow_minutes("10")
44     recdblist.printutf8(u"rec10処理開始"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),verbose_level=800)
45     recdblist.printutf8(u"直近録画予約件数:" + str(inum) + u"BS/CS録画中件数:" + str(status.getBSCSRecording()) + u"TE録画中件数:" + str(status.getTERecording()) ,verbose_level=800)
46     encodenum=0
47     b25num=0
48     dnow=datetime.datetime.now()
49     if dnow.minute%10<5:
50         pid = os.fork()
51         if pid != 0:
52             ""
53         else:
54             for k in recdb.get_key():
55                 search_keyword(k)
56             sys.exit()
57     else:
58         pid = os.fork()
59         if pid!=0:
60             ""
61         else:
62             time.sleep(10)
63             auto_process.auto_check(recpath)
64             time.sleep(10)
65             auto_process.kill_dead_encode(recpath)
66             sys.exit()
67     update = chdb.update()
68     if len(update) > 0:
69         pid = os.fork()
70         if pid != 0:
71             ""
72         else:
73             i = 0
74             for bctype in update:
75                 recnum = 0
76                 if bctype.find('te') > -1:
77                     recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
78                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getTERecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_TE("10")),verbose_level=800)
79                     recnum = int(configreader.getenv("te_max")) -recnum
80                 else:
81                     recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
82                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getBSCSRecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_BSCS("10")),verbose_level=800)
83                     recnum = int(configreader.getenv("bscs_max")) -recnum
84                 if recnum >0 :
85                     recdblist.printutf8(str(update),verbose_level=750)
86                     rec10d.rec10db.update_status_by_bctype_epg_ch(bctype, "0")
87                     epgdb.updatebc(bctype)
88                     update = chdb.update()
89                     i = i + 1
90                 if i > 0:
91                     break
92             time.sleep(5)
93             auto_process.update_all_timeline_epg()
94             sys.exit()
95     else:
96         pid = os.fork()
97         if pid != 0:
98             ""
99         else:
100             auto_process.update_all_timeline_epg()
101             sys.exit()
102     for task in tasks:
103         typetxt = task["type"]
104         try:
105             chtxt = task['chtxt']
106         except:
107             chtxt = ""
108         try:
109             title = task['title']
110         except:
111             title = ""
112         try:
113             btime = task['btime']
114             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
115         except:
116             btime = ""
117             bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
118         try:
119             etime = task['etime']
120             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
121         except:
122             etime = ""
123             et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
124         try:
125             opt = task['opt']
126         except:
127             opt = ""
128         tnow = datetime.datetime.now()
129         dtt = bt-tnow
130         dt = dtt.days * 24 * 60 * 60 + dtt.seconds
131         if task["type"] == recdblist.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
132             pid = os.fork()
133             if pid != 0:#親プロセスの場合
134                 ""
135             else:#子プロセスの場合 アップデートを行って終了
136                 type_reserve(task["type"],chtxt,title,bt,et,opt)
137                 sys.exit()
138         elif task["type"] == recdblist.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
139             deltatime = task['deltatime']
140             pid = os.fork()
141             if pid != 0:#親プロセスの場合
142                 ""
143             else:#子プロセスの場合 アップデートを行って終了
144                 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
145                 sys.exit()
146         elif task["type"] == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
147             deltatime = task['deltatime']
148             deltaday = task['deltaday']
149             try:
150                 keyeverycounter=task['counter']
151             except:
152                 keyeverycounter=-1
153             pid = os.fork()
154             if pid != 0:#親プロセスの場合
155                 ""
156             else:#子プロセスの場合 アップデートを行って終了
157                 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday,keyeverycounter)
158                 sys.exit()
159         elif task["type"] == recdblist.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
160             pid = os.fork()
161             if pid != 0:#親プロセスの場合
162                 ""
163             else:#子プロセスの場合 アップデートを行って終了
164                 type_final(task["type"],chtxt, title, bt, et, opt)
165                 sys.exit()
166         elif task["type"] == recdblist.REC_TS_DECODE_QUE:
167             b25num=b25num+1
168             pid = os.fork()
169             if pid != 0:#親プロセスの場合
170                 ""
171             else:#子プロセスの場合 アップデートを行って終了
172                 time.sleep(5*b25num)
173                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
174                 sys.exit()
175         elif task["type"] == recdblist.REC_ENCODE_QUE:
176             encodenum=encodenum+1
177             pid = os.fork()
178             if pid != 0:#親プロセスの場合
179                 ""
180             else:#子プロセスの場合 アップデートを行って終了
181                 time.sleep(5*encodenum)
182                 type_encode_que(task["type"],chtxt, title, bt, et, opt)
183                 sys.exit()
184         elif task["type"] == recdblist.REC_AVI_TO_MKV:
185             if dt < 10 * 60:
186                 pid = os.fork()
187                 if pid > 0:#親プロセスの場合
188                     ""
189                 else:
190                     makeMP4=0
191                     try:
192                         if configreader.getenv("make_mp4")==1:
193                             makeMP4=1
194                     except:
195                         ""
196                     if re.search("m", opt):
197                         makeMP4=0
198                     if re.search("4", opt):
199                         makeMP4=1
200                     recdb.del_reckey(recdblist.REC_AVI_TO_MKV, title, chtxt, btime)
201                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
202                     if makeMP4==1:
203                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)
204                     else:
205                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)
206                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
207                     sys.exit()
208         elif task["type"] == recdblist.REC_AVI_TO_MP4:
209             if dt < 10 * 60:
210                 pid = os.fork()
211                 if pid > 0:#親プロセスの場合
212                     ""
213                 else:
214                     makeMP4=0
215                     try:
216                         if configreader.getenv("make_mp4")==1:
217                             makeMP4=1
218                     except:
219                         ""
220                     if re.search("m", opt):
221                         makeMP4=0
222                     if re.search("4", opt):
223                         makeMP4=1
224                     recdb.del_reckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)
225                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
226                     if makeMP4==1:
227                         tv2mp4.ts2mp4(pin, pout, opt)
228                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)
229                     else:
230                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)
231                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
232                     sys.exit()
233         elif task["type"] == recdblist.REC_MKV_TO_MP4:
234             if dt < 10 * 60:
235                 pid = os.fork()
236                 if pid > 0:#親プロセスの場合
237                     ""
238                 else:
239                     recdb.del_reckey(recdblist.REC_MKV_TO_MP4, title, chtxt, btime)
240                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
241                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
242                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
243                     sys.exit()
244     sys.exit()
245 def search_keyword(key):
246     tnow = datetime.datetime.now()
247     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
248     for k in key:
249         recdatum = epgdb.searchtime_auto(k,nows, "144")
250         for recdata in recdatum:
251             if recdata[1] != "":
252                 chtxtt = recdata[0]
253                 titlet = recdata[1]
254                 btimet = recdata[2]
255                 etimet = recdata[3]
256                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
257                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
258                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
259                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
260                 if status.getSettings_auto_jbk()==1:
261                     topt=status.getSettings_auto_opt()
262                     try:
263                         maxnum=0
264                         if len(ch['ch'])>2:
265                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[1]
266                             maxnum=int(configreader.getenv("bscs_max"))-maxnum
267                         else:
268                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[0]
269                             maxnum=int(configreader.getenv("te_max"))-maxnum
270                         if maxnum>0:
271                             topt=status.getSettings_auto_opt()
272                             recdb.recreserv(titlet,chtxtt, btimet, etimet,topt)
273                     except Exception, inst:
274                         recdblist.Commonlogex("Error", "search_keyword_auto_jbk(timerec.py)", str(type(inst)),str(inst),log_level=200)
275                 else:
276                     try:
277                         recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet)
278                     except Exception, inst:
279                         recdblist.Commonlogex("Error", "search_keyword(timerec.py)", str(type(inst)),str(inst),log_level=200)
280 def type_reserve(typetxt,chtxt,title,bt,et,opt):
281     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
282     etime = et.strftime("%Y-%m-%d %H:%M:%S")
283     typetxtnow=typetxt
284     typetxtfinal=""
285     if typetxt==recdblist.REC_RESERVE:
286         typetxtfinal=recdblist.REC_FINAL_RESERVE
287     tnow = datetime.datetime.now()
288     dtt = bt-tnow
289     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
290     if (dt < 58 * 60 and dt > 30 * 60):
291         bctypet = chdb.chtxtsearch(chtxt)['bctype']
292         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
293         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
294         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
295         if dt1 < 60 * 60:
296             recdata = epgdb.searchtime2(title, btime, "5", chtxt)
297             chtxtn = recdata[0]
298             titlen = recdata[1]
299             btimen = recdata[2]
300             etimen = recdata[3]
301             exp = recdata[4]
302             longexp = recdata[5]
303             category=recdata[6]
304             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
305             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
306             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
307             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
308             if chtxt != "":
309                 try:
310                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
311                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
312                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
313                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
314                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
315                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
316                 except Exception, inst:
317                     recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
318             else:
319                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
320         else:
321             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
322                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
323         sys.exit()
324     elif (dt <= 30 * 60 and dt > 20 * 60):
325         recdata = epgdb.searchtime2(title, btime, "5", chtxt)
326         chtxtn = recdata[0]
327         titlen = recdata[1]
328         btimen = recdata[2]
329         etimen = recdata[3]
330         exp = recdata[4]
331         longexp = recdata[5]
332         category=recdata[6]
333         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
334         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
335         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
336         etimen = et.strftime("%Y-%m-%d %H:%M:%S")
337         if chtxt != "":
338             try:
339                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
340                 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
341                 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
342                 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
343                 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
344                 #recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
345                 recdblist.Commonlogex(u"通常", "Oikake (timerec.py)",u"追いかけ機能実行中",u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen,log_level=500)
346             except Exception, inst:
347                 recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
348     elif dt <= 20 * 60:
349         try:
350             recdb.del_reckey(typetxtnow, title, chtxt, btime)
351             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
352         except Exception, inst:
353             recdblist.Commonlogex("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst),log_level=200)
354 def type_final(typetxt,chtxt,title,bt,et,opt):
355     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
356     etime = et.strftime("%Y-%m-%d %H:%M:%S")
357     typetxtnow=typetxt
358     typetxting=""
359     typetxtdecque=""
360     if typetxt==recdblist.REC_FINAL_RESERVE:
361         typetxting=recdblist.REC_TS_RECORDING
362         typetxtdecque=recdblist.REC_TS_DECODE_QUE
363     tnow = datetime.datetime.now()
364     dtt = bt-tnow
365     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
366     if dt < 6 * 60 and dt > 0:
367         newtitle=title
368         recdb.del_reckey(typetxtnow, title, chtxt, btime)
369         testpath=[os.path.join(recpath,title+".ts.b25")]
370         testpath.append(os.path.join(recpath,title+".ts"))
371         testpath.append(os.path.join(recpath,title+".avi"))
372         testpath.append(os.path.join(recpath,title+".mp4"))
373         testpath.append(os.path.join(recpath,title+".log"))
374         tcheck=0
375         for ti in testpath:
376             if os.path.exists(ti):
377                 tcheck=tcheck+1
378         if re.search("N", opt) or tcheck>0:
379             iff=""
380             try:
381                 iff=u"("+configreader.getenv("iff")+u")_"
382             except:
383                 iff=""
384             newtime=bt
385             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")
386         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
387         recdblist.Commonlogex(u"通常","timerec.py",u"録画開始 "+newtitle+" "+btime+" "+etime,"",log_level=500)
388         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
389         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
390         if not re.search("R", opt):
391             tnow = datetime.datetime.now()
392             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
393             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
394             dt = tnow-bt
395             bt = tnow + datetime.timedelta(seconds=600)
396             et = et + dt + datetime.timedelta(seconds=600)
397             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
398             etime = et.strftime("%Y-%m-%d %H:%M:%S")
399             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
400         else:
401             try:
402                 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
403             except:
404                 ""
405             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
406         sys.exit()
407 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
408     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
409     etime = et.strftime("%Y-%m-%d %H:%M:%S")
410     typetxtnow=typetxt
411     typetxtres=""
412     if typetxt==recdblist.REC_KEYWORD:
413         typetxtres=recdblist.REC_RESERVE
414     tnow = datetime.datetime.now()
415     dtt = bt-tnow
416     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
417     recdblist.printutf8(str(dt), verbose_level=800)
418     if dt < 90 * 60:
419         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
420         if recdata[1] != "":
421             chtxtt = recdata[0]
422             titlet = recdata[1]
423             btimet = recdata[2]
424             etimet = recdata[3]
425             exp = recdata[4]
426             longexp = recdata[5]
427             category=recdata[6]
428             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
429             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
430             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
431             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
432             #try:
433             recdb.del_reckey(typetxtnow, title, chtxt, btime)
434             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
435             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
436             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
437             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
438             recdblist.Commonlogex(u"通常","timerec.py",u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet,"",log_level=500)
439             #except Exception, inst:
440             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
441             #    recdblist.printutf8(type(inst))
442             #    recdblist.printutf8(inst)
443         else:
444             recdblist.printutf8("nothing match")
445 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday,counter):
446     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
447     etime = et.strftime("%Y-%m-%d %H:%M:%S")
448     tnow = datetime.datetime.now()
449     dtt = bt-tnow
450     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
451     dd = datetime.timedelta(days=int(deltaday))
452     if dtt.days < 0:
453         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
454         bt = bt + dd
455         et = et + dd
456         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
457         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
458         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
459     elif dt < 120 * 60:
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         if counter>0:
466             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,counter-1)
467         elif counter==-1:
468             recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday,-1)
469         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
470         if recdata[1] != "":
471             chtxtt = recdata[0]
472             titlet = recdata[1]
473             btimet = recdata[2]
474             etimet = recdata[3]
475             exp = recdata[4]
476             longexp = recdata[5]
477             category=recdata[6]
478             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
479             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
480             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
481             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
482             #try:
483             recdb.keyreserv(titlet, chtxtt, btimet, etimet, deltatime, opt)
484         else:
485             recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
486 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
487     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
488     etime = et.strftime("%Y-%m-%d %H:%M:%S")
489     tnow = datetime.datetime.now()
490     dtt = bt-tnow
491     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
492     typetxtnow=typetxt
493     typetxting=""
494     typetxtmiss=""
495     typetxtencque=""
496     if typetxt== recdblist.REC_TS_DECODE_QUE:
497         typetxting=recdblist.REC_TS_DECODING
498         typetxtmiss=recdblist.REC_MISS_DECODE
499         typetxtencque=recdblist.REC_ENCODE_QUE
500     tnow = datetime.datetime.now()
501     dtt = bt-tnow
502     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
503     if dt < 10 * 60:
504         if status.getB25Decoding() < 2:
505             pin = recpath + "/" + title
506             recdb.del_reckey(typetxtnow, title, chtxt, btime)
507             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
508             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
509             recdb.del_reckey(typetxting, title, chtxt, btime)
510             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
511                 recdb.del_reckey(typetxting, title, chtxt, btime)
512                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
513             else:
514                 auto_process.deltmpfile(recpath, title, ".ts")
515             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
516             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
517             dt = et-bt
518             if not re.search("D", opt):
519                 tnow = datetime.datetime.now()
520                 bt = tnow + datetime.timedelta(seconds=600)
521                 et = bt + dt
522                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
523                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
524                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
525             else:
526                 try:
527                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
528                     time.sleep(5)
529                     if os.path.getsize(os.path.join(recpath,title+".ts"))==os.path.getsize(os.path.join(movepath,title+".ts")):
530                         os.remove(os.path.join(recpath,title+".ts"))
531                 except Exception, inst:
532                     errtxt1="move ts error.\n"
533                     errtxt2=str(type(inst))+"\n"
534                     errtxt2=errtxt2+str(inst)
535                     recdblist.Commonlogex("Error", "type_decode_que(timerec.py)", errtxt1,errtxt2,log_level=200)
536                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
537         else:
538             recdb.del_reckey(typetxtnow, title, chtxt, btime)
539             bt = bt + datetime.timedelta(seconds=600)
540             et = et + datetime.timedelta(seconds=600)
541             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
542             etime = et.strftime("%Y-%m-%d %H:%M:%S")
543             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
544     sys.exit()
545
546 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
547     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
548     etime = et.strftime("%Y-%m-%d %H:%M:%S")
549     tnow = datetime.datetime.now()
550     dtt = bt-tnow
551     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
552     typetxtnow=typetxt
553     typetxting=""
554     typetxtfin=""
555     if typetxt==recdblist.REC_ENCODE_QUE:
556         typetxting=recdblist.REC_ENCODE_LOCAL
557         typetxtfin=recdblist.REC_FIN_LOCAL
558     if dt < 10 * 60:
559         if status.getEncoding() < int(configreader.getenv("enc_max")):
560             recdb.del_reckey(typetxtnow, title, chtxt, btime)
561             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
562             recdblist.printutf8(opt)
563             pin = recpath + "/" + title + ".ts"
564             if re.search("d", opt):
565                 pin = recpath + "/" + title + ".m2v"
566                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
567                     paac2 = recpath + "/" + title + "_2.aac"
568                     pmp32 = recpath + "/" + title + "_2.mp3"
569                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
570                         tv2avi.dualaudio2sep(os.path.join(recpath, title+".ts"),"167")
571                 time.sleep(3)
572             elif re.search("5", opt):
573                 pin = recpath + "/" + title + ".m2v"
574                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
575                     paac2 = recpath + "/" + title + "_2.aac"
576                     pmp32 = recpath + "/" + title + "_2.mp3"
577                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
578                         tv2avi.pentaaudio2sep(os.path.join(recpath, title+".ts"))
579                 time.sleep(3)
580             elif re.search("b", opt):
581                 pin = recpath + "/" + title + ".m2v"
582                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:
583                     paac2 = recpath + "/" + title + "_1.aac"
584                     pmp32 = recpath + "/" + title + "_1.mp3"
585                     if not os.path.exists(paac2) and not os.path.exists(pmp32):
586                         tv2avi.singleaudio2sep(os.path.join(recpath, title+".ts"))
587                 time.sleep(3)
588             makeMP4=0
589             try:
590                 if configreader.getenv("make_mp4")=="1":
591                     makeMP4=1
592             except:
593                 ""
594             if re.search("m", opt):
595                 makeMP4=0
596             if re.search("4", opt):
597                 makeMP4=1
598             recdblist.printutf8(pin)
599             if not re.search("0", opt):
600                 if makeMP4==1:
601                     pout = recpath + "/" + title + ".mp4"
602                     tv2mp4.ts2mp4(pin, pout, opt)
603                 else:
604                     pout = recpath + "/" + title + ".mkv"
605                     tv2mkv.ts2mkv(pin, pout, opt)
606                 if re.search("8", opt) or re.search("9", opt):
607                     optt=opt
608                     optt=optt.replace("8","MW8")
609                     optt=optt.replace("9","MW9")
610                     poutt = recpath + "/" + "m_"+title + ".mp4"
611                     if re.search("d", opt) or re.search("5", opt):
612                         if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):
613                             shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))
614                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):
615                             shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))
616                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):
617                             shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))
618                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):
619                             shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))
620                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):
621                             shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))
622                     shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))
623                     tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)
624                     shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))
625             else:
626                 optt=opt
627                 optt=optt.replace("8","MW8")
628                 optt=optt.replace("9","MW9")
629                 poutt = recpath + "/" + "m_"+title + ".mp4"
630                 shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))
631                 if re.search("d", opt) or re.search("5", opt):
632                     if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):
633                         shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))
634                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):
635                         shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))
636                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):
637                         shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))
638                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):
639                         shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))
640                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):
641                         shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))
642                 tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)
643                 shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))
644             recdb.del_reckey(typetxting, title, chtxt, btime)
645             time.sleep(10)
646             if re.search("E", opt):
647                 try:
648                     if os.path.exists(os.path.join(recpath,title+".mp4")):
649                         shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
650                     elif os.path.exists(os.path.join(recpath,title+".mkv")):
651                         shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))
652                 except Exception, inst:
653                     errtxt1="move mkv/mp4 error."
654                     errtxt2=str(type(inst))+"\n"
655                     errtxt2=errtxt2+str(inst)
656                     recdblist.Commonlogex("Error", "type_encode_que(timerec.py)", errtxt1,errtxt2,log_level=200)
657                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
658             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
659             sys.exit()
660         else:
661             recdb.del_reckey(typetxtnow, title, chtxt, btime)
662             bt = bt + datetime.timedelta(seconds=600)
663             et = et + datetime.timedelta(seconds=600)
664             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
665             etime = et.strftime("%Y-%m-%d %H:%M:%S")
666             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
667             sys.exit()