OSDN Git Service

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