modified: Makefile.am
[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 try:
26     from hashlib import md5 as md5
27 except ImportError:
28     from md5 import md5
29     
30 languages = { 'pl': 'PL', 'en': 'ENG' }
31
32 class NapiProjekt():
33     def __init__(self):
34         self.error_ = 0
35         pass
36         
37     def f(self,z):
38         idx = [ 0xe, 0x3,  0x6, 0x8, 0x2 ]
39         mul = [   2,   2,    5,   4,   3 ]
40         add = [   0, 0xd, 0x10, 0xb, 0x5 ]
41         
42         b = []
43         for i in xrange(len(idx)):
44             a = add[i]
45             m = mul[i]
46             i = idx[i]
47             
48             t = a + int(z[i], 16)
49             v = int(z[t:t+2], 16)
50             b.append( ("%x" % (v*m))[-1] )
51
52         return ''.join(b)
53     
54     def getnapi(self, filename):
55         self.filename = filename
56         self.d = md5()
57         
58         self.d.update(open(self.filename).read(10485760))
59         
60         self.lang = 'pl'
61         
62         self.url = "http://napiprojekt.pl/unit_napisy/dl.php?l=%s&f=%s&t=%s&v=pynapi&kolejka=false&nick=&pass=&napios=%s" % \
63             (languages[self.lang], self.d.hexdigest(), self.f(self.d.hexdigest()), os.name)
64         
65         repeat = 3
66         self.sub = None
67         http_code = 200
68         
69         while repeat > 0:
70             repeat = repeat - 1
71             try:
72                 self.sub = urllib.urlopen(self.url)
73                 if hasattr(self.sub, 'getcode'):
74                     http_code = self.sub.getcode() 
75                     self.sub = self.sub.read()
76                     self.error_ = 0
77             except (IOError, OSError), e:
78                 print >> sys.stderr, "%s: %d/%d: Fetching subtitle failed: %s" % (prog, i, i_total, e)
79                 time.sleep(0.5)
80                 self.error_ = 1
81                 continue
82
83             if http_code != 200:
84                 print >> sys.stderr, "%s: %d/%d: Fetching subtitle failed, HTTP code: %s" % (prog, i, i_total, str(http_code))
85                 time.sleep(0.5)
86                 self.error_ = 1
87                 continue
88     
89             if self.sub.startswith('NPc'):
90                 print >> sys.stderr, "%s: %d/%d: Subtitle NOT FOUND" % (prog, i, i_total)
91                 repeat = -1
92                 self.error_ = 1
93                 continue
94                 repeat = 0
95
96             if self.sub is None or self.sub == "":
97                 print >> sys.stderr, "%s: %d/%d: Subtitle download FAILED" % (prog, i, i_total)
98                 self.error_ = 1
99                 continue
100
101             if repeat == -1:
102                 self.error_ = 1
103                 continue
104         
105     def save(self):
106         if self.error_ == 1:
107             return "None"
108         else:
109             #subFilePath = str(self.filename).split(".")[0]+'.srt'
110             subFilePath = str(self.filename).rsplit(".", 1)[0]+'.srt'
111             savefile = open(subFilePath,"w")
112             savefile.write(self.sub)
113             savefile.close()
114             return subFilePath
115
116
117     
118
119 """file = '/home/silelis/Pulpit/Reservoir Dogs_1992_DVDrip_XviD-Ekolb/Reservoir Dogs_1992_DVDrip_XviD-Ekolb.avi'
120 a=NapiProjekt(file)
121 a.getnapi()
122 a.saveSRT()"""