From 3ebb174f2cdfb1e3a58caca12f4a86d30f65c8d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mike=20F=C3=A4hrmann?=
Date: Wed, 7 Oct 2020 23:40:09 +0200
Subject: [PATCH] add missing extractor info when spawning new ones (fixes
#1051)
Not having this information causes the blacklist/whitelist logic to
trigger and prevents things from functioning as intended when using
default settings.
Fixes issues for 8muses, deviantart, exhentai, and mangoxo.
---
gallery_dl/extractor/8muses.py | 10 +++++-----
gallery_dl/extractor/deviantart.py | 13 ++++++++-----
gallery_dl/extractor/exhentai.py | 3 ++-
gallery_dl/extractor/mangoxo.py | 4 +++-
4 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/gallery_dl/extractor/8muses.py b/gallery_dl/extractor/8muses.py
index fafb7852..b2487353 100644
--- a/gallery_dl/extractor/8muses.py
+++ b/gallery_dl/extractor/8muses.py
@@ -94,12 +94,12 @@ class _8musesAlbumExtractor(Extractor):
if albums:
for album in albums:
url = self.root + "/comics/album/" + album["permalink"]
- album = {
- "url" : url,
- "name" : album["name"],
- "private": album["isPrivate"],
+ yield Message.Queue, url, {
+ "url" : url,
+ "name" : album["name"],
+ "private" : album["isPrivate"],
+ "_extractor": _8musesAlbumExtractor,
}
- yield Message.Queue, url, album
if data["page"] >= data["pages"]:
return
diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py
index a0f4d1c5..9cceaeec 100644
--- a/gallery_dl/extractor/deviantart.py
+++ b/gallery_dl/extractor/deviantart.py
@@ -262,9 +262,11 @@ class DeviantartExtractor(Extractor):
return folder
raise exception.NotFoundError("folder")
- def _folder_urls(self, folders, category):
- url = "{}/{}/{}/0/".format(self.root, self.user, category)
- return [(url + folder["name"], folder) for folder in folders]
+ def _folder_urls(self, folders, category, extractor):
+ base = "{}/{}/{}/0/".format(self.root, self.user, category)
+ for folder in folders:
+ folder["_extractor"] = extractor
+ yield base + folder["name"], folder
def _update_content_default(self, deviation, content):
public = "premium_folder_data" not in deviation
@@ -450,7 +452,7 @@ class DeviantartGalleryExtractor(DeviantartExtractor):
if self.flat and not self.group:
return self.api.gallery_all(self.user, self.offset)
folders = self.api.gallery_folders(self.user)
- return self._folder_urls(folders, "gallery")
+ return self._folder_urls(folders, "gallery", DeviantartFolderExtractor)
class DeviantartFolderExtractor(DeviantartExtractor):
@@ -589,7 +591,8 @@ class DeviantartFavoriteExtractor(DeviantartExtractor):
self.api.collections(self.user, folder["folderid"])
for folder in folders
)
- return self._folder_urls(folders, "favourites")
+ return self._folder_urls(
+ folders, "favourites", DeviantartCollectionExtractor)
class DeviantartCollectionExtractor(DeviantartExtractor):
diff --git a/gallery_dl/extractor/exhentai.py b/gallery_dl/extractor/exhentai.py
index cb4df11c..06b5ba2d 100644
--- a/gallery_dl/extractor/exhentai.py
+++ b/gallery_dl/extractor/exhentai.py
@@ -392,6 +392,7 @@ class ExhentaiSearchExtractor(ExhentaiExtractor):
def items(self):
self.login()
yield Message.Version, 1
+ data = {"_extractor": ExhentaiGalleryExtractor}
while True:
last = None
@@ -402,7 +403,7 @@ class ExhentaiSearchExtractor(ExhentaiExtractor):
if url == last:
continue
last = url
- yield Message.Queue, url, {}
+ yield Message.Queue, url, data
if 'class="ptdd">><' in page or ">No hits found
" in page:
return
diff --git a/gallery_dl/extractor/mangoxo.py b/gallery_dl/extractor/mangoxo.py
index 0e04f97e..57434980 100644
--- a/gallery_dl/extractor/mangoxo.py
+++ b/gallery_dl/extractor/mangoxo.py
@@ -167,6 +167,8 @@ class MangoxoChannelExtractor(MangoxoExtractor):
self.login()
num = total = 1
url = "{}/channel/{}/album/".format(self.root, self.channel_id)
+ data = {"_extractor": MangoxoAlbumExtractor}
+
yield Message.Version, 1
while True:
@@ -174,7 +176,7 @@ class MangoxoChannelExtractor(MangoxoExtractor):
for album in text.extract_iter(
page, '