[tracker/tracker-0.6] Fixes NB#110584, Image:HasKeywords working incorrectly
- From: Mikael Ottela <mottela src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-0.6] Fixes NB#110584, Image:HasKeywords working incorrectly
- Date: Wed, 20 May 2009 11:57:09 -0400 (EDT)
commit cfb4698c239686ca5ab586b30ddcaa780648937d
Author: Mikael Ottela <mikael ottela ixonos com>
Date: Wed May 20 18:51:10 2009 +0300
Fixes NB#110584, Image:HasKeywords working incorrectly
Fixes NB#113083, Tracker extracts Sub-location instead of Location field.
---
src/tracker-extract/tracker-extract-jpeg.c | 1 -
src/tracker-extract/tracker-iptc.c | 53 +++++++++++++++++-----------
src/tracker-extract/tracker-xmp.c | 13 +++++++
3 files changed, 45 insertions(+), 22 deletions(-)
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index 647e549..6c23a28 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -396,7 +396,6 @@ extract_jpeg (const gchar *filename,
tracker_escape_metadata (str));
g_free (str);
break;
-
case JPEG_APP0+1:
str = (gchar*) marker->data;
len = marker->data_length;
diff --git a/src/tracker-extract/tracker-iptc.c b/src/tracker-extract/tracker-iptc.c
index 44efab7..bf76d74 100644
--- a/src/tracker-extract/tracker-iptc.c
+++ b/src/tracker-extract/tracker-iptc.c
@@ -59,7 +59,7 @@ static IptcTagType iptctags[] = {
};
static void
-metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append)
+metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append, gboolean set_additional)
{
gchar *new_value;
gchar *orig;
@@ -67,45 +67,56 @@ metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append
gboolean found = FALSE;
guint i;
- if (append && (orig = g_hash_table_lookup (metadata, key))) {
- gchar *escaped;
-
- escaped = tracker_escape_metadata (value);
+ /* Iptc is always low priority, don't overwrite */
+ if ( (orig = g_hash_table_lookup (metadata, key)) != NULL) {
+ if (append) {
+ gchar *escaped;
- list = g_strsplit (orig, "|", -1);
- for (i=0; list[i]; i++) {
- if (strcmp (list[i], escaped) == 0) {
- found = TRUE;
- break;
+ escaped = tracker_escape_metadata (value);
+
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ /* Check 32 first characters (truncated) */
+ if (strncmp (list[i], escaped, 32) == 0) {
+ found = TRUE;
+ break;
+ }
}
- }
- g_strfreev(list);
+ g_strfreev(list);
- if (!found) {
- new_value = g_strconcat (orig, "|", escaped, NULL);
- g_hash_table_insert (metadata, g_strdup (key), new_value);
- }
+ if (!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
- g_free (escaped);
+ g_free (escaped);
+ }
} else {
new_value = tracker_escape_metadata (value);
g_hash_table_insert (metadata, g_strdup (key), new_value);
/* FIXME Postprocessing is evil and should be elsewhere */
- if (strcmp (key, "Image:Keywords") == 0) {
+ if (set_additional && strcmp (key, "Image:Keywords") == 0) {
g_hash_table_insert (metadata,
g_strdup ("Image:HasKeywords"),
tracker_escape_metadata ("1"));
}
}
- /* Adding certain fields also to keywords FIXME Postprocessing is evil */
+ /* Giving certain properties HasKeywords FIXME Postprocessing is evil */
if ((strcmp (key, "Image:Title") == 0) ||
(strcmp (key, "Image:Description") == 0) ) {
g_hash_table_insert (metadata,
g_strdup ("Image:HasKeywords"),
tracker_escape_metadata ("1"));
}
+ /* Adding certain fields also to keywords */
+ if ((strcmp (key, "Image:Location") == 0) ||
+ (strcmp (key, "Image:Sublocation") == 0) ||
+ (strcmp (key, "Image:Country") == 0) ||
+ (strcmp (key, "Image:City") == 0) ) {
+ metadata_append (metadata, "Image:Keywords", value, TRUE, FALSE);
+ }
}
static gchar *
@@ -148,9 +159,9 @@ tracker_read_iptc (const unsigned char *buffer,
iptc_dataset_get_as_str (dataset, buffer, 1024);
if (p->post) {
- metadata_append (metadata,p->name,(*p->post) (buffer), p->multi);
+ metadata_append (metadata,p->name,(*p->post) (buffer), p->multi, TRUE);
} else {
- metadata_append (metadata, p->name, buffer, p->multi);
+ metadata_append (metadata, p->name, buffer, p->multi, TRUE);
}
}
}
diff --git a/src/tracker-extract/tracker-xmp.c b/src/tracker-extract/tracker-xmp.c
index 5b4a5a1..73b8696 100644
--- a/src/tracker-extract/tracker-xmp.c
+++ b/src/tracker-extract/tracker-xmp.c
@@ -397,18 +397,31 @@ tracker_xmp_iter_simple (GHashTable *metadata,
else if (strcmp (schema, NS_IPTC4XMP) == 0) {
if (strcmp (name, "Location") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Location", value, append, FALSE);
+
+ /* Added to the valid keywords */
+ tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
+
}
if (strcmp (name, "Sublocation") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Sublocation", value, append, FALSE);
+
+ /* Added to the valid keywords */
+ tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
}
}
/* Photoshop scheme */
else if (strcmp (schema, NS_PHOTOSHOP) == 0) {
if (strcmp (name, "City") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:City", value, append, FALSE);
+
+ /* Added to the valid keywords */
+ tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
}
else if (strcmp (name, "Country") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Country", value, append, FALSE);
+
+ /* Added to the valid keywords */
+ tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]