added xmp sidecar support when reading all metadata...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2024-06-27 15:53:34 +03:00
parent 78891e7d22
commit ebb6d282f1
2 changed files with 50 additions and 26 deletions

View File

@ -135,14 +135,38 @@ var MetadataReaderActions = actions.Actions({
if(!image && !img){
return false }
if(!force
&& (img.metadata || {}).ImageGridMetadata == 'full'){
return Promise.resolve(img.metadata) }
//var full_path = path.normalize(img.base_path +'/'+ img.path)
var full_path = this.getImagePath(gid)
return new Promise(function(resolve, reject){
if(!force
&& (img.metadata || {}).ImageGridMetadata == 'full'){
return resolve(img.metadata) }
var readers = []
// XMP sidecar files...
for(var ext of ['xmp', 'XMP']){
var xmp_path = full_path.replace(/\.[a-zA-Z0-9]*$/, '.'+ ext)
if(fs.existsSync(xmp_path)){
console.log("@@@@", xmp_path)
readers.push(new Promise(function(resolve, reject){
fs.readFile(xmp_path, function(err, file){
if(err){
// XXX log error...
resolve({}) }
exiftool.metadata(file, function(err, data){
if(err){
// XXX log error...
resolve({})
} else if(data.error){
// XXX log error...
resolve({})
} else {
console.log("@@@@", data)
resolve(data) } }) }) }))
break } }
// main image...
readers.push(new Promise(function(resolve, reject){
fs.readFile(full_path, function(err, file){
if(err){
return reject(err) }
@ -157,36 +181,36 @@ var MetadataReaderActions = actions.Actions({
img.ctime = stat.ctime
img.birthtime = stat.birthtime
img.size = stat.size
}
img.size = stat.size }
// read image metadata...
exiftool.metadata(file, function(err, data){
if(err){
reject(err)
} else if(data.error){
reject(data)
} else {
// convert to a real dict...
// NOTE: exiftool appears to return an array
// object rather than an actual dict/object
// and that is not JSON compatible....
that.images[gid].metadata =
Object.assign(
// XXX do we need to update or overwrite??
that.images[gid].metadata || {},
data,
{
ImageGridMetadataReader: 'exiftool/ImageGrid',
// mark metadata as full read...
ImageGridMetadata: 'full',
})
that.markChanged
&& that.markChanged('images', [gid]) }
resolve(data) } }) }) }) )
resolve(data) }) }) }) })],
// merge the data...
return Promise.all(readers)
.then(function(data){
// convert to a real dict...
// NOTE: exiftool appears to return an array
// object rather than an actual dict/object
// and that is not JSON compatible....
that.images[gid].metadata =
Object.assign(
// XXX do we need to update or overwrite??
that.images[gid].metadata || {},
...data,
{
ImageGridMetadataReader: 'exiftool/ImageGrid',
// mark metadata as full read...
ImageGridMetadata: 'full',
})
that.markChanged
&& that.markChanged('images', [gid]) }) })],
// XXX Q: should this be a linked task???
// ...on one hand yes, on the other, saving after this may
// unintentionally save other state from the main object...

View File

@ -1,7 +1,7 @@
{
"name": "ImageGrid.Viewer.g4",
"main": "index.html",
"version": "4.0.10a",
"version": "4.0.11a",
"author": "Alex A. Naanou <alex.nanou@gmail.com> (https://github.com/flynx)",
"contributors": [],
"repository": "github:flynx/ImageGrid",