tracker r1560 - in branches/xesam-support: . data/dbus src/libtracker-common src/tracker-indexer src/trackerd



Author: pvanhoof
Date: Mon Jun  2 16:25:51 2008
New Revision: 1560
URL: http://svn.gnome.org/viewvc/tracker?rev=1560&view=rev

Log:
2008-06-02  Philip Van Hoof  <pvanhoof gnome org>

	* Merged xesam-support with indexer-split
	* svn merge -r 1554:1559 ../indexer-split



Modified:
   branches/xesam-support/ChangeLog
   branches/xesam-support/data/dbus/tracker-indexer.xml
   branches/xesam-support/src/libtracker-common/tracker-file-utils.c
   branches/xesam-support/src/libtracker-common/tracker-file-utils.h
   branches/xesam-support/src/tracker-indexer/tracker-index.c
   branches/xesam-support/src/tracker-indexer/tracker-indexer-db.c
   branches/xesam-support/src/tracker-indexer/tracker-indexer-db.h
   branches/xesam-support/src/tracker-indexer/tracker-indexer.c
   branches/xesam-support/src/tracker-indexer/tracker-indexer.h
   branches/xesam-support/src/trackerd/tracker-db-sqlite.c
   branches/xesam-support/src/trackerd/tracker-dbus.c
   branches/xesam-support/src/trackerd/tracker-dbus.h
   branches/xesam-support/src/trackerd/tracker-main.c
   branches/xesam-support/src/trackerd/tracker-xesam-manager.c
   branches/xesam-support/src/trackerd/tracker-xesam-manager.h

Modified: branches/xesam-support/data/dbus/tracker-indexer.xml
==============================================================================
--- branches/xesam-support/data/dbus/tracker-indexer.xml	(original)
+++ branches/xesam-support/data/dbus/tracker-indexer.xml	Mon Jun  2 16:25:51 2008
@@ -19,5 +19,7 @@
 	 can add this later
       -->
     <signal name="Finished"/>
+    <signal name="IndexUpdated"/>
+
   </interface>
 </node>

Modified: branches/xesam-support/src/libtracker-common/tracker-file-utils.c
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-file-utils.c	(original)
+++ branches/xesam-support/src/libtracker-common/tracker-file-utils.c	Mon Jun  2 16:25:51 2008
@@ -422,7 +422,7 @@
 }
 
 void
-tracker_dir_remove (const gchar *uri)
+tracker_path_remove (const gchar *uri)
 {
 	GQueue *dirs;
 	GSList *dirs_to_remove = NULL;
@@ -463,7 +463,7 @@
 	g_queue_free (dirs);
 
 	/* Remove directories (now they are empty) */
-	g_slist_foreach (dirs_to_remove, (GFunc) g_rmdir, NULL);
+	g_slist_foreach (dirs_to_remove, (GFunc) g_remove, NULL);
 	g_slist_foreach (dirs_to_remove, (GFunc) g_free, NULL);
 	g_slist_free (dirs_to_remove);
 }

Modified: branches/xesam-support/src/libtracker-common/tracker-file-utils.h
==============================================================================
--- branches/xesam-support/src/libtracker-common/tracker-file-utils.h	(original)
+++ branches/xesam-support/src/libtracker-common/tracker-file-utils.h	Mon Jun  2 16:25:51 2008
@@ -36,6 +36,6 @@
 gchar *  tracker_file_get_vfs_path  (const gchar *uri);
 gchar *  tracker_file_get_vfs_name  (const gchar *uri);
 
-void     tracker_dir_remove         (const gchar *uri);
+void     tracker_path_remove        (const gchar *uri);
 
 #endif /* __LIBTRACKER_COMMON_FILE_UTILS_H__ */

Modified: branches/xesam-support/src/tracker-indexer/tracker-index.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-index.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-index.c	Mon Jun  2 16:25:51 2008
@@ -129,9 +129,12 @@
 		     gpointer user_data)
 {
 	GArray *array;
-	DEPOT *index;
-	gchar *word, *tmp;
-	gint table_size;
+	DEPOT  *index;
+	gchar  *word;
+#if 0
+	gchar *tmp;
+	gint   table_size;
+#endif
 
 	word = (gchar *) key;
 	array = (GArray *) value;

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer-db.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer-db.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer-db.c	Mon Jun  2 16:25:51 2008
@@ -523,6 +523,36 @@
 	return id;
 }
 
+
+guint32
+tracker_db_get_new_event_id (TrackerDBInterface *iface)
+{
+	TrackerDBResultSet *result_set;
+	gchar *id_str;
+	guint32 id;
+
+	result_set = tracker_db_interface_execute_procedure (iface, NULL, "GetNewEventID", NULL);
+
+	if (!result_set) {
+		g_critical ("Could not create event, GetNewEventID failed");
+		return 0;
+	}
+
+	tracker_db_result_set_get (result_set, 0, &id_str, -1);
+	g_object_unref (result_set);
+
+	id = atoi (id_str);
+	g_free (id_str);
+
+	id++;
+	id_str = tracker_int_to_string (id);
+
+	tracker_db_interface_execute_procedure (iface, NULL, "UpdateNewEventID", id_str, NULL);
+	g_free (id_str);
+
+	return id;
+}
+
 void
 tracker_db_increment_stats (TrackerDBInterface *iface,
 			    TrackerService     *service)
@@ -539,6 +569,30 @@
 	}
 }
 
+
+gboolean
+tracker_db_create_event (TrackerDBInterface *iface,
+			   guint32 id, 
+			   guint32 service_id, 
+			   const gchar *type)
+{
+	gchar *id_str, *service_id_str;
+
+	id_str = tracker_guint32_to_string (id);
+	service_id_str = tracker_guint32_to_string (service_id);
+
+	tracker_db_interface_execute_procedure (iface, NULL, "CreateEvent", 
+						id_str,
+						service_id_str,
+						type,
+						NULL);
+
+	g_free (id_str);
+	g_free (service_id_str);
+
+	return TRUE;
+}
+
 gboolean
 tracker_db_create_service (TrackerDBInterface *iface,
 			   guint32             id,
@@ -581,6 +635,11 @@
 						    id);
 	}
 
+	g_free (id_str);
+	g_free (service_type_id_str);
+	g_free (dirname);
+	g_free (basename);
+
 	return TRUE;
 }
 
@@ -762,6 +821,39 @@
 	}
 }
 
+static void
+load_sql_file (TrackerDBInterface *iface,
+	       const gchar        *file,
+	       const gchar        *delimiter)
+{
+	gchar *path, *content, **queries;
+	gint i;
+
+	path = tracker_db_manager_get_sql_file (file);
+
+	if (!delimiter) {
+		delimiter = ";";
+	}
+
+	if (!g_file_get_contents (path, &content, NULL, NULL)) {
+		g_critical ("Cannot read SQL file:'%s', please reinstall tracker"
+			    " or check read permissions on the file if it exists", file);
+		g_assert_not_reached ();
+	}
+
+	queries = g_strsplit (content, delimiter, -1);
+
+	for (i = 0; queries[i]; i++) {
+		tracker_db_interface_execute_query (iface, NULL, queries[i]);
+	}
+
+	g_message ("Loaded SQL file:'%s'", file);
+
+	g_strfreev (queries);
+	g_free (content);
+	g_free (path);
+}
+
 TrackerDBInterface *
 tracker_indexer_db_get_common (void)
 {
@@ -786,8 +878,14 @@
 {
 	TrackerDBInterface *interface;
 	const gchar *path;
+	gboolean create = FALSE;
 
 	path = tracker_db_manager_get_file (TRACKER_DB_FILE_META);
+
+	if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+		create = TRUE;
+	}
+
 	interface = tracker_db_interface_sqlite_new (path);
 	tracker_db_interface_set_procedure_table (interface, prepared_queries);
 
@@ -796,5 +894,11 @@
 		    tracker_db_manager_get_page_size (TRACKER_DB_FILE_META),
 		    tracker_db_manager_get_add_functions (TRACKER_DB_FILE_META));
 
+	if (create) {
+		load_sql_file (interface, "sqlite-service.sql", NULL);
+		load_sql_file (interface, "sqlite-service-triggers.sql", "!");
+		load_sql_file (interface, "sqlite-metadata.sql", NULL);
+	}
+
 	return interface;
 }

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer-db.h
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer-db.h	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer-db.h	Mon Jun  2 16:25:51 2008
@@ -30,6 +30,7 @@
 TrackerDBInterface * tracker_indexer_db_get_file_metadata     (void);
 
 guint32              tracker_db_get_new_service_id            (TrackerDBInterface *iface);
+guint32              tracker_db_get_new_event_id              (TrackerDBInterface *iface);
 void                 tracker_db_increment_stats               (TrackerDBInterface *iface,
 							       TrackerService     *service);
 
@@ -42,6 +43,10 @@
 							       guint32             id,
 							       TrackerField       *field,
 							       const gchar        *value);
+gboolean             tracker_db_create_event                  (TrackerDBInterface *iface,
+							       guint32 id, 
+							       guint32 service_id, 
+							       const gchar *type);
 
 G_END_DECLS
 

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer.c	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer.c	Mon Jun  2 16:25:51 2008
@@ -110,6 +110,7 @@
 
 enum {
 	FINISHED,
+	INDEX_UPDATED,
 	LAST_SIGNAL
 };
 
@@ -232,6 +233,15 @@
 					   g_cclosure_marshal_VOID__VOID,
 					   G_TYPE_NONE, 0);
 
+	
+	signals [INDEX_UPDATED] = g_signal_new ("index-updated",
+					   G_OBJECT_CLASS_TYPE (object_class),
+					   G_SIGNAL_RUN_LAST,
+					   G_STRUCT_OFFSET (TrackerIndexerClass, index_updated),
+					   NULL, NULL,
+					   g_cclosure_marshal_VOID__VOID,
+					   G_TYPE_NONE, 0);
+
 	g_object_class_install_property (object_class,
 					 PROP_RUNNING,
 					 g_param_spec_boolean ("running",
@@ -259,8 +269,12 @@
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 
-	if (priv->reindex) {
-		tracker_dir_remove (priv->db_dir);
+	if (priv->reindex || !g_file_test (priv->db_dir, G_FILE_TEST_IS_DIR)) {
+		tracker_path_remove (priv->db_dir);
+	}
+
+	if (!g_file_test (priv->db_dir, G_FILE_TEST_EXISTS)) {
+		g_mkdir_with_parents (priv->db_dir, 00755);
 	}
 
 	index_file = g_build_filename (priv->db_dir, "file-index.db", NULL);
@@ -445,12 +459,13 @@
 		id = tracker_db_get_new_service_id (priv->common);
 
 		if (tracker_db_create_service (priv->metadata, id, service, info->path, metadata)) {
-			tracker_db_increment_stats (priv->common, service);
+			guint32 eid;
 
-			/* FIXME
-			if (tracker_config_get_enable_xesam (tracker->config))
-				tracker_db_create_event (db_con, id, "Create");
-			*/
+			eid = tracker_db_get_new_event_id (priv->common);
+
+			tracker_db_create_event (priv->common, eid, id, "Create");
+
+			tracker_db_increment_stats (priv->common, service);
 
 			index_metadata (indexer, id, service, metadata);
 		}
@@ -525,6 +540,7 @@
 	g_strfreev (dirs);
 }
 
+
 static gboolean
 indexing_func (gpointer data)
 {
@@ -558,6 +574,8 @@
 		}
 
 		process_module (indexer, priv->current_module->data);
+
+		g_signal_emit (indexer, signals[INDEX_UPDATED], 0);
 	}
 
 	return TRUE;

Modified: branches/xesam-support/src/tracker-indexer/tracker-indexer.h
==============================================================================
--- branches/xesam-support/src/tracker-indexer/tracker-indexer.h	(original)
+++ branches/xesam-support/src/tracker-indexer/tracker-indexer.h	Mon Jun  2 16:25:51 2008
@@ -48,6 +48,7 @@
 	GObjectClass parent_class;
 
 	void (*finished) (TrackerIndexer *indexer);
+	void (*index_updated) (TrackerIndexer *indexer);
 };
 
 GType           tracker_indexer_get_type    (void) G_GNUC_CONST;

Modified: branches/xesam-support/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-db-sqlite.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-db-sqlite.c	Mon Jun  2 16:25:51 2008
@@ -46,7 +46,6 @@
 #include "tracker-utils.h"
 #include "tracker-watch.h"
 #include "tracker-query-tree.h"
-#include "tracker-xesam-manager.h"
 #include "tracker-xesam-ontology.h"
 
 #define MAX_INDEX_TEXT_LENGTH 1048576
@@ -3474,6 +3473,7 @@
 	tracker_exec_proc_no_reply (db_con->db, "DeleteHandledEvents", NULL);
 }
 
+/* Deprecated */
 static guint32
 tracker_db_create_event (DBConnection *db_con, const gchar *service_id_str, const gchar *type)
 {
@@ -3507,13 +3507,12 @@
 	if (result_set)
 		g_object_unref (result_set);
 
-	tracker_xesam_manager_wakeup (id);
-
 	g_free (eid);
 
 	return id;
 }
 
+/* Deprecated */
 guint32
 tracker_db_create_service (DBConnection *db_con, const char *service, TrackerDBFileInfo *info)
 {

Modified: branches/xesam-support/src/trackerd/tracker-dbus.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-dbus.c	Mon Jun  2 16:25:51 2008
@@ -19,8 +19,6 @@
  * Boston, MA  02110-1301, USA.
  */
 
-#include <dbus/dbus-glib-bindings.h>
-
 #include <libtracker-common/tracker-log.h>
 #include <libtracker-common/tracker-config.h>
 #include <libtracker-common/tracker-utils.h>
@@ -323,14 +321,14 @@
         return NULL;
 }
 
-void
+DBusGProxy *
 tracker_dbus_start_indexer (void)
 {
 	GError *error = NULL;
 
 	if (!connection) {
 		g_critical ("DBus support must be initialized before starting the indexer!");
-		return;
+		return NULL;
 	}
 
 	if (!proxy_for_indexer) {
@@ -342,7 +340,7 @@
 		
 		if (!proxy_for_indexer) {
 			g_critical ("Couldn't create a DBusGProxy to the indexer service");
-			return;
+			return NULL;
 		}
 	}
 
@@ -354,4 +352,6 @@
 		g_warning ("Couldn't start indexer, %s",
 			   error->message);
 	}
+	
+	return proxy_for_indexer;
 }

Modified: branches/xesam-support/src/trackerd/tracker-dbus.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-dbus.h	(original)
+++ branches/xesam-support/src/trackerd/tracker-dbus.h	Mon Jun  2 16:25:51 2008
@@ -25,6 +25,7 @@
 #include <glib.h>
 
 #include <libtracker-common/tracker-config.h>
+#include <dbus/dbus-glib-bindings.h>
 
 #include <libtracker-db/tracker-db-interface.h>
 
@@ -32,11 +33,11 @@
 
 G_BEGIN_DECLS
 
-gboolean tracker_dbus_init             (TrackerConfig *config);
-void     tracker_dbus_shutdown         (void);
-gboolean tracker_dbus_register_objects (Tracker       *tracker);
-GObject *tracker_dbus_get_object       (GType          type);
-void     tracker_dbus_start_indexer    (void);
+gboolean    tracker_dbus_init             (TrackerConfig *config);
+void        tracker_dbus_shutdown         (void);
+gboolean    tracker_dbus_register_objects (Tracker       *tracker);
+GObject    *tracker_dbus_get_object       (GType          type);
+DBusGProxy *tracker_dbus_start_indexer    (void);
 
 G_END_DECLS
 

Modified: branches/xesam-support/src/trackerd/tracker-main.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-main.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-main.c	Mon Jun  2 16:25:51 2008
@@ -503,21 +503,21 @@
 	
 	/* Remove an existing one */
 	if (g_file_test (sys_tmp_dir, G_FILE_TEST_EXISTS)) {
-		tracker_dir_remove (sys_tmp_dir);
+		tracker_path_remove (sys_tmp_dir);
 	}
 
 	/* Remove old tracker dirs */
         filename = g_build_filename (g_get_home_dir (), ".Tracker", NULL);
 
 	if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
-		tracker_dir_remove (filename);
+		tracker_path_remove (filename);
 	}
 
 	g_free (filename);
 
 	/* Remove database if we are reindexing */
 	if (reindex || tracker_db_needs_setup ()) {
-		tracker_dir_remove (data_dir);
+		tracker_path_remove (data_dir);
 		*need_index = TRUE;
 	}
 
@@ -792,16 +792,17 @@
 {
 	/* If we are reindexing, just remove the databases */
 	if (tracker->reindex) {
-		tracker_dir_remove (data_dir);
+		tracker_path_remove (data_dir);
 		g_mkdir_with_parents (data_dir, 00755);
 	}
 
 	/* Remove sys tmp directory */
 	if (sys_tmp_dir) {
-		tracker_dir_remove (sys_tmp_dir);
+		tracker_path_remove (sys_tmp_dir);
 	}
 }
 
+
 gint
 main (gint argc, gchar *argv[])
 {
@@ -998,8 +999,10 @@
 			}
 			
 			if (tracker->is_running && !tracker->shutdown) {
+				DBusGProxy *proxy;
 				g_message ("Indexing enabled, starting...");
-				tracker_dbus_start_indexer ();
+				proxy = tracker_dbus_start_indexer ();
+				tracker_xesam_subscribe_indexer_updated (proxy);
 			}
 
 #if 0

Modified: branches/xesam-support/src/trackerd/tracker-xesam-manager.c
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-manager.c	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-manager.c	Mon Jun  2 16:25:51 2008
@@ -34,6 +34,8 @@
 static gchar      *xesam_dir;
 static gboolean    live_search_handler_running = FALSE;
 
+static void tracker_xesam_manager_wakeup (gpointer user_data);
+
 GQuark
 tracker_xesam_manager_error_quark (void)
 {
@@ -57,8 +59,55 @@
 						g_str_equal, 
 						(GDestroyNotify) g_free, 
 						(GDestroyNotify) g_object_unref);
-	
+
 	xesam_dir = g_build_filename (g_get_home_dir (), ".xesam", NULL);
+
+}
+
+static void 
+tracker_xesam_manager_finished (DBusGProxy *proxy)
+{
+	dbus_g_proxy_disconnect_signal (proxy, 
+			"IndexUpdated",
+			G_CALLBACK (tracker_xesam_manager_wakeup),
+			NULL);
+
+	dbus_g_proxy_disconnect_signal (proxy, 
+			"Finished",
+			G_CALLBACK (tracker_xesam_manager_finished),
+			NULL);
+}
+
+void 
+tracker_xesam_subscribe_indexer_updated (DBusGProxy *proxy) 
+{
+	dbus_g_proxy_add_signal (proxy, "Finished",
+			   G_TYPE_INVALID,
+			   G_SIGNAL_RUN_LAST,
+			   NULL,
+			   NULL, NULL,
+			   g_cclosure_marshal_VOID__VOID,
+			   G_TYPE_NONE, 0);
+
+	dbus_g_proxy_add_signal (proxy, "IndexUpdated",
+			   G_TYPE_INVALID,
+			   G_SIGNAL_RUN_LAST,
+			   NULL,
+			   NULL, NULL,
+			   g_cclosure_marshal_VOID__VOID,
+			   G_TYPE_NONE, 0);
+
+	dbus_g_proxy_connect_signal (proxy, 
+			"Finished",
+			G_CALLBACK (tracker_xesam_manager_finished),
+			g_object_ref (proxy),
+			(GClosureNotify) g_object_unref);
+
+	dbus_g_proxy_connect_signal (proxy, 
+			"IndexUpdated",
+			G_CALLBACK (tracker_xesam_manager_wakeup),
+			g_object_ref (proxy),
+			(GClosureNotify) g_object_unref);
 }
 
 void
@@ -293,8 +342,8 @@
 	live_search_handler_running = FALSE;
 }
 
-void 
-tracker_xesam_manager_wakeup (guint32 last_id)
+static void 
+tracker_xesam_manager_wakeup (gpointer user_data)
 {
 	/* This happens each time a new event is created */
 

Modified: branches/xesam-support/src/trackerd/tracker-xesam-manager.h
==============================================================================
--- branches/xesam-support/src/trackerd/tracker-xesam-manager.h	(original)
+++ branches/xesam-support/src/trackerd/tracker-xesam-manager.h	Mon Jun  2 16:25:51 2008
@@ -61,9 +61,9 @@
 TrackerXesamLiveSearch* 
          tracker_xesam_manager_get_live_search        (const gchar             *search_id,
 						       GError                 **error);
-void     tracker_xesam_manager_wakeup                 (guint32                  last_id);
 gchar *  tracker_xesam_manager_generate_unique_key    (void);
 gboolean tracker_xesam_manager_is_uri_in_xesam_dir    (const gchar             *uri);
+void     tracker_xesam_subscribe_indexer_updated      (DBusGProxy *proxy);
 
 G_END_DECLS
 



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