mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-01 11:50:07 +00:00
refactored the data loader...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
7ee5177c9d
commit
b6990615cd
322
ui/files.js
322
ui/files.js
@ -329,6 +329,24 @@ function loadLatestJSONFile(path, dfl, pattern, diff_pattern, default_data, trac
|
|||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* File serialization framework...
|
* File serialization framework...
|
||||||
|
*
|
||||||
|
* This helps us define:
|
||||||
|
* - named data type loader -- makeFileLoader(..)
|
||||||
|
* - support different file versions -- load latest
|
||||||
|
* - support a specific directory structure and centralized
|
||||||
|
* configuration
|
||||||
|
* - named data type saver -- makeFileSaver(..)
|
||||||
|
* - save a version
|
||||||
|
* - support a specific directory structure and centralized
|
||||||
|
* configuration
|
||||||
|
* - a way to mark named data type as modified -- fileUpdated(..)
|
||||||
|
* - a way to load all registered data types -- runFileLoaders(..)
|
||||||
|
* - a way to save modified data types -- runFileSavers(..)
|
||||||
|
*
|
||||||
|
* NOTE: saving/loading a diff is done manually, see:
|
||||||
|
* - saveFileImages(..)
|
||||||
|
* - saveFileImagesDiff(..)
|
||||||
|
* - loadFileImages(..)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Construct a JSON file loader...
|
// Construct a JSON file loader...
|
||||||
@ -374,17 +392,14 @@ function makeFileLoader(title, name, default_data, set_data, error, evt_name, sk
|
|||||||
tracker)
|
tracker)
|
||||||
|
|
||||||
// explicit path...
|
// explicit path...
|
||||||
// XXX need to account for paths without a CONFIG.cache_dir
|
|
||||||
} else {
|
} else {
|
||||||
path = normalizePath(path)
|
path = normalizePath(path)
|
||||||
var base = path.split(CONFIG.cache_dir)[0]
|
var base = path.split(CONFIG.cache_dir)[0]
|
||||||
//base = normalizePath(path +'/'+ CONFIG.cache_dir_var)
|
base = base +'/'+ CONFIG.cache_dir
|
||||||
base = path +'/'+ CONFIG.cache_dir
|
|
||||||
|
|
||||||
// XXX is this correct???
|
|
||||||
var loader = loadLatestJSONFile(base,
|
var loader = loadLatestJSONFile(base,
|
||||||
path.split(base)[0],
|
file_dfl,
|
||||||
RegExp(path.split(base)[0]),
|
file_pattern,
|
||||||
null,
|
null,
|
||||||
default_data,
|
default_data,
|
||||||
tracker)
|
tracker)
|
||||||
@ -402,7 +417,10 @@ function makeFileLoader(title, name, default_data, set_data, error, evt_name, sk
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
!skip_reg && FILE_LOADERS.push(_loader)
|
if(!skip_reg){
|
||||||
|
console.log('!!!!!!', title, skip_reg)
|
||||||
|
FILE_LOADERS.push(_loader)
|
||||||
|
}
|
||||||
return _loader
|
return _loader
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,10 +450,10 @@ function fileUpdated(name){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function runFileLoaders(prefix, res){
|
function runFileLoaders(prefix, res, tracker){
|
||||||
FILES_UPDATED = []
|
FILES_UPDATED = []
|
||||||
return $.when.apply(null, FILE_LOADERS.map(function(load){
|
return $.when.apply(null, FILE_LOADERS.map(function(load){
|
||||||
return bubbleProgress(prefix, load(), res, true)
|
return bubbleProgress(prefix, load(null, tracker), res, true)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,9 +473,33 @@ function runFileSavers(path, date, all){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/************************************************************ Data ***/
|
||||||
// XXX should this be here or in data.js???
|
// XXX should this be here or in data.js???
|
||||||
|
|
||||||
|
// NOTE: this is not registered in file loaders as it needs to be called
|
||||||
|
// explicitly before anything else is loaded...
|
||||||
|
var loadFileData = makeFileLoader(
|
||||||
|
'Data',
|
||||||
|
CONFIG.data_file,
|
||||||
|
null,
|
||||||
|
function(data){
|
||||||
|
// legacy format...
|
||||||
|
if(data.version == null){
|
||||||
|
json = convertDataGen1(data)
|
||||||
|
DATA = data.data
|
||||||
|
IMAGES = data.images
|
||||||
|
MARKED = []
|
||||||
|
|
||||||
|
// version 2.*
|
||||||
|
} else if(/2\.[0-9]*/.test(data.version)) {
|
||||||
|
DATA = data
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
true)
|
||||||
|
|
||||||
|
|
||||||
var saveFileData = makeFileSaver(
|
var saveFileData = makeFileSaver(
|
||||||
'Data',
|
'Data',
|
||||||
CONFIG.data_file,
|
CONFIG.data_file,
|
||||||
@ -478,70 +520,7 @@ function dataUpdated(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/********************************************************** Images ***/
|
||||||
|
|
||||||
// Construct a ribbons hierarchy from the fav dirs structure
|
|
||||||
//
|
|
||||||
// NOTE: this depends on listDir(...)
|
|
||||||
// NOTE: this assumes that images contain ALL the images...
|
|
||||||
// NOTE: this assumes that all file names are unique...
|
|
||||||
function ribbonsFromFavDirs(path, images, cmp, dir_name){
|
|
||||||
path = path == null ? getBaseURL() : path
|
|
||||||
images = images == null ? IMAGES : images
|
|
||||||
dir_name = dir_name == null ? 'fav' : dir_name
|
|
||||||
|
|
||||||
// build a reverse name-gid index for fast access...
|
|
||||||
var index = {}
|
|
||||||
var name
|
|
||||||
for(var gid in images){
|
|
||||||
name = getImageFileName(gid)
|
|
||||||
// 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(dir_name) >= 0){
|
|
||||||
cur_path += '/' + dir_name
|
|
||||||
files = listDir(cur_path)
|
|
||||||
ribbon = []
|
|
||||||
// collect the images...
|
|
||||||
$.each(files, function(i, e){
|
|
||||||
var _gid = index[e]
|
|
||||||
// skip files not in index...
|
|
||||||
// NOTE: we do not need to filter the files by name as we
|
|
||||||
// trust the index...
|
|
||||||
if(_gid == null){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// remove the found item from each of the below ribbons...
|
|
||||||
$.each(ribbons, function(i ,e){
|
|
||||||
if(e.indexOf(_gid) != -1){
|
|
||||||
e.splice(e.indexOf(_gid), 1)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
ribbon.push(_gid)
|
|
||||||
})
|
|
||||||
ribbons.push(ribbon)
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove empty ribbons and sort the rest...
|
|
||||||
ribbons = $.map(ribbons, function(e){
|
|
||||||
return e.length > 0 ? [cmp == null ? e : e.sort(cmp)] : null
|
|
||||||
})
|
|
||||||
|
|
||||||
return ribbons.reverse()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
|
||||||
|
|
||||||
// Load images from file
|
// Load images from file
|
||||||
//
|
//
|
||||||
@ -593,34 +572,29 @@ function loadFileImages(path, tracker, no_load_diffs){
|
|||||||
|
|
||||||
// Save current images list to file
|
// Save current images list to file
|
||||||
//
|
//
|
||||||
// If no name is given this will merge all the diffs and save a "clean"
|
var saveFileImages = makeFileSaver(
|
||||||
// (full) images.json file. Also removing the diff files.
|
'Images',
|
||||||
//
|
CONFIG.images_file,
|
||||||
// NOTE: this will use CONFIG.cache_dir as the location if no name is given.
|
function(){
|
||||||
function saveFileImages(name, date, remove_diffs){
|
IMAGES_UPDATED = []
|
||||||
remove_diffs = remove_diffs == null ? false : remove_diffs
|
IMAGES_CREATED = false
|
||||||
name = name == null ? normalizePath(CONFIG.cache_dir_var +'/'+ makeFilename(CONFIG.images_file, date)) : name
|
return IMAGES
|
||||||
|
},
|
||||||
|
true)
|
||||||
|
|
||||||
if(window.dumpJSON == null){
|
|
||||||
showErrorStatus('Can\'t save to file.')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove the diffs...
|
function saveFileImagesAndRemoveDiffs(){
|
||||||
if(remove_diffs){
|
// save...
|
||||||
var diff_pattern = makeDiffFilePattern(CONFIG.images_file)
|
saveFileImages()
|
||||||
$.each($.map(listDir(normalizePath(CONFIG.cache_dir_var)), function(e){
|
|
||||||
return diff_pattern.test(e) ? e : null
|
|
||||||
}), function(i, e){
|
|
||||||
showStatusQ('Removeing:', e)
|
|
||||||
removeFile(normalizePath(CONFIG.cache_dir_var +'/'+ e))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
dumpJSON(name, IMAGES)
|
// remove...
|
||||||
|
var diff_pattern = makeDiffFilePattern(CONFIG.images_file)
|
||||||
IMAGES_UPDATED = []
|
$.each($.map(listDir(normalizePath(CONFIG.cache_dir_var)), function(e){
|
||||||
IMAGES_CREATED = false
|
return diff_pattern.test(e) ? e : null
|
||||||
|
}), function(i, e){
|
||||||
|
showStatusQ('Removeing:', e)
|
||||||
|
removeFile(normalizePath(CONFIG.cache_dir_var +'/'+ e))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -641,6 +615,11 @@ function saveFileImagesDiff(name, date){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Global loaders/savers
|
||||||
|
*/
|
||||||
|
|
||||||
// Load images, ribbons and run registered load callbacks...
|
// Load images, ribbons and run registered load callbacks...
|
||||||
//
|
//
|
||||||
// XXX add support for explicit filenames...
|
// XXX add support for explicit filenames...
|
||||||
@ -661,67 +640,42 @@ function loadFileState(path, prefix, tracker){
|
|||||||
var res = $.Deferred()
|
var res = $.Deferred()
|
||||||
|
|
||||||
bubbleProgress(prefix,
|
bubbleProgress(prefix,
|
||||||
loadLatestJSONFile(path,
|
loadFileData(path, tracker),
|
||||||
makeBaseFilename(CONFIG.data_file),
|
|
||||||
makeFilenamePattern(CONFIG.data_file),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
tracker),
|
|
||||||
res,
|
res,
|
||||||
true)
|
true)
|
||||||
.done(function(json){
|
.done(function(json){
|
||||||
setBaseURL(base)
|
setBaseURL(base)
|
||||||
|
|
||||||
// legacy format...
|
$.when(
|
||||||
if(json.version == null){
|
// XXX load config...
|
||||||
json = convertDataGen1(json)
|
|
||||||
DATA = json.data
|
|
||||||
IMAGES = json.images
|
|
||||||
MARKED = []
|
|
||||||
reloadViewer()
|
|
||||||
res.resolve()
|
|
||||||
|
|
||||||
// version 2.*
|
// load current position...
|
||||||
} else if(/2\.[0-9]*/.test(json.version)) {
|
// added on 2.2
|
||||||
DATA = json
|
bubbleProgress(prefix,
|
||||||
$.when(
|
loadLatestJSONFile(path,
|
||||||
// XXX load config...
|
makeBaseFilename(CONFIG.current_file),
|
||||||
|
null,
|
||||||
// load current position...
|
null,
|
||||||
// added on 2.2
|
DATA.current,
|
||||||
bubbleProgress(prefix,
|
tracker),
|
||||||
loadLatestJSONFile(path,
|
res,
|
||||||
makeBaseFilename(CONFIG.current_file),
|
true)
|
||||||
null,
|
.done(function(cur){
|
||||||
null,
|
DATA.current = cur
|
||||||
DATA.current,
|
}),
|
||||||
tracker),
|
// load images...
|
||||||
res,
|
bubbleProgress(prefix,
|
||||||
true)
|
loadFileImages(base, tracker), res, true),
|
||||||
.done(function(cur){
|
// run registered loaders...
|
||||||
DATA.current = cur
|
// added on 2.1
|
||||||
}),
|
// XXX bubbleProgress???
|
||||||
// load images...
|
runFileLoaders(prefix, res, tracker))
|
||||||
bubbleProgress(prefix,
|
.done(function(){
|
||||||
loadFileImages(base, tracker), res, true),
|
$('.viewer').trigger('fileStateLoaded')
|
||||||
//loadFileImages(DATA.image_file != null ?
|
reloadViewer()
|
||||||
// normalizePath(DATA.image_file, base)
|
res.resolve()
|
||||||
// : null), res, true),
|
})
|
||||||
// run registered loaders...
|
// XXX fail???
|
||||||
// added on 2.1
|
|
||||||
// XXX bubbleProgress???
|
|
||||||
runFileLoaders(prefix, res))
|
|
||||||
.done(function(){
|
|
||||||
$('.viewer').trigger('fileStateLoaded')
|
|
||||||
reloadViewer()
|
|
||||||
res.resolve()
|
|
||||||
})
|
|
||||||
// XXX fail???
|
|
||||||
|
|
||||||
// unknown format...
|
|
||||||
} else {
|
|
||||||
res.reject('unknown format.')
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.fail(function(){
|
.fail(function(){
|
||||||
res.reject('Loading', path, 'Error')
|
res.reject('Loading', path, 'Error')
|
||||||
@ -908,6 +862,66 @@ function loadDir(path, no_preview_processing, prefix, tracker){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct a ribbons hierarchy from the fav dirs structure
|
||||||
|
//
|
||||||
|
// NOTE: this depends on listDir(...)
|
||||||
|
// NOTE: this assumes that images contain ALL the images...
|
||||||
|
// NOTE: this assumes that all file names are unique...
|
||||||
|
function ribbonsFromFavDirs(path, images, cmp, dir_name){
|
||||||
|
path = path == null ? getBaseURL() : path
|
||||||
|
images = images == null ? IMAGES : images
|
||||||
|
dir_name = dir_name == null ? 'fav' : dir_name
|
||||||
|
|
||||||
|
// build a reverse name-gid index for fast access...
|
||||||
|
var index = {}
|
||||||
|
var name
|
||||||
|
for(var gid in images){
|
||||||
|
name = getImageFileName(gid)
|
||||||
|
// 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(dir_name) >= 0){
|
||||||
|
cur_path += '/' + dir_name
|
||||||
|
files = listDir(cur_path)
|
||||||
|
ribbon = []
|
||||||
|
// collect the images...
|
||||||
|
$.each(files, function(i, e){
|
||||||
|
var _gid = index[e]
|
||||||
|
// skip files not in index...
|
||||||
|
// NOTE: we do not need to filter the files by name as we
|
||||||
|
// trust the index...
|
||||||
|
if(_gid == null){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// remove the found item from each of the below ribbons...
|
||||||
|
$.each(ribbons, function(i ,e){
|
||||||
|
if(e.indexOf(_gid) != -1){
|
||||||
|
e.splice(e.indexOf(_gid), 1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ribbon.push(_gid)
|
||||||
|
})
|
||||||
|
ribbons.push(ribbon)
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove empty ribbons and sort the rest...
|
||||||
|
ribbons = $.map(ribbons, function(e){
|
||||||
|
return e.length > 0 ? [cmp == null ? e : e.sort(cmp)] : null
|
||||||
|
})
|
||||||
|
|
||||||
|
return ribbons.reverse()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Load ribbon structure from fav directory tree
|
// Load ribbon structure from fav directory tree
|
||||||
//
|
//
|
||||||
// XXX loads duplicate images....
|
// XXX loads duplicate images....
|
||||||
|
|||||||
@ -753,6 +753,7 @@ var loadFileMarks = makeFileLoader(
|
|||||||
function(data){
|
function(data){
|
||||||
MARKED = populateSparceGIDList(data)
|
MARKED = populateSparceGIDList(data)
|
||||||
},
|
},
|
||||||
|
null,
|
||||||
'marksLoaded')
|
'marksLoaded')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user