tracker r3036 - in trunk: . src/tracker-extract



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]