diff --git a/prosopopee/prosopopee.py b/prosopopee/prosopopee.py index fe1448d..a9902d1 100644 --- a/prosopopee/prosopopee.py +++ b/prosopopee/prosopopee.py @@ -2,6 +2,7 @@ import os import sys +import json import yaml import shutil @@ -12,6 +13,36 @@ index_template = templates.get_template("index.html") gallery_index_template = templates.get_template("gallery-index.html") +class Cache(object): + cache_file_path = os.path.join(os.getcwd(), ".prosopopee_cache") + + def __init__(self): + if os.path.exists(os.path.join(os.getcwd(), ".prosopopee_cache")): + self.cache = json.load(open(self.cache_file_path, "r")) + else: + self.cache = {} + + def thumbnail_needs_to_be_generated(self, source, target): + if not os.path.exists(target): + return True + + if target not in self.cache: + return True + + if self.cache[target] != os.path.getsize(source): + return True + + return False + + def cache_thumbnail(self, source, target): + self.cache[target] = os.path.getsize(source) + + def __del__(self): + json.dump(self.cache, open(self.cache_file_path, "w")) + + +CACHE = Cache() + class TemplateFunctions(): def __init__(self, base_dir, target_dir, has_gm): self.base_dir = base_dir @@ -34,9 +65,15 @@ class TemplateFunctions(): thumbnail_name[-2] += "-small" thumbnail_name = ".".join(thumbnail_name) - command = "gm convert %s -resize %s %s" % (os.path.join(self.base_dir, image), gm_geometry, os.path.join(self.target_dir, thumbnail_name)) - print command - os.system(command) + source, target = os.path.join(self.base_dir, image), os.path.join(self.target_dir, thumbnail_name) + + if CACHE.thumbnail_needs_to_be_generated(source, target): + command = "gm convert %s -resize %s %s" % (source, gm_geometry, target) + # print command + os.system(command) + + CACHE.cache_thumbnail(source, target) + return thumbnail_name