Files
comic2pdf/comic2pdf.py
T
2024-08-09 13:45:59 -05:00

99 lines
2.9 KiB
Python
Executable File

from utils import Sorter
from utils import src, dest, verbose
from utils import log
import os
import img2pdf
import tempfile
import patoolib
import shutil
class Comic2PDF:
def __init__(self, src, dest, verbose=False, use_tempfile=False):
self.sort = Sorter()
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
)
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}")
log.info(f"Destination: {self.dest}")
log.debug(f"Temp Dir: {self.temp_dir}")
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)
def run(self):
if os.path.isfile(self.src):
self.extract(self.src)
self.convert(self.src)
else:
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)
self.__del__()
os.makedirs(self.temp_dir)
self.extract(file)
self.convert(file)
def scan(self, dir):
log.info(f"Scanning {dir}")
files_in_folder = []
for root, dirs, files in os.walk(dir):
for name in files:
if name.endswith((".png", ".jpg", ".jpeg", ".cbz", ".cbr")):
files_in_folder.append(os.path.join(root, name))
files_in_folder.sort(key=self.sort.natural_keys)
log.info(f"Found {len(files_in_folder)} files.")
return files_in_folder
def extract(self, file):
log.info(f"Extracting... {file}")
path_file = os.path.join(self.src, file)
patoolib.extract_archive(path_file, outdir=self.temp_dir, verbosity=-1)
log.info("Extraction Complete")
def convert(self, file):
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")
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()