diff --git a/ui/files.js b/ui/files.js index f45042f9..1fb7512c 100755 --- a/ui/files.js +++ b/ui/files.js @@ -843,8 +843,6 @@ function exportImagesTo(path, im_name, dir_name, size){ var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) var queue = [] - var pool = [] - var pool_size = 10 // go through ribbons... for(var i=DATA.ribbons.length-1; i >= 0; i--){ @@ -868,10 +866,61 @@ function exportImagesTo(path, im_name, dir_name, size){ path = normalizePath(path +'/'+ dir_name) } + /* + var res = [] // XXX pool this... queue.forEach(function(e){ - exportImageTo.apply(null, e) + res.push(exportImageTo.apply(null, e)) }) + + return $.when.apply(null, res) + .done(function(){ + showStatusQ('Export: done.') + }) + */ + + // XXX make this generic... + var pool = [] + var pool_size = 100 + var res = $.Deferred() + + var enqueue = function(e){ + if(e == null){ + return + } + var worker = exportImageTo.apply(null, e) + .done(function(){ + // remove self from pool... + var i = pool.indexOf(worker) + + // get the next queue item... + var next = queue.splice(0, 1)[0] + + // enqueue the next worker if it exists... + if(next != null){ + pool[i] = enqueue(next) + + // nothing in queue... + } else { + // remove self... + pool.splice(i, 1) + + // empty queue and empty pool mean we are done... + if(pool.length == 0){ + showStatusQ('Export: done.') + res.resolve() + } + } + }) + .fail(function(){ + var i = pool.indexOf(worker) + // remove self... + pool.splice(i, 1) + }) + return worker + } + pool = queue.splice(0, pool_size).map(enqueue) + return res }