OSDN Git Service

fix large number of bugs.
[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 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                     tv2mkv.avi2mkv(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"),opt)
179                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
180                     sys.exit()
181         elif task["type"] == recdblist.REC_AVI_TO_MP4:
182             if dt < 10 * 60:
183                 pid = os.fork()
184                 if pid > 0:#親プロセスの場合
185                     ""
186                 else:
187                     recdb.del_reckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)
188                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
189                     tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mp4"))
190                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
191                     sys.exit()
192         elif task["type"] == recdblist.REC_MKV_TO_MP4:
193             if dt < 10 * 60:
194                 pid = os.fork()
195                 if pid > 0:#親プロセスの場合
196                     ""
197                 else:
198                     recdb.del_reckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)
199                     recdb.rec_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
200                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
201                     recdb.del_reckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)
202                     sys.exit()
203     sys.exit()
204 def search_keyword(key):
205     tnow = datetime.datetime.now()
206     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
207     for k in key:
208         recdatum = epgdb.searchtime_auto(k,nows, "144")
209         for recdata in recdatum:
210             if recdata[1] != "":
211                 chtxtt = recdata[0]
212                 titlet = recdata[1]
213                 btimet = recdata[2]
214                 etimet = recdata[3]
215                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
216                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
217                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
218                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
219                 try:
220                     recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet)
221                 except Exception, inst:
222                     print "error occures in search_keyword"
223                     print type(inst)
224                     print inst
225 def type_reserve(typetxt,chtxt,title,bt,et,opt):
226     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
227     etime = et.strftime("%Y-%m-%d %H:%M:%S")
228     typetxtnow=typetxt
229     typetxtfinal=""
230     if typetxt==recdblist.REC_RESERVE:
231         typetxtfinal=recdblist.REC_FINAL_RESERVE
232     tnow = datetime.datetime.now()
233     dtt = bt-tnow
234     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
235     if (dt < 58 * 60 and dt > 30 * 60):
236         bctypet = chdb.chtxtsearch(chtxt)['bctype']
237         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
238         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
239         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
240         if dt1 < 60 * 60:
241             recdata = epgdb.searchtime2(title, btime, "5", chtxt)
242             chtxtn = recdata[0]
243             titlen = recdata[1]
244             btimen = recdata[2]
245             etimen = recdata[3]
246             exp = recdata[4]
247             longexp = recdata[5]
248             category=recdata[6]
249             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
250             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
251             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
252             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
253             if chtxt != "":
254                 try:
255                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
256                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
257                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
258                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
259                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
260                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
261                 except Exception, inst:
262                     print "Error happended in Oikake DB"
263                     print type(inst)
264                     print inst
265             else:
266                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
267         else:
268             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
269                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
270         sys.exit()
271     elif (dt <= 30 * 60 and dt > 20 * 60):
272         recdata = epgdb.searchtime2(title, btime, "5", chtxt)
273         chtxtn = recdata[0]
274         titlen = recdata[1]
275         btimen = recdata[2]
276         etimen = recdata[3]
277         exp = recdata[4]
278         longexp = recdata[5]
279         category=recdata[6]
280         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
281         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
282         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
283         etimen = et.strftime("%Y-%m-%d %H:%M:%S")
284         if chtxt != "":
285             try:
286                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
287                 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
288                 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
289                 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
290                 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
291                 recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)
292             except Exception, inst:
293                 print "Error happended in Oikake DB"
294                 print type(inst)
295                 print inst
296     elif dt <= 20 * 60:
297         try:
298             recdb.del_reckey(typetxtnow, title, chtxt, btime)
299             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
300         except Exception, inst:
301             print type(inst)
302             print inst
303 def type_final(typetxt,chtxt,title,bt,et,opt):
304     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
305     etime = et.strftime("%Y-%m-%d %H:%M:%S")
306     typetxtnow=typetxt
307     typetxting=""
308     typetxtdecque=""
309     if typetxt==recdblist.REC_FINAL_RESERVE:
310         typetxting=recdblist.REC_TS_RECORDING
311         typetxtdecque=recdblist.REC_TS_DECODE_QUE
312     tnow = datetime.datetime.now()
313     dtt = bt-tnow
314     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
315     print dt
316     if dt < 6 * 60 and dt > 0:
317         newtitle=title
318         recdb.del_reckey(typetxtnow, title, chtxt, btime)
319         testpath=[os.path.join(recpath,title+".ts.b25")]
320         testpath.append(os.path.join(recpath,title+".ts"))
321         testpath.append(os.path.join(recpath,title+".avi"))
322         testpath.append(os.path.join(recpath,title+".mkv"))
323         testpath.append(os.path.join(recpath,title+".log"))
324         tcheck=0
325         for ti in testpath:
326             if os.path.exists(ti):
327                 tcheck=tcheck+1
328         if re.search("N", opt) or tcheck>0:
329             newtitle=newtitle+u"_"+bt.strftime("%Y%m%d%H%M")
330         recdb.rec_reckey(typetxting, newtitle, chtxt, btime, etime, opt)
331         recdblist.printutf8(u"録画開始 "+newtitle+" "+btime+" "+etime)
332         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)
333         recdb.del_reckey(typetxting, newtitle, chtxt, btime)
334         if not re.search("R", opt):
335             tnow = datetime.datetime.now()
336             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
337             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
338             dt = tnow-bt
339             bt = tnow + datetime.timedelta(seconds=600)
340             et = et + dt + datetime.timedelta(seconds=600)
341             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
342             etime = et.strftime("%Y-%m-%d %H:%M:%S")
343             recdb.rec_reckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)
344         else:
345             shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
346             recdb.rec_reckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)
347         sys.exit()
348 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
349     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
350     etime = et.strftime("%Y-%m-%d %H:%M:%S")
351     typetxtnow=typetxt
352     typetxtres=""
353     if typetxt==recdblist.REC_KEYWORD:
354         typetxtres=recdblist.REC_RESERVE
355     tnow = datetime.datetime.now()
356     dtt = bt-tnow
357     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
358     print dt
359     if dt < 90 * 60:
360         recdata = epgdb.searchtime2(title, btime, deltatime, chtxt)
361         if recdata[1] != "":
362             chtxtt = recdata[0]
363             titlet = recdata[1]
364             btimet = recdata[2]
365             etimet = recdata[3]
366             exp = recdata[4]
367             longexp = recdata[5]
368             category=recdata[6]
369             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
370             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
371             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
372             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
373             #try:
374             recdb.del_reckey(typetxtnow, title, chtxt, btime)
375             recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
376             recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
377             auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
378             auto_rec.add_key("ALL", titlet,exp+" "+longexp)
379             recdblist.printutf8(u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet)
380             #except Exception, inst:
381             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")
382             #    recdblist.printutf8(type(inst))
383             #    recdblist.printutf8(inst)
384         else:
385             recdblist.printutf8("nothing match")
386
387 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
388     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
389     etime = et.strftime("%Y-%m-%d %H:%M:%S")
390     tnow = datetime.datetime.now()
391     dtt = bt-tnow
392     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
393     dd = datetime.timedelta(days=int(deltaday))
394     if dtt.days < 0:
395         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
396         bt = bt + dd
397         et = et + dd
398         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
399         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
400         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
401     elif dt < 120 * 60:
402         recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
403         recdb.del_reckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
404         bt = bt + dd
405         et = et + dd
406         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
407         etxt = et.strftime("%Y-%m-%d %H:%M:%S")
408         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
409
410
411 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
412     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
413     etime = et.strftime("%Y-%m-%d %H:%M:%S")
414     tnow = datetime.datetime.now()
415     dtt = bt-tnow
416     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
417     typetxtnow=typetxt
418     typetxting=""
419     typetxtmiss=""
420     typetxtencque=""
421     if typetxt== recdblist.REC_TS_DECODE_QUE:
422         typetxting=recdblist.REC_TS_DECODING
423         typetxtmiss=recdblist.REC_MISS_DECODE
424         typetxtencque=recdblist.REC_ENCODE_QUE
425     tnow = datetime.datetime.now()
426     dtt = bt-tnow
427     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
428     if dt < 10 * 60:
429         if status.getB25Decoding() < 2:
430             pin = recpath + "/" + title
431             recdb.del_reckey(typetxtnow, title, chtxt, btime)
432             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
433             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
434             recdb.del_reckey(typetxting, title, chtxt, btime)
435             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
436                 recdb.del_reckey(typetxting, title, chtxt, btime)
437                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
438             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
439             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
440             dt = et-bt
441             if not re.search("D", opt):
442                 tnow = datetime.datetime.now()
443                 bt = tnow + datetime.timedelta(seconds=600)
444                 et = bt + dt
445                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
446                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
447                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
448             else:
449                 if opt.rfind("d")>=0:
450                     shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
451                 elif opt.rfind("5")>=0:
452                     shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
453                 else:
454                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
455                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
456             if checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts") == 1:
457                 os.remove(recpath + "/" + title + ".ts.b25")
458         else:
459             recdb.del_reckey(typetxtnow, title, chtxt, btime)
460             bt = bt + datetime.timedelta(seconds=600)
461             et = et + datetime.timedelta(seconds=600)
462             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
463             etime = et.strftime("%Y-%m-%d %H:%M:%S")
464             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
465     sys.exit()
466
467 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
468     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
469     etime = et.strftime("%Y-%m-%d %H:%M:%S")
470     tnow = datetime.datetime.now()
471     dtt = bt-tnow
472     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
473     typetxtnow=typetxt
474     typetxting=""
475     typetxtfin=""
476     if typetxt==recdblist.REC_ENCODE_QUE:
477         typetxting=recdblist.REC_ENCODE_LOCAL
478         typetxtfin=recdblist.REC_FIN_LOCAL
479     if dt < 10 * 60:
480         if status.getEncoding() < int(configreader.getenv("enc_max")):
481             recdblist.printutf8(opt)
482             pin = recpath + "/" + title + ".ts"
483             if re.search("d", opt):
484                 pin = recpath + "/" + title + ".sa.avi"
485             if re.search("5", opt):
486                 pin = recpath + "/" + title + ".sa.avi"
487             #pout = recpath + "/" + title + ".avi"
488             pout = recpath + "/" + title + ".mkv"
489             recdblist.printutf8(pin)
490             #recdblist.printutf8(pin+":"+pout+":"+opt)
491             recdb.del_reckey(typetxtnow, title, chtxt, btime)
492             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
493             tv2mkv.ts2mkv(pin, pout, opt)
494             #tv2mp4.ts2mp4(pin, pout, opt)
495             #tv2avi.ts2avi(pin, pout, opt)
496             recdb.del_reckey(typetxting, title, chtxt, btime)
497             if re.search("E", opt):
498                 shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
499                 recdb.rec_reckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)
500             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
501             sys.exit()
502         else:
503             recdb.del_reckey(typetxtnow, title, chtxt, btime)
504             bt = bt + datetime.timedelta(seconds=600)
505             et = et + datetime.timedelta(seconds=600)
506             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
507             etime = et.strftime("%Y-%m-%d %H:%M:%S")
508             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
509             sys.exit()