diff --git a/ui/TODO.otl b/ui/TODO.otl index 0729825b..ed141359 100755 --- a/ui/TODO.otl +++ b/ui/TODO.otl @@ -74,8 +74,8 @@ Roadmap -[_] 21% Gen 3 current todo - [_] 43% High priority +[_] 22% Gen 3 current todo + [_] 45% High priority [_] BUG: aligning still sometimes gets off... | ...after rotating a number of images | @@ -109,7 +109,6 @@ Roadmap [_] BUG: jumping screen images does not load the adjacent ribbons... | positioning is OK but ribbons are not fully visible... [_] ASAP: test on Android... - [_] import fav dirs (wo. index)... [_] slideshow mode... [_] single ribbon mode | should this have up/down navigation? @@ -166,6 +165,7 @@ Roadmap [_] thresholds and frame size [_] remove extra and repetitive actions [_] caching config + [X] import fav dirs (wo. index)... [X] ASAP: load/view un-cached directories... [X] ASAP: support relative paths in cache... [X] ASAP: account for image rotation with screen proportions while positioning diff --git a/ui/data.js b/ui/data.js index 74d093de..b6bcd1e6 100755 --- a/ui/data.js +++ b/ui/data.js @@ -377,11 +377,22 @@ function getBestPreview(gid, size){ * Constructors */ +// NOTE: this depends on that the base dir contains ALL the images... function imagesFromUrls(lst){ var res = {} $.each(lst, function(i, e){ - var gid = 'image-' + i + + // this is ugly but I'm bored so this pretty... + var ii = i < 10 ? '0000000' + i + : i < 100 ? '000000' + i + : i < 1000 ? '00000' + i + : i < 10000 ? '0000' + i + : i < 100000 ? '000' + i + : i < 1000000 ? '00' + i + : i < 10000000 ? '0' + i + : i + var gid = 'image-' + ii res[gid] = { id: gid, type: 'image', @@ -413,6 +424,53 @@ function dataFromImages(images){ } +// NOTE: this depends on listDir(...) +// NOTE: this assumes that images contain ALL the images... +function ribbonsFromFavDirs(path, images){ + path = path == null ? BASE_URL : path + images = images == null ? IMAGES : images + + // build a reverse name-gid index for fast access... + var index = {} + var name + for(var gid in images){ + name = images[gid].path.split('/').pop() + // XXX we assume that names are unique... + index[name] = gid + } + + var ribbons = [] + // add the base row... + var base = Object.keys(images) + ribbons.push(base) + + var files = listDir(path) + var cur_path = path + while(files.indexOf('fav') >= 0){ + cur_path += '/fav' + files = listDir(cur_path) + ribbon = [] + // collect the images... + $.each(files, function(i, e){ + var _gid = index[e] + var found = /.*\.(jpg|jpeg)$/i.test(e) ? ribbon.push(_gid) : false + // remove the found item from each of the below ribbons... + if(found !== false){ + $.each(ribbons, function(i ,e){ + e.splice(e.indexOf(_gid), 1) + }) + } + }) + ribbons.push(ribbon) + } + + // remove empty ribbons... + ribbons = $.map(ribbons, function(e){ return e.length > 0 ? [e] : null }) + + return ribbons.reverse() +} + + /********************************************************************** * Format conversion @@ -1097,8 +1155,9 @@ function loadDir(path, raw_load){ IMAGES = imagesFromUrls(image_paths) DATA = dataFromImages(IMAGES) - MARKED = [] BASE_URL = orig_path + DATA.ribbons = ribbonsFromFavDirs() + MARKED = [] loadData() }