From b50c75865d1b7f0754db15bfe732038eedb60a23 Mon Sep 17 00:00:00 2001 From: sakamoto Date: Fri, 9 Aug 2024 17:57:50 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=91=F0=9F=92=BB=20improve=20code=20rea?= =?UTF-8?q?dability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comic2pdf.py | 82 +++++++++++++++++++++++++++++++++++++--------------- utils.py | 2 ++ 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/comic2pdf.py b/comic2pdf.py index 5f2762f..1a7fe44 100755 --- a/comic2pdf.py +++ b/comic2pdf.py @@ -10,23 +10,23 @@ import shutil class Comic2PDF: - def __init__(self, src, dest, verbose=False, use_tempfile=False): + def __init__(self, src, dest, verbose=False, use_tempfile=True): self.sort = Sorter() + self.use_tempfile = use_tempfile self.src = src self.dest = dest self.dest_temp_dir = os.path.join(dest, "tmp") - self.define_temp = ( - tempfile.TemporaryDirectory() if use_tempfile else self.dest_temp_dir - ) - self.temp_dir = ( - self.define_temp.name - if isinstance(self.define_temp, tempfile.TemporaryDirectory) - else self.define_temp - ) + + if use_tempfile: + self.define_temp = tempfile.TemporaryDirectory() + self.temp_dir = self.define_temp.name + else: + self.define_temp = self.dest_temp_dir + self.temp_dir = self.define_temp + os.makedirs(self.dest_temp_dir, exist_ok=True) os.makedirs(self.dest, exist_ok=True) - os.makedirs(self.dest_temp_dir, exist_ok=True) os.makedirs(self.temp_dir, exist_ok=True) log.info(f"Source: {self.src}") @@ -35,29 +35,52 @@ class Comic2PDF: log.debug(f"Dest Temp Dir: {self.dest_temp_dir}") def __del__(self): - delete_it = True - try: - if delete_it: - log.debug(f"Deleting: {self.dest_temp_dir}") - shutil.rmtree(self.dest_temp_dir) - except Exception as e: - log.error(e) + if isinstance(self.define_temp, tempfile.TemporaryDirectory): + log.debug(f"Deleting: {self.temp_dir}") + self.define_temp.cleanup() + else: + delete_it = True + try: + if delete_it and self.use_tempfile is False: + log.debug(f"Deleting: {self.dest_temp_dir}") + shutil.rmtree(self.dest_temp_dir) + + else: + pass + except Exception as e: + log.error(e) def run(self): - if os.path.isfile(self.src): + if os.path.isfile(self.src) and ( + self.src.endswith(".cbz") or self.src.endswith(".cbr") + ): self.extract(self.src) self.convert(self.src) - else: + elif os.path.isdir(self.src): + queue = 1 scanned_folder = self.scan(self.src) log.debug(f"scanned folder: {scanned_folder}") for root, dirs, files in os.walk(self.src): for file in files: - log.info("="*30) + txt = f" [{queue}/{len(scanned_folder)}] Progress " + centered_txt = txt.center(45, "=") + log.info(centered_txt) + self.__del__() - os.makedirs(self.temp_dir) + os.makedirs(self.temp_dir, exist_ok=True) + log.debug(f"Created {self.temp_dir}") + self.extract(file) - self.convert(file) + self.convert(file, extract_to_folder=True) + + queue += 1 + + log.info("=== ✅ Finished ===") + + else: + log.error("Unknown file type.") + exit() def scan(self, dir): log.info(f"Scanning {dir}") @@ -81,18 +104,29 @@ class Comic2PDF: log.info("Extraction Complete") - def convert(self, file): + def convert(self, file, extract_to_folder=False): log.info("Converting to pdf...") imgs = [] imgs = self.scan(self.temp_dir) basename = os.path.basename(file) name = os.path.splitext(basename)[0] - pdf_path = os.path.join(self.dest, f"{name}.pdf") + + if extract_to_folder: + folder_basename = os.path.basename(self.src) + folder = os.path.join(self.dest, f"{folder_basename}") + os.makedirs(folder, exist_ok=True) + pdf_path = os.path.join(folder, f"{name}.pdf") + else: + pdf_path = os.path.join(self.dest, f"{name}.pdf") + + log.info(f"Path to conversion: {pdf_path}") + log.info(f"Extract to folder is set to {extract_to_folder}") with open(pdf_path, "wb") as f: f.write(img2pdf.convert(imgs)) log.info("Conversion complete") + if __name__ == "__main__": comic2pdf = Comic2PDF(src, dest, verbose) comic2pdf.run() diff --git a/utils.py b/utils.py index 216071f..b1932c3 100644 --- a/utils.py +++ b/utils.py @@ -23,6 +23,8 @@ if verbose: else: logging.basicConfig(level=logging.INFO, format="[%(levelname)s] - %(message)s") log = logging.getLogger() +logging.getLogger('img2pdf').setLevel(logging.CRITICAL) +logging.getLogger('patoolib').setLevel(logging.CRITICAL) # got this from the internet class Sorter: