Submitted By: Pierre Labastie Date: 2019-01-30 Initial Package Version: 18.12.0 Upstream Status: Committed Origin: Upstream commits 61543b and 6f4e08 Description: Adapt gwenview to various changes in Exiv-0.27 API diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index d60ae47f..229eac2a 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -224,6 +224,11 @@ kde_source_files_enable_exceptions( exiv2imageloader.cpp imagemetainfomodel.cpp timeutils.cpp + cms/cmsprofile.cpp + document/abstractdocumentimpl.cpp + document/document.cpp + document/loadingdocumentimpl.cpp + jpegcontent.cpp ) ki18n_wrap_ui(gwenviewlib_SRCS diff --git a/lib/cms/cmsprofile.cpp b/lib/cms/cmsprofile.cpp index 188b90a4..7d2b753e 100644 --- a/lib/cms/cmsprofile.cpp +++ b/lib/cms/cmsprofile.cpp @@ -42,6 +42,9 @@ extern "C" { // lcms #include +// Exiv2 +#include + // X11 #ifdef HAVE_X11 #include diff --git a/lib/cms/cmsprofile.h b/lib/cms/cmsprofile.h index a2a38a87..06c7672d 100644 --- a/lib/cms/cmsprofile.h +++ b/lib/cms/cmsprofile.h @@ -29,12 +29,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA #include #include -// Exiv2 -#include - class QByteArray; class QString; +namespace Exiv2 +{ + class Image; +} + typedef void* cmsHPROFILE; namespace Gwenview diff --git a/lib/document/abstractdocumentimpl.cpp b/lib/document/abstractdocumentimpl.cpp index d841ae5f..d3d0002c 100644 --- a/lib/document/abstractdocumentimpl.cpp +++ b/lib/document/abstractdocumentimpl.cpp @@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // Self #include "abstractdocumentimpl.h" +#include // Qt // KDE @@ -77,9 +78,9 @@ void AbstractDocumentImpl::setDocumentKind(MimeTypeUtils::Kind kind) d->mDocument->setKind(kind); } -void AbstractDocumentImpl::setDocumentExiv2Image(Exiv2::Image::AutoPtr image) +void AbstractDocumentImpl::setDocumentExiv2Image(std::unique_ptr image) { - d->mDocument->setExiv2Image(image); + d->mDocument->setExiv2Image(std::move(image)); } void AbstractDocumentImpl::setDocumentDownSampledImage(const QImage& image, int invertedZoom) diff --git a/lib/document/abstractdocumentimpl.h b/lib/document/abstractdocumentimpl.h index 1f427e60..86e6bfd2 100644 --- a/lib/document/abstractdocumentimpl.h +++ b/lib/document/abstractdocumentimpl.h @@ -34,6 +34,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class QImage; class QRect; +namespace Exiv2 +{ + class Image; +} + namespace Gwenview { @@ -108,7 +113,7 @@ protected: void setDocumentImageSize(const QSize& size); void setDocumentKind(MimeTypeUtils::Kind); void setDocumentFormat(const QByteArray& format); - void setDocumentExiv2Image(Exiv2::Image::AutoPtr); + void setDocumentExiv2Image(std::unique_ptr); void setDocumentDownSampledImage(const QImage&, int invertedZoom); void setDocumentCmsProfile(Cms::Profile::Ptr profile); void setDocumentErrorString(const QString&); diff --git a/lib/document/document.cpp b/lib/document/document.cpp index 18756700..afa9ed03 100644 --- a/lib/document/document.cpp +++ b/lib/document/document.cpp @@ -31,6 +31,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include #include +// Exiv2 +#include + // Local #include "documentjob.h" #include "emptydocumentimpl.h" @@ -388,9 +391,9 @@ AbstractDocumentEditor* Document::editor() return d->mImpl->editor(); } -void Document::setExiv2Image(Exiv2::Image::AutoPtr image) +void Document::setExiv2Image(std::unique_ptr image) { - d->mExiv2Image = image; + d->mExiv2Image = std::move(image); d->mImageMetaInfoModel.setExiv2Image(d->mExiv2Image.get()); emit metaInfoUpdated(); } diff --git a/lib/document/document.h b/lib/document/document.h index c0bb454b..4b40a6e1 100644 --- a/lib/document/document.h +++ b/lib/document/document.h @@ -22,8 +22,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include -#include -#include +// STL +#include // Qt #include @@ -43,6 +43,11 @@ class QUndoStack; class KJob; class QUrl; +namespace Exiv2 +{ + class Image; +} + namespace Gwenview { @@ -235,7 +240,7 @@ private: void setKind(MimeTypeUtils::Kind); void setFormat(const QByteArray&); void setSize(const QSize&); - void setExiv2Image(Exiv2::Image::AutoPtr); + void setExiv2Image(std::unique_ptr); void setDownSampledImage(const QImage&, int invertedZoom); void switchToImpl(AbstractDocumentImpl* impl); void setErrorString(const QString&); diff --git a/lib/document/document_p.h b/lib/document/document_p.h index 78e0ac6e..4de25f15 100644 --- a/lib/document/document_p.h +++ b/lib/document/document_p.h @@ -21,6 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA #ifndef DOCUMENT_P_H #define DOCUMENT_P_H +// STL +#include + // Local #include #include @@ -34,6 +37,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA #include #include +namespace Exiv2 +{ + class Image; +} + namespace Gwenview { @@ -54,7 +62,7 @@ struct DocumentPrivate QSize mSize; QImage mImage; QMap mDownSampledImageMap; - Exiv2::Image::AutoPtr mExiv2Image; + std::unique_ptr mExiv2Image; MimeTypeUtils::Kind mKind; QByteArray mFormat; ImageMetaInfoModel mImageMetaInfoModel; diff --git a/lib/document/loadingdocumentimpl.cpp b/lib/document/loadingdocumentimpl.cpp index 07675783..766a1831 100644 --- a/lib/document/loadingdocumentimpl.cpp +++ b/lib/document/loadingdocumentimpl.cpp @@ -24,6 +24,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // STL #include +// Exiv2 +#include + // Qt #include #include @@ -100,7 +103,7 @@ struct LoadingDocumentImplPrivate QByteArray mData; QByteArray mFormat; QSize mImageSize; - Exiv2::Image::AutoPtr mExiv2Image; + std::unique_ptr mExiv2Image; std::unique_ptr mJpegContent; QImage mImage; Cms::Profile::Ptr mCmsProfile; @@ -486,7 +489,7 @@ void LoadingDocumentImpl::slotMetaInfoLoaded() setDocumentFormat(d->mFormat); setDocumentImageSize(d->mImageSize); - setDocumentExiv2Image(d->mExiv2Image); + setDocumentExiv2Image(std::move(d->mExiv2Image)); setDocumentCmsProfile(d->mCmsProfile); d->mMetaInfoLoaded = true; diff --git a/lib/exiv2imageloader.cpp b/lib/exiv2imageloader.cpp index f2830f81..f13dff7a 100644 --- a/lib/exiv2imageloader.cpp +++ b/lib/exiv2imageloader.cpp @@ -29,8 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // KDE // Exiv2 -#include -#include +#include // Local @@ -39,7 +38,7 @@ namespace Gwenview struct Exiv2ImageLoaderPrivate { - Exiv2::Image::AutoPtr mImage; + std::unique_ptr mImage; QString mErrorMessage; }; @@ -57,7 +56,7 @@ bool Exiv2ImageLoader::load(const QString& filePath) { QByteArray filePathByteArray = QFile::encodeName(filePath); try { - d->mImage = Exiv2::ImageFactory::open(filePathByteArray.constData()); + d->mImage.reset(Exiv2::ImageFactory::open(filePathByteArray.constData()).release()); d->mImage->readMetadata(); } catch (const Exiv2::Error& error) { d->mErrorMessage = QString::fromUtf8(error.what()); @@ -69,7 +68,7 @@ bool Exiv2ImageLoader::load(const QString& filePath) bool Exiv2ImageLoader::load(const QByteArray& data) { try { - d->mImage = Exiv2::ImageFactory::open((unsigned char*)data.constData(), data.size()); + d->mImage.reset(Exiv2::ImageFactory::open((unsigned char*)data.constData(), data.size()).release()); d->mImage->readMetadata(); } catch (const Exiv2::Error& error) { d->mErrorMessage = QString::fromUtf8(error.what()); @@ -83,9 +82,9 @@ QString Exiv2ImageLoader::errorMessage() const return d->mErrorMessage; } -Exiv2::Image::AutoPtr Exiv2ImageLoader::popImage() +std::unique_ptr Exiv2ImageLoader::popImage() { - return d->mImage; + return std::move(d->mImage); } } // namespace diff --git a/lib/exiv2imageloader.h b/lib/exiv2imageloader.h index 57ef24d2..12a45b68 100644 --- a/lib/exiv2imageloader.h +++ b/lib/exiv2imageloader.h @@ -23,13 +23,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include +// STL +#include + // Qt // KDE // Exiv2 -#include -#include +namespace Exiv2 +{ + class Image; +} // Local @@ -54,7 +59,7 @@ public: bool load(const QString&); bool load(const QByteArray&); QString errorMessage() const; - Exiv2::Image::AutoPtr popImage(); + std::unique_ptr popImage(); private: Exiv2ImageLoaderPrivate* const d; diff --git a/lib/jpegcontent.cpp b/lib/jpegcontent.cpp index bb810dd4..a8cf909f 100644 --- a/lib/jpegcontent.cpp +++ b/lib/jpegcontent.cpp @@ -42,8 +42,7 @@ extern "C" { #include // Exiv2 -#include -#include +#include // Local #include "jpegerrormanager.h" @@ -216,12 +215,12 @@ bool JpegContent::load(const QString& path) bool JpegContent::loadFromData(const QByteArray& data) { - Exiv2::Image::AutoPtr image; + std::unique_ptr image; Exiv2ImageLoader loader; if (!loader.load(data)) { qCritical() << "Could not load image with Exiv2, reported error:" << loader.errorMessage(); } - image = loader.popImage(); + image.reset(loader.popImage().release()); return loadFromData(data, image.get()); } @@ -603,7 +602,8 @@ bool JpegContent::save(QIODevice* device) d->mPendingTransformation = false; } - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open((unsigned char*)d->mRawData.data(), d->mRawData.size()); + std::unique_ptr image; + image.reset(Exiv2::ImageFactory::open((unsigned char*)d->mRawData.data(), d->mRawData.size()).release()); // Store Exif info image->setExifData(d->mExifData); diff --git a/lib/timeutils.cpp b/lib/timeutils.cpp index 9e8836a9..3c519098 100644 --- a/lib/timeutils.cpp +++ b/lib/timeutils.cpp @@ -21,6 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA // Self #include "timeutils.h" +// STL +#include + // Qt #include #include @@ -30,8 +33,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA #include // Exiv2 -#include -#include +#include // Local #include @@ -92,7 +94,7 @@ struct CacheItem if (!loader.load(path)) { return false; } - Exiv2::Image::AutoPtr img = loader.popImage(); + std::unique_ptr img(loader.popImage().release()); try { Exiv2::ExifData exifData = img->exifData(); if (exifData.empty()) { diff --git a/tests/auto/cmsprofiletest.cpp b/tests/auto/cmsprofiletest.cpp index 4efc441b..f4c7f9e5 100644 --- a/tests/auto/cmsprofiletest.cpp +++ b/tests/auto/cmsprofiletest.cpp @@ -69,7 +69,7 @@ void CmsProfileTest::testLoadFromImageData_data() void CmsProfileTest::testLoadFromExiv2Image() { QFETCH(QString, fileName); - Exiv2::Image::AutoPtr image; + std::unique_ptr image; { QByteArray data; QString path = pathForTestFile(fileName); @@ -80,7 +80,7 @@ void CmsProfileTest::testLoadFromExiv2Image() Exiv2ImageLoader loader; QVERIFY(loader.load(data)); - image = loader.popImage(); + image.reset(loader.popImage().release()); } Cms::Profile::Ptr ptr = Cms::Profile::loadFromExiv2Image(image.get()); QVERIFY(!ptr.isNull()); diff --git a/tests/auto/imagemetainfomodeltest.cpp b/tests/auto/imagemetainfomodeltest.cpp index e3ec8d30..5a286b00 100644 --- a/tests/auto/imagemetainfomodeltest.cpp +++ b/tests/auto/imagemetainfomodeltest.cpp @@ -17,6 +17,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +// STL +#include + // Qt // KDE @@ -28,7 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "../lib/imagemetainfomodel.h" #include "testutils.h" -#include +// Exiv2 +#include #include "imagemetainfomodeltest.h" @@ -46,7 +51,7 @@ void ImageMetaInfoModelTest::testCatchExiv2Errors() data = file.readAll(); } - Exiv2::Image::AutoPtr image; + std::unique_ptr image; { Exiv2ImageLoader loader; QVERIFY(loader.load(data));