OSDN Git Service

fix miss
[rec10/rec10-git.git] / rec10 / trunk / src / auto_move.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2010 Yukikaze
5
6 import glob
7 import os
8 import os.path
9 import re
10 import time
11
12 import n_gram
13 import recdblist
14 def getTitle(title):
15     rT=re.compile("(.+)_(\d+)\Z")
16     tT=rT.match(title)
17     rT2=re.compile("(.+)_(.+)_(\d*)\Z")#_(aichi)_2010-02-06T01:59:00.mkv
18     tT2=rT2.match(title)
19     rT3=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+:\d+:\d+\Z")#_(aichi)_2010-02-06T01:59:00.mkv
20     tT3=rT3.match(title)
21     rT4=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+-\d+-\d+\Z")#_(aichi)_2010-02-06T01-59-00.mkv
22     tT4=rT4.match(title)
23     rT5=re.compile("(.+)_(.+)_(.+)\Z")#_(aichi)_2010-02-06T01-59-00.mkv
24     tT5=rT5.match(title)
25     ntitle=title
26     if tT :
27         ntitle=tT.group(1)
28     elif tT2:
29         ntitle=tT2.group(1)
30     elif tT3:
31         ntitle=tT3.group(1)
32     elif tT4:
33         ntitle=tT4.group(1)
34     elif tT5:
35         ntitle=tT5.group(1)
36     return ntitle
37 def detNameType(title):
38     """
39     type A ---title#<number>
40     type B ---title#<number>subtitle
41     type C ---title subtitle
42     type D ---title(without number)
43     """
44     recdblist.printutf8(title)
45     #rA=re.compile(".+(?P<title>)#\d(?P<num>)\s[0,10]\z")
46     rA=re.compile("(.+)#(\d*)\s*\Z")
47     tA=rA.match(title)
48     rB=re.compile("(.+)#(\d*)\s*(\D*)")
49     tB=rB.match(title)
50     if tA:
51         recdblist.printutf8("typeA")
52         recdblist.printutf8("title="+tA.group(1))
53         recdblist.printutf8("num="+tA.group(2))
54     elif tB:
55         recdblist.printutf8("typeB")
56         recdblist.printutf8("title="+tB.group(1))
57         recdblist.printutf8("num="+tB.group(2))
58         recdblist.printutf8("subtitle="+tB.group(3))
59 def search_file(temppath,recpath,ext):
60     """
61     録画一時フォルダ内mkvファイルを検索
62     """
63     avilist = glob.glob(temppath + "/*"+ext)
64     ret=[]
65     for avif in avilist:
66         ##b25f is title.ts.b25  avi is title.avi
67         dir = os.path.split(avif)[0]
68         title = os.path.split(avif)[1]
69         title = title.replace(ext, "")
70         avipath = os.path.join(dir, title + ext)
71         dtime = time.time()-os.path.getmtime(avipath)
72         dtime = int(dtime)
73         if dtime > 300:
74             if veryfySize(avipath):
75                 ret.append(title)
76     return ret
77 def get_move_dest_path(title,temppath,recpath,ext):
78     dstpath=os.path.join(recpath,title+ext)
79     srcpath=os.path.join(temppath,title+ext)
80     if os.path.exists(dstpath):
81         gmtime=time.gmtime(os.path.getmtime(srcpath))
82         iff=""
83         try:
84             iff=u"("+configreader.getenv("iff")+u")_"
85             if iff==u"()_":
86                 iff = u""
87         except:
88             iff=""
89         title=title+u"_"+iff+time.strftime("%Y-%m-%dT%H-%M-%S",gmtime)
90     return title
91 def get_delpath(temppath,title):
92     delpath=[os.path.join(temppath,title+".ts")]
93     delpath.append(os.path.join(temppath,title+".avi"))
94     delpath.append(os.path.join(temppath,title+".120.avi"))
95     delpath.append(os.path.join(temppath,title+".timecode.txt"))
96     delpath.append(os.path.join(temppath,title+".aac"))
97     delpath.append(os.path.join(temppath,title+".ts.b25"))
98     delpath.append(os.path.join(temppath,title+".ts.tsmix"))
99     delpath.append(os.path.join(temppath,title+".ts.log"))
100     delpath.append(os.path.join(temppath,title+".sa.avi"))
101     delpath.append(os.path.join(temppath,title+".sa.avi.log"))
102     delpath.append(os.path.join(temppath,title+".log"))
103     return delpath
104 def veryfySize(path):
105     #vsize=[297,497,596,1196]#SD 30m 1h 1.5h 2h
106     vsize=[245,275,295,591,830]
107     vsize=vsize+[325,449,560,590,602,690,805,860,1014,1138,1237]
108     vsize=vsize+[261,535,540,616,740]#HD 30m 1h
109     #vsize=vsize+[381,895,447]
110     ret = 0
111     for size in vsize:
112         if os.path.getsize(path)>(size-10)*1024*1024 and os.path.getsize(path)<(size+10)*1024*1024:
113             ret=1
114     if os.path.getsize(path)>270*1024*1024:
115         ret=1
116     return ret
117 def searchFolder(title,path,threshold=500):
118     """
119     titleにマッチするフォルダを探し出す。
120     """
121     folderpath=os.listdir(path)
122     lfpath=[]
123     ngram=[]
124     for ft in folderpath:
125         fullpath=os.path.join(path.encode('utf-8'), ft)
126         if os.path.isdir(fullpath):
127             lfpath.append(fullpath)
128             ftt=os.listdir(fullpath)
129             if len(ftt)>0:
130                 for ft2 in ftt:
131                     try:
132                         folderpath.append(os.path.join(fullpath, ft2))
133                     except Exception, inst:
134                         #print type(inst)
135                         #print inst
136                         ""
137         else:
138             lfpath.append(fullpath)
139     for dirp in lfpath:
140         cmpp=""
141         appp=""
142         ntitle=title
143         if os.path.isdir(dirp):
144             cmpp=os.path.dirname(dirp)
145             appp=dirp
146         else:
147             cmpp=os.path.basename(dirp)
148             appp=os.path.dirname(dirp)
149         ntitle=getTitle(title)
150         #recdblist.printutf8(cmpp)
151         cmpp=getTitle(os.path.splitext(cmpp)[0])
152         #recdblist.printutf8(cmpp+"\n")
153         p=n_gram.trigram(ntitle,cmpp)
154         if p>0:
155             ngram.append((p,appp))
156     ngram=list(set(ngram))
157     ngram.sort()
158     ngram.reverse()
159     if len(ngram)>0:
160         #recdblist.printutf8(title + ngram[0][1] + " : "+str(ngram[0][0]))
161         if ngram[0][0]>threshold:
162             return ngram[0][1]
163         else:
164             return ""
165     else:
166         return ""
167 def execMove(title,temppath,recpath,ext,autodel):
168     srcpath=os.path.join(temppath,title+ext)
169     #desttitle=destName(title, temppath, recpath)
170
171     sf=searchFolder(title, recpath)
172     if sf!="":
173         destpath=os.path.join(sf,destNameMKV(title, temppath, sf)+ext)
174         recdblist.printutf8("moving now..")
175         recdblist.printutf8(srcpath+" : "+destpath)
176         print srcpath
177         shutil.move(srcpath, destpath)
178         #shutil.copy(srcpath, destpath)
179         if autodel==1:
180             delpath=get_delpath(temppath, title)
181             for dp in delpath:
182                 try:
183                     os.remove(dp)
184                     ""
185                 except:
186                     ""