tracker r1898 - in branches/indexer-split: . src/tracker-indexer/modules



Author: pvanhoof
Date: Tue Jul 22 09:03:42 2008
New Revision: 1898
URL: http://svn.gnome.org/viewvc/tracker?rev=1898&view=rev

Log:
2008-07-21  Philip Van Hoof  <pvanhoof gnome org>

	* src/tracker-indexer/modules/files.c:
	* src/tracker-indexer/modules/evolution.c:
	* src/tracker-indexer/modules/applications.c:
	* src/tracker-indexer/tracker-indexer.c:

	tracker-indexer modules returned a GHashTable with field name/value
	pairs, we now use TrackerField pointers for the hashtable keys, so we
	could deal with values in their native format (instead of having to
	convert everything to strings)



Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/tracker-indexer/modules/applications.c
   branches/indexer-split/src/tracker-indexer/modules/evolution.c
   branches/indexer-split/src/tracker-indexer/modules/files.c

Modified: branches/indexer-split/src/tracker-indexer/modules/applications.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/modules/applications.c	(original)
+++ branches/indexer-split/src/tracker-indexer/modules/applications.c	Tue Jul 22 09:03:42 2008
@@ -19,7 +19,9 @@
 
 #include <stdlib.h>
 #include <glib.h>
+#include <glib-object.h>
 #include <tracker-indexer/tracker-module.h>
+#include <libtracker-common/tracker-ontology.h>
 
 #define GROUP_DESKTOP_ENTRY "Desktop Entry"
 #define KEY_TYPE            "Type"
@@ -50,14 +52,17 @@
 }
 
 static void
-insert_data_from_desktop_file (GHashTable  *metadata,
-			       const gchar *metadata_key,
-			       GKeyFile    *desktop_file,
-			       const gchar *key,
-			       gboolean     use_locale)
+insert_data_from_desktop_file (GHashTable   *metadata,
+			       TrackerField *metadata_key,
+			       GKeyFile     *desktop_file,
+			       const gchar  *key,
+			       gboolean      use_locale)
 {
 	gchar *str;
 
+	if (!metadata_key)
+		return;
+
 	if (use_locale) {
 		str = g_key_file_get_locale_string (desktop_file, GROUP_DESKTOP_ENTRY, key, NULL, NULL);
 	} else {
@@ -65,7 +70,7 @@
 	}
 
 	if (str) {
-		g_hash_table_insert (metadata, (gpointer) metadata_key, str);
+		g_hash_table_insert (metadata, g_object_ref (metadata_key), str);
 	}
 }
 
@@ -75,6 +80,7 @@
 	GHashTable *metadata;
 	GKeyFile *key_file;
 	gchar *type, *filename;
+	TrackerField *field;
 
 	/* Check we're dealing with a desktop file */
 	if (!g_str_has_suffix (file->path, ".desktop")) {
@@ -102,21 +108,57 @@
 	}
 
 	/* Begin collecting data */
-	metadata = g_hash_table_new_full (g_str_hash, g_str_equal,
-					  NULL,
+	metadata = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+					  (GDestroyNotify) g_object_unref,
 					  (GDestroyNotify) g_free);
 
-	insert_data_from_desktop_file (metadata, METADATA_APP_NAME, key_file, KEY_NAME, FALSE);
-	insert_data_from_desktop_file (metadata, METADATA_APP_DISPLAY_NAME, key_file, KEY_NAME, TRUE);
-	insert_data_from_desktop_file (metadata, METADATA_APP_GENERIC_NAME, key_file, KEY_GENERIC_NAME, TRUE);
-	insert_data_from_desktop_file (metadata, METADATA_APP_COMMENT, key_file, KEY_COMMENT, TRUE);
-	insert_data_from_desktop_file (metadata, METADATA_APP_EXECUTABLE, key_file, KEY_EXECUTABLE, FALSE);
-	insert_data_from_desktop_file (metadata, METADATA_APP_ICON, key_file, KEY_ICON, FALSE);
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_NAME), 
+				       key_file, 
+				       KEY_NAME, 
+				       FALSE);
+
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_DISPLAY_NAME),
+				       key_file,
+				       KEY_NAME,
+				       TRUE);
+
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_GENERIC_NAME),
+				       key_file,
+				       KEY_GENERIC_NAME,
+				       TRUE);
+
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_COMMENT),
+				       key_file,
+				       KEY_COMMENT,
+				       TRUE);
+
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_EXECUTABLE),
+				       key_file,
+				       KEY_EXECUTABLE,
+				       FALSE);
+
+	insert_data_from_desktop_file (metadata, 
+				       tracker_ontology_get_field_def (METADATA_APP_ICON),
+				       key_file,
+				       KEY_ICON,
+				       FALSE);
 
 	/* FIXME: mimetypes list and categories? */
 
 	filename = g_filename_display_basename (file->path);
-	g_hash_table_insert (metadata, METADATA_FILE_NAME, filename);
+
+	field = tracker_ontology_get_field_def (METADATA_FILE_NAME);
+
+	if (field) {
+		g_hash_table_insert (metadata, 
+				     g_object_ref (field),
+				     filename);
+	}
 
 	g_key_file_free (key_file);
 	g_free (type);

Modified: branches/indexer-split/src/tracker-indexer/modules/evolution.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/modules/evolution.c	(original)
+++ branches/indexer-split/src/tracker-indexer/modules/evolution.c	Tue Jul 22 09:03:42 2008
@@ -30,6 +30,7 @@
 #include <libtracker-common/tracker-utils.h>
 #include <libtracker-common/tracker-file-utils.h>
 #include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-ontology.h>
 
 #define METADATA_FILE_PATH           "File:Path"
 #define METADATA_FILE_NAME           "File:Name"
@@ -562,6 +563,19 @@
         return id;
 }
 
+static void 
+insert_data_to_metadata (GHashTable *metadata, const gchar *name, gchar *value)
+{
+	TrackerField *field_def = tracker_ontology_get_field_def (name);
+	
+	if (field_def) {
+		g_hash_table_insert (metadata, 
+				     g_object_ref (field_def), 
+				     value);
+	}
+}
+
+
 GHashTable *
 get_metadata_for_mbox (TrackerFile *file)
 {
@@ -578,24 +592,34 @@
                 return NULL;
         }
 
-	metadata = g_hash_table_new_full (g_str_hash, g_str_equal,
-					  NULL,
-					  (GDestroyNotify) g_free);
-
-        dir = tracker_string_replace (file->path, local_dir, NULL);
-        name = g_strdup_printf ("%s;uid=%d", dir, get_mbox_message_id (message));
-
-        g_hash_table_insert (metadata, METADATA_FILE_PATH, g_strdup ("email://local local"));
-        g_hash_table_insert (metadata, METADATA_FILE_NAME, name);
-
-        g_mime_message_get_date (message, &date, NULL);
-	g_hash_table_insert (metadata, METADATA_EMAIL_DATE,
-                             tracker_uint_to_string (date));
-
-        g_hash_table_insert (metadata, METADATA_EMAIL_SENDER,
-                             g_strdup (g_mime_message_get_sender (message)));
-        g_hash_table_insert (metadata, METADATA_EMAIL_SUBJECT,
-                             g_strdup (g_mime_message_get_subject (message)));
+		metadata = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+						  (GDestroyNotify) g_object_unref,
+						  (GDestroyNotify) g_free);
+
+		dir = tracker_string_replace (file->path, local_dir, NULL);
+		name = g_strdup_printf ("%s;uid=%d", dir, get_mbox_message_id (message));
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_FILE_PATH),
+					 g_strdup ("email://local local"));
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_FILE_NAME),
+					 name);
+
+		g_mime_message_get_date (message, &date, NULL);
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_DATE),
+					 tracker_uint_to_string (date));
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_SENDER),
+					 g_strdup (g_mime_message_get_sender (message)));
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_SUBJECT),
+					 g_strdup (g_mime_message_get_subject (message)));
 
         /* Missing:
          *
@@ -716,21 +740,33 @@
                       SUMMARY_TYPE_STRING, NULL, /* mlist */
                       -1);
 
-	metadata = g_hash_table_new_full (g_str_hash, g_str_equal,
-					  NULL,
-					  (GDestroyNotify) g_free);
+		metadata = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+						  (GDestroyNotify) g_object_unref,
+						  (GDestroyNotify) g_free);
 
-        get_imap_uri (file->path, &dirname, &basename);
+		get_imap_uri (file->path, &dirname, &basename);
 
-        g_hash_table_insert (metadata, METADATA_FILE_PATH, dirname);
-        g_hash_table_insert (metadata, METADATA_FILE_NAME, g_strdup_printf ("%s;uid=%s", basename, uid));
-        g_free (basename);
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_FILE_PATH),
+					 dirname);
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_FILE_NAME),
+					 g_strdup_printf ("%s;uid=%s", basename, uid));
+
+		g_free (basename);
+
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_DATE),
+					 tracker_uint_to_string (date));
 
-	g_hash_table_insert (metadata, METADATA_EMAIL_DATE,
-                             tracker_uint_to_string (date));
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_SENDER), 
+					 from);
 
-        g_hash_table_insert (metadata, METADATA_EMAIL_SENDER, from);
-        g_hash_table_insert (metadata, METADATA_EMAIL_SUBJECT, subject);
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_EMAIL_SUBJECT), 
+					 subject);
 
         g_free (uid);
         g_free (to);

Modified: branches/indexer-split/src/tracker-indexer/modules/files.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/modules/files.c	(original)
+++ branches/indexer-split/src/tracker-indexer/modules/files.c	Tue Jul 22 09:03:42 2008
@@ -48,6 +48,18 @@
 	return "Files";
 }
 
+static void 
+insert_data_to_metadata (GHashTable *metadata, const gchar *name, gchar *value)
+{
+	TrackerField *field_def = tracker_ontology_get_field_def (name);
+	
+	if (field_def) {
+		g_hash_table_insert (metadata, 
+				     g_object_ref (field_def), 
+				     value);
+	}
+}
+
 static void
 tracker_metadata_get_embedded (const char *path,
 			       const char *mimetype,
@@ -125,8 +137,9 @@
 		if (!utf_value)
 			continue;
 
-		/* FIXME: name should be const */
-		g_hash_table_insert (table, g_strdup (name), utf_value);
+		insert_data_to_metadata (table, 
+					 tracker_ontology_get_field_def (name), 
+					 utf_value);
 	}
 
 	g_strfreev (values);
@@ -215,39 +228,52 @@
 	}
 
 	g_lstat (path, &st);
-	metadata = g_hash_table_new_full (g_str_hash, g_str_equal,
-					  NULL,
+	metadata = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+					  (GDestroyNotify) g_object_unref,
 					  (GDestroyNotify) g_free);
 	ext = strrchr (path, '.');
 
 	if (ext) {
-		g_hash_table_insert (metadata, METADATA_FILE_EXT, g_strdup (ext + 1));
+		g_hash_table_insert (metadata, 
+				     g_object_ref (tracker_ontology_get_field_def (METADATA_FILE_EXT)), 
+				     g_strdup (ext + 1));
 	}
 
 	mimetype = tracker_file_get_mime_type (path);
 
-	g_hash_table_insert (metadata, METADATA_FILE_NAME, g_filename_display_basename (path));
-	g_hash_table_insert (metadata, METADATA_FILE_PATH, g_path_get_dirname (path));
-	g_hash_table_insert (metadata, METADATA_FILE_NAME_DELIMITED,
-			     g_filename_to_utf8 (path, -1, NULL, NULL, NULL));
-	g_hash_table_insert (metadata, METADATA_FILE_MIMETYPE, mimetype);
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_NAME), 
+				 g_filename_display_basename (path));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_PATH),
+				 g_path_get_dirname (path));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_NAME_DELIMITED),
+				 g_filename_to_utf8 (path, -1, NULL, NULL, NULL));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_MIMETYPE), 
+				 mimetype);
 
 	if (S_ISLNK (st.st_mode)) {
 		gchar *link_path;
 
 		link_path = g_file_read_link (path, NULL);
-		g_hash_table_insert (metadata, METADATA_FILE_LINK,
-				     g_filename_to_utf8 (link_path, -1, NULL, NULL, NULL));
+		insert_data_to_metadata (metadata, 
+					 tracker_ontology_get_field_def (METADATA_FILE_LINK),
+					 g_filename_to_utf8 (link_path, -1, NULL, NULL, NULL));
 		g_free (link_path);
 	}
 
 	/* FIXME: These should be dealt directly as integer/times/whatever, not strings */
-	g_hash_table_insert (metadata, METADATA_FILE_SIZE,
-			     tracker_uint_to_string (st.st_size));
-	g_hash_table_insert (metadata, METADATA_FILE_MODIFIED,
-			     tracker_uint_to_string (st.st_mtime));
-	g_hash_table_insert (metadata, METADATA_FILE_ACCESSED,
-			     tracker_uint_to_string (st.st_atime));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_SIZE),
+				 tracker_uint_to_string (st.st_size));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_MODIFIED),
+				 tracker_uint_to_string (st.st_mtime));
+	insert_data_to_metadata (metadata, 
+				 tracker_ontology_get_field_def (METADATA_FILE_ACCESSED),
+				 tracker_uint_to_string (st.st_atime));
 
 	tracker_metadata_get_embedded (path, mimetype, metadata);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]