resoleved the metadata slowdown...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-04-13 03:05:25 +03:00
parent 6fa4c25e1a
commit bc9d0428e8
2 changed files with 136 additions and 88 deletions

View File

@ -10,7 +10,6 @@ if(typeof(process) != 'undefined'){
var fs = require('fs') var fs = require('fs')
var path = require('path') var path = require('path')
var exiftool = require('exiftool') var exiftool = require('exiftool')
var promise = require('promise')
} }
@ -78,6 +77,7 @@ module.Metadata = core.ImageGridFeatures.Feature({
suggested: [ suggested: [
'fs-metadata', 'fs-metadata',
'ui-metadata', 'ui-metadata',
'ui-fs-metadata',
], ],
actions: MetadataActions, actions: MetadataActions,
@ -90,7 +90,6 @@ module.Metadata = core.ImageGridFeatures.Feature({
// XXX add Metadata writer... // XXX add Metadata writer...
var MetadataReaderActions = actions.Actions({ var MetadataReaderActions = actions.Actions({
// XXX should this be sync???
// XXX add support to taskqueue... // XXX add support to taskqueue...
// XXX should this process multiple images??? // XXX should this process multiple images???
// XXX also check the metadata/ folder (???) // XXX also check the metadata/ folder (???)
@ -104,13 +103,13 @@ var MetadataReaderActions = actions.Actions({
var gid = this.data.getImage(image) var gid = this.data.getImage(image)
var img = this.images && this.images[gid] var img = this.images && this.images[gid]
if(!image || !img){ if(!image && !img){
return return false
} }
var full_path = path.normalize(img.base_path +'/'+ img.path) var full_path = path.normalize(img.base_path +'/'+ img.path)
return new promise(function(resolve, reject){ return new Promise(function(resolve, reject){
if(!force && img.metadata){ if(!force && img.metadata){
return resolve(img.metadata) return resolve(img.metadata)
} }
@ -139,9 +138,9 @@ var MetadataReaderActions = actions.Actions({
Object.keys(data).forEach(function(k){ m[k] = data[k] }) Object.keys(data).forEach(function(k){ m[k] = data[k] })
that.images[gid].metadata = m that.images[gid].metadata = m
that.markChanged && that.markChanged(gid)
resolve(data) // XXX
that.markChanged && that.markChanged(gid)
} }
resolve(data) resolve(data)
@ -207,6 +206,7 @@ module.MetadataReader = core.ImageGridFeatures.Feature({
// //
// Approach 3: // Approach 3:
// index a dir // index a dir
/*
['focusImage', ['focusImage',
function(){ function(){
var gid = this.current var gid = this.current
@ -217,6 +217,7 @@ module.MetadataReader = core.ImageGridFeatures.Feature({
this.readMetadata(gid) this.readMetadata(gid)
} }
}] }]
*/
], ],
}) })
@ -301,8 +302,12 @@ var MetadataUIActions = actions.Actions({
core.makeConfigToggler('metadata-auto-select-mode', core.makeConfigToggler('metadata-auto-select-mode',
function(){ return this.config['metadata-auto-select-modes'] })], function(){ return this.config['metadata-auto-select-modes'] })],
// NOTE: this will extend the Browse object with .updateMetadata(..)
// method to enable updating of metadata in the list...
//
// XXX should we replace 'mode' with nested set of metadata??? // XXX should we replace 'mode' with nested set of metadata???
// XXX make this support multiple images... // XXX make this support multiple images...
// XXX make this updatable...
showMetadata: ['Image/Show metadata', showMetadata: ['Image/Show metadata',
function(image, mode){ function(image, mode){
var that = this var that = this
@ -332,29 +337,29 @@ var MetadataUIActions = actions.Actions({
sel.addRange(range) sel.addRange(range)
} }
var _buildInfoList = function(image, metadata){
// XXX move these to an info feature... // XXX move these to an info feature...
// base fields... // base fields...
var base = [ var base = [
['GID: ', image], ['GID: ', image],
// NOTE: these are 1-based and not 0-based... // NOTE: these are 1-based and not 0-based...
['Index (ribbon): ', ['Index (ribbon): ',
this.data.getImageOrder('ribbon', image) + 1 that.data.getImageOrder('ribbon', image) + 1
+'/'+ +'/'+
this.data.getImages(image).len], that.data.getImages(image).len],
// show this only when cropped... // show this only when cropped...
['Index (global): ', ['Index (global): ',
this.data.getImageOrder(image) + 1 that.data.getImageOrder(image) + 1
+'/'+ +'/'+
this.data.getImages('all').len], that.data.getImages('all').len],
] ]
// crop-specific stuff... // crop-specific stuff...
if(this.crop_stack && this.crop_stack.len > 0){ if(that.crop_stack && that.crop_stack.len > 0){
base = base.concat([ base = base.concat([
['Index (crop): ', ['Index (crop): ',
this.data.getImageOrder('loaded', image) + 1 that.data.getImageOrder('loaded', image) + 1
+'/'+ +'/'+
this.data.getImages('loaded').len], that.data.getImages('loaded').len],
]) ])
} }
// fields that expect that image data is available... // fields that expect that image data is available...
@ -417,13 +422,16 @@ var MetadataUIActions = actions.Actions({
// add separator to base... // add separator to base...
fields.length > 0 && info.push('---') fields.length > 0 && info.push('---')
return base
.concat(info)
.concat(fields)
}
// XXX might be a good idea to directly bind ctrl-c to copy value... // XXX might be a good idea to directly bind ctrl-c to copy value...
var o = overlay.Overlay(this.ribbons.viewer, var o = overlay.Overlay(this.ribbons.viewer,
browse.makeList( browse.makeList(
null, null,
base _buildInfoList(image, metadata),
.concat(info)
.concat(fields),
{ {
showDisabled: false, showDisabled: false,
}) })
@ -478,6 +486,16 @@ var MetadataUIActions = actions.Actions({
}) })
o.client.dom.addClass('metadata-view') o.client.dom.addClass('metadata-view')
o.client.updateMetadata = function(metadata){
metadata = metadata || that.getMetadata()
// build new data set and update view...
this.options.data = _buildInfoList(image, metadata)
this.update()
return this
}
return o return o
}] }]
}) })
@ -498,6 +516,36 @@ module.MetadataUI = core.ImageGridFeatures.Feature({
var MetadataFSUI =
module.MetadataFSUI = core.ImageGridFeatures.Feature({
title: '',
doc: '',
tag: 'ui-fs-metadata',
depends: [
'ui',
'metadata',
'fs-metadata',
],
handlers: [
// read and when done update the list...
// XXX should this just wait for
['showMetadata.pre',
function(image){
var that = this
var reader = this.readMetadata(image)
return reader && function(overlay){
reader.then(function(data){
overlay.client.updateMetadata()
})
}
}],
],
})
/********************************************************************** /**********************************************************************
* vim:set ts=4 sw=4 : */ * vim:set ts=4 sw=4 : */
return module }) return module })

View File

@ -17,6 +17,7 @@
"page-cache": true "page-cache": true
}, },
"dependencies": { "dependencies": {
"promise": "*",
"commander": "^2.9.0", "commander": "^2.9.0",
"exiftool": "0.0.3", "exiftool": "0.0.3",
"flickrapi": "^0.3.28", "flickrapi": "^0.3.28",
@ -24,7 +25,6 @@
"fs-walk": "0.0.1", "fs-walk": "0.0.1",
"glob": "^4.0.6", "glob": "^4.0.6",
"guarantee-events": "^1.0.0", "guarantee-events": "^1.0.0",
"promise": "^6.0.1",
"requirejs": "^2.1.23", "requirejs": "^2.1.23",
"sharp": "^0.12.0" "sharp": "^0.12.0"
}, },