12 while p < len(nm) and nm[p].isdigit():
18 while p < len(nm) and nm[p].isalpha():
35 class imgstream(lib.imgstream):
36 def __init__(self, path):
37 self.bk = open(path, 'rb')
38 self.clen = os.fstat(self.bk.fileno()).st_size
43 def read(self, sz=None):
44 return self.bk.read(sz)
47 def __init__(self, manga, path, name, id, stack):
55 return imgstream(self.path)
57 class interm(lib.pagelist):
58 def __init__(self, name, id, stack, direct):
65 return len(self.direct)
67 def __getitem__(self, n):
73 s = genstr(decode1(dent))
78 for p, n in zip(mx, s):
86 class manga(lib.manga):
87 exts = ["jpg", "jpeg", "png", "gif"]
89 def __init__(self, path):
90 path = os.path.abspath(path)
91 if not os.path.isdir(path):
92 raise IOError("No such directory: " + path)
96 if os.path.exists(pj(self.path, "name")):
97 with open(pj(self.path, "name")) as s:
98 self.name = s.readline().strip().decode("utf-8")
100 self.name = os.path.basename(path).decode("utf-8")
101 self.direct = self.destruct()
104 return len(self.direct)
106 def __getitem__(self, idx):
107 return self.direct[idx]
110 if os.path.exists(pj(self.path, "order")):
111 with open(pj(self.path, "order")) as s:
112 return True, [line.strip() for line in s if os.path.exists(pj(self.path, line.strip()))]
114 return False, [dent for dent in os.listdir(self.path) if '.' in dent and dent[dent.rindex('.') + 1:] in self.exts]
116 def bakenames(self, files):
122 nm = nm[:nm.rindex('.')]
128 ordered, files = self.imglist()
129 pages, orig = self.bakenames(files)
130 mx = maxstruct(pages)
131 var = [i for i, part in enumerate(mx) if part == int]
132 structs = [(nm, decode1(nm)) for nm in pages]
134 structs.sort(key=lambda o: "".join(o[1][len(mx):]))
135 for i in reversed(var):
136 structs.sort(key=lambda o: int(o[1][i]))
137 def constree(p, structs, idx):
140 for nm, st in structs:
141 id = "".join(st[len(mx):])
142 pages.append(page(self, pj(self.path, orig[nm]), id, id, p.stack + [(p, len(pages))]))
147 for nm, st in structs:
154 sub = [(nm, st) for nm, st in structs if st[var[idx]] == id]
157 id = "".join(st[var[idx]:])
158 ret.append(page(self, pj(self.path, orig[nm]), id, id, p.stack + [(p, len(ret))]))
160 cur = interm(id, id, p.stack + [(p, len(ret))], [])
161 cur.direct = constree(cur, sub, idx + 1)
164 return constree(self, structs, 0)
166 class dumb(lib.library):
168 if not os.path.isdir(id):
172 class directory(dumb):
173 def __init__(self, path):
174 if not os.path.isdir(path):
175 raise IOError("No such directory: " + path)
178 def byname(self, prefix):
180 prefix = prefix.lower()
181 for dent in os.listdir(self.path):
182 if dent[:len(prefix)].lower() == prefix:
183 ret.append(manga(pj(self.path, dent)))
187 for dent in os.listdir(self.path):
188 yield manga(pj(self.path, dent))