some refactoring to the files.js file API, now relatively generic...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-12-14 05:07:57 +04:00
parent 9db9983371
commit a20cda9ed3
4 changed files with 134 additions and 78 deletions

View File

@ -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...
//

View File

@ -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){

View File

@ -27,6 +27,7 @@
<script src="ribbons.js"></script>
<script src="data.js"></script>
<script src="files.js"></script>
<script src="urlhistory.js"></script>
<script src="crop.js"></script>
<script src="sort.js"></script>
@ -34,7 +35,6 @@
<script src="modes.js"></script>
<script src="marks.js"></script>
<script src="bookmarks.js"></script>
<script src="files.js"></script>
<script src="localstorage.js"></script>
<script src="info.js"></script>
<script src="ui.js"></script>

View File

@ -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...')