mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
reworked parts of file loading...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
296bfdf02e
commit
851cbb8cc2
@ -95,6 +95,9 @@ Roadmap
|
||||
[_] usable empty view -- w.o. data...
|
||||
[_] 0% Tablet UI
|
||||
[_] screen buttons
|
||||
[_] save settings to config.json
|
||||
[_] Q: do we need seporate theme settings?
|
||||
| ...for ribbon and single-image modes?
|
||||
[_] editable list of external commands...
|
||||
| to add things like exportdirs.py etc.
|
||||
[_] workflow editor (external app?)...
|
||||
|
||||
209
ui/data.js
209
ui/data.js
@ -116,6 +116,22 @@ var BASE_URL = '.'
|
||||
|
||||
var IMAGE_CACHE = []
|
||||
|
||||
|
||||
// XXX make these usable for both saving and loading...
|
||||
// XXX get these from config...
|
||||
var IMAGES_FILE_DEFAULT = 'images.json'
|
||||
var IMAGES_FILE_PATTERN = /^[0-9]*-images.json$/
|
||||
var IMAGES_DIFF_FILE_PATTERN = /^[0-9]*-images-diff.json$/
|
||||
|
||||
var MARKED_FILE_DEFAULT = 'marked.json'
|
||||
var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/
|
||||
|
||||
var DATA_FILE_DEFAULT = 'data.json'
|
||||
var DATA_FILE_PATTERN = /^[0-9]*-data.json$/
|
||||
|
||||
var IMAGE_PATTERN = /.*\.(jpg|jpeg|png|gif)$/i
|
||||
|
||||
|
||||
/*
|
||||
var UI_IMAGE_CACHE = []
|
||||
$.each([
|
||||
@ -1170,9 +1186,85 @@ function saveLocalStorage(attr){
|
||||
* File storage (Extension API -- CEF/PhoneGap/...)
|
||||
*
|
||||
* XXX need to cleanup this section...
|
||||
* XXX do a generic find latest and load it function....
|
||||
*/
|
||||
|
||||
// XXX needs testing...
|
||||
// XXX use a config object instead of positional arguments...
|
||||
function loadLatestFile(path, dfl, pattern, diff_pattern, report){
|
||||
dfl = dfl == null ? path.split(/[\/\\]/).pop() : dfl
|
||||
path = path == dfl ? '.' : path
|
||||
|
||||
var res = $.Deferred()
|
||||
|
||||
// can't find diffs if can't list dirs...
|
||||
if(window.listDir == null && (pattern != null || diff_pattern != null)){
|
||||
report && showErrorStatus(report, 'no directory listing support.')
|
||||
return res.reject()
|
||||
}
|
||||
|
||||
// find the latest...
|
||||
if(pattern != null){
|
||||
pattern = RegExp(pattern)
|
||||
var file = $.map(listDir(path), function(e){
|
||||
return pattern.test(e) ? e : null
|
||||
}).sort().reverse()[0]
|
||||
}
|
||||
file = file == null ? dfl : file
|
||||
|
||||
report && showStatus(report, 'Loading:', file)
|
||||
|
||||
file = path +'/'+ file
|
||||
|
||||
var diff_data = {}
|
||||
var diff = true
|
||||
|
||||
// collect and merge diffs...
|
||||
// XXX no error handling if one of the diff loads fail...
|
||||
if(diff_pattern != null){
|
||||
diff_pattern = RegExp(diff_pattern)
|
||||
var diff_data = [diff_data]
|
||||
var diffs_names = $.map(listDir(path), function(e){
|
||||
return diff_pattern.test(e) ? e : null
|
||||
}).sort()
|
||||
diff = $.when.apply(null, $.map(diffs_names, function(e, i){
|
||||
return $.getJSON(path +'/'+ e)
|
||||
// XXX this is ugly, had to do it this way as .then(...)
|
||||
// handlers get different argument sets depending on
|
||||
// whether we have one or more deffereds here...
|
||||
.done(function(data){
|
||||
diff_data[i+1] = data
|
||||
report && showStatus(report, 'Loaded:', e)
|
||||
})
|
||||
}))
|
||||
.then(function(){
|
||||
$.extend.apply(null, diff_data)
|
||||
diff_data = diff_data[0]
|
||||
})
|
||||
}
|
||||
|
||||
// load the main file and merge the diff with it...
|
||||
$.when(diff, $.getJSON(file))
|
||||
.done(function(_, json){
|
||||
json = json[0]
|
||||
|
||||
// merge diffs...
|
||||
if(Object.keys(diff_data).length != 0){
|
||||
$.extend(json, diff_data)
|
||||
report && showStatus(report, 'Merged diffs...')
|
||||
}
|
||||
|
||||
res.resolve(json)
|
||||
|
||||
report && showStatus(report, 'Done.')
|
||||
})
|
||||
.fail(function(){
|
||||
report && showErrorStatus(report, 'Loading: ' + file)
|
||||
return res.reject()
|
||||
})
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
// load the target-specific handlers...
|
||||
// CEF
|
||||
if(window.CEF_dumpJSON != null){
|
||||
@ -1192,15 +1284,7 @@ function loadFileImages(path, no_load_diffs, callback){
|
||||
// default locations...
|
||||
if(path == null){
|
||||
var base = normalizePath(CACHE_DIR)
|
||||
// find the latest images file...
|
||||
var path = $.map(listDir(base), function(e){
|
||||
return /.*-images.json$/.test(e) ? e : null
|
||||
}).sort().reverse()[0]
|
||||
path = path == null ? 'images.json' : path
|
||||
|
||||
showStatus('Loading:', path)
|
||||
|
||||
path = base +'/'+ path
|
||||
var res = loadLatestFile(base, IMAGES_FILE_DEFAULT, IMAGES_FILE_PATTERN, IMAGES_DIFF_FILE_PATTERN, 'Images:')
|
||||
|
||||
// explicit path...
|
||||
// XXX need to account for paths without a CACHE_DIR
|
||||
@ -1208,53 +1292,17 @@ function loadFileImages(path, no_load_diffs, callback){
|
||||
path = normalizePath(path)
|
||||
var base = path.split(CACHE_DIR)[0]
|
||||
base += '/'+ CACHE_DIR
|
||||
|
||||
// XXX is this correct???
|
||||
var res = loadLatestFile(base, path.split(base)[0], RegExp(path.split(base)[0]), null, 'Images:')
|
||||
}
|
||||
|
||||
var diff_data = {}
|
||||
var diff = true
|
||||
res.done(function(images){
|
||||
IMAGES = images
|
||||
callback != null ? callback() : null
|
||||
})
|
||||
|
||||
// collect and merge image diffs...
|
||||
// XXX no error handling if one of the diff loads fail...
|
||||
if(!no_load_diffs){
|
||||
var diff_data = [diff_data]
|
||||
var diffs_names = $.map(listDir(base), function(e){
|
||||
return /.*-images-diff.json$/.test(e) ? e : null
|
||||
}).sort()
|
||||
diff = $.when.apply(null, $.map(diffs_names, function(e, i){
|
||||
return $.getJSON(normalizePath(base +'/'+ e))
|
||||
// XXX this is ugly, had to do it this way as .then(...)
|
||||
// handlers get different argument sets depending on
|
||||
// whether we have one or more deffereds here...
|
||||
.done(function(data){
|
||||
diff_data[i+1] = data
|
||||
showStatus('Loaded:', e)
|
||||
})
|
||||
}))
|
||||
.then(function(){
|
||||
$.extend.apply(null, diff_data)
|
||||
diff_data = diff_data[0]
|
||||
})
|
||||
}
|
||||
|
||||
// load the main image file and merge the diff with it...
|
||||
return $.when(diff, $.getJSON(path))
|
||||
.done(function(_, json){
|
||||
json = json[0]
|
||||
|
||||
// merge diffs...
|
||||
if(Object.keys(diff_data).length != 0){
|
||||
$.extend(json, diff_data)
|
||||
showStatus('Merged images diffs...')
|
||||
}
|
||||
|
||||
IMAGES = json
|
||||
showStatus('Loaded images...')
|
||||
|
||||
callback != null && callback()
|
||||
})
|
||||
.fail(function(){
|
||||
showErrorStatus('Loading: ' + path)
|
||||
})
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
@ -1276,7 +1324,7 @@ function saveFileImages(name){
|
||||
// remove the diffs...
|
||||
if(remove_diffs){
|
||||
$.each($.map(listDir(normalizePath(CACHE_DIR)), function(e){
|
||||
return /.*-images-diff.json$/.test(e) ? e : null
|
||||
return IMAGES_DIFF_FILE_PATTERN.test(e) ? e : null
|
||||
}), function(i, e){
|
||||
showStatus('removeing:', e)
|
||||
removeFile(normalizePath(CACHE_DIR +'/'+ e))
|
||||
@ -1284,6 +1332,7 @@ function saveFileImages(name){
|
||||
IMAGES_UPDATED = []
|
||||
}
|
||||
|
||||
// XXX use the pattern...
|
||||
dumpJSON(name + '-images.json', IMAGES)
|
||||
//DATA.image_file = normalizePath(name + '-images.json', null, 'relative')
|
||||
}
|
||||
@ -1293,21 +1342,7 @@ function loadFileMarks(path, callback){
|
||||
// default locations...
|
||||
if(path == null){
|
||||
var base = normalizePath(CACHE_DIR)
|
||||
// find the latest images file...
|
||||
var files = listDir(base)
|
||||
var path = $.map(files, function(e){
|
||||
return /.*-marked.json$/.test(e) ? e : null
|
||||
}).sort().reverse()[0]
|
||||
path = path == null ? 'marked.json' : path
|
||||
|
||||
if(files.indexOf(path) < 0){
|
||||
showStatus('No marks found...')
|
||||
return $.Deferred().resolve()
|
||||
}
|
||||
|
||||
showStatus('Loading:', path)
|
||||
|
||||
path = base +'/'+ path
|
||||
var res = loadLatestFile(base, MARKED_FILE_DEFAULT, MARKED_FILE_PATTERN, null, 'Marks:')
|
||||
|
||||
// explicit path...
|
||||
// XXX need to account for paths without a CACHE_DIR
|
||||
@ -1315,20 +1350,17 @@ function loadFileMarks(path, callback){
|
||||
path = normalizePath(path)
|
||||
var base = path.split(CACHE_DIR)[0]
|
||||
base += '/'+ CACHE_DIR
|
||||
|
||||
// XXX is this correct???
|
||||
var res = loadLatestFile(base, path.split(base)[0], RegExp(path.split(base)[0]), 'Marks:')
|
||||
}
|
||||
|
||||
// load the main image file and merge the diff with it...
|
||||
return $.getJSON(path)
|
||||
.done(function(json){
|
||||
MARKED = json
|
||||
res.done(function(images){
|
||||
MARKED = images
|
||||
callback != null ? callback() : null
|
||||
})
|
||||
|
||||
showStatus('Loaded marks...')
|
||||
|
||||
callback != null && callback()
|
||||
})
|
||||
.fail(function(){
|
||||
showErrorStatus('Loading: ' + path)
|
||||
})
|
||||
return res
|
||||
}
|
||||
// XXX save marks...
|
||||
|
||||
@ -1416,11 +1448,16 @@ function saveFileState(name, no_normalize_path){
|
||||
// This will try and to this in the following order:
|
||||
// 1) find a data file in the given path
|
||||
// 2) find a cache directory and a data file there
|
||||
// - load newest [.*-]images.json
|
||||
// - load all [.*-]images-diff.json and merge with images
|
||||
// - load newest [.*-]data.json
|
||||
// - load newest [.*-]marked.json
|
||||
// 3) list the images and load them as-is
|
||||
//
|
||||
// XXX this will not load the marks file...
|
||||
// XXX make sure that save works...
|
||||
// XXX might be good to split this into loadFileData and loadDir...
|
||||
// XXX use loadLatestFile(...)...
|
||||
function loadDir(path, raw_load){
|
||||
path = normalizePath(path)
|
||||
var orig_path = path
|
||||
@ -1437,9 +1474,9 @@ function loadDir(path, raw_load){
|
||||
|
||||
if(!raw_load){
|
||||
data = $.map(files, function(e){
|
||||
return /.*-data.json$/.test(e) ? e : null
|
||||
return DATA_FILE_PATTERN.test(e) ? e : null
|
||||
}).sort().reverse()[0]
|
||||
data = (data == null && files.indexOf('data.json') >= 0) ? 'data.json' : data
|
||||
data = (data == null && files.indexOf(DATA_FILE_DEFAULT) >= 0) ? DATA_FILE_DEFAULT : data
|
||||
|
||||
// look in the cache dir...
|
||||
if(data == null){
|
||||
@ -1448,9 +1485,9 @@ function loadDir(path, raw_load){
|
||||
files = listDir(path)
|
||||
if(files != null){
|
||||
data = $.map(listDir(path), function(e){
|
||||
return /.*-data.json$/.test(e) ? e : null
|
||||
return DATA_FILE_PATTERN.test(e) ? e : null
|
||||
}).sort().reverse()[0]
|
||||
data = (data == null && files.indexOf('data.json') >= 0) ? 'data.json' : data
|
||||
data = (data == null && files.indexOf(DATA_FILE_DEFAULT) >= 0) ? DATA_FILE_DEFAULT : data
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1474,7 +1511,7 @@ function loadDir(path, raw_load){
|
||||
} else {
|
||||
files = listDir(orig_path)
|
||||
var image_paths = $.map(files, function(e){
|
||||
return /.*\.(jpg|jpeg|png|gif)$/i.test(e) ? e : null
|
||||
return IMAGE_PATTERN.test(e) ? e : null
|
||||
})
|
||||
|
||||
if(image_paths.length == 0){
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user