diff --git a/audiobook_metadata/combine_audiobookmedia_to_m4b.py b/audiobook_metadata/combine_audiobookmedia_to_m4b.py index 3dc632f..13af738 100755 --- a/audiobook_metadata/combine_audiobookmedia_to_m4b.py +++ b/audiobook_metadata/combine_audiobookmedia_to_m4b.py @@ -7,6 +7,7 @@ import subprocess import tempfile from pathlib import Path import time +from typing import Any logfile=Path(f"media_{time.strftime("%Y%m%d_%H%M%S")}.log") @@ -137,7 +138,7 @@ def create_m4b(root_path: Path, book_dir: Path) -> None: else: log_message(f"FAILED: Code: {result.returncode}, Stderr: {result.stderr}") -def find_book_dirs(root: Path) -> list[Path]: +def find_book_dirs(root: Path) -> tuple[list[Any], int]: """ A book directory is any directory containing more than one audiobook file (.mp3, .m4a, .m4b) @@ -152,13 +153,19 @@ def find_book_dirs(root: Path) -> list[Path]: counts: dict[Path, int] = {} for file in media_files: + if counts.get(file.parent, 0) > 1: + continue counts[file.parent] = counts.get(file.parent, 0) + 1 - return sorted( - directory - for directory, count in counts.items() - if count > 1 - ) + directories = [] + size = 0 + for directory, count in counts.items(): + if count > 1: + directories.append(directory) + size += sum(file.stat().st_size for pattern in ("*.mp3", "*.m4a", "*.m4b") for file in directory.glob(pattern)) + + + return sorted(directories), size def main() -> None: parser = argparse.ArgumentParser() @@ -180,7 +187,7 @@ def main() -> None: create_m4b(target.parent,target) return - book_dir_set = find_book_dirs(target) + book_dir_set, library_size = find_book_dirs(target) for book_dir in book_dir_set: log_message(f"Found Media: {book_dir}") @@ -190,8 +197,11 @@ def main() -> None: if name != "y": log_message(f"Aborted") exit(0) + size = 0 # Root folder containing many books for book_dir in book_dir_set: + size += sum(file.stat().st_size for pattern in ("*.mp3", "*.m4a", "*.m4b") for file in book_dir.glob(pattern)) + print(f"{size / 1024**3:07.2f}/{library_size/ 1024**3:07.2f} - {size/library_size*100:.2f}% ... ",end="") try: create_m4b(target,book_dir) except Exception as exc: