OSDN Git Service

happy new year! 2011
[rec10/rec10-git.git] / rec10 / trunk / src / timerec.py
1 #!/usr/bin/python\r
2 # coding: UTF-8\r
3 # Rec10 TS Recording Tools\r
4 # Copyright (C) 2009-2011 Yukikaze\r
5 import datetime\r
6 import os\r
7 import os.path\r
8 import re\r
9 import sys\r
10 import time\r
11 import shutil\r
12 import traceback\r
13 \r
14 import auto_rec\r
15 import auto_process\r
16 import chdb\r
17 import configreader\r
18 import epgdb\r
19 import rec10d\r
20 import recdb\r
21 import status\r
22 import tv2audio\r
23 import tv2avi\r
24 import tv2mkv\r
25 import tv2mp4\r
26 import install\r
27 import recdblist\r
28 import recque\r
29 recpath = configreader.getConfPath('recpath')\r
30 movepath = configreader.getConfPath('move_destpath')\r
31 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"\r
32 def task():\r
33     """\r
34     数分毎に実行されるタスク処理\r
35     予定によって子プロセスを生成し処理する。\r
36     """\r
37     try:\r
38         if rec10d.rec10db.select_installed_in_status()==0 or rec10d.rec10db.select_version_in_status()<recdblist.version:\r
39             install.install()\r
40         elif rec10d.rec10db.select_installed_in_status()==1:\r
41             import scan_ch\r
42             rec10d.rec10db.new_epg_ch()\r
43             scan_ch.searchCh()\r
44             rec10d.rec10db.change_chscaned_in_status()\r
45     except:\r
46         install.install()\r
47     recdb.deleteOldProgramBeforeTheseHours("24")\r
48     recdb.delete_old_auto_bayes("1")\r
49     recdb.delete_old_auto_keyword("1")\r
50     tasks = recdb.getProgramsInTheseHours("3")\r
51     inum = recdb.countRecNow_minutes("10")\r
52     recdblist.printutf8(u"rec10処理開始"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),verbose_level=800)\r
53     recdblist.printutf8(u"直近録画予約件数:" + str(inum) + u"BS/CS録画中件数:" + str(status.getBSCSRecording()) + u"TE録画中件数:" + str(status.getTERecording()) ,verbose_level=800)\r
54     encodenum=0\r
55     b25num=0\r
56     dnow=datetime.datetime.now()\r
57     if dnow.minute%10<5:\r
58         pid = os.fork()\r
59         if pid != 0:\r
60             ""\r
61         else:\r
62             search_keyword(recdb.getAllJbkKeyword())\r
63             recque.searchRecQue(recpath)\r
64             sys.exit()\r
65     else:\r
66         pid = os.fork()\r
67         if pid!=0:\r
68             ""\r
69         else:\r
70             time.sleep(10)\r
71             auto_process.autoCheck(recpath)\r
72             time.sleep(10)\r
73             auto_process.killDeadEncode(recpath)\r
74             sys.exit()\r
75     update = chdb.update()\r
76     if len(update) > 0:\r
77         pid = os.fork()\r
78         if pid != 0:\r
79             ""\r
80         else:\r
81             i = 0\r
82             for bctype in update:\r
83                 recnum = 0\r
84                 if bctype.find('te') > -1:\r
85                     recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")\r
86                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getTERecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_TE("10")),verbose_level=800)\r
87                     recnum = int(configreader.getConfEnv("te_max")) -recnum\r
88                 else:\r
89                     recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")\r
90                     recdblist.printutf8(u"放送種別:"+bctype + u"||該当チューナー実行中件数:" + str(status.getBSCSRecording()) + u":直近予約件数:" + str(recdb.countRecNow_minutes_BSCS("10")),verbose_level=800)\r
91                     recnum = int(configreader.getConfEnv("bscs_max")) -recnum\r
92                 if recnum >0 :\r
93                     recdblist.printutf8(str(update),verbose_level=750)\r
94                     rec10d.rec10db.update_status_by_bctype_epg_ch(bctype, "0")\r
95                     epgdb.updatebc(bctype)\r
96                     update = chdb.update()\r
97                     i = i + 1\r
98                 if i > 0:\r
99                     break\r
100             time.sleep(5)\r
101             auto_process.update_all_timeline_epg()\r
102             sys.exit()\r
103     else:\r
104         pid = os.fork()\r
105         if pid != 0:\r
106             ""\r
107         else:\r
108             auto_process.update_all_timeline_epg()\r
109             sys.exit()\r
110     for task in tasks:\r
111         typetxt = task["type"]\r
112         try:\r
113             chtxt = task['chtxt']\r
114         except:\r
115             chtxt = ""\r
116         try:\r
117             title = task['title']\r
118         except:\r
119             title = ""\r
120         try:\r
121             btime = task['btime']\r
122             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")\r
123         except:\r
124             btime = ""\r
125             bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")\r
126         try:\r
127             etime = task['etime']\r
128             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")\r
129         except:\r
130             etime = ""\r
131             et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")\r
132         try:\r
133             opt = task['opt']\r
134         except:\r
135             opt = ""\r
136         tnow = datetime.datetime.now()\r
137         dtt = bt-tnow\r
138         dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
139         if task["type"] == recdblist.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt\r
140             pid = os.fork()\r
141             if pid != 0:#親プロセスの場合\r
142                 ""\r
143             else:#子プロセスの場合 アップデートを行って終了\r
144                 type_reserve(task["type"],chtxt,title,bt,et,opt)\r
145                 sys.exit()\r
146         elif task["type"] == recdblist.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt\r
147             deltatime = task['deltatime']\r
148             pid = os.fork()\r
149             if pid != 0:#親プロセスの場合\r
150                 ""\r
151             else:#子プロセスの場合 アップデートを行って終了\r
152                 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)\r
153                 sys.exit()\r
154         elif task["type"] == recdblist.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday\r
155             deltatime = task['deltatime']\r
156             deltaday = task['deltaday']\r
157             try:\r
158                 keyeverycounter=task['counter']\r
159             except:\r
160                 keyeverycounter=-1\r
161             pid = os.fork()\r
162             if pid != 0:#親プロセスの場合\r
163                 ""\r
164             else:#子プロセスの場合 アップデートを行って終了\r
165                 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday,keyeverycounter)\r
166                 sys.exit()\r
167         elif task["type"] == recdblist.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt\r
168             pid = os.fork()\r
169             if pid != 0:#親プロセスの場合\r
170                 ""\r
171             else:#子プロセスの場合 アップデートを行って終了\r
172                 type_final(task["type"],chtxt, title, bt, et, opt)\r
173                 sys.exit()\r
174         elif task["type"] == recdblist.REC_TS_DECODE_QUE:\r
175             b25num=b25num+1\r
176             pid = os.fork()\r
177             if pid != 0:#親プロセスの場合\r
178                 ""\r
179             else:#子プロセスの場合 アップデートを行って終了\r
180                 time.sleep(5*b25num)\r
181                 type_decode_que(task["type"],chtxt, title, bt, et, opt)\r
182                 sys.exit()\r
183         elif task["type"] == recdblist.REC_ENCODE_QUE:\r
184             encodenum=encodenum+1\r
185             pid = os.fork()\r
186             if pid != 0:#親プロセスの場合\r
187                 ""\r
188             else:#子プロセスの場合 アップデートを行って終了\r
189                 time.sleep(5*encodenum)\r
190                 type_encode_que(task["type"],chtxt, title, bt, et, opt)\r
191                 sys.exit()\r
192         elif task["type"] == recdblist.REC_AVI_TO_MKV:\r
193             if dt < 10 * 60:\r
194                 pid = os.fork()\r
195                 if pid > 0:#親プロセスの場合\r
196                     ""\r
197                 else:\r
198                     makeMP4=0\r
199                     try:\r
200                         if configreader.getConfEnv("make_mp4")==1:\r
201                             makeMP4=1\r
202                     except:\r
203                         ""\r
204                     if re.search("m", opt):\r
205                         makeMP4=0\r
206                     if re.search("4", opt):\r
207                         makeMP4=1\r
208                     recdb.deleteReckey(recdblist.REC_AVI_TO_MKV, title, chtxt, btime)\r
209                     recdb.reserveReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)\r
210                     if makeMP4==1:\r
211                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)\r
212                     else:\r
213                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)\r
214                     recdb.deleteReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)\r
215                     sys.exit()\r
216         elif task["type"] == recdblist.REC_AVI_TO_MP4:\r
217             if dt < 10 * 60:\r
218                 pid = os.fork()\r
219                 if pid > 0:#親プロセスの場合\r
220                     ""\r
221                 else:\r
222                     makeMP4=0\r
223                     try:\r
224                         if configreader.getConfEnv("make_mp4")==1:\r
225                             makeMP4=1\r
226                     except:\r
227                         ""\r
228                     if re.search("m", opt):\r
229                         makeMP4=0\r
230                     if re.search("4", opt):\r
231                         makeMP4=1\r
232                     recdb.deleteReckey(recdblist.REC_AVI_TO_MP4, title, chtxt, btime)\r
233                     recdb.reserveReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)\r
234                     if makeMP4==1:\r
235                         tv2mp4.ts2mp4(pin, pout, opt)\r
236                         tv2mp4.raw2mp4(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mp4"),opt)\r
237                     else:\r
238                         tv2mkv.raw2mkv(os.path.join(recpath,title+".264"),os.path.join(recpath,title+".mkv"),opt)\r
239                     recdb.deleteReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)\r
240                     sys.exit()\r
241         elif task["type"] == recdblist.REC_MKV_TO_MP4:\r
242             if dt < 10 * 60:\r
243                 pid = os.fork()\r
244                 if pid > 0:#親プロセスの場合\r
245                     ""\r
246                 else:\r
247                     recdb.deleteReckey(recdblist.REC_MKV_TO_MP4, title, chtxt, btime)\r
248                     recdb.reserveReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)\r
249                     tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))\r
250                     recdb.deleteReckey(recdblist.REC_CHANGING_CANTAINER, title, chtxt, btime)\r
251                     sys.exit()\r
252     sys.exit()\r
253 def search_keyword(key):\r
254     tnow = datetime.datetime.now()\r
255     nows =tnow.strftime("%Y-%m-%d %H:%M:%S")\r
256     for k,auto,opt in key:\r
257         recdatum = epgdb.searchTimeAuto(k,nows, "144")\r
258         for recdata in recdatum:\r
259             if recdata[1] != "":\r
260                 chtxtt = recdata[0]\r
261                 titlet = recdata[1]\r
262                 btimet = recdata[2]\r
263                 etimet = recdata[3]\r
264                 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")\r
265                 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")\r
266                 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")\r
267                 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")\r
268                 #if status.getSettings_auto_jbk()==1:\r
269                 if auto==1 or status.getSettings_auto_jbk()==1:\r
270                     topt=opt\r
271                     if len(topt)==0:\r
272                         topt=status.getSettings_auto_opt()\r
273                     try:\r
274                         maxnum=0\r
275                         if len(ch['ch'])>2:\r
276                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[1]\r
277                             maxnum=int(configreader.getConfEnv("bscs_max"))-maxnum\r
278                         else:\r
279                             maxnum=epgdb.count_schedule_timeline(btimet, etimet)[0]\r
280                             maxnum=int(configreader.getConfEnv("te_max"))-maxnum\r
281                         if maxnum>0:\r
282                             if recdb.checkDuplicated(titlet, chtxtt, btimet, etimet)==0:\r
283                                 recdb.recreserv(titlet,chtxtt, btimet, etimet,topt)\r
284                     except Exception, inst:\r
285                         recdblist.addCommonlogEX("Error", "search_keyword_auto_jbk(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
286                 else:\r
287                     try:\r
288                         recdb.reserveAutoKeyword(chtxtt, titlet, btimet, etimet)\r
289                     except Exception, inst:\r
290                         recdblist.addCommonlogEX("Error", "search_keyword(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
291 def type_reserve(typetxt,chtxt,title,bt,et,opt):\r
292     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
293     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
294     typetxtnow=typetxt\r
295     typetxtfinal=""\r
296     if typetxt==recdblist.REC_RESERVE:\r
297         typetxtfinal=recdblist.REC_FINAL_RESERVE\r
298     tnow = datetime.datetime.now()\r
299     dtt = bt-tnow\r
300     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
301     if (dt < 58 * 60 and dt > 30 * 60):\r
302         bctypet = chdb.searchCHFromChtxt(chtxt)['bctype']\r
303         chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)\r
304         dt1 = bt - datetime.datetime.strptime(chdatat[0][4], "%Y-%m-%d %H:%M:%S")\r
305         dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds\r
306         if dt1 < 60 * 60:\r
307             recdata = epgdb.searchTime(title, btime, "5", chtxt)\r
308             chtxtn = recdata[0]\r
309             titlen = recdata[1]\r
310             btimen = recdata[2]\r
311             etimen = recdata[3]\r
312             exp = recdata[4]\r
313             longexp = recdata[5]\r
314             category=recdata[6]\r
315             bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")\r
316             et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")\r
317             btimen = bt.strftime("%Y-%m-%d %H:%M:%S")\r
318             etimen = et.strftime("%Y-%m-%d %H:%M:%S")\r
319             if chtxt != "":\r
320                 try:\r
321                     recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
322                     recdb.reserveReckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)\r
323                     recdb.addRecLogProgram(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)\r
324                     auto_rec.addKey(chtxt, titlen,exp+" "+longexp)\r
325                     auto_rec.addKey("ALL", titlen,exp+" "+longexp)\r
326                     recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)\r
327                 except Exception, inst:\r
328                     recdblist.addCommonlogEX("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
329             else:\r
330                 recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")\r
331         else:\r
332             if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][5] != "0":\r
333                 rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")\r
334         sys.exit()\r
335     elif (dt <= 30 * 60 and dt > 20 * 60):\r
336         recdata = epgdb.searchTime(title, btime, "5", chtxt)\r
337         chtxtn = recdata[0]\r
338         titlen = recdata[1]\r
339         btimen = recdata[2]\r
340         etimen = recdata[3]\r
341         exp = recdata[4]\r
342         longexp = recdata[5]\r
343         category=recdata[6]\r
344         bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")\r
345         et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")\r
346         btimen = bt.strftime("%Y-%m-%d %H:%M:%S")\r
347         etimen = et.strftime("%Y-%m-%d %H:%M:%S")\r
348         if chtxt != "":\r
349             try:\r
350                 recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
351                 recdb.reserveReckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)\r
352                 recdb.addRecLogProgram(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)\r
353                 auto_rec.addKey(chtxt, titlen,exp+" "+longexp)\r
354                 auto_rec.addKey("ALL", titlen,exp+" "+longexp)\r
355                 #recdblist.printutf8(u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen)\r
356                 recdblist.addCommonlogEX(u"通常", "Oikake (timerec.py)",u"追いかけ機能実行中",u"追いかけ機能実行中: "+title+" : "+titlen+" "+btimen+" "+etimen,log_level=500)\r
357             except Exception, inst:\r
358                 recdblist.addCommonlogEX("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
359     elif dt <= 20 * 60:\r
360         try:\r
361             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
362             recdb.reserveReckey(typetxtfinal, title, chtxt, btime, etime, opt)\r
363         except Exception, inst:\r
364             recdblist.addCommonlogEX("Error", "Oikake DB(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
365 def type_final(typetxt,chtxt,title,bt,et,opt):\r
366     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
367     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
368     typetxtnow=typetxt\r
369     typetxting=""\r
370     typetxtdecque=""\r
371     if typetxt==recdblist.REC_FINAL_RESERVE:\r
372         typetxting=recdblist.REC_TS_RECORDING\r
373         typetxtdecque=recdblist.REC_TS_DECODE_QUE\r
374     tnow = datetime.datetime.now()\r
375     dtt = bt-tnow\r
376     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
377     if dt < 6 * 60 and dt > 0:\r
378         newtitle=title\r
379         recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
380         testpath=[os.path.join(recpath,title+".ts.b25")]\r
381         testpath.append(os.path.join(recpath,title+".ts"))\r
382         testpath.append(os.path.join(recpath,title+".avi"))\r
383         testpath.append(os.path.join(recpath,title+".mp4"))\r
384         testpath.append(os.path.join(recpath,title+".log"))\r
385         tcheck=0\r
386         for ti in testpath:\r
387             if os.path.exists(ti):\r
388                 tcheck=tcheck+1\r
389         if re.search("N", opt) or tcheck>0:\r
390             iff=""\r
391             try:\r
392                 iff=u"("+configreader.getConfEnv("iff")+u")_"\r
393             except:\r
394                 iff=""\r
395             newtime=bt\r
396             newtitle=newtitle+u"_"+iff+newtime.strftime("%Y-%m-%dT%H-%M-%S")\r
397         recdb.reserveReckey(typetxting, newtitle, chtxt, btime, etime, opt)\r
398         recdblist.addCommonlogEX(u"通常","timerec.py",u"録画開始 "+newtitle+" "+btime+" "+etime,"",log_level=500)\r
399         tv2avi.timetv2b25(recpath + "/" + newtitle + ".avi", chtxt, btime, etime, opt)\r
400         recdb.deleteReckey(typetxting, newtitle, chtxt, btime)\r
401         if not re.search("R", opt):\r
402             tnow = datetime.datetime.now()\r
403             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")\r
404             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")\r
405             dt = tnow-bt\r
406             bt = tnow + datetime.timedelta(seconds=600)\r
407             et = et + dt + datetime.timedelta(seconds=600)\r
408             btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
409             etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
410             recdb.reserveReckey(typetxtdecque, newtitle, chtxt, btime, etime, opt)\r
411         else:\r
412             try:\r
413                 try:\r
414                     shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))\r
415                 except:\r
416                     ""\r
417                 try:\r
418                     os.chmod(os.path.join(movepath,title+".ts.b25"),0777)\r
419                 except:\r
420                     ""\r
421                 recque.writeRecQue(movepath, chtxt, title, opt)\r
422                 try:\r
423                     os.chmod(os.path.join(movepath,title+".recq"),0777)\r
424                 except:\r
425                     ""\r
426             except Exception, inst:\r
427                 recdblist.addCommonlogEX("Error", "Move option(timerec.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)\r
428             recdb.reserveReckey(recdblist.REC_MOVE_END, newtitle, chtxt, btime, etime, opt)\r
429         sys.exit()\r
430 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):\r
431     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
432     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
433     typetxtnow=typetxt\r
434     typetxtres=""\r
435     if typetxt==recdblist.REC_KEYWORD:\r
436         typetxtres=recdblist.REC_RESERVE\r
437     tnow = datetime.datetime.now()\r
438     dtt = bt-tnow\r
439     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
440     recdblist.printutf8(str(dt), verbose_level=800)\r
441     if dt <= 90 * 60 and dt > 70 * 60:\r
442         recdata = epgdb.searchTime(title, btime, deltatime, chtxt)\r
443         if recdata[1] != "":\r
444             chtxtt = recdata[0]\r
445             titlet = recdata[1]\r
446             btimet = recdata[2]\r
447             etimet = recdata[3]\r
448             exp = recdata[4]\r
449             longexp = recdata[5]\r
450             category=recdata[6]\r
451             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")\r
452             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")\r
453             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")\r
454             etimet = et.strftime("%Y-%m-%d %H:%M:%S")\r
455             #try:\r
456             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
457             recdb.reserveReckey(typetxtres, titlet, chtxt, btimet, etimet, opt)\r
458             recdb.addRecLogProgram(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)\r
459             auto_rec.addKey(chtxt, titlet,exp+" "+longexp)\r
460             auto_rec.addKey("ALL", titlet,exp+" "+longexp)\r
461             recdblist.addCommonlogEX(u"通常","timerec.py",u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet,"",log_level=500)\r
462             #except Exception, inst:\r
463             #    recdblist.printutf8("Error happened in REC_KEYWORD DB")\r
464             #    recdblist.printutf8(type(inst))\r
465             #    recdblist.printutf8(inst)\r
466         else:\r
467             recdblist.printutf8("nothing match")\r
468     elif dt <= 70 * 60:\r
469         recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
470         recdb.reserveReckey(typetxtres, title, chtxt, btime, etime, opt)\r
471         recdblist.addCommonlogEX(u"エラー","timerec.py",u"nothing match","",log_level=200)\r
472         recdblist.addCommonlogEX(u"エラー","timerec.py",u"key "+title+u" : "+titlet+u" "+btimet+u" "+etimet,"",log_level=200)\r
473 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday,counter):\r
474     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
475     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
476     tnow = datetime.datetime.now()\r
477     dtt = bt-tnow\r
478     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
479     dd = datetime.timedelta(days=int(deltaday))\r
480     if dtt.days < 0:\r
481         recdb.deleteReckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)\r
482         bt = bt + dd\r
483         et = et + dd\r
484         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")\r
485         etxt = et.strftime("%Y-%m-%d %H:%M:%S")\r
486         recdb.reserveEverydayKeyword(title, chtxt, btxt, etxt, deltatime, opt, deltaday)\r
487     elif dt < 120 * 60:\r
488         recdb.deleteReckey(recdblist.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)\r
489         bt = bt + dd\r
490         et = et + dd\r
491         btxt = bt.strftime("%Y-%m-%d %H:%M:%S")\r
492         etxt = et.strftime("%Y-%m-%d %H:%M:%S")\r
493         if counter>0:\r
494             recdb.reserveEverydayKeyword(title, chtxt, btxt, etxt, deltatime, opt, deltaday,counter-1)\r
495         elif counter==-1:\r
496             recdb.reserveEverydayKeyword(title, chtxt, btxt, etxt, deltatime, opt, deltaday,-1)\r
497         recdata = epgdb.searchTime(title, btime, deltatime, chtxt)\r
498         if recdata[1] != "":\r
499             chtxtt = recdata[0]\r
500             titlet = recdata[1]\r
501             btimet = recdata[2]\r
502             etimet = recdata[3]\r
503             exp = recdata[4]\r
504             longexp = recdata[5]\r
505             category=recdata[6]\r
506             bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")\r
507             et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")\r
508             btimet = bt.strftime("%Y-%m-%d %H:%M:%S")\r
509             etimet = et.strftime("%Y-%m-%d %H:%M:%S")\r
510             #try:\r
511             recdb.reserveKeyword(titlet, chtxt, btimet, etimet, deltatime, opt)\r
512         else:\r
513             recdb.reserveKeyword(title, chtxt, btime, etime, deltatime, opt)\r
514 def type_decode_que(typetxt,chtxt,title,bt,et,opt):\r
515     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
516     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
517     tnow = datetime.datetime.now()\r
518     dtt = bt-tnow\r
519     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
520     typetxtnow=typetxt\r
521     typetxting=""\r
522     typetxtmiss=""\r
523     typetxtencque=""\r
524     if typetxt== recdblist.REC_TS_DECODE_QUE:\r
525         typetxting=recdblist.REC_TS_DECODING\r
526         typetxtmiss=recdblist.REC_MISS_DECODE\r
527         typetxtencque=recdblist.REC_ENCODE_QUE\r
528     tnow = datetime.datetime.now()\r
529     dtt = bt-tnow\r
530     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
531     if dt < 10 * 60:\r
532         if status.getB25Decoding() < 2:\r
533             pin = recpath + "/" + title\r
534             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
535             recdb.reserveReckey(typetxting, title, chtxt, btime, etime, opt)\r
536             tv2avi.b252ts(pin, chtxt, btime, etime, opt)\r
537             recdb.deleteReckey(typetxting, title, chtxt, btime)\r
538             if not os.access(recpath + "/" + title + ".ts", os.F_OK):\r
539                 recdb.deleteReckey(typetxting, title, chtxt, btime)\r
540                 recdb.reserveReckey(typetxtmiss, title, chtxt, btime, etime, opt)\r
541             else:\r
542                 auto_process.deleteTmpFile(recpath, title, ".ts")\r
543             bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")\r
544             et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")\r
545             dt = et-bt\r
546             if not re.search("D", opt):\r
547                 tnow = datetime.datetime.now()\r
548                 bt = tnow + datetime.timedelta(seconds=600)\r
549                 et = bt + dt\r
550                 btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
551                 etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
552                 recdb.reserveReckey(typetxtencque, title, chtxt, btime, etime, opt)\r
553             else:\r
554                 try:\r
555                     try:\r
556                         shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))\r
557                     except:\r
558                         ""\r
559                     try:\r
560                         os.chmod(os.path.join(movepath,title+".ts"),0777)\r
561                     except:\r
562                         ""\r
563                     recque.writeRecQue(movepath, chtxt, title, opt)\r
564                     try:\r
565                         os.chmod(os.path.join(movepath,title+".recq"),0777)\r
566                     except:\r
567                         ""\r
568                     time.sleep(5)\r
569                     if os.path.getsize(os.path.join(recpath,title+".ts"))==os.path.getsize(os.path.join(movepath,title+".ts")):\r
570                         os.remove(os.path.join(recpath,title+".ts"))\r
571                 except Exception, inst:\r
572                     errtxt1="move ts error.\n"\r
573                     errtxt2=str(type(inst))+"\n"\r
574                     errtxt2=errtxt2+str(inst)\r
575                     recdblist.addCommonlogEX("Error", "type_decode_que(timerec.py)", errtxt1,errtxt2+traceback.format_exc(),log_level=200)\r
576                 recdb.reserveReckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)\r
577         else:\r
578             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
579             bt = bt + datetime.timedelta(seconds=600)\r
580             et = et + datetime.timedelta(seconds=600)\r
581             btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
582             etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
583             recdb.reserveReckey(typetxtnow, title, chtxt, btime, etime, opt)\r
584     sys.exit()\r
585 \r
586 def type_encode_que(typetxt,chtxt,title,bt,et,opt):\r
587     btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
588     etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
589     tnow = datetime.datetime.now()\r
590     dtt = bt-tnow\r
591     dt = dtt.days * 24 * 60 * 60 + dtt.seconds\r
592     typetxtnow=typetxt\r
593     typetxting=""\r
594     typetxtfin=""\r
595     if typetxt==recdblist.REC_ENCODE_QUE:\r
596         typetxting=recdblist.REC_ENCODE_LOCAL\r
597         typetxtfin=recdblist.REC_FIN_LOCAL\r
598     if dt < 10 * 60:\r
599         if status.getEncoding() < int(configreader.getConfEnv("enc_max")):\r
600             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
601             recdb.reserveReckey(typetxting, title, chtxt, btime, etime, opt)\r
602             recdblist.printutf8(opt)\r
603             pin = recpath + "/" + title + ".ts"\r
604             if re.search("d", opt):\r
605                 pin = recpath + "/" + title + ".m2v"\r
606                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:\r
607                     paac2 = recpath + "/" + title + "_2.aac"\r
608                     pmp32 = recpath + "/" + title + "_2.mp3"\r
609                     if not os.path.exists(paac2) and not os.path.exists(pmp32):\r
610                         tv2audio.ts2dualaudio_BonTsDemux(os.path.join(recpath, title+".ts"),recdblist.BONTSDEMUX_DELAY,opt)\r
611                 time.sleep(3)\r
612             elif re.search("5", opt):\r
613                 pin = recpath + "/" + title + ".m2v"\r
614                 if not os.path.exists(pin) or os.path.getsize(pin)<100*1000:\r
615                     paac2 = recpath + "/" + title + "_2.aac"\r
616                     pmp32 = recpath + "/" + title + "_2.mp3"\r
617                     if not os.path.exists(paac2) and not os.path.exists(pmp32):\r
618                         tv2audio.ts2pentaaudio_BonTsDemux(os.path.join(recpath, title+".ts"), recdblist.BONTSDEMUX_DELAY, opt)\r
619                 time.sleep(3)\r
620             makeMP4=0\r
621             try:\r
622                 if configreader.getConfEnv("make_mp4")=="1":\r
623                     makeMP4=1\r
624             except:\r
625                 ""\r
626             if re.search("m", opt):\r
627                 makeMP4=0\r
628             if re.search("4", opt):\r
629                 makeMP4=1\r
630             recdblist.printutf8(pin)\r
631             if not re.search("0", opt):\r
632                 if makeMP4==1:\r
633                     pout = recpath + "/" + title + ".mp4"\r
634                     tv2mp4.ts2mp4(pin, pout, opt)\r
635                 else:\r
636                     pout = recpath + "/" + title + ".mkv"\r
637                     tv2mkv.ts2mkv(pin, pout, opt)\r
638                 if re.search("1", opt) or re.search("2", opt):\r
639                     optt=opt.replace("1","MW1")\r
640                     optt=optt.replace("2","MW2")\r
641                     poutt = recpath + "/" + "m_"+title + ".mp4"\r
642                     if re.search("d", opt) or re.search("5", opt):\r
643                         if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):\r
644                             shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))\r
645                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):\r
646                             shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))\r
647                         if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):\r
648                             shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))\r
649                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):\r
650                             shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))\r
651                         if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):\r
652                             shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))\r
653                     shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))\r
654                     tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)\r
655                     shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))\r
656             else:\r
657                 optt=opt\r
658                 poutt = recpath + "/" + "m_"+title + ".mp4"\r
659                 shutil.move(os.path.join(recpath, title+".ts"),os.path.join(recpath, "m_"+title+".ts"))\r
660                 if re.search("d", opt) or re.search("5", opt):\r
661                     if os.path.exists(os.path.join(recpath, "m_"+title+".m2v")):\r
662                         shutil.move(os.path.join(recpath, title+".m2v"),os.path.join(recpath, "m_"+title+".m2v"))\r
663                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.aac")):\r
664                         shutil.move(os.path.join(recpath, title+"_1.aac"),os.path.join(recpath, "m_"+title+"_1.aac"))\r
665                     if os.path.exists(os.path.join(recpath, "m_"+title+"_1.mp3")):\r
666                         shutil.move(os.path.join(recpath, title+"_1.mp3"),os.path.join(recpath, "m_"+title+"_1.mp3"))\r
667                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.aac")):\r
668                         shutil.move(os.path.join(recpath, title+"_2.aac"),os.path.join(recpath, "m_"+title+"_2.aac"))\r
669                     if os.path.exists(os.path.join(recpath, "m_"+title+"_2.mp3")):\r
670                         shutil.move(os.path.join(recpath, title+"_2.mp3"),os.path.join(recpath, "m_"+title+"_2.mp3"))\r
671                 tv2mp4.ts2mp4(os.path.join(recpath, "m_"+title+".ts"), poutt, optt)\r
672                 shutil.move(os.path.join(recpath, "m_"+title+".ts"),os.path.join(recpath, title+".ts"))\r
673             recdb.deleteReckey(typetxting, title, chtxt, btime)\r
674             time.sleep(10)\r
675             if re.search("E", opt):\r
676                 try:\r
677                     if os.path.exists(os.path.join(recpath,title+".mp4")):\r
678                         try:\r
679                             shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))\r
680                         except:\r
681                             ""\r
682                         try:\r
683                             os.chmod(os.path.join(movepath,title+".mp4"),0777)\r
684                         except:\r
685                             ""\r
686                         recque.writeRecQue(movepath, chtxt, title, opt)\r
687                         try:\r
688                             os.chmod(os.path.join(movepath,title+".recq"),0777)\r
689                         except:\r
690                             ""\r
691                     elif os.path.exists(os.path.join(recpath,title+".mkv")):\r
692                         try:\r
693                             shutil.copy(os.path.join(recpath,title+".mkv"), os.path.join(movepath,title+".mkv"))\r
694                         except:\r
695                             ""\r
696                         try:\r
697                             os.chmod(os.path.join(movepath,title+".mkv"),0777)\r
698                         except:\r
699                             ""\r
700                         recque.writeRecQue(movepath, chtxt, title, opt)\r
701                         try:\r
702                             os.chmod(os.path.join(movepath,title+".recq"),0777)\r
703                         except:\r
704                             ""\r
705                 except Exception, inst:\r
706                     errtxt1="move mkv/mp4 error."\r
707                     errtxt2=str(type(inst))+"\n"\r
708                     errtxt2=errtxt2+str(inst)\r
709                     recdblist.addCommonlogEX("Error", "type_encode_que(timerec.py)", errtxt1,errtxt2+traceback.format_exc(),log_level=200)\r
710                 recdb.reserveReckey(recdblist.REC_MOVE_END, title, chtxt, btime, etime, opt)\r
711             recdb.reserveReckey(typetxtfin, title, chtxt, btime, etime, opt)\r
712             sys.exit()\r
713         else:\r
714             recdb.deleteReckey(typetxtnow, title, chtxt, btime)\r
715             bt = bt + datetime.timedelta(seconds=600)\r
716             et = et + datetime.timedelta(seconds=600)\r
717             btime = bt.strftime("%Y-%m-%d %H:%M:%S")\r
718             etime = et.strftime("%Y-%m-%d %H:%M:%S")\r
719             recdb.reserveReckey(typetxtnow, title, chtxt, btime, etime, opt)\r
720             sys.exit()\r