mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	started work on partial index...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									82e10ff27e
								
							
						
					
					
						commit
						2c954da342
					
				| @ -1443,9 +1443,11 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 					index.date, | 					index.date, | ||||||
| 					this.config['index-filename-template'],  | 					this.config['index-filename-template'],  | ||||||
| 					logger) | 					logger) | ||||||
|  | 				// set hidden file attribute on Windows...
 | ||||||
| 				.then(function(){ | 				.then(function(){ | ||||||
| 					typeof(process) != 'undefined'  | 					typeof(process) != 'undefined'  | ||||||
| 						&& process.platform == 'win32'  | 						&& (process.platform == 'win32'  | ||||||
|  | 							|| process.platform == 'win64') | ||||||
| 						&& child_process | 						&& child_process | ||||||
| 							.spawn('attrib', ['+h', full_path]) | 							.spawn('attrib', ['+h', full_path]) | ||||||
| 				}) | 				}) | ||||||
| @ -1473,20 +1475,25 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 	// Export current state as a full loadable index
 | 	// Export current state as a full loadable index
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// XXX resolve env variables in path...
 | 	// XXX resolve env variables in path...
 | ||||||
| 	// XXX what sould happen if no path is given???
 | 	// XXX what should happen if no path is given???
 | ||||||
| 	// XXX should this return a promise??? ...a clean promise???
 | 	// XXX should this return a promise??? ...a clean promise???
 | ||||||
| 	// XXX add preview selection...
 | 	// XXX add preview selection...
 | ||||||
| 	// XXX handle .image.path and other stack files...
 | 	// XXX handle .image.path and other stack files...
 | ||||||
| 	// XXX local collections???
 | 	// XXX local collections???
 | ||||||
| 	exportIndex: ['- File/Export/Export index', | 	exportIndex: ['- File/Export/Export index', | ||||||
| 		function(path, logger){ | 		function(path, max_size, include_orig, logger){ | ||||||
| 			logger = logger || this.logger | 			logger = logger || this.logger | ||||||
| 
 | 
 | ||||||
|  | 			// XXX if size is not given save all sizes...
 | ||||||
|  | 			//max_size = max_size || this.config['export-preview-size']
 | ||||||
|  | 			include_orig = include_orig || true | ||||||
|  | 
 | ||||||
| 			// XXX is this correct???
 | 			// XXX is this correct???
 | ||||||
| 			path = path || './exported' | 			path = path || './exported' | ||||||
| 			path = util.normalizePath(path) | 			path = util.normalizePath(path) | ||||||
| 
 | 
 | ||||||
| 			// XXX resolve env variables in path...
 | 			// XXX resolve env variables in path...
 | ||||||
|  | 			// 		...also add ImageGrid specifics: $IG_INDEX, ...
 | ||||||
| 			// XXX
 | 			// XXX
 | ||||||
| 
 | 
 | ||||||
| 			// resolve relative paths...
 | 			// resolve relative paths...
 | ||||||
| @ -1507,15 +1514,11 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 			gids = gids.compact() | 			gids = gids.compact() | ||||||
| 
 | 
 | ||||||
| 			// build .images with loaded images...
 | 			// build .images with loaded images...
 | ||||||
| 			// XXX list of previews should be configurable (max size)
 |  | ||||||
| 			var images = {} | 			var images = {} | ||||||
| 			gids.forEach(function(gid){ | 			gids.forEach(function(gid){ | ||||||
| 				var img = json.images[gid] | 				var img = json.images[gid] | ||||||
| 				if(img){ | 				if(img){ | ||||||
| 					images[gid] = json.images[gid] | 					images[gid] = json.images[gid] | ||||||
| 
 |  | ||||||
| 					// remove un-needed previews...
 |  | ||||||
| 					// XXX
 |  | ||||||
| 				} | 				} | ||||||
| 			}) | 			}) | ||||||
| 
 | 
 | ||||||
| @ -1529,7 +1532,9 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 			// XXX should also optionally populate the base dir and nested favs...
 | 			// XXX should also optionally populate the base dir and nested favs...
 | ||||||
| 			var base_dir = this.location.path | 			var base_dir = this.location.path | ||||||
| 
 | 
 | ||||||
| 			gids.forEach(function(gid){ | 			var queue = [] | ||||||
|  | 
 | ||||||
|  | 			gids.map(function(gid){ | ||||||
| 				var img = json.images[gid] | 				var img = json.images[gid] | ||||||
| 				var img_base = img.base_path | 				var img_base = img.base_path | ||||||
| 				var previews = img.preview | 				var previews = img.preview | ||||||
| @ -1538,16 +1543,16 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 				// 		need for a base path...
 | 				// 		need for a base path...
 | ||||||
| 				delete img.base_path | 				delete img.base_path | ||||||
| 
 | 
 | ||||||
| 				var queue = [] |  | ||||||
| 
 |  | ||||||
| 				// XXX copy img.path -- the main image, especially when no previews present....
 |  | ||||||
| 				// XXX
 |  | ||||||
| 
 |  | ||||||
| 				if(previews || img.path){ | 				if(previews || img.path){ | ||||||
| 					Object.keys(previews || {}) | 					Object.keys(previews || {}) | ||||||
|  | 						// limit preview size...
 | ||||||
|  | 						.filter(function(res){  | ||||||
|  | 							return !max_size || parseInt(res) <= max_size}) | ||||||
|  | 						// get paths...
 | ||||||
| 						.map(function(res){ return decodeURI(previews[res]) }) | 						.map(function(res){ return decodeURI(previews[res]) }) | ||||||
| 						// XXX should we copy this, especially if it's a hi-res???
 | 						// XXX might be a good idea to include include 
 | ||||||
| 						.concat([img.path || null]) | 						// 		the max preview if hires is too large...
 | ||||||
|  | 						.concat(include_orig ? [img.path || null] : []) | ||||||
| 						.forEach(function(preview_path){ | 						.forEach(function(preview_path){ | ||||||
| 							if(preview_path == null){ | 							if(preview_path == null){ | ||||||
| 								return | 								return | ||||||
| @ -1561,6 +1566,7 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 							// 		internally then we do not need to bother...
 | 							// 		internally then we do not need to bother...
 | ||||||
| 							// XXX
 | 							// XXX
 | ||||||
| 							queue.push(ensureDir(pathlib.dirname(to)) | 							queue.push(ensureDir(pathlib.dirname(to)) | ||||||
|  | 								// XXX do we need error handling here???
 | ||||||
| 								.catch(function(err){ | 								.catch(function(err){ | ||||||
| 									logger && logger.emit('error', err) }) | 									logger && logger.emit('error', err) }) | ||||||
| 								.then(function(){ | 								.then(function(){ | ||||||
| @ -1571,6 +1577,7 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 										// 		.then(..))
 | 										// 		.then(..))
 | ||||||
| 										.then(function(){ | 										.then(function(){ | ||||||
| 											logger && logger.emit('done', to) }) | 											logger && logger.emit('done', to) }) | ||||||
|  | 										// XXX do we need error handling here???
 | ||||||
| 										.catch(function(err){ | 										.catch(function(err){ | ||||||
| 											logger && logger.emit('error', err) }) | 											logger && logger.emit('error', err) }) | ||||||
| 								})) | 								})) | ||||||
| @ -1585,9 +1592,11 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 					index_path,  | 					index_path,  | ||||||
| 					this.config['index-filename-template'],  | 					this.config['index-filename-template'],  | ||||||
| 					logger || this.logger) | 					logger || this.logger) | ||||||
|  | 				// set hidden file attribute on Windows...
 | ||||||
| 				.then(function(){ | 				.then(function(){ | ||||||
| 					typeof(process) != 'undefined'  | 					typeof(process) != 'undefined'  | ||||||
| 						&& process.platform == 'win32'  | 						&& (process.platform == 'win32'  | ||||||
|  | 							|| process.platform == 'win64') | ||||||
| 						// XXX do we need to quote path???
 | 						// XXX do we need to quote path???
 | ||||||
| 						&& child_process | 						&& child_process | ||||||
| 							.spawn('attrib', ['+h', index_path]) | 							.spawn('attrib', ['+h', index_path]) | ||||||
| @ -1630,17 +1639,17 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 			size = size || this.config['export-preview-size'] || 1000 | 			size = size || this.config['export-preview-size'] || 1000 | ||||||
| 			pattern = pattern || this.config['export-preview-name-pattern'] || '%f' | 			pattern = pattern || this.config['export-preview-name-pattern'] || '%f' | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 			// XXX need to abort on fatal errors...
 | 			// XXX need to abort on fatal errors...
 | ||||||
| 			this.data.ribbon_order | 			return Promise.all(this.data.ribbon_order | ||||||
| 				.slice() | 				.slice() | ||||||
| 				.reverse() | 				.reverse() | ||||||
| 				.forEach(function(ribbon){ | 				.map(function(ribbon){ | ||||||
| 					// NOTE: this is here to keep the specific path local to 
 | 					// NOTE: this is here to keep the specific path local to 
 | ||||||
| 					// 		this scope...
 | 					// 		this scope...
 | ||||||
| 					var img_dir = to_dir | 					var img_dir = to_dir | ||||||
| 
 | 
 | ||||||
| 					ensureDir(pathlib.dirname(img_dir)) | 					var res = ensureDir(pathlib.dirname(img_dir)) | ||||||
|  | 						// XXX do we need error handling here???
 | ||||||
| 						.catch(function(err){ | 						.catch(function(err){ | ||||||
| 							logger && logger.emit('error', err) }) | 							logger && logger.emit('error', err) }) | ||||||
| 						.then(function(){ | 						.then(function(){ | ||||||
| @ -1699,7 +1708,9 @@ var FileSystemWriterActions = actions.Actions({ | |||||||
| 						}) | 						}) | ||||||
| 
 | 
 | ||||||
| 					to_dir += '/'+level_dir | 					to_dir += '/'+level_dir | ||||||
| 				}) | 
 | ||||||
|  | 					return res | ||||||
|  | 				})) | ||||||
| 		}] | 		}] | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| @ -1855,11 +1866,16 @@ var FileSystemWriterUIActions = actions.Actions({ | |||||||
| 					'comment' | 					'comment' | ||||||
| 				], | 				], | ||||||
| 			}, | 			}, | ||||||
| 			'Full index': { | 			'Current state as index': { | ||||||
| 				action: 'exportIndex', | 				action: 'exportIndex', | ||||||
| 				data: [ | 				data: [ | ||||||
| 					//'size',
 |  | ||||||
| 					'target_dir', | 					'target_dir', | ||||||
|  | 					// XXX need to add options to size: 'none',
 | ||||||
|  | 					// XXX use closest preview instead of hi-res when 
 | ||||||
|  | 					// 		this is set...
 | ||||||
|  | 					//'size_limit',
 | ||||||
|  | 					// XXX might be a good idea to include source data links
 | ||||||
|  | 					//'include_source_url', // bool
 | ||||||
| 					'comment', | 					'comment', | ||||||
| 				], | 				], | ||||||
| 			}, | 			}, | ||||||
| @ -1909,10 +1925,10 @@ var FileSystemWriterUIActions = actions.Actions({ | |||||||
| 	// Export <mode> is set by:
 | 	// Export <mode> is set by:
 | ||||||
| 	// 		.config['export-mode']
 | 	// 		.config['export-mode']
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// The fields used and their order is determined by:
 | 	// The fields used and their order is set by:
 | ||||||
| 	// 		.config['export-modes'][<mode>].data	(list)
 | 	// 		.config['export-modes'][<mode>].data	(list)
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// The action used to export is determined by:
 | 	// The action used to export is set by:
 | ||||||
| 	// 		.config['export-modes'][<mode>].action
 | 	// 		.config['export-modes'][<mode>].action
 | ||||||
| 	//
 | 	//
 | ||||||
| 	//
 | 	//
 | ||||||
| @ -1931,6 +1947,8 @@ var FileSystemWriterUIActions = actions.Actions({ | |||||||
| 	//
 | 	//
 | ||||||
| 	// NOTE: .__export_dialog_fields__ can be defined both in the feature
 | 	// NOTE: .__export_dialog_fields__ can be defined both in the feature
 | ||||||
| 	// 		as well as in the instance.
 | 	// 		as well as in the instance.
 | ||||||
|  | 	// NOTE: the export action should get all of its arguments from config
 | ||||||
|  | 	// 		except for the export path...
 | ||||||
| 	__export_dialog_fields__: { | 	__export_dialog_fields__: { | ||||||
| 		'pattern': function(actions, make, parent){ | 		'pattern': function(actions, make, parent){ | ||||||
| 			return make(['Filename pattern: ',  | 			return make(['Filename pattern: ',  | ||||||
| @ -2082,7 +2100,7 @@ var FileSystemWriterUIActions = actions.Actions({ | |||||||
| 								&& base_fields[k].call(that, that, make, dialog)) | 								&& base_fields[k].call(that, that, make, dialog)) | ||||||
| 				}) | 				}) | ||||||
| 
 | 
 | ||||||
| 				// Start/stop action...
 | 				// Start action...
 | ||||||
| 				make([function(){ | 				make([function(){ | ||||||
| 						// XXX indicate export state: index, crop, image...
 | 						// XXX indicate export state: index, crop, image...
 | ||||||
| 						return 'Export'}])  | 						return 'Export'}])  | ||||||
|  | |||||||
| @ -159,7 +159,9 @@ function(actions, list_key, options){ | |||||||
| 
 | 
 | ||||||
| 	var to_remove = [] | 	var to_remove = [] | ||||||
| 
 | 
 | ||||||
| 	var lst = actions.config[list_key] | 	var lst = list_key instanceof Function ? list_key()  | ||||||
|  | 		: list_key instanceof Array ? list_key  | ||||||
|  | 		: actions.config[list_key] | ||||||
| 	lst = lst instanceof Array ? lst : Object.keys(lst) | 	lst = lst instanceof Array ? lst : Object.keys(lst) | ||||||
| 
 | 
 | ||||||
| 	var list = browse.makeList(null,  | 	var list = browse.makeList(null,  | ||||||
| @ -266,22 +268,22 @@ function(actions, list, list_key, value_key, options){ | |||||||
| 
 | 
 | ||||||
| 		var o = makeConfigListEditor(actions, list_key, options) | 		var o = makeConfigListEditor(actions, list_key, options) | ||||||
| 
 | 
 | ||||||
| 		// update slideshow menu...
 | 		// update menu...
 | ||||||
| 		o.open(function(){ | 		o.open(function(){ | ||||||
| 			list.update() | 			list.update() | ||||||
| 			list.select(txt) | 			list.select(txt) | ||||||
| 		}) | 		}) | ||||||
| 
 | 		// select default...
 | ||||||
| 		actions.Overlay(o) | 		o.on('update', function(){ | ||||||
| 
 |  | ||||||
| 		setTimeout(function(){ |  | ||||||
| 			if(typeof(value_key) == typeof(function(){})){ | 			if(typeof(value_key) == typeof(function(){})){ | ||||||
| 				o.select(value_key()) | 				o.select(value_key()) | ||||||
| 
 | 
 | ||||||
| 			} else { | 			} else { | ||||||
| 				o.select(actions.config[value_key]) | 				o.select(actions.config[value_key]) | ||||||
| 			} | 			} | ||||||
| 		}, 0) | 		}) | ||||||
|  | 
 | ||||||
|  | 		actions.Overlay(o) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ | |||||||
|     "sharp": "^0.12.0" |     "sharp": "^0.12.0" | ||||||
|   }, |   }, | ||||||
|   "optionalDependencies": { |   "optionalDependencies": { | ||||||
|     "flickrapi": "^0.3.28", |     "flickrapi": "^0.3.28" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "less": "*", |     "less": "*", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user