mirror of
https://github.com/mikf/gallery-dl.git
synced 2024-11-23 03:02:50 +01:00
92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2024 Mike Fährmann
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
# published by the Free Software Foundation.
|
|
|
|
"""Rename files"""
|
|
|
|
from .common import PostProcessor
|
|
from .. import formatter
|
|
import os
|
|
|
|
|
|
class RenamePP(PostProcessor):
|
|
|
|
def __init__(self, job, options):
|
|
PostProcessor.__init__(self, job)
|
|
|
|
self.skip = options.get("skip", True)
|
|
old = options.get("from")
|
|
new = options.get("to")
|
|
|
|
if old:
|
|
self._old = self._apply_format(old)
|
|
self._new = (self._apply_format(new) if new else
|
|
self._apply_pathfmt)
|
|
job.register_hooks({
|
|
"prepare": self.rename_from,
|
|
}, options)
|
|
|
|
elif new:
|
|
self._old = self._apply_pathfmt
|
|
self._new = self._apply_format(new)
|
|
job.register_hooks({
|
|
"skip" : self.rename_to_skip,
|
|
"prepare-after": self.rename_to_pafter,
|
|
}, options)
|
|
|
|
else:
|
|
raise ValueError("Option 'from' or 'to' is required")
|
|
|
|
def rename_from(self, pathfmt):
|
|
name_old = self._old(pathfmt)
|
|
path_old = pathfmt.realdirectory + name_old
|
|
|
|
if os.path.exists(path_old):
|
|
name_new = self._new(pathfmt)
|
|
path_new = pathfmt.realdirectory + name_new
|
|
self._rename(path_old, name_old, path_new, name_new)
|
|
|
|
def rename_to_skip(self, pathfmt):
|
|
name_old = self._old(pathfmt)
|
|
path_old = pathfmt.realdirectory + name_old
|
|
|
|
if os.path.exists(path_old):
|
|
pathfmt.filename = name_new = self._new(pathfmt)
|
|
pathfmt.path = pathfmt.directory + name_new
|
|
pathfmt.realpath = path_new = pathfmt.realdirectory + name_new
|
|
self._rename(path_old, name_old, path_new, name_new)
|
|
|
|
def rename_to_pafter(self, pathfmt):
|
|
pathfmt.filename = name_new = self._new(pathfmt)
|
|
pathfmt.path = pathfmt.directory + name_new
|
|
pathfmt.realpath = pathfmt.realdirectory + name_new
|
|
pathfmt.kwdict["_file_recheck"] = True
|
|
|
|
def _rename(self, path_old, name_old, path_new, name_new):
|
|
if self.skip and os.path.exists(path_new):
|
|
return self.log.warning(
|
|
"Not renaming '%s' to '%s' since another file with the "
|
|
"same name exists", name_old, name_new)
|
|
|
|
self.log.info("'%s' -> '%s'", name_old, name_new)
|
|
os.replace(path_old, path_new)
|
|
|
|
def _apply_pathfmt(self, pathfmt):
|
|
return pathfmt.build_filename(pathfmt.kwdict)
|
|
|
|
def _apply_format(self, format_string):
|
|
fmt = formatter.parse(format_string).format_map
|
|
|
|
def apply(pathfmt):
|
|
return pathfmt.clean_path(pathfmt.clean_segment(fmt(
|
|
pathfmt.kwdict)))
|
|
|
|
return apply
|
|
|
|
|
|
__postprocessor__ = RenamePP
|