From 16522d25622fa3edf1b5f40c9eada4d2017e827a Mon Sep 17 00:00:00 2001 From: gn64_jp Date: Fri, 25 Dec 2009 06:46:26 +0000 Subject: [PATCH] implement auto jbk rec. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@361 4e526526-5e11-4fc0-8910-f8fd03428081 --- rec10/trunk/src/dbMySQL.py | 99 ++++++++++++++++++++++++++++++++++++++++++- rec10/trunk/src/epgdb.py | 43 ++++++++++++++++++- rec10/trunk/src/install.py | 2 + rec10/trunk/src/status.py | 8 ++++ rec10/trunk/src/timerec.py | 30 ++++++++++--- rec10/trunk/src/tv2mkv.py | 4 +- rec10/trunk/src/xml2db_dom.py | 20 ++++++++- 7 files changed, 195 insertions(+), 11 deletions(-) diff --git a/rec10/trunk/src/dbMySQL.py b/rec10/trunk/src/dbMySQL.py index d2de218..057b6b8 100644 --- a/rec10/trunk/src/dbMySQL.py +++ b/rec10/trunk/src/dbMySQL.py @@ -49,6 +49,7 @@ class DB_MySQL: self.new_in_auto_bayes_key() self.new_in_auto_jbk_key() self.new_in_status() + self.new_in_settings() self.new_auto_timeline_bayes() self.new_auto_timeline_keyword() def connect_db(self): @@ -297,6 +298,47 @@ class DB_MySQL: except: "" self.close_db(db) + def drop_in_settings(self): + db = self.connect_db() + try: + db[1].execute('drop table in_settings') + except: + "" + self.close_db(db) + def new_in_settings(self): + db = self.connect_db() + try: + db[1].execute('\ + CREATE TABLE in_settings \ + (\ + auto_jbk TINYINT,\ + auto_bayes TINYINT,\ + auto_opt VARCHAR(20),\ + auto_del_tmp TINYINT\ + )') + db[1].execute("INSERT IGNORE into in_settings VALUE (0,0,\"G\",1)") + except: + "" + self.close_db(db) + def select_all_in_settings(self): + db = self.connect_db() + dbexe = db[1].execute("\ + SELECT auto_jbk,auto_bayes,auto_del_tmp,auto_opt \ + FROM in_settings \ + ") + ret = [] + dls = [] + if dbexe > 0: + dls = db[1].fetchall() + self.close_db(db) + for dl in dls: + r = list(dl) + r[0]=str(r[0]) + r[1]=str(r[1]) + r[2]=str(r[2]) + r[3]=r[3] + ret.append(r) + return ret def add_in_timeline_log(self , chtxt="", title="", btime="", etime="", opt="", exp="", longexp="", category=""): db = self.connect_db() db[1].execute('\ @@ -439,7 +481,62 @@ class DB_MySQL: ret['deltaday'] = deltaday recdatum.append(ret) return recdatum - def select_bytime_all_timeline(self,btime,etime,chtxt): + def select_bytime_all_timeline(self,btime,etime): + db = self.connect_db() + recdatum = [] + #dbr=db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime WHERE btime < DATE_SUB(now(),INTERVAL "+dminutes+" MINUTE ) AND btime > DATE_ADD(now(),INTERVAL "+dminutes+" MINUTE )") + dbr = db[1].execute("SELECT \ + type, chtxt, title, btime, etime, deltatime ,deltaday ,opt \ + FROM timeline \ + WHERE btime > %s AND \ + etime < %s",(btime,etime)) + dbl = db[1].fetchall() + self.close_db(db) + #recdblist.printutf8(dbl) + if dbr > 0: + for typet, chtxt, title, btime, etime, deltatime, deltaday, opt in dbl: + ret = {} + ret['type'] = typet + ret['chtxt'] = chtxt + ret['title'] = title + btime = btime.strftime("%Y-%m-%d %H:%M:%S") + etime = etime.strftime("%Y-%m-%d %H:%M:%S") + ret['btime'] = btime + ret['etime'] = etime + ret['opt'] = opt + if deltatime == None or deltatime == "": + deltatime = "3" + if deltaday == None or deltaday == "": + deltaday = "7" + if typet == recdblist.REC_KEYWORD: + ret['deltatime'] = deltatime + elif typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS: + ret['deltatime'] = deltatime + ret['deltaday'] = deltaday + recdatum.append(ret) + return recdatum + def count_schedule_timeline(self, btime, etime): + """ + count rectasknum + return [te num,bs/cs num] + """ + db = self.connect_db() + dbexe = "SELECT type,epg_ch.bctype,timeline.chtxt,title FROM timeline INNER JOIN epg_ch ON timeline.chtxt=epg_ch.chtxt" + dbexe = dbexe + " WHERE NOT( ( timeline.etime <= %s ) OR ( timeline.btime >= %s ) )" + Srec = 0 + Trec = 0 + db[1].execute(dbexe, (btime, etime)) + for typet, bctypet, chtxtt, titlet in db[1].fetchall(): + if (typet == recdblist.REC_RESERVE) or (typet == recdblist.REC_FINAL_RESERVE) or (typet == recdblist.REC_KEYWORD) or (typet == recdblist.REC_KEYWORD_EVERY_SOME_DAYS): + if bctypet.find("cs") > -1: + Srec = Srec + 1 + elif bctypet.find("bs") > -1: + Srec = Srec + 1 + elif bctypet.find("te") > -1: + Trec = Trec + 1 + self.close_db(db) + return [Trec, Srec] + def select_bytime_bychtxt_all_timeline(self,btime,etime,chtxt): db = self.connect_db() recdatum = [] #dbr=db[1].execute("SELECT type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime WHERE btime < DATE_SUB(now(),INTERVAL "+dminutes+" MINUTE ) AND btime > DATE_ADD(now(),INTERVAL "+dminutes+" MINUTE )") diff --git a/rec10/trunk/src/epgdb.py b/rec10/trunk/src/epgdb.py index 83a4b6c..06cde33 100644 --- a/rec10/trunk/src/epgdb.py +++ b/rec10/trunk/src/epgdb.py @@ -98,4 +98,45 @@ def searchtime_auto(keytxt, timet, deltatime): etime = stop etime = etime[0:4] + "-" + etime[4:6] + "-" + etime[6:8] + " " + etime[8:10] + ":" + etime[10:12] + ":00" ret.append([chtxtt, title, btime, etime,exp,longexp,category]) - return ret \ No newline at end of file + return ret +def count_schedule(btime,etime): + """ + return rec num (int return[0]:TE /int return[1]:BS/CS) + """ + def cmpare(x, y): + xt = x + yt = y + if xt > yt: + return -1 + elif xt == yt: + return 0 + else: + return 1 + dls = rec10d.rec10db.select_bytime_all_timeline(btime, etime) + times = [] + btd = datetime.datetime.strptime(btime, "%Y-%m-%d %H:%M:%S") + etd = datetime.datetime.strptime(etime, "%Y-%m-%d %H:%M:%S") + for dl in dls: + dd1 = datetime.datetime.strptime(dl['btime'], "%Y-%m-%d %H:%M:%S") + dd2 = datetime.datetime.strptime(dl['etime'], "%Y-%m-%d %H:%M:%S") + if dd1 < btd: + dd1 = btd + if dd2 > etd: + dd2 = etd + times.append(dd1) + times.append(dd2) + times = list(set(times)) + times.sort(cmpare) + times.reverse() + retcount = [0, 0] + for i in xrange(0, len(times)-2, 1): + bt1 = times[i] + et1 = times[i + 1] + btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S") + etime1 = et1.strftime("%Y-%m-%d %H:%M:%S") + ret1 = rec10d.rec10db.count_schedule_timeline(btime1, etime1) + if retcount[0] < ret1[0]: + retcount[0] = ret1[0] + if retcount[1] < ret1[1]: + retcount[1] = ret1[1] + return retcount \ No newline at end of file diff --git a/rec10/trunk/src/install.py b/rec10/trunk/src/install.py index e4ea1d6..a1ad5ad 100644 --- a/rec10/trunk/src/install.py +++ b/rec10/trunk/src/install.py @@ -40,8 +40,10 @@ def install(): try: import rec10d rec10d.rec10db.drop_in_status() + rec10d.rec10db.drop_in_settings() time.sleep(2) rec10d.rec10db.new_in_status() + rec10d.rec10db.new_in_settings() except Exception, inst: recdblist.printutf8(u"DB処理中にエラーが出ました。configファイルのDB設定を見直してください。") print type(inst) diff --git a/rec10/trunk/src/status.py b/rec10/trunk/src/status.py index 8f90bc0..ed0ebdd 100755 --- a/rec10/trunk/src/status.py +++ b/rec10/trunk/src/status.py @@ -29,3 +29,11 @@ def getBSCSRecording(): return int(rec10d.rec10db.select_all_in_status()[0][2]) def getB25Decoding(): return int(rec10d.rec10db.select_all_in_status()[0][3]) +def getSettings_auto_bayes(): + return int(rec10d.rec10db.select_all_in_settings()[0][1]) +def getSettings_auto_jbk(): + return int(rec10d.rec10db.select_all_in_settings()[0][0]) +def getSettings_auto_del_tmp(): + return int(rec10d.rec10db.select_all_in_settings()[0][2]) +def getSettings_auto_opt(): + return rec10d.rec10db.select_all_in_settings()[0][3] diff --git a/rec10/trunk/src/timerec.py b/rec10/trunk/src/timerec.py index 1bb2d55..06a7dc7 100644 --- a/rec10/trunk/src/timerec.py +++ b/rec10/trunk/src/timerec.py @@ -217,12 +217,30 @@ def search_keyword(key): ett = datetime.datetime.strptime(etimet, "%Y-%m-%d %H:%M:%S") btimet = btt.strftime("%Y-%m-%d %H:%M:%S") etimet = ett.strftime("%Y-%m-%d %H:%M:%S") - try: - recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet) - except Exception, inst: - print "error occures in search_keyword" - print type(inst) - print inst + if status.getSettings_auto_jbk()==1: + topt=status.getSettings_auto_opt() + try: + maxnum=0 + if len(ch['ch'])>2: + maxnum=epgdb.count_schedule_timeline(btimet, etimet)[1] + maxnum=int(configreader.getenv("bscs_max"))-maxnum + else: + maxnum=epgdb.count_schedule_timeline(btimet, etimet)[0] + maxnum=int(configreader.getenv("te_max"))-maxnum + if maxnum>0: + topt=status.getSettings_auto_opt() + recdb.recreserv(titlet,chtxtt, btimet, etimet,topt) + except Exception, inst: + print "error occures in search_keyword_auto_jbk" + print type(inst) + print inst + else: + try: + recdb.add_auto_keyword(chtxtt, titlet, btimet, etimet) + except Exception, inst: + print "error occures in search_keyword" + print type(inst) + print inst def type_reserve(typetxt,chtxt,title,bt,et,opt): btime = bt.strftime("%Y-%m-%d %H:%M:%S") etime = et.strftime("%Y-%m-%d %H:%M:%S") diff --git a/rec10/trunk/src/tv2mkv.py b/rec10/trunk/src/tv2mkv.py index 02d8e75..d4aad9f 100644 --- a/rec10/trunk/src/tv2mkv.py +++ b/rec10/trunk/src/tv2mkv.py @@ -1,3 +1,4 @@ +import status #!/usr/bin/python # coding: UTF-8 # Rec10 TS Recording Tools @@ -84,7 +85,8 @@ def avi2mkv(pin,pout,opt): else: txt=txt+execcomd(e1) logo=pout.replace(".mkv",".log") - deltitle(dir,title) + if status.getSettings_auto_del_tmp()==1: + deltitle(dir,title) txt = "\n####mkvmerge-log####\n"+txt f=open(logo,'a') f.write(txt.encode('utf-8')) diff --git a/rec10/trunk/src/xml2db_dom.py b/rec10/trunk/src/xml2db_dom.py index 46585b0..c1124ab 100644 --- a/rec10/trunk/src/xml2db_dom.py +++ b/rec10/trunk/src/xml2db_dom.py @@ -1,3 +1,5 @@ +from timerec import epgdb +import status #!/usr/bin/python # coding: UTF-8 # Rec10 TS Recording Tools @@ -67,7 +69,7 @@ def xml2db_dom(xmlpath, bctype):#bctypeは放送種別で'TE'(地デジ)BS,CSが ettt=datetime.datetime.strptime(stop,"%Y%m%d%H%M%S") ettt=ettt+datetime.timedelta(seconds=1200) ettime=ettt.strftime("%Y-%m-%d %H:%M:%S") - chs=rec10d.rec10db.select_bytime_all_timeline(bttime,ettime,tch['chtxt']) + chs=rec10d.rec10db.select_bytime_bychtxt_all_timeline(bttime,ettime,tch['chtxt']) p2=0 if len(chs)>0: for ch in chs: @@ -75,7 +77,21 @@ def xml2db_dom(xmlpath, bctype):#bctypeは放送種別で'TE'(地デジ)BS,CSが if p2t>p2: p2=p2t if p2<350: - recdb.add_auto_bayes(tch['chtxt'],title,start,stop,p) + if status.getSettings_auto_bayes()==1: + if p2<200: + maxnum=0 + if len(ch['ch'])>2: + maxnum=epgdb.count_schedule_timeline(bttime, ettime)[1] + maxnum=int(configreader.getenv("bscs_max"))-maxnum + else: + maxnum=epgdb.count_schedule_timeline(bttime, ettime)[0] + maxnum=int(configreader.getenv("te_max"))-maxnum + if maxnum>0: + topt=status.getSettings_auto_opt() + recdb.recreserv(title,tch['chtxt'], bttime, ettime,topt) + else: + recdb.add_auto_bayes(tch['chtxt'],title,start,stop,p) + dom.unlink() if len(chlist) > 0: writemultichDB(chlist) -- 2.11.0