@ -224,12 +224,10 @@ namespace Action {
path_ = path ;
path_ = path ;
int rc = 0 ;
int rc = 0 ;
switch ( Params : : instance ( ) . printMode_ ) {
switch ( Params : : instance ( ) . printMode_ ) {
case Params : : pmSummary : rc = printSummary ( ) ; break ;
case Params : : pmSummary : rc = printSummary ( ) ; break ;
case Params : : pmList : rc = printList ( ) ; break ;
case Params : : pmList : rc = printList ( ) ; break ;
case Params : : pmIptc : rc = printIptc ( ) ; break ;
case Params : : pmComment : rc = printComment ( ) ; break ;
case Params : : pmXmp : rc = printXmp ( ) ; break ;
case Params : : pmPreview : rc = printPreviewList ( ) ; break ;
case Params : : pmComment : rc = printComment ( ) ; break ;
case Params : : pmPreview : rc = printPreviewList ( ) ; break ;
}
}
return rc ;
return rc ;
}
}
@ -628,207 +626,174 @@ namespace Action {
int Print : : printList ( )
int Print : : printList ( )
{
{
int rc = 0 ;
if ( ! Exiv2 : : fileExists ( path_ , true ) ) {
if ( ! Exiv2 : : fileExists ( path_ , true ) ) {
std : : cerr < < path_
std : : cerr < < path_
< < " : " < < _ ( " Failed to open the file \n " ) ;
< < " : " < < _ ( " Failed to open the file \n " ) ;
return - 1 ;
rc = - 1 ;
}
}
Exiv2 : : Image : : AutoPtr image = Exiv2 : : ImageFactory : : open ( path_ ) ;
Exiv2 : : Image : : AutoPtr image = Exiv2 : : ImageFactory : : open ( path_ ) ;
assert ( image . get ( ) ! = 0 ) ;
assert ( image . get ( ) ! = 0 ) ;
image - > readMetadata ( ) ;
image - > readMetadata ( ) ;
Exiv2 : : ExifData & exifData = image - > exifData ( ) ;
if ( exifData . empty ( ) ) {
std : : cerr < < path_
< < " : " < < _ ( " No Exif data found in the file \n " ) ;
return - 3 ;
}
Exiv2 : : ExifData : : const_iterator md ;
bool const manyFiles = Params : : instance ( ) . files_ . size ( ) > 1 ;
bool const manyFiles = Params : : instance ( ) . files_ . size ( ) > 1 ;
for ( md = exifData . begin ( ) ; md ! = exifData . end ( ) ; + + md ) {
// Set defaults for metadata types and data columns
if ( Params : : instance ( ) . unknown_
if ( Params : : instance ( ) . printTags_ = = Exiv2 : : mdNone ) {
& & md - > tagName ( ) . substr ( 0 , 2 ) = = " 0x " ) {
Params : : instance ( ) . printTags_ = Exiv2 : : mdExif | Exiv2 : : mdIptc | Exiv2 : : mdXmp ;
continue ;
}
}
if ( Params : : instance ( ) . printItems_ = = 0 ) {
if ( manyFiles ) {
Params : : instance ( ) . printItems_ = Params : : prKey | Params : : prType | Params : : prCount | Params : : prTrans ;
std : : cout < < std : : setfill ( ' ' ) < < std : : left < < std : : setw ( 20 )
}
< < path_ < < " " ;
if ( Params : : instance ( ) . printTags_ & Exiv2 : : mdExif ) {
}
Exiv2 : : ExifData & exifData = image - > exifData ( ) ;
bool first = true ;
for ( Exiv2 : : ExifData : : const_iterator md = exifData . begin ( ) ;
if ( Params : : instance ( ) . printItems_ & Params : : prTag ) {
md ! = exifData . end ( ) ; + + md ) {
if ( ! first ) std : : cout < < " " ;
printMetadatum ( * md , image . get ( ) , manyFiles ) ;
first = false ;
std : : cout < < " 0x " < < std : : setw ( 4 ) < < std : : setfill ( ' 0 ' )
< < std : : right < < std : : hex
< < md - > tag ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prGroup ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 12 ) < < std : : setfill ( ' ' ) < < std : : left
< < md - > groupName ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prKey ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setfill ( ' ' ) < < std : : left < < std : : setw ( 44 )
< < md - > key ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prName ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 27 ) < < std : : setfill ( ' ' ) < < std : : left
< < md - > tagName ( ) ;
}
}
if ( Params : : instance ( ) . printItems_ & Params : : prLabel ) {
if ( exifData . empty ( ) ) {
if ( ! first ) std : : cout < < " " ;
if ( Params : : instance ( ) . verbose_ ) {
first = false ;
std : : cerr < < path_ < < " : " < < _ ( " No Exif data found in the file \n " ) ;
std : : cout < < std : : setw ( 30 ) < < std : : setfill ( ' ' ) < < std : : left
< < md - > tagLabel ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prType ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 9 ) < < std : : setfill ( ' ' ) < < std : : left ;
const char * tn = md - > typeName ( ) ;
if ( tn ) {
std : : cout < < tn ;
}
else {
std : : ostringstream os ;
os < < " 0x " < < std : : setw ( 4 ) < < std : : setfill ( ' 0 ' ) < < std : : hex < < md - > typeId ( ) ;
std : : cout < < os . str ( ) ;
}
}
rc = - 3 ;
}
}
if ( Params : : instance ( ) . printItems_ & Params : : prCount ) {
}
if ( ! first ) std : : cout < < " " ;
if ( Params : : instance ( ) . printTags_ & Exiv2 : : mdIptc ) {
first = false ;
Exiv2 : : IptcData & iptcData = image - > iptcData ( ) ;
std : : cout < < std : : dec < < std : : setw ( 3 )
for ( Exiv2 : : IptcData : : const_iterator md = iptcData . begin ( ) ;
< < std : : setfill ( ' ' ) < < std : : right
md ! = iptcData . end ( ) ; + + md ) {
< < md - > count ( ) ;
printMetadatum ( * md , image . get ( ) , manyFiles ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prSize ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : dec < < std : : setw ( 3 )
< < std : : setfill ( ' ' ) < < std : : right
< < md - > size ( ) ;
}
}
if ( Params : : instance ( ) . printItems_ & Params : : prValue ) {
if ( iptcData . empty ( ) ) {
if ( ! first ) std : : cout < < " " ;
if ( Params : : instance ( ) . verbose_ ) {
first = false ;
std : : cerr < < path_ < < " : " < < _ ( " No IPTC data found in the file \n " ) ;
if ( Params : : instance ( ) . binary_
& & md - > typeId ( ) = = Exiv2 : : undefined
& & md - > size ( ) > 100 ) {
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
continue ;
}
}
std: : cout < < std : : dec < < md - > value ( ) ;
rc = - 3 ;
}
}
if ( Params : : instance ( ) . printItems_ & Params : : prTrans ) {
}
if ( ! first ) std : : cout < < " " ;
if ( Params : : instance ( ) . printTags_ & Exiv2 : : mdXmp ) {
first = false ;
Exiv2 : : XmpData & xmpData = image - > xmpData ( ) ;
if ( Params : : instance ( ) . binary_
for ( Exiv2 : : XmpData : : const_iterator md = xmpData . begin ( ) ;
& & md - > typeId ( ) = = Exiv2 : : undefined
md ! = xmpData . end ( ) ; + + md ) {
& & md - > size ( ) > 100 ) {
printMetadatum ( * md , image . get ( ) , manyFiles ) ;
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
continue ;
}
std : : cout < < std : : dec < < md - > print ( & exifData ) ;
}
}
if ( Params : : instance ( ) . printItems_ & Params : : prHex ) {
if ( xmpData . empty ( ) ) {
if ( ! first ) std : : cout < < std : : endl ;
if ( Params : : instance ( ) . verbose_ ) {
first = false ;
std : : cerr < < path_ < < " : " < < _ ( " No XMP data found in the file \n " ) ;
if ( Params : : instance ( ) . binary_
& & md - > typeId ( ) = = Exiv2 : : undefined
& & md - > size ( ) > 100 ) {
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
continue ;
}
}
Exiv2 : : DataBuf buf ( md - > size ( ) ) ;
rc = - 3 ;
md - > copy ( buf . pData_ , image - > byteOrder ( ) ) ;
Exiv2 : : hexdump ( std : : cout , buf . pData_ , buf . size_ ) ;
}
}
std : : cout < < std : : endl ;
}
}
return rc ;
return 0 ;
} // Print::printList
} // Print::printList
int Print : : printIptc ( )
void Print : : printMetadatum ( const Exiv2 : : Metadatum & md ,
{
const Exiv2 : : Image * pImage ,
if ( ! Exiv2 : : fileExists ( path_ , true ) ) {
bool const manyFiles )
std : : cerr < < path_
{
< < " : " < < _ ( " Failed to open the file \n " ) ;
if ( Params : : instance ( ) . unknown_
return - 1 ;
& & md . tagName ( ) . substr ( 0 , 2 ) = = " 0x " ) {
}
return ;
Exiv2 : : Image : : AutoPtr image = Exiv2 : : ImageFactory : : open ( path_ ) ;
}
assert ( image . get ( ) ! = 0 ) ;
if ( manyFiles ) {
image - > readMetadata ( ) ;
std : : cout < < std : : setfill ( ' ' ) < < std : : left < < std : : setw ( 20 )
Exiv2 : : IptcData & iptcData = image - > iptcData ( ) ;
< < path_ < < " " ;
if ( iptcData . empty ( ) ) {
}
std : : cerr < < path_
bool first = true ;
< < " : " < < _ ( " No IPTC data found in the file \n " ) ;
if ( Params : : instance ( ) . printItems_ & Params : : prTag ) {
return - 3 ;
if ( ! first ) std : : cout < < " " ;
}
first = false ;
Exiv2 : : IptcData : : const_iterator end = iptcData . end ( ) ;
std : : cout < < " 0x " < < std : : setw ( 4 ) < < std : : setfill ( ' 0 ' )
Exiv2 : : IptcData : : const_iterator md ;
< < std : : right < < std : : hex
bool const manyFiles = Params : : instance ( ) . files_ . size ( ) > 1 ;
< < md . tag ( ) ;
for ( md = iptcData . begin ( ) ; md ! = end ; + + md ) {
}
std : : cout < < std : : setfill ( ' ' ) < < std : : left ;
if ( Params : : instance ( ) . printItems_ & Params : : prGroup ) {
if ( manyFiles ) {
if ( ! first ) std : : cout < < " " ;
std : : cout < < std : : setw ( 20 ) < < path_ < < " " ;
first = false ;
std : : cout < < std : : setw ( 12 ) < < std : : setfill ( ' ' ) < < std : : left
< < md . groupName ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prKey ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setfill ( ' ' ) < < std : : left < < std : : setw ( 44 )
< < md . key ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prName ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 27 ) < < std : : setfill ( ' ' ) < < std : : left
< < md . tagName ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prLabel ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 30 ) < < std : : setfill ( ' ' ) < < std : : left
< < md . tagLabel ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prType ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
std : : cout < < std : : setw ( 9 ) < < std : : setfill ( ' ' ) < < std : : left ;
const char * tn = md . typeName ( ) ;
if ( tn ) {
std : : cout < < tn ;
}
else {
std : : ostringstream os ;
os < < " 0x " < < std : : setw ( 4 ) < < std : : setfill ( ' 0 ' ) < < std : : hex < < md . typeId ( ) ;
std : : cout < < os . str ( ) ;
}
}
std : : cout < < std : : setw ( 44 )
< < md - > key ( ) < < " "
< < std : : setw ( 9 ) < < std : : setfill ( ' ' ) < < std : : left
< < md - > typeName ( ) < < " "
< < std : : dec < < std : : setw ( 3 )
< < std : : setfill ( ' ' ) < < std : : right
< < md - > count ( ) < < " "
< < std : : dec < < md - > value ( )
< < std : : endl ;
}
return 0 ;
} // Print::printIptc
int Print : : printXmp ( )
{
if ( ! Exiv2 : : fileExists ( path_ , true ) ) {
std : : cerr < < path_
< < " : " < < _ ( " Failed to open the file \n " ) ;
return - 1 ;
}
}
Exiv2 : : Image : : AutoPtr image = Exiv2 : : ImageFactory : : open ( path_ ) ;
if ( Params : : instance ( ) . printItems_ & Params : : prCount ) {
assert ( image . get ( ) ! = 0 ) ;
if ( ! first ) std : : cout < < " " ;
image - > readMetadata ( ) ;
first = false ;
Exiv2 : : XmpData & xmpData = image - > xmpData ( ) ;
std : : cout < < std : : dec < < std : : setw ( 3 )
if ( xmpData . empty ( ) ) {
< < std : : setfill ( ' ' ) < < std : : right
std : : cerr < < path_
< < md . count ( ) ;
< < " : " < < _ ( " No XMP data found in the file \n " ) ;
return - 3 ;
}
}
Exiv2 : : XmpData : : const_iterator end = xmpData . end ( ) ;
if ( Params : : instance ( ) . printItems_ & Params : : prSize ) {
Exiv2 : : XmpData : : const_iterator md ;
if ( ! first ) std : : cout < < " " ;
bool const manyFiles = Params : : instance ( ) . files_ . size ( ) > 1 ;
first = false ;
for ( md = xmpData . begin ( ) ; md ! = end ; + + md ) {
std : : cout < < std : : dec < < std : : setw ( 3 )
std : : cout < < std : : setfill ( ' ' ) < < std : : left ;
if ( manyFiles ) {
std : : cout < < std : : setw ( 20 ) < < path_ < < " " ;
}
std : : cout < < std : : setw ( 44 )
< < md - > key ( ) < < " "
< < std : : setw ( 9 ) < < std : : setfill ( ' ' ) < < std : : left
< < md - > typeName ( ) < < " "
< < std : : dec < < std : : setw ( 3 )
< < std : : setfill ( ' ' ) < < std : : right
< < std : : setfill ( ' ' ) < < std : : right
< < md - > count ( ) < < " "
< < md . size ( ) ;
< < std : : dec < < * md
}
< < std : : endl ;
if ( Params : : instance ( ) . printItems_ & Params : : prValue ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
if ( Params : : instance ( ) . binary_
& & md . typeId ( ) = = Exiv2 : : undefined
& & md . size ( ) > 100 ) {
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
return ;
}
std : : cout < < std : : dec < < md . value ( ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prTrans ) {
if ( ! first ) std : : cout < < " " ;
first = false ;
if ( Params : : instance ( ) . binary_
& & md . typeId ( ) = = Exiv2 : : undefined
& & md . size ( ) > 100 ) {
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
return ;
}
std : : cout < < std : : dec < < md . print ( & pImage - > exifData ( ) ) ;
}
if ( Params : : instance ( ) . printItems_ & Params : : prHex ) {
if ( ! first ) std : : cout < < std : : endl ;
first = false ;
if ( Params : : instance ( ) . binary_
& & md . typeId ( ) = = Exiv2 : : undefined
& & md . size ( ) > 100 ) {
std : : cout < < _ ( " (Binary value suppressed) " ) < < std : : endl ;
return ;
}
Exiv2 : : DataBuf buf ( md . size ( ) ) ;
md . copy ( buf . pData_ , pImage - > byteOrder ( ) ) ;
Exiv2 : : hexdump ( std : : cout , buf . pData_ , buf . size_ ) ;
}
}
std : : cout < < std : : endl ;
return 0 ;
} // Print::printMetadatum
} // Print::printXmp
int Print : : printComment ( )
int Print : : printComment ( )
{
{