import os.path
import re
import time
+import shutil
-import n_gram
import recdblist
+import guess
def getTitle(title):
rT=re.compile("(.+)_(\d+)\Z")
tT=rT.match(title)
elif tT5:
ntitle=tT5.group(1)
return ntitle
-def detNameType(title):
- """
- type A ---title#<number>
- type B ---title#<number>subtitle
- type C ---title subtitle
- type D ---title(without number)
- """
- recdblist.printutf8(title)
- #rA=re.compile(".+(?P<title>)#\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=[]
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)
+ 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 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:
+ if not os.path.getsize(dstpath) == os.path.getsize(srcpath):
+ gmtime=time.gmtime(os.path.getmtime(srcpath))
iff=""
- title=title+u"_"+iff+gmtime.strftime("%Y-%m-%dT%H-%M-%S")
+ 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)
+ else:
+ recdblist.printutf8(u"同サイズのファイルが存在します")
+
return title
-def get_delpath(temppath,title):
+def get_delpath(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+".sa.avi.log"))
delpath.append(os.path.join(temppath,title+".log"))
return delpath
-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
- ""
- 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 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)
- #desttitle=destName(title, temppath, recpath)
-
- sf=searchFolder(title, recpath)
+ sf=guess.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.move(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
+ destpath=os.path.join(sf,get_move_dest_path(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=get_delpath(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=get_delpath(temppath, title)
+ for dp in delpath:
+ try:
+ os.remove(dp)
+ ""
+ except:
+ ""
+def execDelete(title,temppath):
+ delpath=get_delpath(temppath, title,0)
+ recdblist.printutf8(title+u" 関連の一時ファイルを削除します")
+ for dp in delpath:
+ try:
+ recdblist.printutf8(dp)
+ os.remove(dp)
+ ""
+ except:
+ ""
\ No newline at end of file