mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
fixed a couple of bugs + added a 'filling' state to deferred pool (jli)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
6bc0f8785e
commit
e70a45d5b2
11
ui/TODO.otl
11
ui/TODO.otl
@ -562,6 +562,17 @@ Roadmap
|
||||
| drops to last placeholder
|
||||
|
|
||||
[_] single image mode transition (alpha-blend/fade/none)
|
||||
[X] BUG: deferredPool breaks on exporting previews and a preview exists...
|
||||
| export in place (default settings) runs through an initial set of
|
||||
| workers and stops in an odd state:
|
||||
| - pool is full
|
||||
| - al workers resolved
|
||||
|
|
||||
| this appears to be the result of exportImageTo(..) not overwriting
|
||||
| a preview...
|
||||
[X] BUG: export: if lots of images already exist, the pool triggers depleted early...
|
||||
| this happens if we are clearing the pool out faster than adding
|
||||
| new tasks to queue...
|
||||
[X] buildcache: add ability to process multiple dirs...
|
||||
[X] BUG: progress bars do not handle errors...
|
||||
[X] BUG: sorting (dialog) will mess up the order...
|
||||
|
||||
@ -987,7 +987,6 @@ function exportImageTo(gid, path, im_name, size){
|
||||
dest = path +'/'+ dest
|
||||
|
||||
// copy...
|
||||
// NOTE: the sad smily face here is here for JS compatibility ;)
|
||||
return (function(src, dest){
|
||||
return copyFile(src, dest)
|
||||
.done(function(){
|
||||
@ -1038,6 +1037,8 @@ function exportImagesTo(path, im_name, dir_name, size){
|
||||
res.resolve()
|
||||
})
|
||||
|
||||
pool.filling()
|
||||
|
||||
// go through ribbons...
|
||||
for(var i=DATA.ribbons.length-1; i >= 0; i--){
|
||||
var ribbon = DATA.ribbons[i]
|
||||
@ -1060,6 +1061,8 @@ function exportImagesTo(path, im_name, dir_name, size){
|
||||
path = normalizePath(path +'/'+ dir_name)
|
||||
}
|
||||
|
||||
pool.doneFilling()
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
@ -668,6 +668,19 @@ jQuery.fn.sortChildren = function(func){
|
||||
//
|
||||
// This will create and return a pooled queue of deferred workers.
|
||||
//
|
||||
//
|
||||
// The pool can be in one of the folowing states:
|
||||
//
|
||||
// - filling
|
||||
// This state prevents .depleted() from triggering until the pool
|
||||
// exits the filling state.
|
||||
// This helps us to prevent premature depletion of the pool in
|
||||
// cases where the queue is depleted faster than it is being filled.
|
||||
//
|
||||
// - paused
|
||||
// This state prevents any new queued workers from starting.
|
||||
//
|
||||
//
|
||||
// Public interface:
|
||||
//
|
||||
// .enqueue(obj, func, args) -> deferred
|
||||
@ -677,6 +690,20 @@ jQuery.fn.sortChildren = function(func){
|
||||
// If the pool is full the worker is added to queue (FIFO) and
|
||||
// ran in its turn.
|
||||
//
|
||||
// .dropQueue() -> pool
|
||||
// Drop the queued workers.
|
||||
// NOTE: this will not stop the already running workers.
|
||||
//
|
||||
//
|
||||
// .filling()
|
||||
// Enter the filling state
|
||||
//
|
||||
// .doneFilling()
|
||||
// Exit the filling state
|
||||
// NOTE: this will trigger .depleted() if at the time of call
|
||||
// both the pool and queue are empty.
|
||||
//
|
||||
//
|
||||
// .pause() -> pool
|
||||
// Pause the queue.
|
||||
// NOTE: this also has a second form: .pause(func), see below.
|
||||
@ -684,9 +711,9 @@ jQuery.fn.sortChildren = function(func){
|
||||
// .resume() -> pool
|
||||
// Restart the queue.
|
||||
//
|
||||
// .dropQueue() -> pool
|
||||
// Drop the queued workers.
|
||||
// NOTE: this will not stop the already running workers.
|
||||
//
|
||||
// .isFilling() -> bool
|
||||
// Test if the pool is being filled -- filling state.
|
||||
//
|
||||
// .isRunning() -> bool
|
||||
// Test if any workers are running in the pool.
|
||||
@ -792,9 +819,15 @@ function makeDeferredPool(size, paused){
|
||||
|
||||
// run an element from the queue...
|
||||
var worker = func.apply(null, args)
|
||||
pool.push(worker)
|
||||
|
||||
// NOTE: this is explicitly after the pool push to avoid the
|
||||
// possible race condition of the worker exiting and
|
||||
// triggering .always(..) before being added to the pool...
|
||||
worker
|
||||
.always(function(){
|
||||
// prepare to remove self from pool...
|
||||
var i = pool.indexOf(worker)
|
||||
var i = pool.indexOf(this)
|
||||
|
||||
Pool._event_handlers.progress.fire(pool.length - pool.len(), pool.length + queue.length)
|
||||
|
||||
@ -830,7 +863,9 @@ function makeDeferredPool(size, paused){
|
||||
// pushed to pool just before it's "compacted"...
|
||||
pool.length = 0
|
||||
|
||||
that._event_handlers.deplete.fire(l)
|
||||
if(!that._filling){
|
||||
that._event_handlers.deplete.fire(l)
|
||||
}
|
||||
}
|
||||
|
||||
// keep the pool full...
|
||||
@ -847,8 +882,6 @@ function makeDeferredPool(size, paused){
|
||||
deferred.resolve.apply(deferred, arguments)
|
||||
})
|
||||
|
||||
this.pool.push(worker)
|
||||
|
||||
return worker
|
||||
}
|
||||
|
||||
@ -899,6 +932,31 @@ function makeDeferredPool(size, paused){
|
||||
return this
|
||||
}
|
||||
|
||||
// Filling state...
|
||||
//
|
||||
// When this mode is set, it will prevent the queue from triggering
|
||||
// the depleated action until .doneFilling() is called...
|
||||
//
|
||||
// This is to prevent the pool depleting before the queue is filled
|
||||
// in the case of tasks ending faster than they are added...
|
||||
Pool.filling = function(){
|
||||
this._filling = true
|
||||
return this
|
||||
}
|
||||
Pool.doneFilling = function(){
|
||||
delete this._filling
|
||||
// trigger depleted if we are empty...
|
||||
if(this.pool.len() == 0 && this.queue.length == 0){
|
||||
that._event_handlers.deplete.fire(l)
|
||||
}
|
||||
return this
|
||||
}
|
||||
Pool.isFilling = function(){
|
||||
return this._filling == true
|
||||
}
|
||||
|
||||
// Paused state...
|
||||
//
|
||||
// NOTE: this will not directly cause .isRunning() to return false
|
||||
// as this will not directly spot all workers, it will just
|
||||
// pause the queue and the workers that have already started
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user