mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 19:00:09 +00:00 
			
		
		
		
	tweaking and refactoring...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b64bbba033
								
							
						
					
					
						commit
						966977faa8
					
				| @ -653,6 +653,7 @@ jQuery.fn.sortChildren = function(func){ | |||||||
| //
 | //
 | ||||||
| //
 | //
 | ||||||
| // XXX should this be an object or a factory???
 | // XXX should this be an object or a factory???
 | ||||||
|  | // XXX add a clean handler removal scheme (a-la jQuery event on/off)
 | ||||||
| function makeDeferredPool(size, paused){ | function makeDeferredPool(size, paused){ | ||||||
| 	size = size == null ? POOL_SIZE : size | 	size = size == null ? POOL_SIZE : size | ||||||
| 	size = size < 0 ? 1  | 	size = size < 0 ? 1  | ||||||
| @ -660,6 +661,15 @@ function makeDeferredPool(size, paused){ | |||||||
| 		: size | 		: size | ||||||
| 	paused = paused == null ? false : paused | 	paused = paused == null ? false : paused | ||||||
| 
 | 
 | ||||||
|  | 	var event_names = [ | ||||||
|  | 		'deplete', | ||||||
|  | 		'progress', | ||||||
|  | 		'pause', | ||||||
|  | 		// XXX
 | ||||||
|  | 		//'resume',
 | ||||||
|  | 		'fail', | ||||||
|  | 	] | ||||||
|  | 
 | ||||||
| 	var Pool = { | 	var Pool = { | ||||||
| 		pool: [], | 		pool: [], | ||||||
| 		queue: [], | 		queue: [], | ||||||
| @ -834,6 +844,17 @@ function makeDeferredPool(size, paused){ | |||||||
| 		return this | 		return this | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 	// Generic event handlers...
 | ||||||
|  | 	Pool.on = function(evt, handler){ | ||||||
|  | 		// XXX
 | ||||||
|  | 		return this | ||||||
|  | 	} | ||||||
|  | 	Pool.off = function(evt, handler){ | ||||||
|  | 		// XXX
 | ||||||
|  | 		return this | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// Register a queue depleted handler...
 | 	// Register a queue depleted handler...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// This occurs when a populated queue is depleted and the last worker
 | 	// This occurs when a populated queue is depleted and the last worker
 | ||||||
|  | |||||||
							
								
								
									
										147
									
								
								ui/workers.js
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								ui/workers.js
									
									
									
									
									
								
							| @ -12,87 +12,106 @@ var WORKERS = {} | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /**************************************************** Progress bar ***/ | ||||||
|  | 
 | ||||||
|  | // NOTE: if the progress widget gets removed without removing the worker
 | ||||||
|  | // 		this will result in dangling handlers for the previous widget...
 | ||||||
|  | // 		i.e. handlers that still reverence the original widget...
 | ||||||
|  | //
 | ||||||
|  | // XXX add a clean removal scheme...
 | ||||||
|  | // XXX should this have a pause button???
 | ||||||
|  | function makeWorkerProgressBar(name, worker, parent){ | ||||||
|  | 	parent = parent == null ? $('.viewer') : parent | ||||||
|  | 
 | ||||||
|  | 	// widget container...
 | ||||||
|  | 	var container = parent.find('.progress-container') | ||||||
|  | 	if(container.length == 0){ | ||||||
|  | 		container = $('<div class="progress-container"/>') | ||||||
|  | 			.appendTo(parent) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var widget = $('.progress-bar[name="'+name+'"]') | ||||||
|  | 
 | ||||||
|  | 	// a progress bar already exists, reset it and return...
 | ||||||
|  | 	if(widget.length > 0){ | ||||||
|  | 		widget | ||||||
|  | 			.css('display', '') | ||||||
|  | 			.find('.close') | ||||||
|  | 				.css('display', '') | ||||||
|  | 		widget.find('progress') | ||||||
|  | 			.attr({ | ||||||
|  | 				value: '', | ||||||
|  | 				max: '' | ||||||
|  | 			}) | ||||||
|  | 		return worker | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// fields we'll need to update...
 | ||||||
|  | 	var state = $('<span class="state"/>') | ||||||
|  | 	var bar = $('<progress/>') | ||||||
|  | 
 | ||||||
|  | 	// the progress bar widget...
 | ||||||
|  | 	var widget = $('<div class="progress-bar" name="'+name+'">'+name+'</div>') | ||||||
|  | 		// progress state...
 | ||||||
|  | 		.append(state) | ||||||
|  | 		// the close button...
 | ||||||
|  | 		.append($('<span class="close">×</span>') | ||||||
|  | 			.click(function(){ | ||||||
|  | 				$(this).hide() | ||||||
|  | 				WORKERS[name] | ||||||
|  | 					.dropQueue() | ||||||
|  | 			})) | ||||||
|  | 		.append(bar) | ||||||
|  | 		.appendTo(container) | ||||||
|  | 
 | ||||||
|  | 	// re get the fields...
 | ||||||
|  | 	bar = $(bar[0]) | ||||||
|  | 	state = $(state[0]) | ||||||
|  | 
 | ||||||
|  | 	worker | ||||||
|  | 		.progress(function(done, total){ | ||||||
|  | 			bar.attr({ | ||||||
|  | 				value: done, | ||||||
|  | 				max: total | ||||||
|  | 			}) | ||||||
|  | 			state.text(' ('+done+' of '+total+')') | ||||||
|  | 		}) | ||||||
|  | 		.depleted(function(done){ | ||||||
|  | 			bar.attr('value', done) | ||||||
|  | 			state.text(' (done)') | ||||||
|  | 
 | ||||||
|  | 			setTimeout(function(){ | ||||||
|  | 				widget.hide() | ||||||
|  | 			}, 1500) | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 	return worker | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /********************************************************* Workers ***/ | /********************************************************* Workers ***/ | ||||||
| 
 | 
 | ||||||
| // get/create a named worker queue...
 | // get/create a named worker queue...
 | ||||||
| //
 | //
 | ||||||
| // XXX rename this to something task-related.... (???)
 | // XXX rename this to something task-related.... (???)
 | ||||||
| function getWorkerQueue(name, pool_size, no_auto_start, no_progress){ | function getWorkerQueue(name, pool_size, no_auto_start, no_progress){ | ||||||
| 	// XXX 1 is the default for compatibility...
 |  | ||||||
| 	pool_size = pool_size == null ? 1 : pool_size | 	pool_size = pool_size == null ? 1 : pool_size | ||||||
| 
 | 
 | ||||||
| 	// XXX experimental -- STUB...
 |  | ||||||
| 	if(!no_progress){ |  | ||||||
| 		// widget container...
 |  | ||||||
| 		var container = $('.progress-container') |  | ||||||
| 		if(container.length == 0){ |  | ||||||
| 			container = $('<div class="progress-container"/>') |  | ||||||
| 				.appendTo($('.viewer')) |  | ||||||
| 		} |  | ||||||
| 		// the progress bar widget...
 |  | ||||||
| 		var progress = $('<div class="progress-bar">'+name+'</div>') |  | ||||||
| 			.appendTo(container) |  | ||||||
| 		// progress state...
 |  | ||||||
| 		var progress_state = $('<span class="state"/>') |  | ||||||
| 			.appendTo(progress) |  | ||||||
| 		// the close button...
 |  | ||||||
| 		$('<span class="close">×</span>') |  | ||||||
| 			.click(function(){ |  | ||||||
| 				$(this).remove() |  | ||||||
| 				WORKERS[name] |  | ||||||
| 					.dropQueue() |  | ||||||
| 					/* |  | ||||||
| 					.depleted(function(){ |  | ||||||
| 						delete WORKERS[name] |  | ||||||
| 					}) |  | ||||||
| 					*/ |  | ||||||
| 			}) |  | ||||||
| 			.appendTo(progress) |  | ||||||
| 
 |  | ||||||
| 		var progress_bar = $('<progress id="'+name+'"/>') |  | ||||||
| 			.appendTo(progress) |  | ||||||
| 
 |  | ||||||
| 		// XXX for some reason without this, here the progress handlers 
 |  | ||||||
| 		// 		later lose context...
 |  | ||||||
| 		progress = $(progress[0]) |  | ||||||
| 		progress_bar = $(progress_bar[0]) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// create a new worker queue...
 | 	// create a new worker queue...
 | ||||||
| 	if(WORKERS[name] == null){ | 	if(WORKERS[name] == null){ | ||||||
| 		var queue = makeDeferredPool(pool_size, no_auto_start) | 		var queue = makeDeferredPool(pool_size, no_auto_start) | ||||||
| 		WORKERS[name] = queue | 		WORKERS[name] = queue | ||||||
| 
 | 
 | ||||||
| 		// XXX experimental...
 |  | ||||||
| 		if(!no_progress){ |  | ||||||
| 			queue |  | ||||||
| 				.progress(function(done, total){ |  | ||||||
| 					progress_bar |  | ||||||
| 						.attr({ |  | ||||||
| 							value: done, |  | ||||||
| 							max: total |  | ||||||
| 						}) |  | ||||||
| 					progress_state |  | ||||||
| 						.text(' ('+done+' of '+total+')') |  | ||||||
| 				}) |  | ||||||
| 				.depleted(function(done){ |  | ||||||
| 					progress_bar |  | ||||||
| 						.attr('value', done) |  | ||||||
| 					progress_state |  | ||||||
| 						.text(' (done)') |  | ||||||
| 
 |  | ||||||
| 					setTimeout(function(){ |  | ||||||
| 						progress |  | ||||||
| 							.remove() |  | ||||||
| 					}, 1500) |  | ||||||
| 				}) |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 	// return existing worker queue...
 | 	// return existing worker queue...
 | ||||||
| 	} else { | 	} else { | ||||||
| 		var queue = WORKERS[name] | 		var queue = WORKERS[name] | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if(!no_progress){ | ||||||
|  | 		makeWorkerProgressBar(name, queue) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return queue | 	return queue | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -107,6 +126,7 @@ function getWorkerQueue(name, pool_size, no_auto_start, no_progress){ | |||||||
| // 		actually stop...
 | // 		actually stop...
 | ||||||
| // NOTE: if no workers are loaded or all are already done, the deferred
 | // NOTE: if no workers are loaded or all are already done, the deferred
 | ||||||
| // 		returned will be resolved...
 | // 		returned will be resolved...
 | ||||||
|  | // NOTE: this will also kill paused workers...
 | ||||||
| function killAllWorkers(){ | function killAllWorkers(){ | ||||||
| 	var res = $.Deferred() | 	var res = $.Deferred() | ||||||
| 	var w = [] | 	var w = [] | ||||||
| @ -131,6 +151,7 @@ function killAllWorkers(){ | |||||||
| 		.done(function(){ | 		.done(function(){ | ||||||
| 			console.log('Worker: All workers stopped.') | 			console.log('Worker: All workers stopped.') | ||||||
| 			res.resolve() | 			res.resolve() | ||||||
|  | 			$('.progress-bar').remove() | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 	return res | 	return res | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user