tracker r3036 - in trunk: . src/tracker-extract
- From: mottela svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r3036 - in trunk: . src/tracker-extract
- Date: Mon, 9 Mar 2009 14:35:47 +0000 (UTC)
Author: mottela
Date: Mon Mar 9 14:35:47 2009
New Revision: 3036
URL: http://svn.gnome.org/viewvc/tracker?rev=3036&view=rev
Log:
Added simple filtering for repeated values in multivalue field extraction
Modified:
trunk/ChangeLog
trunk/src/tracker-extract/tracker-iptc.c
trunk/src/tracker-extract/tracker-xmp.c
Modified: trunk/src/tracker-extract/tracker-iptc.c
==============================================================================
--- trunk/src/tracker-extract/tracker-iptc.c (original)
+++ trunk/src/tracker-extract/tracker-iptc.c Mon Mar 9 14:35:47 2009
@@ -59,20 +59,36 @@
static void
metadata_append (GHashTable *metadata, gchar *key, gchar *value)
{
- gchar *new_value;
- gchar *orig;
-
+ gchar *new_value;
+ gchar *orig;
+ gchar **list;
+ gboolean found = FALSE;
+ guint i;
+
if (g_hash_table_lookup_extended (metadata, key, NULL, (gpointer) &orig)) {
gchar *escaped;
escaped = tracker_escape_metadata (value);
- new_value = g_strconcat (orig, "|", escaped, NULL);
-
- g_free (escaped);
+
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ if (strcmp (list[i], escaped) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_strfreev(list);
+
+ if (!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
+
+ g_free (escaped);
} else {
new_value = tracker_escape_metadata (value);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
}
- g_hash_table_insert (metadata, g_strdup (key), new_value);
}
static gchar *
Modified: trunk/src/tracker-extract/tracker-xmp.c
==============================================================================
--- trunk/src/tracker-extract/tracker-xmp.c (original)
+++ trunk/src/tracker-extract/tracker-xmp.c Mon Mar 9 14:35:47 2009
@@ -108,17 +108,32 @@
gchar *orig;
if (g_hash_table_lookup_extended (metadata, key, NULL, (gpointer) &orig)) {
- gchar *escaped;
-
- escaped = tracker_escape_metadata (value);
- new_value = g_strconcat (orig, "|", escaped, NULL);
+ gchar *escaped;
+ gchar **list;
+ gboolean found = FALSE;
+ guint i;
+
+ escaped = tracker_escape_metadata (value);
+ /* Don't add duplicates. FIXME This is inefficient */
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ if (strcmp (list[i], escaped) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_strfreev(list);
+
+ if(!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
g_free (escaped);
} else {
new_value = tracker_escape_metadata (value);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
}
- g_hash_table_insert (metadata, g_strdup (key), new_value);
-
} else {
if (!(g_hash_table_lookup(metadata, key) && !prio)) {
new_value = tracker_escape_metadata (value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]