3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
25 recpath = configreader.getpath('recpath')
26 movepath = configreader.getpath('move_destpath')
27 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
33 recdb.delete_old("24")
34 tasks = recdb.getnow("2")
35 inum = recdb.countRecNow_minutes("10")
36 print "番組表更新処理"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
37 print "inum:" + str(inum) + "bscsrec:" + str(status.getBSCSRecording()) + "terec:" + str(status.getTERecording())
40 dnow=datetime.datetime.now()
41 if dnow.hour==12 and dnow.minute<5 :
46 for k in recdb.get_key():
54 auto_process.auto_check(recpath)
56 update = chdb.update()
66 if bctype.find('te') > -1:
67 recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
68 print bctype + "//ing:" + str(status.getTERecording()) + ":task:" + str(recdb.countRecNow_minutes_TE("10"))
70 recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
71 print bctype + "//ing:" + str(status.getBSCSRecording()) + ":task:" + str(recdb.countRecNow_minutes_BSCS("10"))
74 rec10d.rec10db.update_status_by_bctype_chdata(bctype, "0")
75 epgdb.updatebc(bctype)
76 update = chdb.update()
83 typetxt = task["type"]
94 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
97 bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
100 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
103 et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
108 tnow = datetime.datetime.now()
110 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
111 if task["type"] == recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
113 if pid != 0:#親プロセスの場合
115 else:#子プロセスの場合 アップデートを行って終了
116 type_reserve(task["type"],chtxt,title,bt,et,opt)
117 elif task["type"] == recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
118 deltatime = task['deltatime']
120 if pid != 0:#親プロセスの場合
122 else:#子プロセスの場合 アップデートを行って終了
123 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
125 elif task["type"] == recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
126 deltatime = task['deltatime']
127 deltaday = task['deltaday']
129 if pid != 0:#親プロセスの場合
131 else:#子プロセスの場合 アップデートを行って終了
132 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday)
134 elif task["type"] == recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
136 if pid != 0:#親プロセスの場合
138 else:#子プロセスの場合 アップデートを行って終了
139 type_final(task["type"],chtxt, title, bt, et, opt)
141 elif task["type"] == recdb.REC_TS_DECODE_QUE:
144 if pid != 0:#親プロセスの場合
146 else:#子プロセスの場合 アップデートを行って終了
148 type_decode_que(task["type"],chtxt, title, bt, et, opt)
150 elif task["type"] == recdb.REC_ENCODE_QUE:
151 encodenum=encodenum+1
153 if pid != 0:#親プロセスの場合
155 else:#子プロセスの場合 アップデートを行って終了
156 time.sleep(5*encodenum)
157 type_encode_que(task["type"],chtxt, title, bt, et, opt)
159 elif task["type"] == recdb.REC_AVI_TO_MKV:
165 recdb.del_reckey(recdb.REC_AVI_TO_MKV, title, chtxt, btime)
166 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
167 tv2mkv.avi2mkv(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"))
168 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
170 elif task["type"] == recdb.REC_AVI_TO_MP4:
176 recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
177 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
178 tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mp4"))
179 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
181 elif task["type"] == recdb.REC_MKV_TO_MP4:
187 recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
188 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
189 tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
190 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
192 elif task["type"] == recdb.REC_AUTO_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
195 recdatum = epgdb.searchtime_auto(title.decode('utf-8'), btime, deltatime, chtxt)
196 for recdata in recdatum:
205 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
206 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
207 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
208 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
210 recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet, opt)
211 except Exception, inst:
214 dd = datetime.timedelta(days=1)
217 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
218 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
220 recdb.del_reckey(recdb.REC_AUTO_KEYWORD, title, chtxt, btime)
221 recdb.auto_keyreserv(title, chtxt, btxt, etxt, "24", opt)
222 except Exception, inst:
225 elif task["type"] == recdb.REC_MOVE_AFTER_RECORD:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
227 if pid != 0:#親プロセスの場合
229 else:#子プロセスの場合 アップデートを行って終了
230 type_reserve(task["type"],chtxt,title,bt,et,opt)
232 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
234 if pid != 0:#親プロセスの場合
236 else:#子プロセスの場合 アップデートを行って終了
237 type_reserve(task["type"],chtxt,title,bt,et,opt)
239 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
241 if pid != 0:#親プロセスの場合
243 else:#子プロセスの場合 アップデートを行って終了
244 type_reserve(task["type"],chtxt,title,bt,et,opt)
246 elif task["type"] == recdb.REC_MOVE_AFTER_RECORD_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
248 if pid != 0:#親プロセスの場合
250 else:#子プロセスの場合 アップデートを行って終了
251 type_final(task["type"],chtxt, title, bt, et, opt)
253 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
255 if pid != 0:#親プロセスの場合
257 else:#子プロセスの場合 アップデートを行って終了
258 type_final(task["type"],chtxt, title, bt, et, opt)
260 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
262 if pid != 0:#親プロセスの場合
264 else:#子プロセスの場合 アップデートを行って終了
265 type_final(task["type"],chtxt, title, bt, et, opt)
267 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
270 if pid != 0:#親プロセスの場合
272 else:#子プロセスの場合 アップデートを行って終了
274 type_decode_que(task["type"],chtxt, title, bt, et, opt)
276 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
279 if pid != 0:#親プロセスの場合
281 else:#子プロセスの場合 アップデートを行って終了
284 type_decode_que(task["type"],chtxt, title, bt, et, opt)
286 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
287 encodenum=encodenum+1
289 if pid != 0:#親プロセスの場合
291 else:#子プロセスの場合 アップデートを行って終了
292 time.sleep(5*encodenum)
293 type_encode_que(task["type"],chtxt, title, bt, et, opt)
296 def search_keyword(key):
297 tnow = datetime.datetime.now()
298 nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
300 recdatum = epgdb.searchtime_auto(k.decode('utf-8'),nows, "144")
301 for recdata in recdatum:
307 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
308 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
309 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
310 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
312 recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet,"")
313 except Exception, inst:
316 def type_reserve(typetxt,chtxt,title,bt,et,opt):
317 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
318 etime = et.strftime("%Y-%m-%d %H:%M:%S")
321 if typetxt==recdb.REC_RESERVE:
322 typetxtfinal=recdb.REC_FINAL_RESERVE
323 elif typetxt==recdb.REC_MOVE_AFTER_DECODE:
324 typetxtfinal=recdb.REC_MOVE_AFTER_DECODE_FINAL
325 elif typetxt==recdb.REC_MOVE_AFTER_RECORD:
326 typetxtfinal=recdb.REC_MOVE_AFTER_RECORD_FINAL
327 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE:
328 typetxtfinal=recdb.REC_MOVE_AFTER_ENCODE_FINAL
329 tnow = datetime.datetime.now()
331 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
332 if (dt < 58 * 60 and dt > 20 * 60):
333 bctypet = chdb.chtxtsearch(chtxt)['bctype']
334 chdatat = rec10d.rec10db.select_by_bctype_chdata(bctypet)
335 dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
336 dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
338 recdata = epgdb.searchtime2(title.decode('utf-8'), btime, "5", chtxt)
346 bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
347 et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
348 btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
349 etimen = et.strftime("%Y-%m-%d %H:%M:%S")
352 recdb.del_reckey(typetxtnow, title, chtxt, btime)
353 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
354 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
355 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
356 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
357 print "Oikake "+title+" : "+titlen+" "+btimen+" "+etimen
358 except Exception, inst:
359 print "Error happended in Oikake DB"
363 print "nothing match"
365 if rec10d.rec10db.select_by_bctype_chdata(bctypet)[0][6] != "0":
366 rec10d.rec10db.update_status_by_bctype_chdata(bctypet, "3")
370 recdb.del_reckey(typetxtnow, title, chtxt, btime)
371 recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
372 except Exception, inst:
375 def type_final(typetxt,chtxt,title,bt,et,opt):
376 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
377 etime = et.strftime("%Y-%m-%d %H:%M:%S")
381 if typetxt==recdb.REC_FINAL_RESERVE:
382 typetxting=recdb.REC_TS_RECORDING
383 typetxtdecque=recdb.REC_TS_DECODE_QUE
384 elif typetxt==recdb.REC_MOVE_AFTER_DECODE_FINAL:
385 typetxting=recdb.REC_MOVE_AFTER_DECODE_RECORDING
386 typetxtdecque=recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE
387 elif typetxt==recdb.REC_MOVE_AFTER_RECORD_FINAL:
388 typetxting=recdb.REC_MOVE_AFTER_RECORD_RECORDING
390 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_FINAL:
391 typetxting=recdb.REC_MOVE_AFTER_ENCODE_RECORDING
392 typetxtdecque=recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE
393 tnow = datetime.datetime.now()
395 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
397 if dt < 6 * 60 and dt > 0:
398 recdb.del_reckey(typetxtnow, title, chtxt, btime)
399 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
400 print "録画開始 "+title+" "+btime+" "+etime
403 testpath=[os.path.join(recpath,title+".ts.b25")]
404 testpath.append(os.path.join(recpath,title+".ts"))
405 testpath.append(os.path.join(recpath,title+".avi"))
406 testpath.append(os.path.join(recpath,title+".mkv"))
407 testpath.append(os.path.join(recpath,title+".log"))
410 if os.path.exists(ti):
413 ttitle=title+"_"+datetime.datetime.now().strftime("%Y%m%d%H%M")
414 tv2avi.timetv2b25(recpath + "/" + ttitle + ".avi", chtxt, btime, etime, opt)
415 recdb.del_reckey(typetxting, title, chtxt, btime)
416 if typetxtdecque != "":
417 tnow = datetime.datetime.now()
418 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
419 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
421 bt = tnow + datetime.timedelta(seconds=600)
422 et = et + dt + datetime.timedelta(seconds=600)
423 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
424 etime = et.strftime("%Y-%m-%d %H:%M:%S")
425 recdb.rec_reckey(typetxtdecque, ttitle, chtxt, btime, etime, opt)
427 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
429 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
430 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
431 etime = et.strftime("%Y-%m-%d %H:%M:%S")
434 if typetxt==recdb.REC_KEYWORD:
435 typetxtres=recdb.REC_RESERVE
436 tnow = datetime.datetime.now()
438 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
441 recdata = epgdb.searchtime2(title.decode('utf-8'), btime, deltatime, chtxt)
450 bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
451 et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
452 btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
453 etimet = et.strftime("%Y-%m-%d %H:%M:%S")
455 recdb.del_reckey(typetxtnow, title, chtxt, btime)
456 recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
457 recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
458 auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
459 auto_rec.add_key("ALL", titlet,exp+" "+longexp)
460 print "key "+title+" : "+titlet+" "+btimet+" "+etimet
461 except Exception, inst:
462 print "Error happened in REC_KEYWORD DB"
466 print "nothing match"
468 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
469 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
470 etime = et.strftime("%Y-%m-%d %H:%M:%S")
471 tnow = datetime.datetime.now()
473 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
474 dd = datetime.timedelta(days=int(deltaday))
476 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
479 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
480 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
481 recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
483 recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
484 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
487 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
488 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
489 recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
492 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
493 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
494 etime = et.strftime("%Y-%m-%d %H:%M:%S")
495 tnow = datetime.datetime.now()
497 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
502 if typetxt== recdb.REC_TS_DECODE_QUE:
503 typetxting=recdb.REC_TS_DECODING
504 typetxtmiss=recdb.REC_MISS_DECODE
505 typetxtencque=recdb.REC_ENCODE_QUE
506 elif typetxt== recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
507 typetxting=recdb.REC_MOVE_AFTER_DECODE_DECODING
508 typetxtmiss=recdb.REC_MISS_DECODE
510 elif typetxt== recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
511 typetxting=recdb.REC_MOVE_AFTER_ENCODE_DECODING
512 typetxtmiss=recdb.REC_MISS_DECODE
513 typetxtencque=recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE
514 tnow = datetime.datetime.now()
516 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
518 if status.getB25Decoding() < 2:
519 pin = recpath + "/" + title
520 recdb.del_reckey(typetxtnow, title, chtxt, btime)
521 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
522 tv2avi.b252ts(pin, chtxt, btime, etime, opt)
523 recdb.del_reckey(typetxting, title, chtxt, btime)
524 if not os.access(recpath + "/" + title + ".ts", os.F_OK):
525 recdb.del_reckey(typetxting, title, chtxt, btime)
526 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
527 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
528 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
530 if not typetxtencque=="":
531 tnow = datetime.datetime.now()
532 bt = tnow + datetime.timedelta(seconds=900)
534 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
535 etime = et.strftime("%Y-%m-%d %H:%M:%S")
536 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
538 if opt.rfind("d")>=0:
539 shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
540 elif opt.rfind("5")>=0:
541 shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
543 shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
544 #print checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts")
545 if checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts") == 1:
546 os.remove(recpath + "/" + title + ".ts.b25")
548 recdb.del_reckey(typetxtnow, title, chtxt, btime)
549 bt = bt + datetime.timedelta(seconds=600)
550 et = et + datetime.timedelta(seconds=600)
551 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
552 etime = et.strftime("%Y-%m-%d %H:%M:%S")
553 recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
556 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
557 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
558 etime = et.strftime("%Y-%m-%d %H:%M:%S")
559 tnow = datetime.datetime.now()
561 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
565 if typetxt==recdb.REC_ENCODE_QUE:
566 typetxting=recdb.REC_ENCODE_LOCAL
567 typetxtfin=recdb.REC_FIN_LOCAL
568 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
569 typetxting=recdb.REC_ENCODE_LOCAL
570 typetxtfin=recdb.REC_MOVE_END
572 if status.getEncoding() < int(configreader.getenv("enc_max")):
574 pin = recpath + "/" + title + ".ts"
575 if re.search("d", opt):
576 pin = recpath + "/" + title + ".sa.avi"
577 if re.search("5", opt):
578 pin = recpath + "/" + title + ".sa.avi"
579 #pout = recpath + "/" + title + ".avi"
580 pout = recpath + "/" + title + ".mp4"
581 print [pin, pout, opt]
583 #print pin+":"+pout+":"+opt
584 recdb.del_reckey(typetxtnow, title, chtxt, btime)
585 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
586 #tv2mkv.ts2mkv(pin, pout, opt)
587 tv2mp4.ts2mp4(pin, pout, opt)
588 #tv2avi.ts2avi(pin, pout, opt)
589 recdb.del_reckey(typetxting, title, chtxt, btime)
590 if typetxtfin==recdb.REC_MOVE_END:
591 shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
592 recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
595 recdb.del_reckey(typetxtnow, title, chtxt, btime)
596 bt = bt + datetime.timedelta(seconds=600)
597 et = et + datetime.timedelta(seconds=600)
598 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
599 etime = et.strftime("%Y-%m-%d %H:%M:%S")
600 recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)