reworking file API reporting, new scheme, almost sure about this...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-06-06 22:57:06 +04:00
parent 02f93f3067
commit cd7128279a

View File

@ -1196,7 +1196,7 @@ function loadLatestFile(path, dfl, pattern, diff_pattern){
// can't find diffs if can't list dirs...
if(window.listDir == null && (pattern != null || diff_pattern != null)){
res.notify('unsupported', 'directory listing.')
res.notify('Unsupported', 'directory listing.')
return res.reject('listDir unsupported.')
}
@ -1223,10 +1223,11 @@ function loadLatestFile(path, dfl, pattern, diff_pattern){
return $.getJSON(path +'/'+ e)
.done(function(data){
diff_data[i+1] = data
res.notify('loaded', e)
res.notify('Loaded', e)
})
.fail(function(){
res.notify('load_error', e)
// XXX should we kill the load here???
res.notify('Loading', e, 'Error')
})
}))
// NOTE: .then(...) handlers get different signature args
@ -1242,18 +1243,18 @@ function loadLatestFile(path, dfl, pattern, diff_pattern){
.done(function(_, json){
json = json[0]
res.notify('loaded', file)
res.notify('Loaded', file)
// merge diffs...
if(Object.keys(diff_data).length != 0){
$.extend(json, diff_data)
res.notify('merged')
res.notify('Merged')
}
res.resolve(json)
})
.fail(function(){
res.notify('load_error', file)
res.notify('Loading', file, 'Error')
return res.reject(file)
})
@ -1264,37 +1265,41 @@ function loadLatestFile(path, dfl, pattern, diff_pattern){
function statusNotify(prefix, loader){
return loader
.progress(function(a, b, c){
if(c != null){
prefix = prefix +' '+ a
var action = b
var data = c
} else {
var action = a
var data = b
.progress(function(){
var args = Array.apply(null, arguments)
args.splice(0, 0, prefix)
if(args.indexOf('Error') >= 0){
args.pop()
return showErrorStatus(args.join(': '))
}
return showStatus(args.join(': '))
})
}
({
load: function(data){
showStatus(prefix, 'Loading:', data)
},
loaded: function(data){
showStatus(prefix, 'Loaded:', data)
},
merged: function(data){
showStatus(prefix, 'Merging:', 'Done.')
},
load_error: function(data){
showErrorStatus(prefix, 'Loading:', data)
},
unsupported: function(data){
showErrorStatus(prefix, 'Unsupported:', data)
},
})[action](data)
})
.done(function(){
showStatus(prefix, 'Done.')
// XXX do we need other actions here???
function bubbleProgress(prefix, from, to, only_progress){
from
.progress(function(){
var args = Array.apply(null, arguments)
prefix != null && args.splice(0, 0, prefix)
to.notify.apply(to, args)
})
if(only_progress == null){
from
.done(function(){
var args = Array.apply(null, arguments)
to.resolve.apply(to, args)
})
.fail(function(){
var args = Array.apply(null, arguments)
prefix != null && args.splice(0, 0, prefix)
to.reject.apply(to, args)
})
}
return from
}
@ -1311,7 +1316,7 @@ if(window.CEF_dumpJSON != null){
// Load images from file
//
// This will also merge all diff files.
function loadFileImages(path, no_load_diffs, callback){
function loadFileImages(path, no_load_diffs){
no_load_diffs = window.listDir == null ? true : no_load_diffs
var res = $.Deferred()
@ -1337,18 +1342,10 @@ function loadFileImages(path, no_load_diffs, callback){
RegExp(path.split(base)[0]))
}
loader
// XXX find a good way to propagate...
.progress(function(action, data){
res.notify('Images:', action, data)
})
.done(function(data){
res.resolve(data)
})
bubbleProgress('Images', loader, res)
res.done(function(images){
IMAGES = images
callback != null ? callback() : null
})
return res
@ -1387,14 +1384,14 @@ function saveFileImages(name){
}
function loadFileMarks(path, callback){
function loadFileMarks(path){
var res = $.Deferred()
// default locations...
if(path == null){
var base = normalizePath(CACHE_DIR)
var res = statusNotify('Marks:',
loadLatestFile(base,
var loader = loadLatestFile(base,
MARKED_FILE_DEFAULT,
MARKED_FILE_PATTERN))
MARKED_FILE_PATTERN)
// explicit path...
// XXX need to account for paths without a CACHE_DIR
@ -1404,15 +1401,15 @@ function loadFileMarks(path, callback){
base += '/'+ CACHE_DIR
// XXX is this correct???
var res = statusNotify('Marks:',
loadLatestFile(base,
var loader = loadLatestFile(base,
path.split(base)[0],
RegExp(path.split(base)[0])))
RegExp(path.split(base)[0]))
}
bubbleProgress('Marks', loader, res)
res.done(function(images){
MARKED = images
callback != null ? callback() : null
})
return res
@ -1438,10 +1435,10 @@ function loadFileState(path){
var res = $.Deferred()
statusNotify('Data:',
bubbleProgress('Data',
loadLatestFile(path,
DATA_FILE_DEFAULT,
DATA_FILE_PATTERN))
DATA_FILE_PATTERN), res, true)
.done(function(json){
BASE_URL = base
@ -1457,14 +1454,15 @@ function loadFileState(path){
// version 2.0
} else if(json.version == '2.0') {
DATA = json
$.when(
// XXX load config...
// load images...
loadFileImages(DATA.image_file == null ?
normalizePath(DATA.image_file, base)
: null),
// load marks if available...
loadFileMarks())
bubbleProgress('Data',
$.when(
// XXX load config...
// load images...
loadFileImages(DATA.image_file == null ?
normalizePath(DATA.image_file, base)
: null),
// load marks if available...
loadFileMarks()), res, true)
.done(function(){
reloadViewer()
res.resolve()
@ -1474,10 +1472,9 @@ function loadFileState(path){
} else {
res.reject('unknown format.')
}
})
.fail(function(){
res.reject('load_error', path)
res.reject('Loading', path, 'Error')
})
return res
@ -1524,21 +1521,21 @@ function loadRawDir(path){
})
if(image_paths.length == 0){
//showErrorStatus('No images in:', path)
res.notify('load_error', path)
// no images in path...
res.notify('Load', path, 'Error')
return res.reject()
}
BASE_URL = path
IMAGES = imagesFromUrls(image_paths)
res.notify('loaded', 'images.')
res.notify('Loaded', 'Images.')
DATA = dataFromImages(IMAGES)
res.notify('loaded', 'data.')
res.notify('Loaded', 'Data.')
DATA.ribbons = ribbonsFromFavDirs()
res.notify('loaded', 'fav dirs.')
res.notify('Loaded', 'Fav dirs.')
MARKED = []
@ -1585,22 +1582,13 @@ function loadDir(path){
path = path +'/'+ CACHE_DIR
}
statusNotify('Dir:', loadFileState(path))
//.progress(function(action, data){
// res.notify(action, data)
//})
bubbleProgress('Dir:',
loadFileState(path), res, true)
.done(function(){
res.resolve()
})
.fail(function(){
statusNotify('Raw dir:', loadRawDir(orig_path))
.done(function(){
res.resolve()
})
.fail(function(){
res.reject()
})
bubbleProgress('Raw dir:', loadRawDir(orig_path), res)
})
return res