implement 'page-reverse' option (#1854)
This commit is contained in:
@@ -2262,6 +2262,15 @@ Description
|
||||
* ``false``: Start with the first chapter
|
||||
|
||||
|
||||
extractor.[manga-extractor].page-reverse
|
||||
----------------------------------------
|
||||
Type
|
||||
``bool``
|
||||
Default
|
||||
``false``
|
||||
Description
|
||||
Download manga chapter pages in reverse order.
|
||||
|
||||
|
||||
Downloader Options
|
||||
==================
|
||||
|
||||
@@ -447,16 +447,23 @@ class GalleryExtractor(Extractor):
|
||||
imgs = self.images(page)
|
||||
|
||||
if "count" in data:
|
||||
images = zip(
|
||||
range(1, data["count"]+1),
|
||||
imgs,
|
||||
)
|
||||
if self.config("page-reverse"):
|
||||
images = util.enumerate_reversed(imgs, 1, data["count"])
|
||||
else:
|
||||
images = zip(
|
||||
range(1, data["count"]+1),
|
||||
imgs,
|
||||
)
|
||||
else:
|
||||
enum = enumerate
|
||||
try:
|
||||
data["count"] = len(imgs)
|
||||
except TypeError:
|
||||
pass
|
||||
images = enumerate(imgs, 1)
|
||||
else:
|
||||
if self.config("page-reverse"):
|
||||
enum = util.enumerate_reversed
|
||||
images = enum(imgs, 1)
|
||||
|
||||
yield Message.Directory, data
|
||||
for data[self.enum], (url, imgdata) in images:
|
||||
|
||||
@@ -88,7 +88,9 @@ class FoolslideChapterExtractor(FoolslideExtractor):
|
||||
data["chapter_id"] = text.parse_int(imgs[0]["chapter_id"])
|
||||
|
||||
yield Message.Directory, data
|
||||
for data["page"], image in enumerate(imgs, 1):
|
||||
enum = util.enumerate_reversed if self.config(
|
||||
"page-reverse") else enumerate
|
||||
for data["page"], image in enum(imgs, 1):
|
||||
try:
|
||||
url = image["url"]
|
||||
del image["url"]
|
||||
|
||||
@@ -122,7 +122,10 @@ class MangadexChapterExtractor(MangadexExtractor):
|
||||
data["_http_headers"] = self._headers
|
||||
base = "{}/data/{}/".format(
|
||||
self.api.athome_server(self.uuid)["baseUrl"], cattributes["hash"])
|
||||
for data["page"], page in enumerate(cattributes["data"], 1):
|
||||
|
||||
enum = util.enumerate_reversed if self.config(
|
||||
"page-reverse") else enumerate
|
||||
for data["page"], page in enum(cattributes["data"], 1):
|
||||
text.nameext_from_url(page, data)
|
||||
yield Message.Url, base + page, data
|
||||
|
||||
|
||||
@@ -139,6 +139,17 @@ def delete_items(obj, keys):
|
||||
del obj[key]
|
||||
|
||||
|
||||
def enumerate_reversed(iterable, start=0, length=None):
|
||||
"""Enumerate 'iterable' and return its elements in reverse order"""
|
||||
start -= 1
|
||||
if length is None:
|
||||
length = len(iterable)
|
||||
return zip(
|
||||
range(length - start, start, -1),
|
||||
reversed(iterable),
|
||||
)
|
||||
|
||||
|
||||
def number_to_string(value, numbers=(int, float)):
|
||||
"""Convert numbers (int, float) to string; Return everything else as is."""
|
||||
return str(value) if value.__class__ in numbers else value
|
||||
|
||||
Reference in New Issue
Block a user