OSDN Git Service

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