[gthumb] Erase existing XMP tags, but not exif or iptc tags - bug 547620



commit e4664fbfef826396fef27afed690dc76227c270b
Author: Michael J. Chudobiak <mjc avtechpulse com>
Date:   Mon May 11 12:16:54 2009 -0400

    Erase existing XMP tags, but not exif or iptc tags - bug 547620
---
 libgthumb/gth-exiv2-utils.cpp |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/libgthumb/gth-exiv2-utils.cpp b/libgthumb/gth-exiv2-utils.cpp
index 8282db4..9d5fb08 100644
--- a/libgthumb/gth-exiv2-utils.cpp
+++ b/libgthumb/gth-exiv2-utils.cpp
@@ -597,14 +597,20 @@ write_metadata (const char *from_file,
 			GthMetadata *metadatum = (GthMetadata *) scan->data;
 			if (metadatum->full_name != NULL
                             && metadatum->raw_value != NULL) {
-				if (g_str_has_prefix (metadatum->full_name, "Exif"))
+				if (g_str_has_prefix (metadatum->full_name, "Exif")) {
 					ed[metadatum->full_name] = metadatum->raw_value;
-
-				else if (g_str_has_prefix (metadatum->full_name, "Iptc"))
+				} else if (g_str_has_prefix (metadatum->full_name, "Iptc")) {
 					id[metadatum->full_name] = metadatum->raw_value;
-
-				else if (g_str_has_prefix (metadatum->full_name, "Xmp"))
+				} else if (g_str_has_prefix (metadatum->full_name, "Xmp")) {
+					// Remove existing tags of the same type.
+					// Seems to be needed for storing category keywords.
+					// Not exactly sure why!
+					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]