diff --git a/thumbgen/thumbgen.py b/thumbgen/thumbgen.py index d03c3e8..1fc45bf 100644 --- a/thumbgen/thumbgen.py +++ b/thumbgen/thumbgen.py @@ -12,9 +12,12 @@ gi.require_version("GnomeDesktop", "3.0") from gi.repository import Gio, GnomeDesktop # isort:skip - -global factory -factory = GnomeDesktop.DesktopThumbnailFactory() +thumbnail_size_map = { + "normal": GnomeDesktop.DesktopThumbnailSize.NORMAL, + "large": GnomeDesktop.DesktopThumbnailSize.LARGE, + "x-large": GnomeDesktop.DesktopThumbnailSize.XLARGE, + "xx-large": GnomeDesktop.DesktopThumbnailSize.XXLARGE, +} logger.remove() logger.add(sys.stdout, level="INFO") logger.add("/tmp/thumbgen.log", level="DEBUG", rotation="100 MB") @@ -35,8 +38,12 @@ def make_thumbnail(fpath: str) -> bool: if not factory.can_thumbnail(uri, mime_type, mtime): logger.debug("UNSUPPORTED {}".format(uri)) return False - - thumbnail = factory.generate_thumbnail(uri, mime_type) + # Exception handling in case of corrupted images + try: + thumbnail = factory.generate_thumbnail(uri, mime_type) + except Exception as e: + logger.debug("ERROR {}: {}".format(uri, e)) + return False if thumbnail is None: logger.debug("ERROR {}".format(uri)) return False @@ -78,15 +85,30 @@ def get_all_files(*, dir_path: Path, recursive: bool) -> List[Path]: @click.option( "-d", "--img_dirs", required=True, help='directories to generate thumbnails seperated by space, eg: "dir1/dir2 dir3"' ) +@click.option( + "-s", "--size", default="normal", type=click.Choice(["normal", "large", "x-large", "xx-large", "all"]), help="Thumbnail size: normal, large, x-large, xx-large, all" +) @click.option("-w", "--workers", default=1, help="no of cpus to use for processing") @click.option( "-i", "--only_images", is_flag=True, default=False, help="Whether to only look for images to be thumbnailed" ) @click.option("-r", "--recursive", is_flag=True, default=False, help="Whether to recursively look for files") -def main(img_dirs: str, workers: str, only_images: bool, recursive: bool) -> None: +def main(img_dirs: str, size: str, workers: str, only_images: bool, recursive: bool) -> None: img_dirs = [Path(img_dir) for img_dir in img_dirs.split()] - for img_dir in img_dirs: - thumbnail_folder(dir_path=img_dir, workers=workers, only_images=only_images, recursive=recursive) + + thumbnail_sizes = [] + if size == "all": + thumbnail_sizes = thumbnail_size_map.keys() + else: + thumbnail_sizes = [size] + + global factory + for s in thumbnail_sizes: + factory = GnomeDesktop.DesktopThumbnailFactory.new(thumbnail_size_map[s]) + print("Starting Thumbnail Generation for size: {}".format(s)) + for img_dir in img_dirs: + thumbnail_folder(dir_path=img_dir, workers=workers, only_images=only_images, recursive=recursive) + print("Thumbnail Generation Completed for size: {}".format(s)) print("Thumbnail Generation Completed!")