OSDN Git Service

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