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 path = require('path')
var exiftool = require('exiftool')
var promise = require('promise')
}
@ -78,6 +77,7 @@ module.Metadata = core.ImageGridFeatures.Feature({
suggested: [
'fs-metadata',
'ui-metadata',
'ui-fs-metadata',
],
actions: MetadataActions,
@ -90,7 +90,6 @@ module.Metadata = core.ImageGridFeatures.Feature({
// XXX add Metadata writer...
var MetadataReaderActions = actions.Actions({
// XXX should this be sync???
// XXX add support to taskqueue...
// XXX should this process multiple images???
// XXX also check the metadata/ folder (???)
@ -104,13 +103,13 @@ var MetadataReaderActions = actions.Actions({
var gid = this.data.getImage(image)
var img = this.images && this.images[gid]
if(!image || !img){
return
if(!image && !img){
return false
}
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){
return resolve(img.metadata)
}
@ -139,9 +138,9 @@ var MetadataReaderActions = actions.Actions({
Object.keys(data).forEach(function(k){ m[k] = data[k] })
that.images[gid].metadata = m
that.markChanged && that.markChanged(gid)
resolve(data)
// XXX
that.markChanged && that.markChanged(gid)
}
resolve(data)
@ -207,6 +206,7 @@ module.MetadataReader = core.ImageGridFeatures.Feature({
//
// Approach 3:
// index a dir
/*
['focusImage',
function(){
var gid = this.current
@ -217,6 +217,7 @@ module.MetadataReader = core.ImageGridFeatures.Feature({
this.readMetadata(gid)
}
}]
*/
],
})
@ -301,8 +302,12 @@ var MetadataUIActions = actions.Actions({
core.makeConfigToggler('metadata-auto-select-mode',
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 make this support multiple images...
// XXX make this updatable...
showMetadata: ['Image/Show metadata',
function(image, mode){
var that = this
@ -332,29 +337,29 @@ var MetadataUIActions = actions.Actions({
sel.addRange(range)
}
var _buildInfoList = function(image, metadata){
// XXX move these to an info feature...
// base fields...
var base = [
['GID: ', image],
// NOTE: these are 1-based and not 0-based...
['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...
['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...
if(this.crop_stack && this.crop_stack.len > 0){
if(that.crop_stack && that.crop_stack.len > 0){
base = base.concat([
['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...
@ -417,13 +422,16 @@ var MetadataUIActions = actions.Actions({
// add separator to base...
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...
var o = overlay.Overlay(this.ribbons.viewer,
browse.makeList(
null,
base
.concat(info)
.concat(fields),
_buildInfoList(image, metadata),
{
showDisabled: false,
})
@ -478,6 +486,16 @@ var MetadataUIActions = actions.Actions({
})
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
}]
})
@ -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 : */
return module })

View File

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