Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions thumbgen/thumbgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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
Expand Down Expand Up @@ -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!")


Expand Down