OSDN Git Service

implement auto_delete temp file.
[rec10/rec10-git.git] / rec10 / trunk / src / auto_move.py
index ae8b0d0..6c8b312 100644 (file)
@@ -8,9 +8,10 @@ import os
 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)
@@ -34,31 +35,9 @@ def getTitle(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=[]
@@ -68,29 +47,38 @@ def search_file(temppath,recpath,ext):
         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"))
@@ -101,73 +89,57 @@ def get_delpath(temppath,title):
     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