OSDN Git Service

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