[gthumb] Erase existing metadata, but only if we have modified it - bug 547620
- From: Michael J. Chudobiak <mjc src gnome org>
- To: svn-commits-list gnome org
- Subject: [gthumb] Erase existing metadata, but only if we have modified it - bug 547620
- Date: Mon, 1 Jun 2009 15:33:41 -0400 (EDT)
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]