[packages/gthumb] upstream support for exiv2 >= 0.28; rel 5

atler atler at pld-linux.org
Tue Jul 25 23:29:07 CEST 2023


commit 6b47f402ba39d86406d0fd956aac83766bf46592
Author: Jan Palus <atler at pld-linux.org>
Date:   Tue Jul 25 23:26:44 2023 +0200

    upstream support for exiv2 >= 0.28; rel 5

 exiv2-0.28.patch | 378 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gthumb.spec      |   4 +-
 2 files changed, 381 insertions(+), 1 deletion(-)
---
diff --git a/gthumb.spec b/gthumb.spec
index c737e77..2b8a570 100644
--- a/gthumb.spec
+++ b/gthumb.spec
@@ -2,12 +2,13 @@ Summary:	An image viewer and browser for GNOME
 Summary(pl.UTF-8):	Przeglądarka obrazków dla GNOME
 Name:		gthumb
 Version:	3.12.2
-Release:	4
+Release:	5
 License:	GPL v2+
 Group:		X11/Applications/Graphics
 Source0:	https://download.gnome.org/sources/gthumb/3.12/%{name}-%{version}.tar.xz
 # Source0-md5:	6bb8246244cdd87c8f041a1e86e144b1
 Patch0:		%{name}-libraw.patch
+Patch1:		exiv2-0.28.patch
 URL:		https://wiki.gnome.org/Apps/Gthumb
 BuildRequires:	AppStream-devel >= 0.14.6
 BuildRequires:	automake
@@ -102,6 +103,7 @@ rozszerzeń gThumb.
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
 
 %build
 %meson build \
diff --git a/exiv2-0.28.patch b/exiv2-0.28.patch
new file mode 100644
index 0000000..82b85b7
--- /dev/null
+++ b/exiv2-0.28.patch
@@ -0,0 +1,378 @@
+From 3376550ae109286de09ce5f89e05060eb80230a7 Mon Sep 17 00:00:00 2001
+From: Paolo Bacchilega <paobac at src.gnome.org>
+Date: Tue, 27 Jun 2023 18:56:48 +0200
+Subject: [PATCH] exiv2: added support for version 0.28
+
+Patch by Alex and Antonio Rojas from the discussion of the issue 282.
+
+Fixes #282
+---
+ extensions/exiv2_tools/exiv2-utils.cpp | 141 +++++++++++++++++++++++++
+ 1 file changed, 141 insertions(+)
+
+diff --git a/extensions/exiv2_tools/exiv2-utils.cpp b/extensions/exiv2_tools/exiv2-utils.cpp
+index 56dadb4eb..20f049c2a 100644
+--- a/extensions/exiv2_tools/exiv2-utils.cpp
++++ b/extensions/exiv2_tools/exiv2-utils.cpp
+@@ -740,7 +740,11 @@ get_exif_default_category (const Exiv2::Exifdatum &md)
+ 
+ 
+ static void
++#if EXIV2_TEST_VERSION(0,28,0)
++exiv2_read_metadata (Exiv2::Image::UniquePtr  image,
++#else
+ exiv2_read_metadata (Exiv2::Image::AutoPtr  image,
++#endif
+ 		     GFileInfo             *info,
+ 		     gboolean               update_general_attributes)
+ {
+@@ -875,7 +879,11 @@ exiv2_read_metadata_from_file (GFile         *file,
+ 			return FALSE;
+ 		}
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(path);
++#else
+ 		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path);
++#endif
+ 		g_free (path);
+ 
+ 		if (image.get() == 0) {
+@@ -885,9 +893,17 @@ exiv2_read_metadata_from_file (GFile         *file,
+ 		}
+ 		// Set the log level to only show errors (and suppress warnings, informational and debug messages)
+ 		Exiv2::LogMsg::setLevel(Exiv2::LogMsg::error);
++#if EXIV2_TEST_VERSION(0,28,0)
++		exiv2_read_metadata (std::move(image), info, update_general_attributes);
++#else
+ 		exiv2_read_metadata (image, info, update_general_attributes);
++#endif
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		if (error != NULL)
+ 			*error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+ 		return FALSE;
+@@ -906,7 +922,11 @@ exiv2_read_metadata_from_buffer (void       *buffer,
+ 				 GError    **error)
+ {
+ 	try {
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) buffer, buffer_size);
++#else
+ 		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) buffer, buffer_size);
++#endif
+ 
+ 		if (image.get() == 0) {
+ 			if (error != NULL)
+@@ -914,9 +934,17 @@ exiv2_read_metadata_from_buffer (void       *buffer,
+ 			return FALSE;
+ 		}
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		exiv2_read_metadata (std::move(image), info, update_general_attributes);
++#else
+ 		exiv2_read_metadata (image, info, update_general_attributes);
++#endif
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		if (error != NULL)
+ 			*error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+ 		return FALSE;
+@@ -965,7 +993,11 @@ exiv2_read_sidecar (GFile     *file,
+ 		g_free (path);
+ 
+ 		std::string xmpPacket;
++#if EXIV2_TEST_VERSION(0,28,0)
++		xmpPacket.assign(reinterpret_cast<char*>(buf.data()), buf.size());
++#else
+ 		xmpPacket.assign(reinterpret_cast<char*>(buf.pData_), buf.size_);
++#endif
+ 		Exiv2::XmpData xmpData;
+ 
+ 		if (0 != Exiv2::XmpParser::decode(xmpData, xmpPacket))
+@@ -1011,7 +1043,11 @@ exiv2_read_sidecar (GFile     *file,
+ 
+ 		set_attributes_from_tagsets (info, update_general_attributes);
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		std::cerr << "Caught Exiv2 exception '" << e << "'\n";
+ 		return FALSE;
+ 	}
+@@ -1111,7 +1147,11 @@ dump_exif_data (Exiv2::ExifData &exifData,
+ 
+ 
+ static Exiv2::DataBuf
++#if EXIV2_TEST_VERSION(0,28,0)
++exiv2_write_metadata_private (Exiv2::Image::UniquePtr  image,
++#else
+ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
++#endif
+ 			      GFileInfo             *info,
+ 			      GthImage              *image_data)
+ {
+@@ -1148,13 +1188,21 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 			const char *value_type = gth_main_get_metadata_type (metadatum, attributes[i]);
+ 
+ 			if ((raw_value != NULL) && (strcmp (raw_value, "") != 0) && (value_type != NULL)) {
++#if EXIV2_TEST_VERSION(0,28,0)
++				Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#else
+ 				Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#endif
+ 				value->read (raw_value);
+ 				Exiv2::ExifKey exif_key(key);
+ 				ed.add (exif_key, value.get());
+ 			}
+ 		}
++#if EXIV2_TEST_VERSION(0,28,0)
++		catch (Exiv2::Error& e) {
++#else
+ 		catch (Exiv2::AnyError& e) {
++#endif
+ 			/* we don't care about invalid key errors */
+ 			g_warning ("%s", e.what());
+ 		}
+@@ -1270,7 +1318,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 			value_type = gth_main_get_metadata_type (metadatum, attributes[i]);
+ 			if (value_type != NULL) {
+ 				/* See the exif data code above for an explanation. */
++#if EXIV2_TEST_VERSION(0,28,0)
++				Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#else
+ 				Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#endif
+ 				Exiv2::IptcKey iptc_key(key);
+ 
+ 				const char *raw_value;
+@@ -1296,7 +1348,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 				}
+ 			}
+ 		}
++#if EXIV2_TEST_VERSION(0,28,0)
++		catch (Exiv2::Error& e) {
++#else
+ 		catch (Exiv2::AnyError& e) {
++#endif
+ 			/* we don't care about invalid key errors */
+ 			g_warning ("%s", e.what());
+ 		}
+@@ -1320,7 +1376,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 			value_type = gth_main_get_metadata_type (metadatum, attributes[i]);
+ 			if (value_type != NULL) {
+ 				/* See the exif data code above for an explanation. */
++#if EXIV2_TEST_VERSION(0,28,0)
++				Exiv2::Value::UniquePtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#else
+ 				Exiv2::Value::AutoPtr value = Exiv2::Value::create (Exiv2::TypeInfo::typeId (value_type));
++#endif
+ 				Exiv2::XmpKey xmp_key(key);
+ 
+ 				const char *raw_value;
+@@ -1346,7 +1406,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 				}
+ 			}
+ 		}
++#if EXIV2_TEST_VERSION(0,28,0)
++		catch (Exiv2::Error& e) {
++#else
+ 		catch (Exiv2::AnyError& e) {
++#endif
+ 			/* we don't care about invalid key errors */
+ 			g_warning ("%s", e.what());
+ 		}
+@@ -1362,7 +1426,11 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
+ 		image->setXmpData(xd);
+ 		image->writeMetadata();
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		g_warning ("%s", e.what());
+ 	}
+ 
+@@ -1389,16 +1457,33 @@ exiv2_write_metadata (GthImageSaveData *data)
+ {
+ 	if (exiv2_supports_writes (data->mime_type) && (data->file_data != NULL)) {
+ 		try {
++#if EXIV2_TEST_VERSION(0,28,0)
++			Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size);
++#else
+ 			Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size);
++#endif
+ 			g_assert (image.get() != 0);
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++			Exiv2::DataBuf buf = exiv2_write_metadata_private (std::move(image), data->file_data->info, data->image);
++#else
+ 			Exiv2::DataBuf buf = exiv2_write_metadata_private (image, data->file_data->info, data->image);
++#endif
+ 
+ 			g_free (data->buffer);
++#if EXIV2_TEST_VERSION(0,28,0)
++			data->buffer = g_memdup (buf.data(), buf.size());
++			data->buffer_size = buf.size();
++#else
+ 			data->buffer = g_memdup (buf.pData_, buf.size_);
+ 			data->buffer_size = buf.size_;
++#endif
+ 		}
++#if EXIV2_TEST_VERSION(0,28,0)
++		catch (Exiv2::Error& e) {
++#else
+ 		catch (Exiv2::AnyError& e) {
++#endif
+ 			if (data->error != NULL)
+ 				*data->error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+ 			g_warning ("%s\n", e.what());
+@@ -1419,16 +1504,33 @@ exiv2_write_metadata_to_buffer (void      **buffer,
+ 				GError    **error)
+ {
+ 	try {
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size);
++#else
+ 		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size);
++#endif
+ 		g_assert (image.get() != 0);
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::DataBuf buf = exiv2_write_metadata_private (std::move(image), info, image_data);
++#else
+ 		Exiv2::DataBuf buf = exiv2_write_metadata_private (image, info, image_data);
++#endif
+ 
+ 		g_free (*buffer);
++#if EXIV2_TEST_VERSION(0,28,0)
++		*buffer = g_memdup (buf.data(), buf.size());
++		*buffer_size = buf.size();
++#else
+ 		*buffer = g_memdup (buf.pData_, buf.size_);
+ 		*buffer_size = buf.size_;
++#endif
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		if (error != NULL)
+ 			*error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+ 		return FALSE;
+@@ -1445,7 +1547,11 @@ exiv2_clear_metadata (void   **buffer,
+ 		      GError **error)
+ {
+ 	try {
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size);
++#else
+ 		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) *buffer, *buffer_size);
++#endif
+ 
+ 		if (image.get() == 0) {
+ 			if (error != NULL)
+@@ -1457,7 +1563,11 @@ exiv2_clear_metadata (void   **buffer,
+ 			image->clearMetadata();
+ 			image->writeMetadata();
+ 		}
++#if EXIV2_TEST_VERSION(0,28,0)
++		catch (Exiv2::Error& e) {
++#else
+ 		catch (Exiv2::AnyError& e) {
++#endif
+ 			g_warning ("%s", e.what());
+ 		}
+ 
+@@ -1466,10 +1576,19 @@ exiv2_clear_metadata (void   **buffer,
+ 		Exiv2::DataBuf buf = io.read(io.size());
+ 
+ 		g_free (*buffer);
++#if EXIV2_TEST_VERSION(0,28,0)
++		*buffer = g_memdup (buf.data(), buf.size());
++		*buffer_size = buf.size();
++#else
+ 		*buffer = g_memdup (buf.pData_, buf.size_);
+ 		*buffer_size = buf.size_;
++#endif
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 		if (error != NULL)
+ 			*error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+ 		return FALSE;
+@@ -1502,26 +1621,44 @@ exiv2_generate_thumbnail (const char *uri,
+ 		if (path == NULL)
+ 			return NULL;
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open (path);
++#else
+ 		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open (path);
++#endif
+ 		image->readMetadata ();
+ 		Exiv2::ExifThumbC exifThumb (image->exifData ());
+ 		Exiv2::DataBuf thumb = exifThumb.copy ();
+ 
+ 		g_free (path);
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		if (thumb.data() == NULL)
++#else
+ 		if (thumb.pData_ == NULL)
++#endif
+ 			return NULL;
+ 
+ 		Exiv2::ExifData &ed = image->exifData();
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		long orientation = (ed["Exif.Image.Orientation"].count() > 0) ? ed["Exif.Image.Orientation"].toUint32() : 1;
++		long image_width = (ed["Exif.Photo.PixelXDimension"].count() > 0) ? ed["Exif.Photo.PixelXDimension"].toUint32() : -1;
++		long image_height = (ed["Exif.Photo.PixelYDimension"].count() > 0) ? ed["Exif.Photo.PixelYDimension"].toUint32() : -1;
++#else
+ 		long orientation = (ed["Exif.Image.Orientation"].count() > 0) ? ed["Exif.Image.Orientation"].toLong() : 1;
+ 		long image_width = (ed["Exif.Photo.PixelXDimension"].count() > 0) ? ed["Exif.Photo.PixelXDimension"].toLong() : -1;
+ 		long image_height = (ed["Exif.Photo.PixelYDimension"].count() > 0) ? ed["Exif.Photo.PixelYDimension"].toLong() : -1;
++#endif
+ 
+ 		if ((orientation != 1) || (image_width <= 0) || (image_height <= 0))
+ 			return NULL;
+ 
++#if EXIV2_TEST_VERSION(0,28,0)
++		GInputStream *stream = g_memory_input_stream_new_from_data (thumb.data(), thumb.size(), NULL);
++#else
+ 		GInputStream *stream = g_memory_input_stream_new_from_data (thumb.pData_, thumb.size_, NULL);
++#endif
+ 		pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, NULL);
+ 		g_object_unref (stream);
+ 
+@@ -1575,7 +1712,11 @@ exiv2_generate_thumbnail (const char *uri,
+ 		gdk_pixbuf_set_option (pixbuf, "orientation", orientation_s);
+ 		g_free (orientation_s);
+ 	}
++#if EXIV2_TEST_VERSION(0,28,0)
++	catch (Exiv2::Error& e) {
++#else
+ 	catch (Exiv2::AnyError& e) {
++#endif
+ 	}
+ 
+ 	return pixbuf;
+-- 
+GitLab
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/gthumb.git/commitdiff/6b47f402ba39d86406d0fd956aac83766bf46592



More information about the pld-cvs-commit mailing list