3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
24 recpath = configreader.getpath('recpath')
25 movepath = configreader.getpath('move_destpath')
26 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
32 recdb.delete_old("24")
33 tasks = recdb.getnow("2")
34 inum = recdb.countRecNow_minutes("10")
35 print "番組表更新処理"+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
36 print "inum:" + str(inum) + "bscsrec:" + str(status.getBSCSRecording()) + "terec:" + str(status.getTERecording())
39 dnow=datetime.datetime.now()
40 if dnow.hour==12 and dnow.minute<5 :
45 for k in recdb.get_key():
47 update = chdb.update()
57 if bctype.find('te') > -1:
58 recnum = status.getTERecording() + recdb.countRecNow_minutes_TE("10")
59 print bctype + "//ing:" + str(status.getTERecording()) + ":task:" + str(recdb.countRecNow_minutes_TE("10"))
61 recnum = status.getBSCSRecording() + recdb.countRecNow_minutes_BSCS("10")
62 print bctype + "//ing:" + str(status.getBSCSRecording()) + ":task:" + str(recdb.countRecNow_minutes_BSCS("10"))
65 rec10d.rec10db.update_status_by_bctype_chdata(bctype, "0")
66 epgdb.updatebc(bctype)
67 update = chdb.update()
74 typetxt = task["type"]
85 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
88 bt = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
91 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
94 et = datetime.datetime.strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
99 tnow = datetime.datetime.now()
101 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
102 if task["type"] == recdb.REC_RESERVE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
104 if pid != 0:#親プロセスの場合
106 else:#子プロセスの場合 アップデートを行って終了
107 type_reserve(task["type"],chtxt,title,bt,et,opt)
108 elif task["type"] == recdb.REC_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
109 deltatime = task['deltatime']
111 if pid != 0:#親プロセスの場合
113 else:#子プロセスの場合 アップデートを行って終了
114 type_keyword(task["type"],chtxt,title, bt, et, opt, deltatime)
116 elif task["type"] == recdb.REC_KEYWORD_EVERY_SOME_DAYS:#"keyevery,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt+","+deltaday
117 deltatime = task['deltatime']
118 deltaday = task['deltaday']
120 if pid != 0:#親プロセスの場合
122 else:#子プロセスの場合 アップデートを行って終了
123 type_keyword_every_day(task["type"],chtxt, title, bt, et, opt, deltatime, deltaday)
125 elif task["type"] == recdb.REC_FINAL_RESERVE:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
127 if pid != 0:#親プロセスの場合
129 else:#子プロセスの場合 アップデートを行って終了
130 type_final(task["type"],chtxt, title, bt, et, opt)
132 elif task["type"] == recdb.REC_TS_DECODE_QUE:
135 if pid != 0:#親プロセスの場合
137 else:#子プロセスの場合 アップデートを行って終了
139 type_decode_que(task["type"],chtxt, title, bt, et, opt)
141 elif task["type"] == recdb.REC_ENCODE_QUE:
142 encodenum=encodenum+1
144 if pid != 0:#親プロセスの場合
146 else:#子プロセスの場合 アップデートを行って終了
147 time.sleep(5*encodenum)
148 type_encode_que(task["type"],chtxt, title, bt, et, opt)
150 elif task["type"] == recdb.REC_AVI_TO_MKV:
156 recdb.del_reckey(recdb.REC_AVI_TO_MKV, title, chtxt, btime)
157 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
158 tv2mkv.avi2mkv(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mkv"))
159 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
161 elif task["type"] == recdb.REC_AVI_TO_MP4:
167 recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
168 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
169 tv2mp4.avi2mp4(os.path.join(recpath,title+".avi"),os.path.join(recpath,title+".mp4"))
170 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
172 elif task["type"] == recdb.REC_MKV_TO_MP4:
178 recdb.del_reckey(recdb.REC_AVI_TO_MP4, title, chtxt, btime)
179 recdb.rec_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime, etime, opt)
180 tv2mp4.mkv2mp4(os.path.join(recpath,title+".mkv"),os.path.join(recpath,title+".mp4"))
181 recdb.del_reckey(recdb.REC_CHANGING_CANTAINER, title, chtxt, btime)
183 elif task["type"] == recdb.REC_AUTO_KEYWORD:#"key,"+chtxt+","+keyword+","+btime+","+deltatime+","+opt
186 recdatum = epgdb.searchtime_auto(title.decode('utf-8'), btime, deltatime, chtxt)
187 for recdata in recdatum:
196 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
197 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
198 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
199 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
201 recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet, opt)
202 except Exception, inst:
205 dd = datetime.timedelta(days=1)
208 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
209 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
211 recdb.del_reckey(recdb.REC_AUTO_KEYWORD, title, chtxt, btime)
212 recdb.auto_keyreserv(title, chtxt, btxt, etxt, "24", opt)
213 except Exception, inst:
216 elif task["type"] == recdb.REC_MOVE_AFTER_RECORD:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
218 if pid != 0:#親プロセスの場合
220 else:#子プロセスの場合 アップデートを行って終了
221 type_reserve(task["type"],chtxt,title,bt,et,opt)
223 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
225 if pid != 0:#親プロセスの場合
227 else:#子プロセスの場合 アップデートを行って終了
228 type_reserve(task["type"],chtxt,title,bt,et,opt)
230 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE:#"res,"+chtxt+","+title+","+btime+","+etime+","+opt
232 if pid != 0:#親プロセスの場合
234 else:#子プロセスの場合 アップデートを行って終了
235 type_reserve(task["type"],chtxt,title,bt,et,opt)
237 elif task["type"] == recdb.REC_MOVE_AFTER_RECORD_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
239 if pid != 0:#親プロセスの場合
241 else:#子プロセスの場合 アップデートを行って終了
242 type_final(task["type"],chtxt, title, bt, et, opt)
244 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
246 if pid != 0:#親プロセスの場合
248 else:#子プロセスの場合 アップデートを行って終了
249 type_final(task["type"],chtxt, title, bt, et, opt)
251 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_FINAL:#"rec,"+chtxt+","+title+","+btime+","+etime+","+opt
253 if pid != 0:#親プロセスの場合
255 else:#子プロセスの場合 アップデートを行って終了
256 type_final(task["type"],chtxt, title, bt, et, opt)
258 elif task["type"] == recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
261 if pid != 0:#親プロセスの場合
263 else:#子プロセスの場合 アップデートを行って終了
265 type_decode_que(task["type"],chtxt, title, bt, et, opt)
267 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
270 if pid != 0:#親プロセスの場合
272 else:#子プロセスの場合 アップデートを行って終了
275 type_decode_que(task["type"],chtxt, title, bt, et, opt)
277 elif task["type"] == recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
278 encodenum=encodenum+1
280 if pid != 0:#親プロセスの場合
282 else:#子プロセスの場合 アップデートを行って終了
283 time.sleep(5*encodenum)
284 type_encode_que(task["type"],chtxt, title, bt, et, opt)
287 def search_keyword(key):
288 tnow = datetime.datetime.now()
289 nows =tnow.strftime("%Y-%m-%d %H:%M:%S")
291 recdatum = epgdb.searchtime_auto(k.decode('utf-8'),nows, "144")
292 for recdata in recdatum:
298 btt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
299 ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
300 btimet = btt.strftime("%Y-%m-%d %H:%M:%S")
301 etimet = ett.strftime("%Y-%m-%d %H:%M:%S")
303 recdb.rec_reckey(recdb.REC_AUTO_SUGGEST_REC, titlet, chtxtt, btimet, etimet,"")
304 except Exception, inst:
307 def type_reserve(typetxt,chtxt,title,bt,et,opt):
308 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
309 etime = et.strftime("%Y-%m-%d %H:%M:%S")
312 if typetxt==recdb.REC_RESERVE:
313 typetxtfinal=recdb.REC_FINAL_RESERVE
314 elif typetxt==recdb.REC_MOVE_AFTER_DECODE:
315 typetxtfinal=recdb.REC_MOVE_AFTER_DECODE_FINAL
316 elif typetxt==recdb.REC_MOVE_AFTER_RECORD:
317 typetxtfinal=recdb.REC_MOVE_AFTER_RECORD_FINAL
318 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE:
319 typetxtfinal=recdb.REC_MOVE_AFTER_ENCODE_FINAL
320 tnow = datetime.datetime.now()
322 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
323 if (dt < 58 * 60 and dt > 20 * 60):
324 bctypet = chdb.chtxtsearch(chtxt)['bctype']
325 chdatat = rec10d.rec10db.select_by_bctype_chdata(bctypet)
326 dt1 = datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")-datetime.datetime.now()
327 dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
329 recdata = epgdb.searchtime2(title.decode('utf-8'), btime, "5", chtxt)
337 bt = datetime.datetime.strptime(btimen, "%Y-%m-%d %H:%M:%S")
338 et = datetime.datetime.strptime(etimen, "%Y-%m-%d %H:%M:%S")
339 btimen = bt.strftime("%Y-%m-%d %H:%M:%S")
340 etimen = et.strftime("%Y-%m-%d %H:%M:%S")
343 recdb.del_reckey(typetxtnow, title, chtxt, btime)
344 recdb.rec_reckey(typetxtfinal, titlen, chtxtn, btimen, etimen, opt)
345 recdb.rec_reclog(titlen, chtxtn, btimen, etimen, opt, exp, longexp, category)
346 auto_rec.add_key(chtxt, titlen,exp+" "+longexp)
347 auto_rec.add_key("ALL", titlen,exp+" "+longexp)
348 print "Oikake "+title+" : "+titlen+" "+btimen+" "+etimen
349 except Exception, inst:
350 print "Error happended in Oikake DB"
354 print "nothing match"
356 if rec10d.rec10db.select_by_bctype_chdata(bctypet)[0][6] != "0":
357 rec10d.rec10db.update_status_by_bctype_chdata(bctypet, "3")
361 recdb.del_reckey(typetxtnow, title, chtxt, btime)
362 recdb.rec_reckey(typetxtfinal, title, chtxt, btime, etime, opt)
363 except Exception, inst:
366 def type_final(typetxt,chtxt,title,bt,et,opt):
367 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
368 etime = et.strftime("%Y-%m-%d %H:%M:%S")
372 if typetxt==recdb.REC_FINAL_RESERVE:
373 typetxting=recdb.REC_TS_RECORDING
374 typetxtdecque=recdb.REC_TS_DECODE_QUE
375 elif typetxt==recdb.REC_MOVE_AFTER_DECODE_FINAL:
376 typetxting=recdb.REC_MOVE_AFTER_DECODE_RECORDING
377 typetxtdecque=recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE
378 elif typetxt==recdb.REC_MOVE_AFTER_RECORD_FINAL:
379 typetxting=recdb.REC_MOVE_AFTER_RECORD_RECORDING
381 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_FINAL:
382 typetxting=recdb.REC_MOVE_AFTER_ENCODE_RECORDING
383 typetxtdecque=recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE
384 tnow = datetime.datetime.now()
386 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
388 if dt < 6 * 60 and dt > 0:
389 recdb.del_reckey(typetxtnow, title, chtxt, btime)
390 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
391 print "録画開始 "+title+" "+btime+" "+etime
394 testpath=[os.path.join(recpath,title+".ts.b25")]
395 testpath.append(os.path.join(recpath,title+".ts"))
396 testpath.append(os.path.join(recpath,title+".avi"))
397 testpath.append(os.path.join(recpath,title+".mkv"))
398 testpath.append(os.path.join(recpath,title+".log"))
401 if os.path.exists(ti):
404 ttitle=title+"_"+datetime.datetime.now().strftime("%Y%m%d%H%M")
405 tv2avi.timetv2b25(recpath + "/" + ttitle + ".avi", chtxt, btime, etime, opt)
406 recdb.del_reckey(typetxting, title, chtxt, btime)
407 if typetxtdecque != "":
408 tnow = datetime.datetime.now()
409 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
410 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
412 bt = tnow + datetime.timedelta(seconds=600)
413 et = et + dt + datetime.timedelta(seconds=600)
414 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
415 etime = et.strftime("%Y-%m-%d %H:%M:%S")
416 recdb.rec_reckey(typetxtdecque, ttitle, chtxt, btime, etime, opt)
418 shutil.copy(os.path.join(recpath,title+".ts.b25"), os.path.join(movepath,title+".ts.b25"))
420 def type_keyword(typetxt,chtxt,title,bt,et,opt,deltatime):
421 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
422 etime = et.strftime("%Y-%m-%d %H:%M:%S")
425 if typetxt==recdb.REC_KEYWORD:
426 typetxtres=recdb.REC_RESERVE
427 tnow = datetime.datetime.now()
429 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
432 recdata = epgdb.searchtime2(title.decode('utf-8'), btime, deltatime, chtxt)
441 bt = datetime.datetime.strptime(btimet, "%Y-%m-%d %H:%M:%S")
442 et = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S")
443 btimet = bt.strftime("%Y-%m-%d %H:%M:%S")
444 etimet = et.strftime("%Y-%m-%d %H:%M:%S")
446 recdb.del_reckey(typetxtnow, title, chtxt, btime)
447 recdb.rec_reckey(typetxtres, titlet, chtxtt, btimet, etimet, opt)
448 recdb.rec_reclog(titlet, chtxtt, btimet, etimet, opt, exp,longexp,category)
449 auto_rec.add_key(chtxt, titlet,exp+" "+longexp)
450 auto_rec.add_key("ALL", titlet,exp+" "+longexp)
451 print "key "+title+" : "+titlet+" "+btimet+" "+etimet
452 except Exception, inst:
453 print "Error happened in REC_KEYWORD DB"
457 print "nothing match"
459 def type_keyword_every_day(type,chtxt,title,bt,et,opt,deltatime,deltaday):
460 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
461 etime = et.strftime("%Y-%m-%d %H:%M:%S")
462 tnow = datetime.datetime.now()
464 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
465 dd = datetime.timedelta(days=int(deltaday))
467 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
470 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
471 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
472 recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
474 recdb.keyreserv(title, chtxt, btime, etime, deltatime, opt)
475 recdb.del_reckey(recdb.REC_KEYWORD_EVERY_SOME_DAYS, title, chtxt, btime)
478 btxt = bt.strftime("%Y-%m-%d %H:%M:%S")
479 etxt = et.strftime("%Y-%m-%d %H:%M:%S")
480 recdb.everyreserv(title, chtxt, btxt, etxt, deltatime, opt, deltaday)
483 def type_decode_que(typetxt,chtxt,title,bt,et,opt):
484 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
485 etime = et.strftime("%Y-%m-%d %H:%M:%S")
486 tnow = datetime.datetime.now()
488 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
493 if typetxt== recdb.REC_TS_DECODE_QUE:
494 typetxting=recdb.REC_TS_DECODING
495 typetxtmiss=recdb.REC_MISS_DECODE
496 typetxtencque=recdb.REC_ENCODE_QUE
497 elif typetxt== recdb.REC_MOVE_AFTER_DECODE_DECODE_QUE:
498 typetxting=recdb.REC_MOVE_AFTER_DECODE_DECODING
499 typetxtmiss=recdb.REC_MISS_DECODE
501 elif typetxt== recdb.REC_MOVE_AFTER_ENCODE_DECODE_QUE:
502 typetxting=recdb.REC_MOVE_AFTER_ENCODE_DECODING
503 typetxtmiss=recdb.REC_MISS_DECODE
504 typetxtencque=recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE
505 tnow = datetime.datetime.now()
507 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
509 if status.getB25Decoding() < 2:
510 pin = recpath + "/" + title
511 recdb.del_reckey(typetxtnow, title, chtxt, btime)
512 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
513 tv2avi.b252ts(pin, chtxt, btime, etime, opt)
514 recdb.del_reckey(typetxting, title, chtxt, btime)
515 if not os.access(recpath + "/" + title + ".ts", os.F_OK):
516 recdb.del_reckey(typetxting, title, chtxt, btime)
517 recdb.rec_reckey(typetxtmiss, title, chtxt, btime, etime, opt)
518 bt = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S")
519 et = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S")
521 if not typetxtencque=="":
522 tnow = datetime.datetime.now()
523 bt = tnow + datetime.timedelta(seconds=900)
525 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
526 etime = et.strftime("%Y-%m-%d %H:%M:%S")
527 recdb.rec_reckey(typetxtencque, title, chtxt, btime, etime, opt)
529 if opt.rfind("d")>=0:
530 shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
531 elif opt.rfind("5")>=0:
532 shutil.copy(os.path.join(recpath,title+".sa.avi"),os.path.join(movepath,title+".sa.avi"))
534 shutil.copy(os.path.join(recpath,title+".ts"), os.path.join(movepath,title+".ts"))
535 #print checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts")
536 if checker.checkB25Decode(recpath + "/" + title + ".ts.b25", recpath + "/" + title + ".ts") == 1:
537 os.remove(recpath + "/" + title + ".ts.b25")
539 recdb.del_reckey(typetxtnow, title, chtxt, btime)
540 bt = bt + datetime.timedelta(seconds=600)
541 et = et + datetime.timedelta(seconds=600)
542 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
543 etime = et.strftime("%Y-%m-%d %H:%M:%S")
544 recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)
547 def type_encode_que(typetxt,chtxt,title,bt,et,opt):
548 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
549 etime = et.strftime("%Y-%m-%d %H:%M:%S")
550 tnow = datetime.datetime.now()
552 dt = dtt.days * 24 * 60 * 60 + dtt.seconds
556 if typetxt==recdb.REC_ENCODE_QUE:
557 typetxting=recdb.REC_ENCODE_LOCAL
558 typetxtfin=recdb.REC_FIN_LOCAL
559 elif typetxt==recdb.REC_MOVE_AFTER_ENCODE_ENCODE_QUE:
560 typetxting=recdb.REC_ENCODE_LOCAL
561 typetxtfin=recdb.REC_MOVE_END
563 if status.getEncoding() < int(configreader.getenv("enc_max")):
565 pin = recpath + "/" + title + ".ts"
566 if re.search("d", opt):
567 pin = recpath + "/" + title + ".sa.avi"
568 if re.search("5", opt):
569 pin = recpath + "/" + title + ".sa.avi"
570 #pout = recpath + "/" + title + ".avi"
571 pout = recpath + "/" + title + ".mp4"
572 print [pin, pout, opt]
574 #print pin+":"+pout+":"+opt
575 recdb.del_reckey(typetxtnow, title, chtxt, btime)
576 recdb.rec_reckey(typetxting, title, chtxt, btime, etime, opt)
577 #tv2mkv.ts2mkv(pin, pout, opt)
578 tv2mp4.ts2mp4(pin, pout, opt)
579 #tv2avi.ts2avi(pin, pout, opt)
580 recdb.del_reckey(typetxting, title, chtxt, btime)
581 if typetxtfin==recdb.REC_MOVE_END:
582 shutil.copy(os.path.join(recpath,title+".mp4"), os.path.join(movepath,title+".mp4"))
583 recdb.rec_reckey(typetxtfin, title, chtxt, btime, etime, opt)
586 recdb.del_reckey(typetxtnow, title, chtxt, btime)
587 bt = bt + datetime.timedelta(seconds=600)
588 et = et + datetime.timedelta(seconds=600)
589 btime = bt.strftime("%Y-%m-%d %H:%M:%S")
590 etime = et.strftime("%Y-%m-%d %H:%M:%S")
591 recdb.rec_reckey(typetxtnow, title, chtxt, btime, etime, opt)