mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 18:30:09 +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...
|
[_] usable empty view -- w.o. data...
|
||||||
[_] 0% Tablet UI
|
[_] 0% Tablet UI
|
||||||
[_] screen buttons
|
[_] 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...
|
[_] editable list of external commands...
|
||||||
| to add things like exportdirs.py etc.
|
| to add things like exportdirs.py etc.
|
||||||
[_] workflow editor (external app?)...
|
[_] workflow editor (external app?)...
|
||||||
|
|||||||
209
ui/data.js
209
ui/data.js
@ -116,6 +116,22 @@ var BASE_URL = '.'
|
|||||||
|
|
||||||
var IMAGE_CACHE = []
|
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 = []
|
var UI_IMAGE_CACHE = []
|
||||||
$.each([
|
$.each([
|
||||||
@ -1170,9 +1186,85 @@ function saveLocalStorage(attr){
|
|||||||
* File storage (Extension API -- CEF/PhoneGap/...)
|
* File storage (Extension API -- CEF/PhoneGap/...)
|
||||||
*
|
*
|
||||||
* XXX need to cleanup this section...
|
* 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...
|
// load the target-specific handlers...
|
||||||
// CEF
|
// CEF
|
||||||
if(window.CEF_dumpJSON != null){
|
if(window.CEF_dumpJSON != null){
|
||||||
@ -1192,15 +1284,7 @@ function loadFileImages(path, no_load_diffs, callback){
|
|||||||
// default locations...
|
// default locations...
|
||||||
if(path == null){
|
if(path == null){
|
||||||
var base = normalizePath(CACHE_DIR)
|
var base = normalizePath(CACHE_DIR)
|
||||||
// find the latest images file...
|
var res = loadLatestFile(base, IMAGES_FILE_DEFAULT, IMAGES_FILE_PATTERN, IMAGES_DIFF_FILE_PATTERN, 'Images:')
|
||||||
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
|
|
||||||
|
|
||||||
// explicit path...
|
// explicit path...
|
||||||
// XXX need to account for paths without a CACHE_DIR
|
// XXX need to account for paths without a CACHE_DIR
|
||||||
@ -1208,53 +1292,17 @@ function loadFileImages(path, no_load_diffs, callback){
|
|||||||
path = normalizePath(path)
|
path = normalizePath(path)
|
||||||
var base = path.split(CACHE_DIR)[0]
|
var base = path.split(CACHE_DIR)[0]
|
||||||
base += '/'+ CACHE_DIR
|
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 = {}
|
res.done(function(images){
|
||||||
var diff = true
|
IMAGES = images
|
||||||
|
callback != null ? callback() : null
|
||||||
|
})
|
||||||
|
|
||||||
// collect and merge image diffs...
|
return res
|
||||||
// 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)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1276,7 +1324,7 @@ function saveFileImages(name){
|
|||||||
// remove the diffs...
|
// remove the diffs...
|
||||||
if(remove_diffs){
|
if(remove_diffs){
|
||||||
$.each($.map(listDir(normalizePath(CACHE_DIR)), function(e){
|
$.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){
|
}), function(i, e){
|
||||||
showStatus('removeing:', e)
|
showStatus('removeing:', e)
|
||||||
removeFile(normalizePath(CACHE_DIR +'/'+ e))
|
removeFile(normalizePath(CACHE_DIR +'/'+ e))
|
||||||
@ -1284,6 +1332,7 @@ function saveFileImages(name){
|
|||||||
IMAGES_UPDATED = []
|
IMAGES_UPDATED = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX use the pattern...
|
||||||
dumpJSON(name + '-images.json', IMAGES)
|
dumpJSON(name + '-images.json', IMAGES)
|
||||||
//DATA.image_file = normalizePath(name + '-images.json', null, 'relative')
|
//DATA.image_file = normalizePath(name + '-images.json', null, 'relative')
|
||||||
}
|
}
|
||||||
@ -1293,21 +1342,7 @@ function loadFileMarks(path, callback){
|
|||||||
// default locations...
|
// default locations...
|
||||||
if(path == null){
|
if(path == null){
|
||||||
var base = normalizePath(CACHE_DIR)
|
var base = normalizePath(CACHE_DIR)
|
||||||
// find the latest images file...
|
var res = loadLatestFile(base, MARKED_FILE_DEFAULT, MARKED_FILE_PATTERN, null, 'Marks:')
|
||||||
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
|
|
||||||
|
|
||||||
// explicit path...
|
// explicit path...
|
||||||
// XXX need to account for paths without a CACHE_DIR
|
// XXX need to account for paths without a CACHE_DIR
|
||||||
@ -1315,20 +1350,17 @@ function loadFileMarks(path, callback){
|
|||||||
path = normalizePath(path)
|
path = normalizePath(path)
|
||||||
var base = path.split(CACHE_DIR)[0]
|
var base = path.split(CACHE_DIR)[0]
|
||||||
base += '/'+ CACHE_DIR
|
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...
|
res.done(function(images){
|
||||||
return $.getJSON(path)
|
MARKED = images
|
||||||
.done(function(json){
|
callback != null ? callback() : null
|
||||||
MARKED = json
|
})
|
||||||
|
|
||||||
showStatus('Loaded marks...')
|
return res
|
||||||
|
|
||||||
callback != null && callback()
|
|
||||||
})
|
|
||||||
.fail(function(){
|
|
||||||
showErrorStatus('Loading: ' + path)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// XXX save marks...
|
// XXX save marks...
|
||||||
|
|
||||||
@ -1416,11 +1448,16 @@ function saveFileState(name, no_normalize_path){
|
|||||||
// This will try and to this in the following order:
|
// This will try and to this in the following order:
|
||||||
// 1) find a data file in the given path
|
// 1) find a data file in the given path
|
||||||
// 2) find a cache directory and a data file there
|
// 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
|
// 3) list the images and load them as-is
|
||||||
//
|
//
|
||||||
// XXX this will not load the marks file...
|
// XXX this will not load the marks file...
|
||||||
// XXX make sure that save works...
|
// XXX make sure that save works...
|
||||||
// XXX might be good to split this into loadFileData and loadDir...
|
// XXX might be good to split this into loadFileData and loadDir...
|
||||||
|
// XXX use loadLatestFile(...)...
|
||||||
function loadDir(path, raw_load){
|
function loadDir(path, raw_load){
|
||||||
path = normalizePath(path)
|
path = normalizePath(path)
|
||||||
var orig_path = path
|
var orig_path = path
|
||||||
@ -1437,9 +1474,9 @@ function loadDir(path, raw_load){
|
|||||||
|
|
||||||
if(!raw_load){
|
if(!raw_load){
|
||||||
data = $.map(files, function(e){
|
data = $.map(files, function(e){
|
||||||
return /.*-data.json$/.test(e) ? e : null
|
return DATA_FILE_PATTERN.test(e) ? e : null
|
||||||
}).sort().reverse()[0]
|
}).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...
|
// look in the cache dir...
|
||||||
if(data == null){
|
if(data == null){
|
||||||
@ -1448,9 +1485,9 @@ function loadDir(path, raw_load){
|
|||||||
files = listDir(path)
|
files = listDir(path)
|
||||||
if(files != null){
|
if(files != null){
|
||||||
data = $.map(listDir(path), function(e){
|
data = $.map(listDir(path), function(e){
|
||||||
return /.*-data.json$/.test(e) ? e : null
|
return DATA_FILE_PATTERN.test(e) ? e : null
|
||||||
}).sort().reverse()[0]
|
}).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 {
|
} else {
|
||||||
files = listDir(orig_path)
|
files = listDir(orig_path)
|
||||||
var image_paths = $.map(files, function(e){
|
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){
|
if(image_paths.length == 0){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user