OSDN Git Service

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