modified: configure.ac
[enigma2-plugins.git] / subsdownloader2 / src / SourceCode / NapiProjekt.py
1 import sys
2 import urllib
3 import tempfile
4 import time
5 import os
6 import getopt
7
8
9 #  Copyright (C) 2009 Arkadiusz Miskiewicz <arekm@pld-linux.org>
10 #
11 #  This program is free software: you can redistribute it and/or modify
12 #  it under the terms of the GNU General Public License as published by
13 #  the Free Software Foundation, either version 3 of the License, or
14 #  (at your option) any later version.
15 #
16 #  This program is distributed in the hope that it will be useful,
17 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
18 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 #  GNU General Public License for more details.
20 #
21 #  You should have received a copy of the GNU General Public License
22 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 #
24
25 prog = "NapiProjekt"
26 i = 0
27 i_total = 0
28 try:
29     from hashlib import md5 as md5
30 except ImportError:
31     from md5 import md5
32     
33 languages = { 'pl': 'PL', 'en': 'ENG' }
34
35 class NapiProjekt():
36     def __init__(self):
37         self.error_ = 0
38         pass
39         
40     def f(self,z):
41         idx = [ 0xe, 0x3,  0x6, 0x8, 0x2 ]
42         mul = [   2,   2,    5,   4,   3 ]
43         add = [   0, 0xd, 0x10, 0xb, 0x5 ]
44         
45         b = []
46         for i in xrange(len(idx)):
47             a = add[i]
48             m = mul[i]
49             i = idx[i]
50             
51             t = a + int(z[i], 16)
52             v = int(z[t:t+2], 16)
53             b.append( ("%x" % (v*m))[-1] )
54
55         return ''.join(b)
56     
57     def getnapi(self, filename):
58         self.filename = filename
59         self.d = md5()
60         
61         self.d.update(open(self.filename).read(10485760))
62         
63         self.lang = 'pl'
64         
65         self.url = "http://napiprojekt.pl/unit_napisy/dl.php?l=%s&f=%s&t=%s&v=pynapi&kolejka=false&nick=&pass=&napios=%s" % \
66             (languages[self.lang], self.d.hexdigest(), self.f(self.d.hexdigest()), os.name)
67         
68         repeat = 3
69         self.sub = None
70         http_code = 200
71         
72         while repeat > 0:
73             repeat = repeat - 1
74             try:
75                 self.sub = urllib.urlopen(self.url)
76                 if hasattr(self.sub, 'getcode'):
77                     http_code = self.sub.getcode() 
78                     self.sub = self.sub.read()
79                     self.error_ = 0
80             except (IOError, OSError), e:
81                 print >> sys.stderr, "%s: %d/%d: Fetching subtitle failed: %s" % (prog, i, i_total, e)
82                 time.sleep(0.5)
83                 self.error_ = 1
84                 continue
85
86             if http_code != 200:
87                 print >> sys.stderr, "%s: %d/%d: Fetching subtitle failed, HTTP code: %s" % (prog, i, i_total, str(http_code))
88                 time.sleep(0.5)
89                 self.error_ = 1
90                 continue
91     
92             if self.sub.startswith('NPc'):
93                 print >> sys.stderr, "%s: %d/%d: Subtitle NOT FOUND" % (prog, i, i_total)
94                 repeat = -1
95                 self.error_ = 1
96                 continue
97                 repeat = 0
98
99             if self.sub is None or self.sub == "":
100                 print >> sys.stderr, "%s: %d/%d: Subtitle download FAILED" % (prog, i, i_total)
101                 self.error_ = 1
102                 continue
103
104             if repeat == -1:
105                 self.error_ = 1
106                 continue
107         
108     def save(self):
109         if self.error_ == 1:
110             return "None"
111         else:
112             #subFilePath = str(self.filename).split(".")[0]+'.srt'
113             subFilePath = str(self.filename).rsplit(".", 1)[0]+'.srt'
114             savefile = open(subFilePath,"w")
115             savefile.write(self.sub)
116             savefile.close()
117             return subFilePath
118
119
120     
121
122 """file = '/home/silelis/Pulpit/Reservoir Dogs_1992_DVDrip_XviD-Ekolb/Reservoir Dogs_1992_DVDrip_XviD-Ekolb.avi'
123 a=NapiProjekt(file)
124 a.getnapi()
125 a.saveSRT()"""