[gthumb] Erase existing metadata, but only if we have modified it - bug 547620



commit 2b7a704a0871bfe1bb507011f9df614c07a64ba5
Author: Marc Pavot <marc pavot gmail com>
Date:   Mon Jun 1 15:32:47 2009 -0400

    Erase existing metadata, but only if we have modified it - bug 547620
---
 libgthumb/gth-exif-utils.c    |    2 ++
 libgthumb/gth-exif-utils.h    |    1 +
 libgthumb/gth-exiv2-utils.cpp |   25 +++++++++++++++++++------
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/libgthumb/gth-exif-utils.c b/libgthumb/gth-exif-utils.c
index 4b48443..8eb3612 100644
--- a/libgthumb/gth-exif-utils.c
+++ b/libgthumb/gth-exif-utils.c
@@ -361,6 +361,7 @@ simple_add_metadata (GList       *metadata,
 		g_free (entry->raw_value);
 		entry->formatted_value = g_strdup (value);
 		entry->raw_value = g_strdup (value);
+                entry->erase = TRUE;
 	}
 	else {
 		/* Add a new tag entry */
@@ -372,6 +373,7 @@ simple_add_metadata (GList       *metadata,
                 entry->raw_value = g_strdup (value);
                 entry->position = 0;
                 entry->writeable = TRUE;
+                entry->erase = TRUE;
                 metadata = g_list_prepend (metadata, entry);
         }
 
diff --git a/libgthumb/gth-exif-utils.h b/libgthumb/gth-exif-utils.h
index 3c3f823..16d511e 100644
--- a/libgthumb/gth-exif-utils.h
+++ b/libgthumb/gth-exif-utils.h
@@ -55,6 +55,7 @@ typedef struct {
 	char    *raw_value;
         int      position;
 	gboolean writeable;
+	gboolean erase;
 } GthMetadata;
 
 
diff --git a/libgthumb/gth-exiv2-utils.cpp b/libgthumb/gth-exiv2-utils.cpp
index acfae79..a0909ce 100644
--- a/libgthumb/gth-exiv2-utils.cpp
+++ b/libgthumb/gth-exiv2-utils.cpp
@@ -373,6 +373,7 @@ add (GList              *metadata,
 	new_entry->raw_value = g_strdup (raw_value);
 	new_entry->position = position;
 	new_entry->writeable = TRUE;
+	new_entry->erase = FALSE;
 	metadata = g_list_prepend (metadata, new_entry);
 
 	return metadata;
@@ -600,16 +601,28 @@ write_metadata (const char *from_file,
                                         metadatum->raw_value = g_strdup ("");
 
 				if (g_str_has_prefix (metadatum->full_name, "Exif")) {
+					// Remove existing tags of the same type
+					if (metadatum->erase) {
+						Exiv2::ExifData::iterator iter = ed.findKey (Exiv2::ExifKey (metadatum->full_name));
+						if (iter != ed.end ())
+							ed.erase (iter);
+					}
+					// Add tag
 					ed[metadatum->full_name] = metadatum->raw_value;
 				} else if (g_str_has_prefix (metadatum->full_name, "Iptc")) {
+					if (metadatum->erase) {
+						Exiv2::IptcData::iterator iter = id.findKey (Exiv2::IptcKey (metadatum->full_name));
+						if (iter != id.end ())
+							id.erase (iter);
+					}
+					// Add tag
 					id[metadatum->full_name] = metadatum->raw_value;
 				} else if (g_str_has_prefix (metadatum->full_name, "Xmp")) {
-					// Remove existing tags of the same type.
-					// Seems to be needed for storing tags keywords.
-					// Not exactly sure why!
-					Exiv2::XmpData::iterator iter = xd.findKey (Exiv2::XmpKey (metadatum->full_name));
-					if (iter != xd.end ())
-						xd.erase (iter);
+					if (metadatum->erase) {
+						Exiv2::XmpData::iterator iter = xd.findKey (Exiv2::XmpKey (metadatum->full_name));
+						if (iter != xd.end ())
+							xd.erase (iter);
+					}
 					// Add tag
 					xd[metadatum->full_name] = metadatum->raw_value;
 				}



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