Added alternative mangafox chapter URLs.
[automanga.git] / manga / mangafox.py
index 572853c..30329c2 100644 (file)
@@ -6,8 +6,16 @@ soup = BeautifulSoup.BeautifulSoup
 class imgstream(lib.imgstream):
     def __init__(self, url):
         self.bk = urllib.urlopen(url)
-        self.ctype = self.bk.info()["Content-Type"]
-        self.clen = int(self.bk.info()["Content-Length"])
+        ok = False
+        try:
+            if self.bk.getcode() != 200:
+                raise IOError("Server error: " + str(self.bk.getcode()))
+            self.ctype = self.bk.info()["Content-Type"]
+            self.clen = int(self.bk.info()["Content-Length"])
+            ok = True
+        finally:
+            if not ok:
+                self.bk.close()
 
     def fileno(self):
         return self.bk.fileno()
@@ -29,6 +37,7 @@ class page(lib.page):
         self.manga = self.volume.manga
         self.n = n
         self.id = str(n)
+        self.name = u"Page %s" % n
         self.url = url
         self.ciurl = None
 
@@ -41,6 +50,12 @@ class page(lib.page):
     def open(self):
         return imgstream(self.iurl())
 
+    def __str__(self):
+        return self.name
+
+    def __repr__(self):
+        return "<mangafox.page %r.%r.%r.%r>" % (self.manga.name, self.volume.name, self.chapter.name, self.name)
+
 class chapter(lib.pagelist):
     def __init__(self, volume, stack, id, name, url):
         self.stack = stack
@@ -120,7 +135,7 @@ class manga(lib.manga):
         if self.cvol is None:
             page = soup(htcache.fetch(self.url))
             vls = page.find("div", id="chapters").findAll("div", attrs={"class": "slide"})
-            self.cvol = []
+            cvol = []
             for i, vn in enumerate(reversed(vls)):
                 name = vn.find("h3", attrs={"class": "volume"}).contents[0].strip()
                 vid = name.encode("utf8")
@@ -139,10 +154,15 @@ class manga(lib.manga):
                         except KeyError:
                             pass
                     url = n.a["href"].encode("us-ascii")
-                    if url[-7:] != "/1.html":
+                    if url[-7:] == "/1.html":
+                        url = url[:-6]
+                    elif url[-1:] == "/":
+                        pass
+                    else:
                         raise Exception("parse error: unexpected chapter URL for %r: %s" % (self, url))
-                    vol.ch.append(chapter(vol, vol.stack + [(vol, o)], chid, name, url[:-6]))
-                self.cvol.append(vol)
+                    vol.ch.append(chapter(vol, vol.stack + [(vol, o)], chid, name, url))
+                cvol.append(vol)
+            self.cvol = cvol
         return self.cvol
 
     def __str__(self):