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