diff --git a/ui/buildcache.py b/buildcache.py similarity index 94% rename from ui/buildcache.py rename to buildcache.py index 38a21e1b..99ea3d3b 100755 --- a/ui/buildcache.py +++ b/buildcache.py @@ -1,7 +1,7 @@ #======================================================================= __version__ = '''0.0.01''' -__sub_version__ = '''20130410190410''' +__sub_version__ = '''20130521225013''' __copyright__ = '''(c) Alex A. Naanou 2012''' @@ -15,6 +15,8 @@ import urllib2 from pli.logictypes import OR +import gid + #----------------------------------------------------------------------- # XXX fanatically cleanup and normalise paths... @@ -33,6 +35,8 @@ from pli.logictypes import OR #----------------------------------------------------------------------- config = { + 'format-version': '2.0', + 'cache-structure': { # XXX make these as close to standard as possible and keep # sane distances... @@ -42,7 +46,15 @@ config = { '1080px': '.ImageGridCache/1080px/', '1920px': '.ImageGridCache/1920px/', }, + + # gen1 format... 'json': '.ImageGridCache/all.json', + + # gen3 format... + 'images': '.ImageGridCache/images.json', + 'data': '.ImageGridCache/data.json', + 'marked': '.ImageGridCache/marked.json', + 'error': '.ImageGridCache/error.log', 'sizes': { '150px': 150, @@ -106,7 +118,6 @@ def log_err(path, e, source_file, target_file): def get_image_guid(path, force=False): ''' ''' - ##!!! check cache and date... im = Image.open(path) return sha.sha(im.tostring()).hexdigest() ## return sha.sha(open(path, 'r').read()) @@ -182,7 +193,7 @@ def build_index(path, images=None, count=None): # XXX this will not overwrite existing files... # XXX make this destingwish absolute and relative paths... -def make_cache_images(path, config=config): +def make_cache_images(path, images, config=config): ''' ''' dirs = config['cache-structure'] @@ -206,6 +217,7 @@ def make_cache_images(path, config=config): } img = Image.open(source_path, 'r') try: + ##!!! use a real gid -- gid.image_gid(path, ...) iid = sha.sha(img.tostring()).hexdigest() except IOError, e: print 'x', @@ -261,7 +273,7 @@ def build_local_cache(path): build_cache_dirs(path) - n = make_cache_images(path) + n = make_cache_images(path, images) t1 = time.time() diff --git a/buildcache2.py b/buildcache2.py new file mode 100755 index 00000000..1a93cec0 --- /dev/null +++ b/buildcache2.py @@ -0,0 +1,168 @@ +#======================================================================= + +__version__ = '''0.0.01''' +__sub_version__ = '''20130521232425''' +__copyright__ = '''(c) Alex A. Naanou 2011''' + + +#----------------------------------------------------------------------- + +import os +import Image +import json +import sha +import urllib2 + +from pli.logictypes import OR + +import gid + + +#----------------------------------------------------------------------- + +config = { + 'absolute-path': False, + + 'cache-image-name': '%(guid)s - %(name)s', + + 'images': '.ImageGridCache/images.json', + 'data': '.ImageGridCache/data.json', + 'marked': '.ImageGridCache/marked.json', + + 'error': '.ImageGridCache/error.log', + + 'cache-structure': { + # make these as close to standard as possible and keep sane + # distances... + '150px': '.ImageGridCache/150px/', + '350px': '.ImageGridCache/350px/', + '900px': '.ImageGridCache/900px/', + '1080px': '.ImageGridCache/1080px/', + '1920px': '.ImageGridCache/1920px/', + }, + 'sizes': { + '150px': 150, + '350px': 350, + '900px': 900, + '1080px': 1080, + '1920px': 1920, + } +} + +data = { + 'version': '2.0', + 'current': None, + 'ribbons': [], + 'order': [], + 'image_file': 'images.json', +} + +IMAGE_EXT = OR(*( + '.jpg', '.jpeg', '.JPG', '.JPEG', +)) + +ERR_LOG = '''\ +ERROR: %(error)s +SOURCE: %(source-file)s +TARGET: %(target-file)s + + +''' + + +#----------------------------------------------------------------------- + +def pathjoin(*p): + ''' + ''' + return ('/'.join(p)).replace('//', '/') + + +def log_err(path, e, source_file, target_file): + ''' + ''' + err_file = pathjoin(path, config['error']) + if not os.path.exists(err_file): + err = open(err_file, 'w') + else: + err = open(err_file, 'a') + with err: + err.write(ERR_LOG % { + 'source-file': source_file, + 'target-file': target_file, + 'error': e, + }) + + +def hash_gid(img, force=False): + ''' + Generate gid based on preview file content. + + NOTE: img can be either a path or an Image. + ''' + if type(img) in (str, unicode): + img = Image.open(img) + return sha.sha(img.tostring()).hexdigest() + + +def build_cache_dirs(path, config=config): + ''' + Build cache directory tree. + ''' + dirs = config['cache-structure'] + for _, k in dirs.items(): + p = pathjoin(path, k) + if not os.path.exists(p): + os.makedirs(p) + + +def build_images(path, config=config, gid_generator=hash_gid): + ''' + Build image structures update images.json in cache. + ''' + absolute_path = config['absolute-path'] + + for name in os.listdir(path): + iid, ext = os.path.splitext(name) + + if ext != IMAGE_EXT: + continue + + source_path = pathjoin(path, name) + + img = { + 'id': gid_generator(source_path), + 'type': 'image', + 'state': 'single', + 'path': None, + 'ctime': os.path.getctime(source_path), + 'preview': {}, + } + if absolute_path == True: + img['path'] = 'file:///' + urllib2.quote(pathjoin(path, name), safe='/:') + else: + img['path'] = urllib2.quote(name) + + yield img + + +def build_previews(image): + ''' + ''' + + + +#----------------------------------------------------------------------- + + + + + +#----------------------------------------------------------------------- +if __name__ == '__main__': + pass + + + +#======================================================================= +# vim:set ts=4 sw=4 nowrap : diff --git a/ui/data.js b/ui/data.js index de3e2d10..75e90b4a 100755 --- a/ui/data.js +++ b/ui/data.js @@ -724,6 +724,21 @@ function openImage(){ } +function loadDir(path){ + // CEF + if(window.CEF_loadDir != null){ + var dir = CEF_loadDir(path) + IMAGES = dir.images + DATA = dir.data + MARKED = dir.marked + loadData() + + // PhoneGap + } else if(false) { + // XXX + } +} + /********************************************************************** * Image caching... diff --git a/ui/lib/jli.js b/ui/lib/jli.js index d44807d6..8463d334 100755 --- a/ui/lib/jli.js +++ b/ui/lib/jli.js @@ -568,6 +568,16 @@ String.prototype.capitalize = function(){ } +// XXX not sure if this has to be a utility or a method... +Object.get = function(obj, name, dfl){ + var val = obj[name] + if(val === undefined && dfl != null){ + return dfl + } + return val +} + + var getAnimationFrame = (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame @@ -577,6 +587,7 @@ var getAnimationFrame = (window.requestAnimationFrame setTimeout(callback, 1000/60) }) + var cancelAnimationFrame = (window.cancelRequestAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame