X-Git-Url: http://git.osdn.net/view?p=rec10%2Frec10-git.git;a=blobdiff_plain;f=rec10%2Ftrunk%2Fsrc%2Fauto_move.py;h=9f7f95efb508466c5dedfdabca3daadfe99ca5fe;hp=bf2876b05baa06a05e58c0742c6a377b21eaf3aa;hb=3ebb101303a74c7239e34337f10e16b0bbbb2eba;hpb=066be10a1c5f0431d0b688179ef77309e03e8f54 diff --git a/rec10/trunk/src/auto_move.py b/rec10/trunk/src/auto_move.py index bf2876b..9f7f95e 100644 --- a/rec10/trunk/src/auto_move.py +++ b/rec10/trunk/src/auto_move.py @@ -1,190 +1,154 @@ -#!/usr/bin/python -# coding: UTF-8 -# Rec10 TS Recording Tools -# Copyright (C) 2009-2010 Yukikaze - -import glob -import os -import os.path -import re -import time -import shutil - -import n_gram -import recdblist -def getTitle(title): - rT=re.compile("(.+)_(\d+)\Z") - tT=rT.match(title) - rT2=re.compile("(.+)_(.+)_(\d*)\Z")#_(aichi)_2010-02-06T01:59:00.mkv - tT2=rT2.match(title) - rT3=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+:\d+:\d+\Z")#_(aichi)_2010-02-06T01:59:00.mkv - tT3=rT3.match(title) - rT4=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+-\d+-\d+\Z")#_(aichi)_2010-02-06T01-59-00.mkv - tT4=rT4.match(title) - rT5=re.compile("(.+)_(.+)_(.+)\Z")#_(aichi)_2010-02-06T01-59-00.mkv - tT5=rT5.match(title) - ntitle=title - if tT : - ntitle=tT.group(1) - elif tT2: - ntitle=tT2.group(1) - elif tT3: - ntitle=tT3.group(1) - elif tT4: - ntitle=tT4.group(1) - elif tT5: - ntitle=tT5.group(1) - return ntitle -def detNameType(title): - """ - type A ---title# - type B ---title#subtitle - type C ---title subtitle - type D ---title(without number) - """ - recdblist.printutf8(title) - #rA=re.compile(".+(?P)#\d(?P<num>)\s[0,10]\z") - rA=re.compile("(.+)#(\d*)\s*\Z") - tA=rA.match(title) - rB=re.compile("(.+)#(\d*)\s*(\D*)") - tB=rB.match(title) - if tA: - recdblist.printutf8("typeA") - recdblist.printutf8("title="+tA.group(1)) - recdblist.printutf8("num="+tA.group(2)) - elif tB: - recdblist.printutf8("typeB") - recdblist.printutf8("title="+tB.group(1)) - recdblist.printutf8("num="+tB.group(2)) - recdblist.printutf8("subtitle="+tB.group(3)) -def search_file(temppath,recpath,ext): - """ - 録画一時フォルダ内mkvファイルを検索 - """ - avilist = glob.glob(temppath + "/*"+ext) - ret=[] - for avif in avilist: - ##b25f is title.ts.b25 avi is title.avi - dir = os.path.split(avif)[0] - title = os.path.split(avif)[1] - title = title.replace(ext, "") - avipath = os.path.join(dir, title + ext) - dtime = time.time()-os.path.getmtime(avipath) - dtime = int(dtime) - if dtime > 300: - if veryfySize(avipath): - ret.append(title) - return ret -def get_move_dest_path(title,temppath,recpath,ext): - dstpath=os.path.join(recpath,title+ext) - srcpath=os.path.join(temppath,title+ext) - if os.path.exists(dstpath): - gmtime=time.gmtime(os.path.getmtime(srcpath)) - iff="" - try: - iff=u"("+configreader.getenv("iff")+u")_" - if iff==u"()_": - iff = u"" - except: - iff="" - title=title+u"_"+iff+time.strftime("%Y-%m-%dT%H-%M-%S",gmtime) - return title -def get_delpath(temppath,title): - delpath=[os.path.join(temppath,title+".ts")] - delpath.append(os.path.join(temppath,title+".avi")) - delpath.append(os.path.join(temppath,title+".mp4")) - delpath.append(os.path.join(temppath,title+".m2v")) - delpath.append(os.path.join(temppath,title+".mkv")) - delpath.append(os.path.join(temppath,title+".120.avi")) - delpath.append(os.path.join(temppath,title+".timecode.txt")) - delpath.append(os.path.join(temppath,title+".aac")) - delpath.append(os.path.join(temppath,title+".ts.b25")) - delpath.append(os.path.join(temppath,title+".ts.tsmix")) - delpath.append(os.path.join(temppath,title+".ts.log")) - delpath.append(os.path.join(temppath,title+".sa.avi")) - delpath.append(os.path.join(temppath,title+".sa.avi.log")) - delpath.append(os.path.join(temppath,title+".log")) - return delpath -def veryfySize(path): - #vsize=[297,497,596,1196]#SD 30m 1h 1.5h 2h - vsize=[245,275,295,591,830] - vsize=vsize+[325,449,560,590,602,690,805,860,1014,1138,1237] - vsize=vsize+[261,535,540,616,740]#HD 30m 1h - #vsize=vsize+[381,895,447] - ret = 0 - for size in vsize: - if os.path.getsize(path)>(size-10)*1024*1024 and os.path.getsize(path)<(size+10)*1024*1024: - ret=1 - if os.path.getsize(path)>270*1024*1024: - ret=1 - return ret -def searchFolder(title,path,threshold=500): - """ - titleにマッチするフォルダを探し出す。 - """ - folderpath=os.listdir(path) - lfpath=[] - ngram=[] - for ft in folderpath: - fullpath=os.path.join(path.encode('utf-8'), ft) - if os.path.isdir(fullpath): - lfpath.append(fullpath) - ftt=os.listdir(fullpath) - if len(ftt)>0: - for ft2 in ftt: - try: - folderpath.append(os.path.join(fullpath, ft2)) - except Exception, inst: - #print type(inst) - #print inst +#!/usr/bin/python +# coding: UTF-8 +# Rec10 TS Recording Tools +# Copyright (C) 2009-2011 Yukikaze + +import glob +import os +import os.path +import re +import time +import shutil +import traceback +import sys + +import recdblist +import guess +def getTitle(title): + rT=re.compile("(.+)_(\d+)\Z") + tT=rT.match(title) + rT2=re.compile("(.+)_(.+)_(\d*)\Z")#_(aichi)_2010-02-06T01:59:00.mkv + tT2=rT2.match(title) + rT3=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+:\d+:\d+\Z")#_(aichi)_2010-02-06T01:59:00.mkv + tT3=rT3.match(title) + rT4=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+-\d+-\d+\Z")#_(aichi)_2010-02-06T01-59-00.mkv + tT4=rT4.match(title) + rT5=re.compile("(.+)_(.+)_(.+)\Z")#_(aichi)_2010-02-06T01-59-00.mkv + tT5=rT5.match(title) + ntitle=title + if tT : + ntitle=tT.group(1) + elif tT2: + ntitle=tT2.group(1) + elif tT3: + ntitle=tT3.group(1) + elif tT4: + ntitle=tT4.group(1) + elif tT5: + ntitle=tT5.group(1) + return ntitle +def searchFile(temppath,recpath,ext): + """ + 録画一時フォルダ内ファイルを検索 + """ + avilist = glob.glob(temppath + "/*"+ext) + ret=[] + for avif in avilist: + ##b25f is title.ts.b25 avi is title.avi + dir = os.path.split(avif)[0] + title = os.path.split(avif)[1] + title = title.replace(ext, "") + avipath = os.path.join(dir, title + ext) + if os.path.exists(avipath): + dtime = time.time()-os.path.getmtime(avipath) + dtime = int(dtime) + if dtime > 300: + if veryfySize(avipath): + ret.append(title) + return ret +def getMoveDestpath(title,temppath,recpath,ext): + dstpath=os.path.join(recpath,title+ext) + srcpath=os.path.join(temppath,title+ext) + if os.path.exists(dstpath): + if not os.path.getsize(dstpath) == os.path.getsize(srcpath): + gmtime=time.gmtime(os.path.getmtime(srcpath)) + iff="" + try: + iff=u"("+configreader.getConfEnv("iff")+u")_" + if iff==u"()_": + iff = u"" + except: + iff="" + title=title+u"_"+iff+time.strftime("%Y-%m-%dT%H-%M-%S",gmtime) + else: + recdblist.printutf8(u"同サイズのファイルが存在します") + + return title +def getDelpath(temppath,title,addfp=1): + delpath=[os.path.join(temppath,title+".ts")] + delpath.append(os.path.join(temppath,title+".avi")) + if addfp==1: + delpath.append(os.path.join(temppath,title+".mp4")) + delpath.append(os.path.join(temppath,title+".mkv")) + delpath.append(os.path.join(temppath,title+".m2v")) + delpath.append(os.path.join(temppath,title+".120.avi")) + delpath.append(os.path.join(temppath,title+".timecode.txt")) + delpath.append(os.path.join(temppath,title+".aac")) + delpath.append(os.path.join(temppath,title+".ts.b25")) + delpath.append(os.path.join(temppath,title+".ts.tsmix")) + delpath.append(os.path.join(temppath,title+".ts.log")) + delpath.append(os.path.join(temppath,title+".sa.avi")) + delpath.append(os.path.join(temppath,title+".sa.avi.log")) + delpath.append(os.path.join(temppath,title+".log")) + delpath.append(os.path.join(temppath,title+".log.zip")) + return delpath +def veryfySize(path): + #vsize=[297,497,596,1196]#SD 30m 1h 1.5h 2h + vsize=[245,275,295,591,830] + vsize=vsize+[325,449,560,590,602,690,805,860,1014,1138,1237] + vsize=vsize+[261,535,540,616,740]#HD 30m 1h + #vsize=vsize+[381,895,447] + ret = 0 + for size in vsize: + if os.path.getsize(path)>(size-10)*1024*1024 and os.path.getsize(path)<(size+10)*1024*1024: + ret=1 + if os.path.getsize(path)>270*1024*1024: + ret=1 + return ret +def execMove(title,temppath,recpath,ext,autodel): + srcpath=os.path.join(temppath,title+ext) + # patched. orig: searchFolder(title, recpath) + sf=guess.searchFolder(title, recpath,200) + if sf!="": + destpath=os.path.join(sf,getMoveDestpath(title, temppath, sf, ext)+ext) + if os.path.exists(destpath): + if os.path.getsize(destpath) == os.path.getsize(srcpath): + recdblist.printutf8(u"同名同サイズのファイルが存在します。") + if autodel==1: + recdblist.printutf8(u"関連ファイルを削除します。") + delpath=getDelpath(temppath, title) + for dp in delpath: + try: + os.remove(dp) + "" + except: + "" + else: + recdblist.printutf8("moving now..") + recdblist.printutf8(srcpath+" : "+destpath) + print srcpath + shutil.copy(srcpath, destpath) + #shutil.copy(srcpath, destpath) + if autodel==1: + delpath=getDelpath(temppath, title) + for dp in delpath: + try: + os.remove(dp) + "" + except: "" - else: - lfpath.append(fullpath) - for dirp in lfpath: - cmpp="" - appp="" - ntitle=title - if os.path.isdir(dirp): - cmpp=os.path.dirname(dirp) - appp=dirp - else: - cmpp=os.path.basename(dirp) - appp=os.path.dirname(dirp) - ntitle=getTitle(title) - #recdblist.printutf8(cmpp) - cmpp=getTitle(os.path.splitext(cmpp)[0]) - #recdblist.printutf8(cmpp+"\n") - p=n_gram.trigram(ntitle,cmpp) - if p>0: - ngram.append((p,appp)) - ngram=list(set(ngram)) - ngram.sort() - ngram.reverse() - if len(ngram)>0: - #recdblist.printutf8(title + ngram[0][1] + " : "+str(ngram[0][0])) - if ngram[0][0]>threshold: - return ngram[0][1] - else: - return "" else: - return "" -def execMove(title,temppath,recpath,ext,autodel): - srcpath=os.path.join(temppath,title+ext) - #desttitle=destName(title, temppath, recpath) - - sf=searchFolder(title, recpath) - if sf!="": - destpath=os.path.join(sf,destNameMKV(title, temppath, sf)+ext) - recdblist.printutf8("moving now..") - recdblist.printutf8(srcpath+" : "+destpath) - print srcpath - shutil.copy(srcpath, destpath) - #shutil.copy(srcpath, destpath) - if autodel==1: - delpath=get_delpath(temppath, title) - for dp in delpath: - try: - os.remove(dp) - "" - except: - "" \ No newline at end of file + recdblist.printutf8("sf not fonud @ execMove",verbose_level=100) + +def execDelete(title,temppath): + delpath=getDelpath(temppath, title,0) + recdblist.printutf8(title+u" 関連の一時ファイルを削除します") + for dp in delpath: + try: + if os.path.exists(dp): + recdblist.printutf8(dp) + os.remove(dp) + except Exception, inst: + print type(inst) + print str(inst) + print traceback.print_exc(file=sys.stdout)