From a20cda9ed32462a86bd5d911a537e14f56ac4880 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 14 Dec 2013 05:07:57 +0400 Subject: [PATCH] some refactoring to the files.js file API, now relatively generic... Signed-off-by: Alex A. Naanou --- ui/bookmarks.js | 31 +++++++++- ui/files.js | 146 +++++++++++++++++++++++------------------------- ui/index.html | 2 +- ui/marks.js | 33 ++++++++++- 4 files changed, 134 insertions(+), 78 deletions(-) diff --git a/ui/bookmarks.js b/ui/bookmarks.js index 435ee752..04a9c0da 100755 --- a/ui/bookmarks.js +++ b/ui/bookmarks.js @@ -156,7 +156,36 @@ function prevBookmark(){ -/*********************************************************************/ +/********************************************************************** +* Files... +*/ + +var loadFileBookmarks = makeFileLoader( + 'Bookmarks', + BOOKMARKS_FILE_DEFAULT, + BOOKMARKS_FILE_PATTERN, + function(data){ + BOOKMARKS = data[0] == null ? [] : data[0] + BOOKMARKS_DATA = data[1] == null ? {} : data[1] + }) +FILE_LOADERS.push(loadFileBookmarks) + + +var saveFileBookmarks = makeFileSaver( + BOOKMARKS_FILE_DEFAULT, + function(){ + return [ + BOOKMARKS, + BOOKMARKS_DATA + ] + }) +FILE_SAVERS.push(saveFileBookmarks) + + + +/********************************************************************** +* Setup... +*/ // setup event handlers for the bookmark framework... // diff --git a/ui/files.js b/ui/files.js index 45f88339..c0270176 100755 --- a/ui/files.js +++ b/ui/files.js @@ -6,6 +6,9 @@ //var DEBUG = DEBUG != null ? DEBUG : true +var FILE_LOADERS = [] +var FILE_SAVERS = [] + /********************************************************************** @@ -80,6 +83,19 @@ function bubbleProgress(prefix, from, to, only_progress){ } +function runFileLoaders(prefix, res){ + return $.when.apply(null, FILE_LOADERS.map(function(load){ + return bubbleProgress(prefix, load(), res, true) + })) +} +// XXX do we need bubbleProgress(..) here??? +function runFileSavers(name){ + FILE_SAVERS.map(function(save){ + return save(name) + }) +} + + // Semi-generic deferred file loader // // if pattern is given, then search for the latest (ordered last) file @@ -183,6 +199,57 @@ function loadLatestFile(path, dfl, pattern, diff_pattern, default_data){ } +function makeFileLoader(title, file_dfl, file_pattern, data_set){ + return function(path){ + var res = $.Deferred() + // default locations... + if(path == null){ + var base = normalizePath(CACHE_DIR_VAR) + var loader = loadLatestFile(base, + file_dfl, + file_pattern, + null, + []) + + // explicit path... + // XXX need to account for paths without a CACHE_DIR + } else { + path = normalizePath(path) + var base = path.split(CACHE_DIR)[0] + //base = normalizePath(path +'/'+ CACHE_DIR_VAR) + base = path +'/'+ CACHE_DIR + + // XXX is this correct??? + var loader = loadLatestFile(base, + path.split(base)[0], + RegExp(path.split(base)[0]), + null, + []) + } + + bubbleProgress(title, loader, res) + + res.done(data_set) + + return res + } +} + + +function makeFileSaver(file_dfl, data_get){ + return function(name){ + name = name == null + ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) + : name + + dumpJSON(name + '-' + file_dfl, data_get()) + } +} + + + +/*********************************************************************/ + // Construct a ribbons hierarchy from the fav dirs structure // // NOTE: this depends on listDir(...) @@ -318,79 +385,6 @@ function saveFileImages(name){ } -function makeBasicLoader(title, file_dfl, file_pattern, finalize){ - return function(path){ - var res = $.Deferred() - // default locations... - if(path == null){ - var base = normalizePath(CACHE_DIR_VAR) - var loader = loadLatestFile(base, - file_dfl, - file_pattern, - null, - []) - - // explicit path... - // XXX need to account for paths without a CACHE_DIR - } else { - path = normalizePath(path) - var base = path.split(CACHE_DIR)[0] - //base = normalizePath(path +'/'+ CACHE_DIR_VAR) - base = path +'/'+ CACHE_DIR - - // XXX is this correct??? - var loader = loadLatestFile(base, - path.split(base)[0], - RegExp(path.split(base)[0]), - null, - []) - } - - bubbleProgress(title, loader, res) - - res.done(finalize) - - return res - } -} - -// Load image marks form file -// -// NOTE: if no marks are found then set them to [] -var loadFileMarks = makeBasicLoader( - 'Marks', - MARKED_FILE_DEFAULT, - MARKED_FILE_PATTERN, - function(data){ - MARKED = data - }) - - -// Save image marks to file -function saveFileMarks(name){ - name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name - - dumpJSON(name + '-' + MARKED_FILE_DEFAULT, MARKED) -} - - -var loadFileBookmarks = makeBasicLoader( - 'Bookmarks', - BOOKMARKS_FILE_DEFAULT, - BOOKMARKS_FILE_PATTERN, - function(data){ - BOOKMARKS = data[0] == null ? [] : data[0] - BOOKMARKS_DATA = data[1] == null ? {} : data[1] - }) - - -function saveFileBookmarks(name){ - name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name - - dumpJSON(name + '-' + BOOKMARKS_FILE_DEFAULT, [BOOKMARKS, BOOKMARKS_DATA]) -} - - // Load images, ribbons and marks from cache // // XXX add support for explicit filenames... @@ -438,10 +432,13 @@ function loadFileState(path, prefix){ // normalizePath(DATA.image_file, base) // : null), res, true), // load marks if available... + runFileLoaders(prefix, res)) + /* bubbleProgress(prefix, loadFileMarks(), res, true), bubbleProgress(prefix, loadFileBookmarks(), res, true)) + */ .done(function(){ reloadViewer() res.resolve() @@ -484,8 +481,7 @@ function saveFileState(name, no_normalize_path){ dumpJSON(name + '-data.json', data) // XXX do we need to do this??? - saveFileMarks(name) - saveFileBookmarks(name) + runFileSavers(name) // save the updated images... if(IMAGES_UPDATED.length > 0){ diff --git a/ui/index.html b/ui/index.html index 5fdc961d..4f458f0e 100755 --- a/ui/index.html +++ b/ui/index.html @@ -27,6 +27,7 @@ + @@ -34,7 +35,6 @@ - diff --git a/ui/marks.js b/ui/marks.js index b9b81948..7f77ea36 100755 --- a/ui/marks.js +++ b/ui/marks.js @@ -443,7 +443,38 @@ function markImagesDialog(){ } -/*********************************************************************/ + +/********************************************************************** +* Files... +*/ + +// Load image marks form file +// +// NOTE: if no marks are found then set them to [] +var loadFileMarks = makeFileLoader( + 'Marks', + MARKED_FILE_DEFAULT, + MARKED_FILE_PATTERN, + function(data){ + MARKED = data + }) +FILE_LOADERS.push(loadFileMarks) + + +// Save image marks to file +var saveFileMarks = makeFileSaver( + MARKED_FILE_DEFAULT, + function(){ + return MARKED + }) +FILE_SAVERS.push(saveFileMarks) + + + +/********************************************************************** +* Setup... +*/ + function setupMarks(viewer){ console.log('Marks: setup...')