OSDN Git Service

implement auto prcess suggestion system.
[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 recpath = configreader.getpath('recpath')
26 movepath = configreader.getpath('move_destpath')
27 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
28 def task():
29     """
30     数分毎に実行されるタスク処理
31     予定によって子プロセスを生成し処理する。
32     """
33     recdb.delete_old("24")
34     tasks = recdb.getnow("2")
35     inum = recdb.countRecNow_minutes("10")
36     print "番組表更新処理"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
37     print "inum:" + str(inum) + "bscsrec:" + str(status.getBSCSRecording()) + "terec:" + str(status.getTERecording()) 
38     encodenum=0
39     b25num=0
40     dnow=datetime.datetime.now()
41     if dnow.hour==12 and dnow.minute<5 :
42         pid = os.fork()
43         if pid != 0:
44             time.sleep(1)
45         else:
46             for k in recdb.get_key():
47                 search_keyword(k)
48             sys.exit()
49     else:
50         pid = os.fork()
51         if pid!=0:
52             time.sleep(1)
53         else:
54             auto_process.auto_check(recpath)
55             sys.exit()
56     update = chdb.update()
57     print update
58     if len(update) > 0:
59         pid = os.fork()
60         if pid != 0:
61             time.sleep(1)
62         else:
63             i = 0
64             for bctype in update:
65                 recnum = 0
66                 if bctype.find('te') > -1:
67                     recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
68                     print bctype + "//ing:" + str(status.getTERecording()) + ":task:" + str(recdb.countRecNow_minutes_TE("10"))
69                 else:
70                     recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
71                     print bctype + "//ing:" + str(status.getBSCSRecording()) + ":task:" + str(recdb.countRecNow_minutes_BSCS("10"))
72                 if recnum < 2:
73                     print update
74                     rec10d.rec10db.update_status_by_bctype_chdata(bctype, "0")
75                     epgdb.updatebc(bctype)
76                     update = chdb.update()
77                     i = i + 1
78                 if i > 0:
79                     break
80             sys.exit()
81     for task in tasks:
82         #print task
83         typetxt = task["type"]
84         try:
85             chtxt = task['chtxt']
86         except:
87             chtxt = ""
88         try:
89             title = task['title']
90         except:
91             title = ""
92         try:
93             btime = task['btime']
94             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
95         except:
96             btime = ""
97             bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
98         try:
99             etime = task['etime']
100             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
101         except:
102             etime = ""
103             et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
104         try:
105             opt = task['opt']
106         except:
107             opt = ""
108         tnow = datetime.datetime.now()
109         dtt = bt-tnow
110         dt = dtt.days * 24 * 60 * 60 + dtt.seconds
111         if task["type"] == recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
112             pid = os.fork()
113             if pid != 0:#親プロセスの場合
114                 ""
115             else:#子プロセスの場合 アップデートを行って終了
116                 type_reserve(task["type"],chtxt,title,bt,et,opt)
117         elif task["type"] == recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
118             deltatime = task['deltatime']
119             pid = os.fork()
120             if pid != 0:#親プロセスの場合
121                 ""
122             else:#子プロセスの場合 アップデートを行って終了
123                 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
124                 sys.exit()
125         elif task["type"] == recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
126             deltatime = task['deltatime']
127             deltaday = task['deltaday']
128             pid = os.fork()
129             if pid != 0:#親プロセスの場合
130                 ""
131             else:#子プロセスの場合 アップデートを行って終了
132                 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday)
133                 sys.exit()
134         elif task["type"] == recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
135             pid = os.fork()
136             if pid != 0:#親プロセスの場合
137                 ""
138             else:#子プロセスの場合 アップデートを行って終了
139                 type_final(task["type"],chtxt, title, bt, et, opt)
140                 sys.exit()
141         elif task["type"] == recdb.REC_TS_DECODE_QUE:
142             b25num=b25num+1
143             pid = os.fork()
144             if pid != 0:#親プロセスの場合
145                 ""
146             else:#子プロセスの場合 アップデートを行って終了
147                 time.sleep(5*b25num)
148                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
149                 sys.exit()
150         elif task["type"] == recdb.REC_ENCODE_QUE:
151             encodenum=encodenum+1
152             pid = os.fork()
153             if pid != 0:#親プロセスの場合
154                 ""
155             else:#子プロセスの場合 アップデートを行って終了
156                 time.sleep(5*encodenum)
157                 type_encode_que(task["type"],chtxt, title, bt, et, opt)
158                 sys.exit()
159         elif task["type"] == recdb.REC_AVI_TO_MKV:
160             if dt < 10 * 60:
161                 pid = os.fork()
162                 if pid > 0:#親プロセスの場合
163                     ""
164                 else:
165                     recdb.del_reckey(recdb.REC_AVI_TO_MKV, title, chtxt, btime)
166                     recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
167                     tv2mkv.avi2mkv(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"))
168                     recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
169                     sys.exit()
170         elif task["type"] == recdb.REC_AVI_TO_MP4:
171             if dt < 10 * 60:
172                 pid = os.fork()
173                 if pid > 0:#親プロセスの場合
174                     ""
175                 else:
176                     recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
177                     recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
178                     tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mp4"))
179                     recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
180                     sys.exit()
181         elif task["type"] == recdb.REC_MKV_TO_MP4:
182             if dt < 10 * 60:
183                 pid = os.fork()
184                 if pid > 0:#親プロセスの場合
185                     ""
186                 else:
187                     recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
188                     recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
189                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
190                     recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
191                     sys.exit()
192         elif task["type"] == recdb.REC_AUTO_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
193             deltatime = "24"
194             if dt < 90 * 60:
195                 recdatum = epgdb.searchtime_auto(title.decode('utf-8'), btime, deltatime, chtxt)
196                 for recdata in recdatum:
197                     if recdata[1] != "":
198                         chtxtt = recdata[0]
199                         titlet = recdata[1]
200                         btimet = recdata[2]
201                         etimet = recdata[3]
202                         exp = recdata[4]
203                         longexp = recdata[5]
204                         category=recdata[6]
205                         btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
206                         ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
207                         btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
208                         etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
209                         try:
210                             recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet, opt)
211                         except Exception, inst:
212                             print type(inst)
213                             print inst
214                 dd = datetime.timedelta(days=1)
215                 bt = bt + dd
216                 et = et + dd
217                 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
218                 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
219                 try:
220                     recdb.del_reckey(recdb.REC_AUTO_KEYWORD, title, chtxt, btime)
221                     recdb.auto_keyreserv(title, chtxt, btxt, etxt, "24", opt)
222                 except Exception, inst:
223                     print type(inst)
224                     print inst
225         elif task["type"] == recdb.REC_MOVE_AFTER_RECORD:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
226             pid = os.fork()
227             if pid != 0:#親プロセスの場合
228                 ""
229             else:#子プロセスの場合 アップデートを行って終了
230                 type_reserve(task["type"],chtxt,title,bt,et,opt)
231                 sys.exit()
232         elif task["type"] == recdb.REC_MOVE_AFTER_DECODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
233             pid = os.fork()
234             if pid != 0:#親プロセスの場合
235                 ""
236             else:#子プロセスの場合 アップデートを行って終了
237                 type_reserve(task["type"],chtxt,title,bt,et,opt)
238                 sys.exit()
239         elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
240             pid = os.fork()
241             if pid != 0:#親プロセスの場合
242                 ""
243             else:#子プロセスの場合 アップデートを行って終了
244                 type_reserve(task["type"],chtxt,title,bt,et,opt)
245                 sys.exit()
246         elif task["type"] == recdb.REC_MOVE_AFTER_RECORD_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
247             pid = os.fork()
248             if pid != 0:#親プロセスの場合
249                 ""
250             else:#子プロセスの場合 アップデートを行って終了
251                 type_final(task["type"],chtxt, title, bt, et, opt)
252                 sys.exit()
253         elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
254             pid = os.fork()
255             if pid != 0:#親プロセスの場合
256                 ""
257             else:#子プロセスの場合 アップデートを行って終了
258                 type_final(task["type"],chtxt, title, bt, et, opt)
259                 sys.exit()
260         elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
261             pid = os.fork()
262             if pid != 0:#親プロセスの場合
263                 ""
264             else:#子プロセスの場合 アップデートを行って終了
265                 type_final(task["type"],chtxt, title, bt, et, opt)
266                 sys.exit()
267         elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
268             b25num=b25num+1
269             pid = os.fork()
270             if pid != 0:#親プロセスの場合
271                 ""
272             else:#子プロセスの場合 アップデートを行って終了
273                 time.sleep(5*b25num)
274                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
275                 sys.exit()
276         elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
277             b25num=b25num+1
278             pid = os.fork()
279             if pid != 0:#親プロセスの場合
280                 ""
281             else:#子プロセスの場合 アップデートを行って終了
282
283                 time.sleep(5*b25num)
284                 type_decode_que(task["type"],chtxt, title, bt, et, opt)
285                 sys.exit()
286         elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
287             encodenum=encodenum+1
288             pid = os.fork()
289             if pid != 0:#親プロセスの場合
290                 ""
291             else:#子プロセスの場合 アップデートを行って終了
292                 time.sleep(5*encodenum)
293                 type_encode_que(task["type"],chtxt, title, bt, et, opt)
294                 sys.exit()
295     sys.exit()
296 def search_keyword(key):
297     tnow = datetime.datetime.now()
298     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
299     for k in key:
300         recdatum = epgdb.searchtime_auto(k.decode('utf-8'),nows, "144")
301         for recdata in recdatum:
302             if recdata[1] != "":
303                 chtxtt = recdata[0]
304                 titlet = recdata[1]
305                 btimet = recdata[2]
306                 etimet = recdata[3]
307                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
308                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
309                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
310                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
311                 try:
312                     recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet,"")
313                 except Exception, inst:
314                     print type(inst)
315                     print inst
316 def type_reserve(typetxt,chtxt,title,bt,et,opt):
317     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
318     etime = et.strftime("%Y-%m-%d %H:%M:%S")
319     typetxtnow=typetxt
320     typetxtfinal=""
321     if typetxt==recdb.REC_RESERVE:
322         typetxtfinal=recdb.REC_FINAL_RESERVE
323     elif typetxt==recdb.REC_MOVE_AFTER_DECODE:
324         typetxtfinal=recdb.REC_MOVE_AFTER_DECODE_FINAL
325     elif typetxt==recdb.REC_MOVE_AFTER_RECORD:
326         typetxtfinal=recdb.REC_MOVE_AFTER_RECORD_FINAL
327     elif typetxt==recdb.REC_MOVE_AFTER_ENCODE:
328         typetxtfinal=recdb.REC_MOVE_AFTER_ENCODE_FINAL
329     tnow = datetime.datetime.now()
330     dtt = bt-tnow
331     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
332     if (dt < 58 * 60 and dt > 20 * 60):
333         bctypet = chdb.chtxtsearch(chtxt)['bctype']
334         chdatat = rec10d.rec10db.select_by_bctype_chdata(bctypet)
335         dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
336         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
337         if dt1 < 60 * 60:
338             recdata = epgdb.searchtime2(title.decode('utf-8'), btime, "5", chtxt)
339             chtxtn = recdata[0]
340             titlen = recdata[1]
341             btimen = recdata[2]
342             etimen = recdata[3]
343             exp = recdata[4]
344             longexp = recdata[5]
345             category=recdata[6]
346             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
347             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
348             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
349             etimen = et.strftime("%Y-%m-%d %H:%M:%S")
350             if chtxt != "":
351                 try:
352                     recdb.del_reckey(typetxtnow, title, chtxt, btime)
353                     recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
354                     recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
355                     auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
356                     auto_rec.add_key("ALL", titlen,exp+" "+longexp)
357                     print "Oikake "+title+" : "+titlen+" "+btimen+" "+etimen
358                 except Exception, inst:
359                     print "Error happended in Oikake DB"
360                     print type(inst)
361                     print inst
362             else:
363                 print "nothing match"
364         else:
365             if rec10d.rec10db.select_by_bctype_chdata(bctypet)[0][6] != "0":
366                 rec10d.rec10db.update_status_by_bctype_chdata(bctypet, "3")
367         sys.exit()
368     elif dt <= 20 * 60:
369         try:
370             recdb.del_reckey(typetxtnow, title, chtxt, btime)
371             recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
372         except Exception, inst:
373             print type(inst)
374             print inst
375 def type_final(typetxt,chtxt,title,bt,et,opt):
376     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
377     etime = et.strftime("%Y-%m-%d %H:%M:%S")
378     typetxtnow=typetxt
379     typetxting=""
380     typetxtdecque=""
381     if typetxt==recdb.REC_FINAL_RESERVE:
382         typetxting=recdb.REC_TS_RECORDING
383         typetxtdecque=recdb.REC_TS_DECODE_QUE
384     elif typetxt==recdb.REC_MOVE_AFTER_DECODE_FINAL:
385         typetxting=recdb.REC_MOVE_AFTER_DECODE_RECORDING
386         typetxtdecque=recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE
387     elif typetxt==recdb.REC_MOVE_AFTER_RECORD_FINAL:
388         typetxting=recdb.REC_MOVE_AFTER_RECORD_RECORDING
389         typetxtdecque=""
390     elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_FINAL:
391         typetxting=recdb.REC_MOVE_AFTER_ENCODE_RECORDING
392         typetxtdecque=recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE
393     tnow = datetime.datetime.now()
394     dtt = bt-tnow
395     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
396     print dt
397     if dt < 6 * 60 and dt > 0:
398         recdb.del_reckey(typetxtnow, title, chtxt, btime)
399         recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
400         print "録画開始 "+title+" "+btime+" "+etime
401         ttitle=title
402         #print title
403         testpath=[os.path.join(recpath,title+".ts.b25")]
404         testpath.append(os.path.join(recpath,title+".ts"))
405         testpath.append(os.path.join(recpath,title+".avi"))
406         testpath.append(os.path.join(recpath,title+".mkv"))
407         testpath.append(os.path.join(recpath,title+".log"))
408         tcheck=0
409         for ti in testpath:
410             if os.path.exists(ti):
411                 tcheck=tcheck+1
412         if tcheck>0:
413             ttitle=title+"_"+datetime.datetime.now().strftime("%Y%m%d%H%M")
414         tv2avi.timetv2b25(recpath + "/" + ttitle + ".avi", chtxt, btime, etime, opt)
415         recdb.del_reckey(typetxting, title, chtxt, btime)
416         if typetxtdecque != "":
417             tnow = datetime.datetime.now()
418             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
419             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
420             dt = tnow-bt
421             bt = tnow + datetime.timedelta(seconds=600)
422             et = et + dt + datetime.timedelta(seconds=600)
423             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
424             etime = et.strftime("%Y-%m-%d %H:%M:%S")
425             recdb.rec_reckey(typetxtdecque, ttitle, chtxt, btime, etime, opt)
426         else:
427             shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
428         sys.exit()
429 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
430     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
431     etime = et.strftime("%Y-%m-%d %H:%M:%S")
432     typetxtnow=typetxt
433     typetxtres=""
434     if typetxt==recdb.REC_KEYWORD:
435         typetxtres=recdb.REC_RESERVE
436     tnow = datetime.datetime.now()
437     dtt = bt-tnow
438     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
439     print dt
440     if dt < 90 * 60:
441         recdata = epgdb.searchtime2(title.decode('utf-8'), btime, deltatime, chtxt)
442         if recdata[1] != "":
443             chtxtt = recdata[0]
444             titlet = recdata[1]
445             btimet = recdata[2]
446             etimet = recdata[3]
447             exp = recdata[4]
448             longexp = recdata[5]
449             category=recdata[6]
450             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
451             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
452             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
453             etimet = et.strftime("%Y-%m-%d %H:%M:%S")
454             try:
455                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
456                 recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
457                 recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
458                 auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
459                 auto_rec.add_key("ALL", titlet,exp+" "+longexp)
460                 print "key "+title+" : "+titlet+" "+btimet+" "+etimet
461             except Exception, inst:
462                 print "Error happened in REC_KEYWORD DB"
463                 print type(inst)
464                 print inst
465         else:
466             print "nothing match"
467
468 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
469     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
470     etime = et.strftime("%Y-%m-%d %H:%M:%S")
471     tnow = datetime.datetime.now()
472     dtt = bt-tnow
473     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
474     dd = datetime.timedelta(days=int(deltaday))
475     if dtt.days < 0:
476         recdb.del_reckey(recdb.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         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
482     elif dt < 120 * 60:
483         recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
484         recdb.del_reckey(recdb.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         recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
490
491
492 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
493     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
494     etime = et.strftime("%Y-%m-%d %H:%M:%S")
495     tnow = datetime.datetime.now()
496     dtt = bt-tnow
497     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
498     typetxtnow=typetxt
499     typetxting=""
500     typetxtmiss=""
501     typetxtencque=""
502     if typetxt== recdb.REC_TS_DECODE_QUE:
503         typetxting=recdb.REC_TS_DECODING
504         typetxtmiss=recdb.REC_MISS_DECODE
505         typetxtencque=recdb.REC_ENCODE_QUE
506     elif typetxt== recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
507         typetxting=recdb.REC_MOVE_AFTER_DECODE_DECODING
508         typetxtmiss=recdb.REC_MISS_DECODE
509         typetxtencque=""
510     elif typetxt== recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
511         typetxting=recdb.REC_MOVE_AFTER_ENCODE_DECODING
512         typetxtmiss=recdb.REC_MISS_DECODE
513         typetxtencque=recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE
514     tnow = datetime.datetime.now()
515     dtt = bt-tnow
516     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
517     if dt < 10 * 60:
518         if status.getB25Decoding() < 2:
519             pin = recpath + "/" + title
520             recdb.del_reckey(typetxtnow, title, chtxt, btime)
521             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
522             tv2avi.b252ts(pin, chtxt, btime, etime, opt)
523             recdb.del_reckey(typetxting, title, chtxt, btime)
524             if not os.access(recpath + "/" + title + ".ts", os.F_OK):
525                 recdb.del_reckey(typetxting, title, chtxt, btime)
526                 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
527             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
528             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
529             dt = et-bt
530             if not typetxtencque=="":
531                 tnow = datetime.datetime.now()
532                 bt = tnow + datetime.timedelta(seconds=900)
533                 et = bt + dt
534                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
535                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
536                 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
537             else:
538                 if opt.rfind("d")>=0:
539                     shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
540                 elif opt.rfind("5")>=0:
541                     shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
542                 else:
543                     shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
544             #print checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts")
545             if checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts") == 1:
546                 os.remove(recpath + "/" + title + ".ts.b25")
547             else:
548                 recdb.del_reckey(typetxtnow, title, chtxt, btime)
549                 bt = bt + datetime.timedelta(seconds=600)
550                 et = et + datetime.timedelta(seconds=600)
551                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
552                 etime = et.strftime("%Y-%m-%d %H:%M:%S")
553                 recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
554             sys.exit()
555
556 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
557     btime = bt.strftime("%Y-%m-%d %H:%M:%S")
558     etime = et.strftime("%Y-%m-%d %H:%M:%S")
559     tnow = datetime.datetime.now()
560     dtt = bt-tnow
561     dt = dtt.days * 24 * 60 * 60 + dtt.seconds
562     typetxtnow=typetxt
563     typetxting=""
564     typetxtfin=""
565     if typetxt==recdb.REC_ENCODE_QUE:
566         typetxting=recdb.REC_ENCODE_LOCAL
567         typetxtfin=recdb.REC_FIN_LOCAL
568     elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
569         typetxting=recdb.REC_ENCODE_LOCAL
570         typetxtfin=recdb.REC_MOVE_END
571     if dt < 10 * 60:
572         if status.getEncoding() < int(configreader.getenv("enc_max")):
573             print opt
574             pin = recpath + "/" + title + ".ts"
575             if re.search("d", opt):
576                 pin = recpath + "/" + title + ".sa.avi"
577             if re.search("5", opt):
578                 pin = recpath + "/" + title + ".sa.avi"
579             #pout = recpath + "/" + title + ".avi"
580             pout = recpath + "/" + title + ".mp4"
581             print [pin, pout, opt]
582             print pin
583             #print pin+":"+pout+":"+opt
584             recdb.del_reckey(typetxtnow, title, chtxt, btime)
585             recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
586             #tv2mkv.ts2mkv(pin, pout, opt)
587             tv2mp4.ts2mp4(pin, pout, opt)
588             #tv2avi.ts2avi(pin, pout, opt)
589             recdb.del_reckey(typetxting, title, chtxt, btime)
590             if typetxtfin==recdb.REC_MOVE_END:
591                 shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
592             recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
593             sys.exit()
594         else:
595             recdb.del_reckey(typetxtnow, title, chtxt, btime)
596             bt = bt + datetime.timedelta(seconds=600)
597             et = et + datetime.timedelta(seconds=600)
598             btime = bt.strftime("%Y-%m-%d %H:%M:%S")
599             etime = et.strftime("%Y-%m-%d %H:%M:%S")
600             recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
601             sys.exit()