From 89be2f45e4e88be6069a8d3a341ebaa84f1236df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 19 Nov 2025 09:37:56 +0100 Subject: [PATCH] [mangadex] add 'data-saver' option (#8573) --- docs/configuration.rst | 10 ++++++++++ docs/gallery-dl.conf | 1 + gallery_dl/extractor/mangadex.py | 10 ++++++++-- test/results/mangadex.py | 21 +++++++++++++++++---- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 550d04bc..7e8e34b7 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -4032,6 +4032,16 @@ Description and `/user/follows/manga/feed `__) +extractor.mangadex.data-saver +----------------------------- +Type + ``bool`` +Default + ``false`` +Description + Enable `Data Saver` mode and download lower quality versions of chapters. + + extractor.mangadex.lang ----------------------- Type diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index 9077afd6..84ab75e3 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -530,6 +530,7 @@ "api-server": "https://api.mangadex.org", "api-parameters": null, + "data-saver": false, "lang": null, "ratings": ["safe", "suggestive", "erotica", "pornographic"] }, diff --git a/gallery_dl/extractor/mangadex.py b/gallery_dl/extractor/mangadex.py index 20933be7..f3851d07 100644 --- a/gallery_dl/extractor/mangadex.py +++ b/gallery_dl/extractor/mangadex.py @@ -136,13 +136,19 @@ class MangadexChapterExtractor(MangadexExtractor): yield Message.Directory, data + if self.config("data-saver", False): + path = "data-saver" + key = "dataSaver" + else: + path = key = "data" + server = self.api.athome_server(self.uuid) chapter = server["chapter"] - base = f"{server['baseUrl']}/data/{chapter['hash']}/" + base = f"{server['baseUrl']}/{path}/{chapter['hash']}/" enum = util.enumerate_reversed if self.config( "page-reverse") else enumerate - for data["page"], page in enum(chapter["data"], 1): + for data["page"], page in enum(chapter[key], 1): text.nameext_from_url(page, data) yield Message.Url, f"{base}{page}", data diff --git a/test/results/mangadex.py b/test/results/mangadex.py index 5fdd7150..af73b7d3 100644 --- a/test/results/mangadex.py +++ b/test/results/mangadex.py @@ -100,7 +100,7 @@ __tests__ = ( "ap" : "souten-no-koumori", "kt" : "2065", "mal": "948", - "mu" : "4786", + "mu" : "opk9cgi", }, }, @@ -118,6 +118,19 @@ __tests__ = ( "#exception": exception.AbortExtraction, }, +{ + "#url" : "https://mangadex.org/chapter/f946ac53-0b71-4b5d-aeb2-7931b13c4aaa", + "#class" : mangadex.MangadexChapterExtractor, + "#options" : {"data-saver": True}, + "#results" : ( + "https://cmdxd98sb0x3yprd.mangadex.network/data-saver/2780e594c3519e6858f76dfc018c8c1a/x1-d5962a0770b39faf73154b428be473752b4c379020916ecb5f0ffeac9639b6bf.jpg", + "https://cmdxd98sb0x3yprd.mangadex.network/data-saver/2780e594c3519e6858f76dfc018c8c1a/x2-c9fcaf38888e38c48ff3cff0e2b342f68b7aaed2ea9e2a2a5446dc49b6a4d86e.jpg", + "https://cmdxd98sb0x3yprd.mangadex.network/data-saver/2780e594c3519e6858f76dfc018c8c1a/x3-9ea5e06a4ba27b37dd66b75f1d267e3a6f8d21bb14a0163f669cf7f40ede315f.jpg", + "https://cmdxd98sb0x3yprd.mangadex.network/data-saver/2780e594c3519e6858f76dfc018c8c1a/x4-605c869a362a19d016d7fb777908c9336fec995965cb59853cb7f9b3e128f70e.jpg", + "https://cmdxd98sb0x3yprd.mangadex.network/data-saver/2780e594c3519e6858f76dfc018c8c1a/x5-dc40bd2b45d0ce26c7a401d74c2006a239f5839bc4f4a55893d035d6819627d7.jpg", + ), +}, + { "#url" : "https://mangadex.org/title/f90c4398-8aad-4f51-8a1f-024ca09fdcbc", "#comment" : "mutliple values for 'lang' (#4093)", @@ -286,7 +299,7 @@ __tests__ = ( "#url" : "https://mangadex.org/title/192aa767-2479-42c1-9780-8d65a2efd36a/gachiakuta?tab=art", "#class" : mangadex.MangadexCoversExtractor, "#pattern" : r"https://mangadex\.org/covers/192aa767-2479-42c1-9780-8d65a2efd36a/[\w-]+\.jpg", - "#count" : 19, + "#count" : 20, "artist" : ["Urana Kei"], "author" : ["Urana Kei"], @@ -296,10 +309,10 @@ __tests__ = ( "extension" : {"jpg", "png"}, "filename" : str, "lang" : {"ja", "fa"}, - "manga" : "Gachiakuta", + "manga" : "GACHIAKUTA", "manga_id" : "192aa767-2479-42c1-9780-8d65a2efd36a", "status" : "ongoing", - "volume" : range(1, 16), + "volume" : range(1, 20), "tags" : [ "Monsters", "Action",