[gthumb/ext] write exiv2 metadata on file-save for jpeg and png files only, bug 594795



commit 8c697da200b1293f4b235e86a4635b441e37be67
Author: Michael J. Chudobiak <mjc avtechpulse com>
Date:   Fri Sep 11 08:32:48 2009 -0400

    write exiv2 metadata on file-save for jpeg and png files only, bug 594795

 extensions/exiv2/exiv2-utils.cpp               |   35 +++++++++++++++--------
 extensions/exiv2/exiv2-utils.h                 |    1 +
 extensions/exiv2/gth-metadata-provider-exiv2.c |    5 +---
 3 files changed, 25 insertions(+), 16 deletions(-)
---
diff --git a/extensions/exiv2/exiv2-utils.cpp b/extensions/exiv2/exiv2-utils.cpp
index 656e559..74b0fa7 100644
--- a/extensions/exiv2/exiv2-utils.cpp
+++ b/extensions/exiv2/exiv2-utils.cpp
@@ -669,22 +669,33 @@ exiv2_write_metadata_private (Exiv2::Image::AutoPtr  image,
 
 extern "C"
 gboolean
+exiv2_supports_writes (GthFileData *file_data)
+{
+	return (g_content_type_equals (gth_file_data_get_mime_type (file_data), "image/jpeg") ||
+		g_content_type_equals (gth_file_data_get_mime_type (file_data), "image/png"));
+}
+
+
+extern "C"
+gboolean
 exiv2_write_metadata (SavePixbufData *data)
 {
-	try {
-		Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size);
-		g_assert (image.get() != 0);
+	if (exiv2_supports_writes (data->file_data)) {
+		try {
+			Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open ((Exiv2::byte*) data->buffer, data->buffer_size);
+			g_assert (image.get() != 0);
 
-		Exiv2::DataBuf buf = exiv2_write_metadata_private (image, data->file_data->info, data->pixbuf);
+			Exiv2::DataBuf buf = exiv2_write_metadata_private (image, data->file_data->info, data->pixbuf);
 
-		g_free (data->buffer);
-		data->buffer = g_memdup (buf.pData_, buf.size_);
-		data->buffer_size = buf.size_;
-	}
-	catch (Exiv2::AnyError& e) {
-		if (data->error != NULL)
-			*data->error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
-		return FALSE;
+			g_free (data->buffer);
+			data->buffer = g_memdup (buf.pData_, buf.size_);
+			data->buffer_size = buf.size_;
+		}
+		catch (Exiv2::AnyError& e) {
+			if (data->error != NULL)
+				*data->error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, e.what());
+			return FALSE;
+		}
 	}
 
 	return TRUE;
diff --git a/extensions/exiv2/exiv2-utils.h b/extensions/exiv2/exiv2-utils.h
index 4447de1..c21dbf5 100644
--- a/extensions/exiv2/exiv2-utils.h
+++ b/extensions/exiv2/exiv2-utils.h
@@ -44,6 +44,7 @@ gboolean  exiv2_write_metadata_to_buffer   (void           **buffer,
 					    GFileInfo       *info,
 					    GdkPixbuf       *pixbuf, /* optional */
 					    GError         **error);
+gboolean  exiv2_supports_writes            (GthFileData     *file_data);
 
 G_END_DECLS
 
diff --git a/extensions/exiv2/gth-metadata-provider-exiv2.c b/extensions/exiv2/gth-metadata-provider-exiv2.c
index 68513c9..86c694f 100644
--- a/extensions/exiv2/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2/gth-metadata-provider-exiv2.c
@@ -87,11 +87,8 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider *self,
 	GError  *error = NULL;
 	GObject *metadata;
 
-	if (! g_content_type_equals (gth_file_data_get_mime_type (file_data), "image/jpeg")
-	    && ! g_content_type_equals (gth_file_data_get_mime_type (file_data), "image/png"))
-	{
+	if (! exiv2_supports_writes (file_data))
 		return;
-	}
 
 	if (! g_load_file_in_buffer (file_data->file, &buffer, &size, &error))
 		return;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]