OSDN Git Service

classify : fix DB id undefined.
[rec10/rec10-git.git] / rec10 / auto_move.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009-2011 Yukikaze
5
6 import glob
7 import os
8 import os.path
9 import re
10 import time
11 import shutil
12 import traceback
13 import sys
14
15 import recdblist
16 import guess
17 def getTitle(title):
18     rT=re.compile("(.+)_(\d+)\Z")
19     tT=rT.match(title)
20     rT2=re.compile("(.+)_(.+)_(\d*)\Z")#_(aichi)_2010-02-06T01:59:00.mkv
21     tT2=rT2.match(title)
22     rT3=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+:\d+:\d+\Z")#_(aichi)_2010-02-06T01:59:00.mkv
23     tT3=rT3.match(title)
24     rT4=re.compile("(.+)_(.+)_\d+-\d+-\d+T\d+-\d+-\d+\Z")#_(aichi)_2010-02-06T01-59-00.mkv
25     tT4=rT4.match(title)
26     rT5=re.compile("(.+)_(.+)_(.+)\Z")#_(aichi)_2010-02-06T01-59-00.mkv
27     tT5=rT5.match(title)
28     ntitle=title
29     if tT :
30         ntitle=tT.group(1)
31     elif tT2:
32         ntitle=tT2.group(1)
33     elif tT3:
34         ntitle=tT3.group(1)
35     elif tT4:
36         ntitle=tT4.group(1)
37     elif tT5:
38         ntitle=tT5.group(1)
39     return ntitle
40 def searchFile(temppath,recpath,ext):
41     """
42     録画一時フォルダ内ファイルを検索
43     """
44     avilist = glob.glob(temppath + "/*"+ext)
45     ret=[]
46     for avif in avilist:
47         ##b25f is title.ts.b25  avi is title.avi
48         dir = os.path.split(avif)[0]
49         title = os.path.split(avif)[1]
50         title = title.replace(ext, "")
51         avipath = os.path.join(dir, title + ext)
52         if os.path.exists(avipath):
53             dtime = time.time()-os.path.getmtime(avipath)
54             dtime = int(dtime)
55             if dtime > 300:
56                 if veryfySize(avipath):
57                     ret.append(title)
58     return ret
59 def getMoveDestpath(title,temppath,recpath,ext):
60     dstpath=os.path.join(recpath,title+ext)
61     srcpath=os.path.join(temppath,title+ext)
62     if os.path.exists(dstpath):
63         if not os.path.getsize(dstpath) == os.path.getsize(srcpath):
64             gmtime=time.gmtime(os.path.getmtime(srcpath))
65             iff=""
66             try:
67                 iff=u"("+configreader.getConfEnv("iff")+u")_"
68                 if iff==u"()_":
69                     iff = u""
70             except:
71                 iff=""
72             title=title+u"_"+iff+time.strftime("%Y-%m-%dT%H-%M-%S",gmtime)
73         else:
74             recdblist.printutf8(u"同サイズのファイルが存在します")
75
76     return title
77 def getDelpath(temppath,title,addfp=1):
78     delpath=[os.path.join(temppath,title+".ts")]
79     delpath.append(os.path.join(temppath,title+".avi"))
80     if addfp==1:
81         delpath.append(os.path.join(temppath,title+".mp4"))
82         delpath.append(os.path.join(temppath,title+".mkv"))
83     delpath.append(os.path.join(temppath,title+".m2v"))
84     delpath.append(os.path.join(temppath,title+".120.avi"))
85     delpath.append(os.path.join(temppath,title+".timecode.txt"))
86     delpath.append(os.path.join(temppath,title+".aac"))
87     delpath.append(os.path.join(temppath,title+".ts.b25"))
88     delpath.append(os.path.join(temppath,title+".ts.tsmix"))
89     delpath.append(os.path.join(temppath,title+".ts.log"))
90     delpath.append(os.path.join(temppath,title+".sa.avi"))
91     delpath.append(os.path.join(temppath,title+".sa.avi.log"))
92     delpath.append(os.path.join(temppath,title+".log"))
93     delpath.append(os.path.join(temppath,title+".log.zip"))
94     return delpath
95 def veryfySize(path):
96     #vsize=[297,497,596,1196]#SD 30m 1h 1.5h 2h
97     vsize=[245,275,295,591,830]
98     vsize=vsize+[325,449,560,590,602,690,805,860,1014,1138,1237]
99     vsize=vsize+[261,535,540,616,740]#HD 30m 1h
100     #vsize=vsize+[381,895,447]
101     ret = 0
102     for size in vsize:
103         if os.path.getsize(path)>(size-10)*1024*1024 and os.path.getsize(path)<(size+10)*1024*1024:
104             ret=1
105     if os.path.getsize(path)>270*1024*1024:
106         ret=1
107     return ret
108 def execMove(title,temppath,recpath,ext,autodel):
109     srcpath=os.path.join(temppath,title+ext)
110     # patched. orig: searchFolder(title, recpath)
111     sf=guess.searchFolder(title, recpath,200)
112     if sf!="":
113         destpath=os.path.join(sf,getMoveDestpath(title, temppath, sf, ext)+ext)
114         if os.path.exists(destpath):
115             if os.path.getsize(destpath) == os.path.getsize(srcpath):
116                 recdblist.printutf8(u"同名同サイズのファイルが存在します。")
117                 if autodel==1:
118                     recdblist.printutf8(u"関連ファイルを削除します。")
119                     delpath=getDelpath(temppath, title)
120                     for dp in delpath:
121                         try:
122                             os.remove(dp)
123                             ""
124                         except:
125                             ""
126         else:
127             recdblist.printutf8("moving now..")
128             recdblist.printutf8(srcpath+" : "+destpath)
129             print srcpath
130             shutil.copy(srcpath, destpath)
131             #shutil.copy(srcpath, destpath)
132             if autodel==1:
133                 delpath=getDelpath(temppath, title)
134                 for dp in delpath:
135                     try:
136                         os.remove(dp)
137                         ""
138                     except:
139                         ""
140     else:
141         recdblist.printutf8("sf not fonud @ execMove",verbose_level=100)
142
143 def execDelete(title,temppath):
144     delpath=getDelpath(temppath, title,0)
145     recdblist.printutf8(title+u" 関連の一時ファイルを削除します")
146     for dp in delpath:
147         try:
148             if os.path.exists(dp):
149                 recdblist.printutf8(dp)
150                 os.remove(dp)
151         except Exception, inst:
152             print type(inst)
153             print str(inst)
154             print traceback.print_exc(file=sys.stdout)