diff --git a/gallery_dl/extractor/message.py b/gallery_dl/extractor/message.py index 1831620a..088fdd67 100644 --- a/gallery_dl/extractor/message.py +++ b/gallery_dl/extractor/message.py @@ -52,3 +52,4 @@ class Message(): # Cookies = 5 Queue = 6 Urllist = 7 + Metadata = 8 diff --git a/gallery_dl/extractor/patreon.py b/gallery_dl/extractor/patreon.py index 633c9bc2..1e525595 100644 --- a/gallery_dl/extractor/patreon.py +++ b/gallery_dl/extractor/patreon.py @@ -33,13 +33,15 @@ class PatreonExtractor(Extractor): PatreonExtractor._warning = False for post in self.posts(): - yield Message.Directory, post - ids = set() post["num"] = 0 content = post.get("content") postfile = post.get("post_file") + yield Message.Directory, post + yield Message.Metadata, text.nameext_from_url( + post["creator"].get("image_url", ""), post) + for image in post["images"]: url = image.get("download_url") if not url: diff --git a/gallery_dl/job.py b/gallery_dl/job.py index 7a1f1955..7932cd0a 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -97,6 +97,10 @@ class Job(): self.update_kwdict(kwds) self.handle_urllist(urls, kwds) + elif msg[0] == Message.Metadata: + self.update_kwdict(msg[1]) + self.handle_metadata(msg[1]) + elif msg[0] == Message.Version: if msg[1] != 1: raise "unsupported message-version ({}, {})".format( @@ -114,6 +118,9 @@ class Job(): def handle_directory(self, kwdict): """Handle Message.Directory""" + def handle_metadata(self, kwdict): + """Handle Message.Metadata""" + def handle_queue(self, url, kwdict): """Handle Message.Queue""" @@ -242,6 +249,16 @@ class DownloadJob(Job): else: self.pathfmt.set_directory(kwdict) + def handle_metadata(self, kwdict): + """Run postprocessors with metadata from 'kwdict'""" + postprocessors = self.postprocessors + + if postprocessors: + pathfmt = self.pathfmt + pathfmt.set_filename(kwdict) + for pp in postprocessors: + pp.run_metadata(pathfmt) + def handle_queue(self, url, kwdict): if "_extractor" in kwdict: extr = kwdict["_extractor"].from_url(url) @@ -507,6 +524,9 @@ class DataJob(Job): def handle_directory(self, kwdict): self.data.append((Message.Directory, self.filter(kwdict))) + def handle_metadata(self, kwdict): + self.data.append((Message.Metadata, self.filter(kwdict))) + def handle_queue(self, url, kwdict): self.data.append((Message.Queue, url, self.filter(kwdict))) diff --git a/gallery_dl/postprocessor/common.py b/gallery_dl/postprocessor/common.py index 83b42eb6..70b0dfb7 100644 --- a/gallery_dl/postprocessor/common.py +++ b/gallery_dl/postprocessor/common.py @@ -26,6 +26,10 @@ class PostProcessor(): def run(pathfmt): """Execute the postprocessor for a file""" + @staticmethod + def run_metadata(pathfmt): + """Execute the postprocessor for a file""" + @staticmethod def run_after(pathfmt): """Execute postprocessor after moving a file to its target location""" diff --git a/gallery_dl/postprocessor/metadata.py b/gallery_dl/postprocessor/metadata.py index 75c5fffa..bc264845 100644 --- a/gallery_dl/postprocessor/metadata.py +++ b/gallery_dl/postprocessor/metadata.py @@ -40,6 +40,9 @@ class MetadataPP(PostProcessor): self.path = self._path_append self.extension = options.get("extension", ext) + if options.get("bypost"): + self.run_metadata, self.run = self.run, self.run_metadata + def run(self, pathfmt): with open(self.path(pathfmt), "w", encoding="utf-8") as file: self.write(file, pathfmt.kwdict)