--- src/exiv2wrapper.cpp | 171 +++++++++++++++++++++++++-------------------------- src/exiv2wrapper.hpp | 2 2 files changed, 86 insertions(+), 87 deletions(-) --- a/src/exiv2wrapper.cpp +++ b/src/exiv2wrapper.cpp @@ -51,7 +51,7 @@ using std::auto_ptr; // Custom macros #ifdef HAVE_EXIV2_ERROR_CODE #define CHECK_METADATA_READ \ - if (!_dataRead) throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); + if (!_dataRead) throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); #else #define CHECK_METADATA_READ \ if (!_dataRead) throw Exiv2::Error(METADATA_NOT_READ); @@ -67,7 +67,7 @@ void Image::_instantiate_image() // If an exception is thrown, it has to be done outside of the // Py_{BEGIN,END}_ALLOW_THREADS block. #ifdef HAVE_EXIV2_ERROR_CODE - Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); + Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); #else Exiv2::Error error(0); #endif @@ -96,7 +96,7 @@ void Image::_instantiate_image() // Re-acquire the GIL Py_END_ALLOW_THREADS - if (error.code() == 0) + if (error.code() == Exiv2::ErrorCode::kerSuccess) { assert(_image.get() != 0); _dataRead = false; @@ -153,7 +153,7 @@ void Image::readMetadata() // If an exception is thrown, it has to be done outside of the // Py_{BEGIN,END}_ALLOW_THREADS block. #ifdef HAVE_EXIV2_ERROR_CODE - Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); + Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); #else Exiv2::Error error(0); #endif @@ -180,7 +180,7 @@ void Image::readMetadata() // Re-acquire the GIL Py_END_ALLOW_THREADS - if (error.code() != 0) + if (error.code() != Exiv2::ErrorCode::kerSuccess) { throw error; } @@ -193,7 +193,7 @@ void Image::writeMetadata() // If an exception is thrown, it has to be done outside of the // Py_{BEGIN,END}_ALLOW_THREADS block. #ifdef HAVE_EXIV2_ERROR_CODE - Exiv2::Error error = Exiv2::Error(Exiv2::kerSuccess); + Exiv2::Error error = Exiv2::Error(Exiv2::ErrorCode::kerSuccess); #else Exiv2::Error error(0); #endif @@ -216,7 +216,7 @@ void Image::writeMetadata() // Re-acquire the GIL Py_END_ALLOW_THREADS - if (error.code() != 0) + if (error.code() != Exiv2::ErrorCode::kerSuccess) { throw error; } @@ -263,7 +263,7 @@ const ExifTag Image::getExifTag(std::str if(_exifData->findKey(exifKey) == _exifData->end()) #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -283,7 +283,7 @@ void Image::deleteExifTag(std::string ke if(datum == _exifData->end()) #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -321,7 +321,7 @@ const IptcTag Image::getIptcTag(std::str if(_iptcData->findKey(iptcKey) == _iptcData->end()) #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -341,7 +341,7 @@ void Image::deleteIptcTag(std::string ke if (dataIterator == _iptcData->end()) #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -385,7 +385,7 @@ const XmpTag Image::getXmpTag(std::strin if(_xmpData->findKey(xmpKey) == _xmpData->end()) #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -409,7 +409,7 @@ void Image::deleteXmpTag(std::string key else #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidKey, key); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, key); } #else { @@ -461,7 +461,7 @@ void Image::copyMetadata(Image& other, b { #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerErrorMessage, "metadata not read"); + throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, "metadata not read"); } #else { @@ -570,7 +570,7 @@ boost::python::list Image::getExifThumbn Exiv2::DataBuf buffer = _getExifThumbnail()->copy(); // Copy the data buffer in a list. boost::python::list data; - for(unsigned int i = 0; i < buffer.size_; ++i) + for(unsigned int i = 0; i < buffer.size; ++i) { unsigned int datum = buffer.pData_[i]; data.append(datum); @@ -688,7 +688,7 @@ void ExifTag::setRawValue(const std::str { std::string message("Invalid value: "); message += value; - throw Exiv2::Error(Exiv2::kerInvalidDataset, message); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, message); } #else { @@ -708,7 +708,7 @@ void ExifTag::setParentImage(Image& imag return; } _data = data; - Exiv2::Value::AutoPtr value = _datum->getValue(); + Exiv2::Value::UniquePtr value = _datum->getValue(); delete _datum; _datum = &(*_data)[_key.key()]; _datum->setValue(value.get()); @@ -810,7 +810,7 @@ IptcTag::IptcTag(const std::string& key, { std::string mssg("Tag not repeatable: "); mssg += key; - throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); } #else { @@ -838,7 +838,7 @@ void IptcTag::setRawValues(const boost:: // one value. #ifdef HAVE_EXIV2_ERROR_CODE { - throw Exiv2::Error(Exiv2::kerInvalidDataset, "Tag not repeatable"); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, "Tag not repeatable"); } #else { @@ -864,7 +864,7 @@ void IptcTag::setRawValues(const boost:: mssg += value; // there's no invalid value error in libexiv2, so we use // kerInvalidDataset wich raise a Python ValueError - throw Exiv2::Error(Exiv2::kerInvalidDataset, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidDataset, mssg); } #else { @@ -888,7 +888,7 @@ void IptcTag::setRawValues(const boost:: { std::string mssg("Invalid value: "); mssg += value; - throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); } #else { @@ -901,7 +901,7 @@ void IptcTag::setRawValues(const boost:: { std::string mssg("Tag not repeatable: "); mssg += _key.key(); - throw Exiv2::Error(Exiv2::kerErrorMessage, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, mssg); } #else { @@ -1089,7 +1089,7 @@ void XmpTag::setParentImage(Image& image // anything (see https://bugs.launchpad.net/pyexiv2/+bug/622739). return; } - Exiv2::Value::AutoPtr value = _datum->getValue(); + Exiv2::Value::UniquePtr value = _datum->getValue(); delete _datum; _from_datum = true; _datum = &(*image.getXmpData())[_key.key()]; @@ -1221,331 +1221,330 @@ void translateExiv2Error(Exiv2::Error co // defined by Exiv2 (file 'src/error.cpp') are changed switch (error.code()) { - case 1: + case Exiv2::ErrorCode::kerErrorMessage: // kerErrorMessage Unidentified error PyErr_SetString(PyExc_RuntimeError, message); break; - case 2: + case Exiv2::ErrorCode::kerCallFailed: // kerCallFailed {path}: Call to `{function}' failed: {strerror} // May be raised when reading a file PyErr_SetString(PyExc_RuntimeError, message); break; - case 3: + case Exiv2::ErrorCode::kerNotAnImage: // kerNotAnImage This does not look like a {image type} image // May be raised by readMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 4: + case Exiv2::ErrorCode::kerInvalidDataset: // kerInvalidDataset Invalid dataset name `{dataset name}' PyErr_SetString(PyExc_ValueError, message); break; - case 5: + case Exiv2::ErrorCode::kerInvalidRecord: // kerInvalidRecord Invalid record name `{record name}' // May be raised when instantiating an IptcKey from a string PyErr_SetString(PyExc_KeyError, message); break; - case 6: + case Exiv2::ErrorCode::kerInvalidKey: // kerInvalidKey Invalid key `{key}' // May be raised when instantiating an ExifKey, an IptcKey or an // XmpKey from a string PyErr_SetString(PyExc_KeyError, message); break; - case 7: + case Exiv2::ErrorCode::kerInvalidTag: // kerInvalidTag // Invalid tag name or ifdId `{tag name}', ifdId {ifdId} // May be raised when instantiating an ExifKey from a string PyErr_SetString(PyExc_KeyError, message); break; - case 8: + case Exiv2::ErrorCode::kerValueNotSet: // kerValueNotSet Value not set // May be raised when calling value() on a datum PyErr_SetString(PyExc_ValueError, message); break; - case 9: + case Exiv2::ErrorCode::kerDataSourceOpenFailed: // kerDataSourceOpenFailed // {path}: Failed to open the data source: {strerror} // May be raised by readMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 10: + case Exiv2::ErrorCode::kerFileOpenFailed: // kerFileOpenFailed // {path}: Failed to open file ({mode}): {strerror} // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 11: + case Exiv2::ErrorCode::kerFileOpenFailed: // kerFileOpenFailed // {path}: The file contains data of an unknown image type // May be raised when opening an image PyErr_SetString(PyExc_TypeError, message); break; - case 12: + case Exiv2::ErrorCode::kerMemoryContainsUnknownImageType: // kerMemoryContainsUnknownImageType //The memory contains data of an unknown image type // May be raised when instantiating an image from a data buffer PyErr_SetString(PyExc_IOError, message); break; - case 13: + case Exiv2::ErrorCode::kerUnsupportedImageType: // kerUnsupportedImageType Image type {image type} is not supported // May be raised when creating a new image PyErr_SetString(PyExc_IOError, message); break; - case 14: + case Exiv2::ErrorCode::kerFailedToReadImageData: // kerFailedToReadImageData Failed to read image data // May be raised by readMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 15: + case Exiv2::ErrorCode::kerNotAJpeg: // kerNotAJpeg This does not look like a JPEG image // May be raised by readMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 17: + case Exiv2::ErrorCode::kerFileRenameFailed: // kerFileRenameFailed // {old path}: Failed to rename file to {new path}: {strerror} // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 18: + case Exiv2::ErrorCode::kerTransferFailed: // kerTransferFailed {path}: Transfer failed: {strerror} // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 19: + case Exiv2::ErrorCode::kerMemoryTransferFailed: // kerMemoryTransferFailed Memory transfer failed: {strerror} // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 20: + case Exiv2::ErrorCode::kerInputDataReadFailed: // kerInputDataReadFailed Failed to read input data // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 21: + case Exiv2::ErrorCode::kerImageWriteFailed: // kerImageWriteFailed Failed to write image // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 22: + case Exiv2::ErrorCode::kerNoImageInInputData: // kerNoImageInInputData Input data does not contain a valid image // May be raised by writeMetadata() PyErr_SetString(PyExc_IOError, message); break; - case 23: + case Exiv2::ErrorCode::kerInvalidIfdId: // kerInvalidIfdId Invalid ifdId {ifdId} // May be raised when instantiating an ExifKey from a tag and // IFD item string PyErr_SetString(PyExc_KeyError, message); break; - case 24: + case Exiv2::ErrorCode::kerValueTooLarge: // kerValueTooLarge // Entry::setValue: Value too large {tag}, {size}, {requested} PyErr_SetString(PyExc_ValueError, message); break; - case 25: + case Exiv2::ErrorCode::kerDataAreaValueTooLarge: // kerDataAreaValueTooLarge // Entry::setDataArea: Value too large {tag}, {size}, {requested} PyErr_SetString(PyExc_ValueError, message); break; - case 26: + case Exiv2::ErrorCode::kerOffsetOutOfRange: // kerOffsetOutOfRange Offset out of range // May be raised by writeMetadata() (TIFF) PyErr_SetString(PyExc_IOError, message); break; - case 27: + case Exiv2::ErrorCode::kerUnsupportedDataAreaOffsetType: // kerUnsupportedDataAreaOffsetType // Unsupported data area offset type // May be raised by writeMetadata() (TIFF) PyErr_SetString(PyExc_IOError, message); break; - case 28: + case Exiv2::ErrorCode::kerInvalidCharset: // kerInvalidCharset Invalid charset: `{charset name}' // May be raised when instantiating a CommentValue from a string PyErr_SetString(PyExc_ValueError, message); break; - case 29: + case Exiv2::ErrorCode::kerUnsupportedDateFormat: // kerUnsupportedDateFormat Unsupported date format // May be raised when instantiating a DateValue from a string PyErr_SetString(PyExc_ValueError, message); break; - case 30: + case Exiv2::ErrorCode::kerUnsupportedTimeFormat: // kerUnsupportedTimeFormat Unsupported time format // May be raised when instantiating a TimeValue from a string PyErr_SetString(PyExc_ValueError, message); break; - case 31: + case Exiv2::ErrorCode::kerWritingImageFormatUnsupported: // kerWritingImageFormatUnsupported // Writing to {image format} images is not supported // May be raised by writeMetadata() for certain image types PyErr_SetString(PyExc_IOError, message); break; - case 32: + case Exiv2::ErrorCode::kerInvalidSettingForImage: // kerInvalidSettingForImage // Setting {metadata type} in {image format} images is not supported // May be raised when setting certain types of metadata for certain // image types that don't support them PyErr_SetString(PyExc_ValueError, message); break; - case 33: + case Exiv2::ErrorCode::kerNotACrwImage: // kerNotACrwImage This does not look like a CRW image // May be raised by readMetadata() (CRW) PyErr_SetString(PyExc_IOError, message); break; - case 34: + case Exiv2::ErrorCode::kerFunctionNotSupported: // kerFunctionNotSupported {function}: Not supported PyErr_SetString(PyExc_IOError, message); break; - case 35: + case Exiv2::ErrorCode::kerNoNamespaceInfoForXmpPrefix: // kerNoNamespaceInfoForXmpPrefix // No namespace info available for XMP prefix `{prefix}' // May be raised when retrieving property info for an XmpKey PyErr_SetString(PyExc_KeyError, message); break; - case 36: + case Exiv2::ErrorCode::kerNoPrefixForNamespace: // kerNoPrefixForNamespace // No prefix registered for namespace `{namespace}', needed for // property path `{property path}' // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_KeyError, message); break; - case 37: + case Exiv2::ErrorCode::kerTooLargeJpegSegment: // kerTooLargeJpegSegment // Size of {type of metadata} JPEG segment is larger than // 65535 bytes // May be raised by writeMetadata() (JPEG) PyErr_SetString(PyExc_ValueError, message); break; - case 38: + case Exiv2::ErrorCode::kerUnhandledXmpdatum: // kerUnhandledXmpdatum // Unhandled Xmpdatum {key} of type {value type} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_TypeError, message); break; - case 39: + case Exiv2::ErrorCode::kerUnhandledXmpNode: // kerUnhandledXmpNode // Unhandled XMP node {key} with opt={XMP Toolkit option flags} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_TypeError, message); break; - case 40: + case Exiv2::ErrorCode::kerXMPToolkitError: // kerXMPToolkitError // XMP Toolkit error {error id}: {error message} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_RuntimeError, message); break; - case 41: + case Exiv2::ErrorCode::kerDecodeLangAltPropertyFailed: // kerDecodeLangAltPropertyFailed // Failed to decode Lang Alt property {property path} // with opt={XMP Toolkit option flags} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_ValueError, message); break; - case 42: + case Exiv2::ErrorCode::kerDecodeLangAltQualifierFailed: // kerDecodeLangAltQualifierFailed // Failed to decode Lang Alt qualifier {qualifier path} // with opt={XMP Toolkit option flags} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_ValueError, message); break; - case 43: + case Exiv2::ErrorCode::kerEncodeLangAltPropertyFailed: // kerEncodeLangAltPropertyFailed // Failed to encode Lang Alt property {key} // May be raised by writeMetadata() PyErr_SetString(PyExc_ValueError, message); break; - case 44: + case Exiv2::ErrorCode::kerPropertyNameIdentificationFailed: // kerPropertyNameIdentificationFailed // Failed to determine property name from path {property path}, // namespace {namespace} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_KeyError, message); break; - case 45: + case Exiv2::ErrorCode::kerSchemaNamespaceNotRegistered: // kerSchemaNamespaceNotRegistered // Schema namespace {namespace} is not registered with // the XMP Toolkit // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_ValueError, message); break; - case 46: + case Exiv2::ErrorCode::kerNoNamespaceForPrefix: // kerNoNamespaceForPrefix // No namespace registered for prefix `{prefix}' // May be raised when instantiating an XmpKey from a string PyErr_SetString(PyExc_KeyError, message); break; - case 47: + case Exiv2::ErrorCode::kerAliasesNotSupported: // kerAliasesNotSupported // Aliases are not supported. Please send this XMP packet // to ahuggel@gmx.net `{namespace}', `{property path}', `{value}' // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_ValueError, message); break; - case 48: + case Exiv2::ErrorCode::kerInvalidXmpText: // kerInvalidXmpText // Invalid XmpText type `{type}' // May be raised when instantiating an XmpTextValue from a string PyErr_SetString(PyExc_TypeError, message); break; - case 49: + case Exiv2::ErrorCode::kerTooManyTiffDirectoryEntries: // kerTooManyTiffDirectoryEntries // TIFF directory {TIFF directory name} has too many entries // May be raised by writeMetadata() (TIFF) PyErr_SetString(PyExc_IOError, message); break; // Added in py3exiv2 - case 50: + case Exiv2::ErrorCode::kerMultipleTiffArrayElementTagsInDirectory: // kerMultipleTiffArrayElementTagsInDirectory // Multiple TIFF array element tags {number} in one directory") // May be raised by readMetadata() (TIFF) PyErr_SetString(PyExc_IOError, message); break; - case 51: + case Exiv2::ErrorCode::kerWrongTiffArrayElementTagType: // kerWrongTiffArrayElementTagType // TIFF array element tag {number} has wrong type") }, // %1=tag number // May be raised by readMetadata() (TIFF) PyErr_SetString(PyExc_TypeError, message); break; // Added in libexiv2 0.27 - case 52: + case Exiv2::ErrorCode::kerInvalidKeyXmpValue: // kerInvalidKeyXmpValue {key} has invalid XMP value type {type} // May be raised by readMetadata() when reading the XMP data PyErr_SetString(PyExc_ValueError, message); break; - case 53: + case Exiv2::ErrorCode::kerInvalidIccProfile: // kerInvalidIccProfile Not a valid ICC Profile PyErr_SetString(PyExc_ValueError, message); break; - case 54: + case Exiv2::ErrorCode::kerInvalidXMP: // kerInvalidXMP Not valid XMP PyErr_SetString(PyExc_TypeError, message); break; - case 55: + case Exiv2::ErrorCode::kerTiffDirectoryTooLarge: // kerTiffDirectoryTooLarge tiff directory length is too large PyErr_SetString(PyExc_ValueError, message); break; - case 56: + case Exiv2::ErrorCode::kerInvalidTypeValue: // kerInvalidTypeValue // Invalid type value detected in Image::printIFDStructure PyErr_SetString(PyExc_TypeError, message); break; - case 57: + case Exiv2::ErrorCode::kerInvalidMalloc: // kerInvalidMalloc // Invalid memory allocation request PyErr_SetString(PyExc_MemoryError, message); break; - case 58: + case Exiv2::ErrorCode::kerCorruptedMetadata: // kerCorruptedMetadata Corrupted image metadata PyErr_SetString(PyExc_IOError, message); break; - case 59: + case Exiv2::ErrorCode::kerArithmeticOverflow: // kerArithmeticOverflow Arithmetic operation overflow PyErr_SetString(PyExc_OverflowError, message); break; - case 60: + case Exiv2::ErrorCode::kerMallocFailed: // kerMallocFailed Memory allocation failed PyErr_SetString(PyExc_MemoryError, message); break; - // Default handler default: PyErr_SetString(PyExc_RuntimeError, message); @@ -1896,7 +1895,7 @@ void registerXmpNs(const std::string& na { std::string mssg("Namespace already exists: "); mssg += prefix; - throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); } #else { @@ -1925,7 +1924,7 @@ void unregisterXmpNs(const std::string& { std::string mssg("Can't unregister builtin namespace: "); mssg += name; - throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); } #else { @@ -1938,7 +1937,7 @@ void unregisterXmpNs(const std::string& { std::string mssg("Namespace does not exists: "); mssg += name; - throw Exiv2::Error(Exiv2::kerInvalidKey, mssg); + throw Exiv2::Error(Exiv2::ErrorCode::kerInvalidKey, mssg); } #else { --- a/src/exiv2wrapper.hpp +++ b/src/exiv2wrapper.hpp @@ -271,7 +271,7 @@ private: std::string _filename; Exiv2::byte* _data; long _size; - Exiv2::Image::AutoPtr _image; + Exiv2::Image::UniquePtr _image; Exiv2::ExifData* _exifData; Exiv2::IptcData* _iptcData; Exiv2::XmpData* _xmpData;