OSDN Git Service

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