mirror of
https://github.com/mikf/gallery-dl.git
synced 2024-11-22 18:53:21 +01:00
add 'prepare()' step for post-processors
This allows post-processors to modify the destination path before checking if a file already exists.
This commit is contained in:
parent
c9861ca812
commit
d3d7f01543
@ -182,6 +182,10 @@ class DownloadJob(Job):
|
|||||||
# prepare download
|
# prepare download
|
||||||
self.pathfmt.set_keywords(keywords)
|
self.pathfmt.set_keywords(keywords)
|
||||||
|
|
||||||
|
if self.postprocessors:
|
||||||
|
for pp in self.postprocessors:
|
||||||
|
pp.prepare(self.pathfmt)
|
||||||
|
|
||||||
if self.pathfmt.exists(self.archive):
|
if self.pathfmt.exists(self.archive):
|
||||||
self.handle_skip()
|
self.handle_skip()
|
||||||
return
|
return
|
||||||
|
@ -32,13 +32,18 @@ class ClassifyPP(PostProcessor):
|
|||||||
for ext in exts
|
for ext in exts
|
||||||
}
|
}
|
||||||
|
|
||||||
def run(self, pathfmt):
|
def prepare(self, pathfmt):
|
||||||
ext = pathfmt.keywords["extension"]
|
ext = pathfmt.keywords["extension"]
|
||||||
|
|
||||||
if ext in self.mapping:
|
if ext in self.mapping:
|
||||||
path = pathfmt.realdirectory + os.sep + self.mapping[ext]
|
self._dir = pathfmt.realdirectory + os.sep + self.mapping[ext]
|
||||||
pathfmt.realpath = path + os.sep + pathfmt.filename
|
pathfmt.realpath = self._dir + os.sep + pathfmt.filename
|
||||||
os.makedirs(path, exist_ok=True)
|
else:
|
||||||
|
self._dir = None
|
||||||
|
|
||||||
|
def run(self, pathfmt):
|
||||||
|
if self._dir:
|
||||||
|
os.makedirs(self._dir, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
__postprocessor__ = ClassifyPP
|
__postprocessor__ = ClassifyPP
|
||||||
|
@ -15,6 +15,9 @@ class PostProcessor():
|
|||||||
"""Base class for postprocessors"""
|
"""Base class for postprocessors"""
|
||||||
log = log
|
log = log
|
||||||
|
|
||||||
|
def prepare(self, pathfmt):
|
||||||
|
""" """
|
||||||
|
|
||||||
def run(self, pathfmt):
|
def run(self, pathfmt):
|
||||||
"""Execute the postprocessor for a file"""
|
"""Execute the postprocessor for a file"""
|
||||||
|
|
||||||
|
@ -49,18 +49,27 @@ class UgoiraPP(PostProcessor):
|
|||||||
else:
|
else:
|
||||||
self.prevent_odd = False
|
self.prevent_odd = False
|
||||||
|
|
||||||
def run(self, pathfmt):
|
def prepare(self, pathfmt):
|
||||||
|
self._frames = None
|
||||||
|
|
||||||
if pathfmt.keywords["extension"] != "zip":
|
if pathfmt.keywords["extension"] != "zip":
|
||||||
return
|
return
|
||||||
|
|
||||||
if "frames" in pathfmt.keywords:
|
if "frames" in pathfmt.keywords:
|
||||||
framelist = pathfmt.keywords["frames"]
|
self._frames = pathfmt.keywords["frames"]
|
||||||
elif "pixiv_ugoira_frame_data" in pathfmt.keywords:
|
elif "pixiv_ugoira_frame_data" in pathfmt.keywords:
|
||||||
framelist = pathfmt.keywords["pixiv_ugoira_frame_data"]["data"]
|
self._frames = pathfmt.keywords["pixiv_ugoira_frame_data"]["data"]
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
rate_in, rate_out = self.calculate_framerate(framelist)
|
if self.delete:
|
||||||
|
pathfmt.set_extension(self.extension)
|
||||||
|
|
||||||
|
def run(self, pathfmt):
|
||||||
|
if not self._frames:
|
||||||
|
return
|
||||||
|
|
||||||
|
rate_in, rate_out = self.calculate_framerate(self._frames)
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as tempdir:
|
with tempfile.TemporaryDirectory() as tempdir:
|
||||||
# extract frames
|
# extract frames
|
||||||
@ -71,13 +80,13 @@ class UgoiraPP(PostProcessor):
|
|||||||
ffconcat = tempdir + "/ffconcat.txt"
|
ffconcat = tempdir + "/ffconcat.txt"
|
||||||
with open(ffconcat, "w") as file:
|
with open(ffconcat, "w") as file:
|
||||||
file.write("ffconcat version 1.0\n")
|
file.write("ffconcat version 1.0\n")
|
||||||
for frame in framelist:
|
for frame in self._frames:
|
||||||
file.write("file '{}'\n".format(frame["file"]))
|
file.write("file '{}'\n".format(frame["file"]))
|
||||||
file.write("duration {}\n".format(frame["delay"] / 1000))
|
file.write("duration {}\n".format(frame["delay"] / 1000))
|
||||||
if self.extension != "gif":
|
if self.extension != "gif":
|
||||||
# repeat the last frame to prevent it from only being
|
# repeat the last frame to prevent it from only being
|
||||||
# displayed for a very short amount of time
|
# displayed for a very short amount of time
|
||||||
file.write("file '{}'\n".format(framelist[-1]["file"]))
|
file.write("file '{}'\n".format(self._frames[-1]["file"]))
|
||||||
|
|
||||||
# collect command-line arguments
|
# collect command-line arguments
|
||||||
args = [self.ffmpeg]
|
args = [self.ffmpeg]
|
||||||
|
@ -524,7 +524,7 @@ class PathFormat():
|
|||||||
def part_enable(self, part_directory=None):
|
def part_enable(self, part_directory=None):
|
||||||
"""Enable .part file usage"""
|
"""Enable .part file usage"""
|
||||||
if self.has_extension:
|
if self.has_extension:
|
||||||
self.temppath = self.realpath + ".part"
|
self.temppath += ".part"
|
||||||
else:
|
else:
|
||||||
self.set_extension("part", False)
|
self.set_extension("part", False)
|
||||||
if part_directory:
|
if part_directory:
|
||||||
|
Loading…
Reference in New Issue
Block a user