2 # vim: filencoding=utf-8 foldmethod=indent
6 locale
.setlocale( locale
.LC_ALL
)
7 gettext
.bindtextdomain( 'napi', '/usr/share/locale/' )
8 gettext
.textdomain( 'napi' )
17 from xmlrpclib
import ServerProxy
, Error
19 loc
= locale
.getdefaultlocale()
21 def write2zenity(msg
, msg_type
='info'):
23 os
.system('zenity --%s --text="%s" --title "Napiprojekt" &' % (msg_type
, msg
))
26 'zenity "file-input" dialog'
27 return commands
.getoutput('zenity --file-selection --multiple --separator="|" --title "text2utf"')
29 def write2stdout(msg
, msg_type
='info'):
31 print '%s: %s' % (msg_type
, msg
)
34 os
.system('text2utf \'%s\'' % file)
36 def extract(src
, dst
):
37 rozszerzenie
= src
[src
.rfind('.')+1:]
38 if (rozszerzenie
== '7z'):
39 if (os
.system('/usr/bin/7z x -y -so -piBlm8NTigvru0Jr0 \'%s\' 2>/dev/null >\'%s\'' % (src
, dst
) )):
44 if (rozszerzenie
== 'gz'):
45 if (os
.system('cat \'%s\' | gunzip > \'%s\'' % (src
, dst
) )):
51 def downfile(url
, name
):
53 open(name
,'w').write(urllib
.urlopen(url
).read())
55 printout(_('Downloading error'), 'error')
65 def printnow(self
, msg
, msg_type
="info"):
67 write2stdout(msg
, msg_type
)
69 write2zenity(msg
, msg_type
)
70 def pr(self
, msg
, msg_type
="info"):
72 self
.printnow(msg
, msg_type
)
74 if (msg_type
=="info"):
75 self
.storemsginfo
.append(msg
)
76 elif (msg_type
=="error"):
77 self
.storemsgerror
.append(msg
)
78 def printstored(self
):
80 if (len(self
.storemsginfo
)>0):
81 self
.printnow('\n'.join(self
.storemsginfo
), "info")
82 if (len(self
.storemsgerror
)>0):
83 self
.printnow('\n'.join(self
.storemsgerror
), "error")
87 def printout (msg
, msg_type
='info'):
90 if 'zenity' in sys
.argv
[1:]:
93 mname
, filenames
= '', [s
for s
in sys
.argv
[1:] if s
!= 'zenity']
96 filenames
= get_file(_('Indicate the movie, that you`re looking the subtitles for.')).split("|")
100 printout(_('Indicate the movie, that you`re looking the subtitles for.'), 'error')
102 if (len(filenames
)>1):
104 for i
in range(len(filenames
)):
105 mname
= filenames
.pop(0)
106 if not os
.path
.isfile(mname
):
107 printout( _('File:')+" %s " % (mname
)+_('not exist!'), 'error')
110 filesize
= os
.path
.getsize(mname
)
111 if filesize
< 65536 * 2:
112 printout(_('Chosed file is too small to be movie!')+" %sMB" % (filesize
/(1024*1024) ) )
115 fname
= mname
[:mname
.rfind('.')+1]+'txt'
122 if (sukces
!= 1)and(loc
[0]=="pl_PL"):
124 'foobar hash function? ;-)'
125 idx
= [ 0xe, 0x3, 0x6, 0x8, 0x2 ]
126 mul
= [ 2, 2, 5, 4, 3 ]
127 add
= [ 0, 0xd, 0x10, 0xb, 0x5 ]
129 for i
in xrange(len(idx
)):
134 t
= a
+ int(z
[i
], 16)
135 v
= int(z
[t
:t
+2], 16)
136 b
.append( ('%x' % (v
*m
))[-1] )
141 d
.update(open(mname
).read(10485760))
142 url
= 'http://napiprojekt.pl/unit_napisy/dl.php?l=PL&f=%s&t=%s&v=other&kolejka=false&nick=&pass=&napios=%s'
143 url
= url
% (d
.hexdigest(), f(d
.hexdigest()), os
.name
)
144 downfile(url
, 'napisy.7z')
146 if (extract('napisy.7z', '%s.wyp' % fname
)==True):
148 pobranoZ
="Napiproject"
149 os
.remove('napisy.7z')
160 longlongformat
= 'LL' # signed long, unsigned long
161 bytesize
= calcsize(longlongformat
)
167 for x
in range(65536/bytesize
):
168 buffer = f
.read(bytesize
)
169 (l2
, l1
)= unpack(longlongformat
, buffer)
170 l_value
= (long(l1
) << 32) |
long(l2
)
172 hash = hash & 0xFFFFFFFFFFFFFFFF #to remain as 64bit number
175 f
.seek(max(0,filesize
-65536),0)
176 for x
in range(65536/bytesize
):
177 buffer = f
.read(bytesize
)
178 (l2
, l1
) = unpack(longlongformat
, buffer)
179 l_value
= (long(l1
) << 32) |
long(l2
)
181 hash = hash & 0xFFFFFFFFFFFFFFFF
184 returnedhash
= "%016x" % hash
188 printout(_('Downloading error'), 'error')
191 server
= ServerProxy("http://www.opensubtitles.org/xml-rpc")
192 myhash
= hashFile(mname
)
193 size
= os
.path
.getsize(mname
)
194 session
= server
.LogIn("","","pl","python")
195 token
= session
["token"]
196 if (loc
[0]=="pl_PL"):
197 opensubtitles_lang
='pol'
199 opensubtitles_lang
='eng'
200 searchlist
= [{'sublanguageid':opensubtitles_lang
,'moviehash':myhash
,'moviebytesize':str(size
)}]
201 moviesList
= server
.SearchSubtitles(token
, searchlist
)
202 if moviesList
['data']:
203 url
= moviesList
['data'][0]['SubDownloadLink']
204 downfile(url
, 'napisy.gz')
205 if (extract('napisy.gz', '%s.wyp' % fname
)==True):
207 pobranoZ
="Opensubtitles"
208 os
.remove('napisy.gz')
212 printout(_('Downloaded subtitles for movie:')+' %s ' % (os
.path
.basename(fname
))+_('from')+' %s.' % (pobranoZ
) )
213 subconvert('%s.wyp' % fname
)
214 shutil
.move('%s.wyp' % fname
, fname
)
216 printout(_('Did not find subscriptions for movie:')+' %s' % os
.path
.basename(mname
), 'error')