tracker r1871 - in branches/indexer-split: . src/libtracker-db src/trackerd



Author: mr
Date: Mon Jul 14 13:28:16 2008
New Revision: 1871
URL: http://svn.gnome.org/viewvc/tracker?rev=1871&view=rev

Log:
	* src/trackerd/tracker-crawler.c: Added a signal to know when all
	items have been sent to the indexer.


Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-db/tracker-db-manager.c
   branches/indexer-split/src/libtracker-db/tracker-db-manager.h
   branches/indexer-split/src/trackerd/tracker-crawler.c
   branches/indexer-split/src/trackerd/tracker-daemon.c
   branches/indexer-split/src/trackerd/tracker-daemon.h
   branches/indexer-split/src/trackerd/tracker-db.c
   branches/indexer-split/src/trackerd/tracker-db.h
   branches/indexer-split/src/trackerd/tracker-dbus.c
   branches/indexer-split/src/trackerd/tracker-dbus.h
   branches/indexer-split/src/trackerd/tracker-main.c
   branches/indexer-split/src/trackerd/tracker-main.h
   branches/indexer-split/src/trackerd/tracker-processor.c
   branches/indexer-split/src/trackerd/tracker-processor.h
   branches/indexer-split/src/trackerd/tracker-search.c
   branches/indexer-split/src/trackerd/tracker-search.h
   branches/indexer-split/src/trackerd/tracker-status.c
   branches/indexer-split/src/trackerd/tracker-status.h
   branches/indexer-split/src/trackerd/tracker-utils.c
   branches/indexer-split/src/trackerd/tracker-utils.h

Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.c	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.c	Mon Jul 14 13:28:16 2008
@@ -2150,6 +2150,20 @@
 	return NULL;
 }
 
+static void
+db_manager_remove_all (void)
+{
+	guint i;
+
+	g_message ("Removing all database files");
+
+	for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
+		g_message ("Removing database:'%s'", 
+			   dbs[i].abs_filename);
+		g_unlink (dbs[i].abs_filename);
+	}
+}
+
 GType
 tracker_db_get_type (void)
 {
@@ -2298,13 +2312,12 @@
 			*first_time = TRUE;
 		}
 
-		g_message ("Removing database files for reindex");
-
-		for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
-			g_message ("Removing database:'%s'", 
-				   dbs[i].abs_filename);
-			g_unlink (dbs[i].abs_filename);
-		}
+		/* We call an internal version of this function here
+		 * because at the time 'initialized' = FALSE and that
+		 * will cause errors and do nothing.
+		 */
+		g_message ("Cleaning up database files for reindex");
+		db_manager_remove_all ();
 
 		/* In cases where we re-init this module, make sure
 		 * we have cleaned up the ontology before we load all
@@ -2412,6 +2425,14 @@
         initialized = FALSE;
 }
 
+void
+tracker_db_manager_remove_all (void)
+{
+	g_return_if_fail (initialized != FALSE);
+
+	db_manager_remove_all ();
+}
+
 const gchar *
 tracker_db_manager_get_file (TrackerDB db) 
 {
@@ -2556,28 +2577,3 @@
 
 	return iface;
 }
-
-/*
-TrackerDBInterface *
-tracker_db_manager_get_db_interface_content (TrackerDBInterface *iface)
-{
-	guint i;
-
-	g_return_val_if_fail (initialized != FALSE, NULL);
-	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
-
-        for (i = 0; i < G_N_ELEMENTS (dbs); i++) {
-		if (dbs[i].iface != iface) {
-			continue;
-		}
-
-		if (i == TRACKER_DB_FILE_METADATA) { 
-			return tracker_db_manager_get_db_interface (TRACKER_DB_FILE_CONTENTS);
-		} else if (i == TRACKER_DB_EMAIL_METADATA) { 
-			return tracker_db_manager_get_db_interface (TRACKER_DB_EMAIL_CONTENTS);
-		}
-	}	
-
-	return NULL;
-}
-*/

Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.h	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.h	Mon Jul 14 13:28:16 2008
@@ -55,6 +55,7 @@
 							     gboolean              *first_time);
 void         tracker_db_manager_shutdown                    (void);
 
+void         tracker_db_manager_remove_all                  (void);
 void         tracker_db_manager_close_all                   (void);
 
 const gchar *tracker_db_manager_get_file                    (TrackerDB              db);
@@ -64,10 +65,7 @@
              tracker_db_manager_get_db_interfaces           (gint num, ...);
 TrackerDBInterface *
              tracker_db_manager_get_db_interface_by_service (const gchar           *service);
-/*
-TrackerDBInterface *
-             tracker_db_manager_get_db_interface_content    (TrackerDBInterface    *iface);
-*/
+
 G_END_DECLS
 
 #endif /* __TRACKER_DB_MANAGER_H__ */

Modified: branches/indexer-split/src/trackerd/tracker-crawler.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-crawler.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-crawler.c	Mon Jul 14 13:28:16 2008
@@ -81,6 +81,7 @@
 };
 
 enum {
+	ALL_SENT,
 	FINISHED,
 	LAST_SIGNAL
 };
@@ -110,6 +111,15 @@
 
 	object_class->finalize = crawler_finalize;
 
+	signals[ALL_SENT] = 
+		g_signal_new ("all-sent",
+			      G_TYPE_FROM_CLASS (klass),
+			      G_SIGNAL_RUN_LAST,
+			      0,
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 
+			      0);
 	signals[FINISHED] = 
 		g_signal_new ("finished",
 			      G_TYPE_FROM_CLASS (klass),
@@ -592,7 +602,10 @@
 
 	if (!queue || !module_name) {
 		g_message ("No file queues to process");
+
+		g_signal_emit (crawler, signals[ALL_SENT], 0);
 		crawler->private->files_queue_handle_id = 0;
+
 		return FALSE;
 	}
 

Modified: branches/indexer-split/src/trackerd/tracker-daemon.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-daemon.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-daemon.c	Mon Jul 14 13:28:16 2008
@@ -35,22 +35,18 @@
 #include "tracker-dbus.h"
 #include "tracker-daemon.h"
 #include "tracker-db.h"
+#include "tracker-main.h"
 #include "tracker-status.h"
 #include "tracker-marshal.h"
 
 #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_DAEMON, TrackerDaemonPriv))
 
 typedef struct {
-	DBusGProxy    *fd_proxy;
-	TrackerConfig *config;
-	Tracker       *tracker;
-} TrackerDaemonPriv;
+	DBusGProxy       *fd_proxy;
 
-enum {
-	PROP_0,
-	PROP_CONFIG,
-	PROP_TRACKER
-};
+	TrackerConfig    *config;
+	TrackerProcessor *processor;
+} TrackerDaemonPriv;
 
 enum {
         DAEMON_INDEX_STATE_CHANGE,
@@ -59,11 +55,7 @@
         LAST_SIGNAL
 };
 
-static void daemon_finalize     (GObject      *object);
-static void daemon_set_property (GObject      *object,
-				 guint         param_id,
-				 const GValue *value,
-				 GParamSpec   *pspec);
+static void daemon_finalize (GObject *object);
 
 static guint signals[LAST_SIGNAL] = {0};
 
@@ -77,21 +69,6 @@
 	object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = daemon_finalize;
-	object_class->set_property = daemon_set_property;
-
-	g_object_class_install_property (object_class,
-					 PROP_CONFIG,
-					 g_param_spec_object ("config",
-							      "Config",
-							      "TrackerConfig object",
-							      tracker_config_get_type (),
-							      G_PARAM_WRITABLE));
-	g_object_class_install_property (object_class,
-					 PROP_TRACKER,
-					 g_param_spec_pointer ("tracker",
-							       "Tracker",
-							       "Tracker object",
-							       G_PARAM_WRITABLE));
 
         signals[DAEMON_INDEX_STATE_CHANGE] =
                 g_signal_new ("index-state-change",
@@ -101,13 +78,13 @@
                               NULL, NULL,
                               tracker_marshal_VOID__STRING_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN_BOOLEAN,
                               G_TYPE_NONE,
-                              7, 
-			      G_TYPE_STRING, 
-			      G_TYPE_BOOLEAN, 
-			      G_TYPE_BOOLEAN, 
+                              7,
+			      G_TYPE_STRING,
+			      G_TYPE_BOOLEAN,
+			      G_TYPE_BOOLEAN,
+			      G_TYPE_BOOLEAN,
+			      G_TYPE_BOOLEAN,
 			      G_TYPE_BOOLEAN,
-			      G_TYPE_BOOLEAN, 
-			      G_TYPE_BOOLEAN, 
 			      G_TYPE_BOOLEAN);
         signals[DAEMON_INDEX_FINISHED] =
                 g_signal_new ("index-finished",
@@ -117,7 +94,7 @@
                               NULL, NULL,
                               g_cclosure_marshal_VOID__INT,
                               G_TYPE_NONE,
-                              1, 
+                              1,
 			      G_TYPE_INT);
         signals[DAEMON_INDEX_PROGRESS] =
                 g_signal_new ("index-progress",
@@ -127,9 +104,9 @@
                               NULL, NULL,
                               tracker_marshal_VOID__STRING_STRING_INT_INT_INT,
                               G_TYPE_NONE,
-                              5, 
-			      G_TYPE_STRING, 
-			      G_TYPE_STRING, 
+                              5,
+			      G_TYPE_STRING,
+			      G_TYPE_STRING,
 			      G_TYPE_INT,
 			      G_TYPE_INT,
 			      G_TYPE_INT);
@@ -146,114 +123,46 @@
 daemon_finalize (GObject *object)
 {
 	TrackerDaemonPriv *priv;
-	
+
 	priv = GET_PRIV (object);
 
 	if (priv->fd_proxy) {
 		g_object_unref (priv->fd_proxy);
 	}
 
-	if (priv->config) {
-		g_object_unref (priv->config);
-	}
+	g_object_unref (priv->processor);
+	g_object_unref (priv->config);
 
 	G_OBJECT_CLASS (tracker_daemon_parent_class)->finalize (object);
 }
 
-static void
-daemon_set_property (GObject      *object,
-		     guint	   param_id,
-		     const GValue *value,
-		     GParamSpec   *pspec)
-{
-	TrackerDaemonPriv *priv;
-
-	priv = GET_PRIV (object);
-
-	switch (param_id) {
-	case PROP_CONFIG:
-		tracker_daemon_set_config (TRACKER_DAEMON (object),
-					   g_value_get_object (value));
-		break;
-	case PROP_TRACKER:
-		tracker_daemon_set_tracker (TRACKER_DAEMON (object),
-					    g_value_get_pointer (value));
-		break;
-
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-		break;
-	};
-}
-
 TrackerDaemon *
-tracker_daemon_new (TrackerConfig *config,
-		    Tracker       *tracker)
+tracker_daemon_new (TrackerConfig    *config,
+		    TrackerProcessor *processor)
 {
-	TrackerDaemon *object;
+	TrackerDaemon     *object;
+	TrackerDaemonPriv *priv;
 
 	g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), NULL);
 
-	object = g_object_new (TRACKER_TYPE_DAEMON, 
-			       "config", config,
-			       "tracker", tracker,
-			       NULL);
-	
-	return object;
-}
-
-void
-tracker_daemon_set_config (TrackerDaemon *object,
-			   TrackerConfig *config)
-{
-	TrackerDaemonPriv *priv;
-
-	g_return_if_fail (TRACKER_IS_DAEMON (object));
-	g_return_if_fail (TRACKER_IS_CONFIG (config));
+	object = g_object_new (TRACKER_TYPE_DAEMON, NULL);
 
 	priv = GET_PRIV (object);
 
-	/* Ref now in case it is the same object we are about to
-	 * unref.
-	 */
-	g_object_ref (config);
-
-	if (priv->config) {
-		g_object_unref (priv->config);
-	}
-
-	if (config) {
-		priv->config = config;
-	} else {
-		priv->config = NULL;
-	}
-
-	g_object_notify (G_OBJECT (object), "config");
-}
-
-void
-tracker_daemon_set_tracker (TrackerDaemon *object,
-			    Tracker       *tracker)
-{
-	TrackerDaemonPriv *priv;
+	priv->config = g_object_ref (config);
+	priv->processor = g_object_ref (processor);
 
-	g_return_if_fail (TRACKER_IS_DAEMON (object));
-	g_return_if_fail (tracker != NULL);
-
-	priv = GET_PRIV (object);
-
-	priv->tracker = tracker;
-	
-	g_object_notify (G_OBJECT (object), "tracker");
+	return object;
 }
 
 /*
  * Functions
  */
 void
-tracker_daemon_get_version (TrackerDaemon         *object,
-			    DBusGMethodInvocation *context,
-			    GError **error)
+tracker_daemon_get_version (TrackerDaemon          *object,
+			    DBusGMethodInvocation  *context,
+			    GError                **error)
 {
 	guint  request_id;
 	gint   major = 0;
@@ -267,7 +176,7 @@
         tracker_dbus_request_new (request_id,
 				  "DBus request to get daemon version");
 
-	
+
 	sscanf (VERSION, "%d.%d.%d", &major, &minor, &revision);
 	str = g_strdup_printf ("%d%d%d", major, minor, revision);
 	version = atoi (str);
@@ -279,9 +188,9 @@
 }
 
 void
-tracker_daemon_get_status (TrackerDaemon         *object,
-			   DBusGMethodInvocation *context, 
-			   GError **error)
+tracker_daemon_get_status (TrackerDaemon          *object,
+			   DBusGMethodInvocation  *context,
+			   GError                **error)
 {
 	TrackerDaemonPriv *priv;
 	gchar             *status;
@@ -363,7 +272,7 @@
 	/* Here it doesn't matter which one we ask, as long as it has common.db
 	 * attached. The service ones are cached connections, so we can use
 	 * those instead of asking for an individual-file connection (like what
-	 * the original code had) 
+	 * the original code had)
 	 */
 
 	/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
@@ -394,12 +303,11 @@
 {
 	TrackerDaemonPriv *priv;
 	guint              request_id;
-	gboolean           signal_state_change = FALSE;
-	GError             *actual_error = NULL;
+	GError            *actual_error = NULL;
 
 	/* FIXME: Shouldn't we just make the TrackerConfig module a
 	 * DBus object instead so values can be tweaked in real time
-	 * over the bus? 
+	 * over the bus?
 	 */
 
 	request_id = tracker_dbus_get_next_request_id ();
@@ -415,20 +323,19 @@
 				  value ? "true" : "false");
 
 	if (strcasecmp (option, "Pause") == 0) {
-		signal_state_change = TRUE;
-		priv->tracker->pause_manual = value;
-	
-		if (value) {
-			g_message ("Tracker daemon has been paused by user");
-		} else {
-			g_message ("Tracker daemon has been resumed by user");
-		}
+		tracker_set_is_paused_manually (value);
 	} else if (strcasecmp (option, "FastMerges") == 0) {
                 tracker_config_set_fast_merges (priv->config, value);
                 g_message ("Fast merges set to %d", value);
 	} else if (strcasecmp (option, "EnableIndexing") == 0) {
-		signal_state_change = TRUE;
+		/* FIXME: Ideally we should be picking up the
+		 * "nofify::enable-indexing" change on the
+		 * priv->config in the tracker-main.c module to do
+		 * the signal change and to set the daemon to
+		 * readonly mode.
+		 */
                 tracker_config_set_enable_indexing (priv->config, value);
+		tracker_set_is_readonly (value);
 		g_message ("Enable indexing set to %d", value);
 	} else if (strcasecmp (option, "EnableWatching") == 0) {
                 tracker_config_set_enable_watches (priv->config, value);
@@ -438,10 +345,10 @@
 		g_message ("Extra memory usage set to %d", !value);
 	} else if (strcasecmp (option, "IndexFileContents") == 0) {
                 tracker_config_set_enable_content_indexing (priv->config, value);
-		g_message ("Index file contents set to %d", value);	
+		g_message ("Index file contents set to %d", value);
 	} else if (strcasecmp (option, "GenerateThumbs") == 0) {
                 tracker_config_set_enable_thumbnails (priv->config, value);
-		g_message ("Generate thumbnails set to %d", value);	
+		g_message ("Generate thumbnails set to %d", value);
 	} else if (strcasecmp (option, "IndexMountedDirectories") == 0) {
                 tracker_config_set_index_mounted_directories (priv->config, value);
 		g_message ("Indexing mounted directories set to %d", value);
@@ -455,25 +362,12 @@
                 tracker_config_set_disable_indexing_on_battery_init (priv->config, !value);
 		g_message ("Disable initial index sweep on battery set to %d", !value);
 	} else {
-		g_set_error (&actual_error, 
-			     TRACKER_DBUS_ERROR, 
+		g_set_error (&actual_error,
+			     TRACKER_DBUS_ERROR,
 			     0,
 			     "Option does not exist");
 	}
 
-	if (signal_state_change) {
-		/* Signal state change */
-		g_signal_emit_by_name (object, 
-				       "index-state-change", 
-				       tracker_status_get_as_string (),
-				       priv->tracker->first_time_index,
-				       priv->tracker->in_merge,
-				       priv->tracker->pause_manual,
-				       tracker_should_pause_on_battery (),
-				       priv->tracker->pause_io,
-				       tracker_config_get_enable_indexing (priv->config));
-	}
-
 	if (!actual_error) {
 		dbus_g_method_return (context);
 	} else {
@@ -497,7 +391,7 @@
 
 	/* FIXME: Shouldn't we just make the TrackerConfig module a
 	 * DBus object instead so values can be tweaked in real time
-	 * over the bus? 
+	 * over the bus?
 	 */
 
 	request_id = tracker_dbus_get_next_request_id ();
@@ -522,8 +416,8 @@
                 tracker_config_set_max_words_to_index (priv->config, value);
 		g_message ("Maxinum number of unique words set to %d", value);
 	} else {
-		g_set_error (&actual_error, 
-			     TRACKER_DBUS_ERROR, 
+		g_set_error (&actual_error,
+			     TRACKER_DBUS_ERROR,
 			     0,
 			     "Option does not exist");
 	}
@@ -558,7 +452,7 @@
 
 	g_message ("Tracker daemon attempting to shutdown");
 
-	priv->tracker->reindex = reindex;
+	tracker_set_reindex_on_shutdown (reindex);
 
 	g_timeout_add (500, (GSourceFunc) tracker_shutdown, NULL);
 
@@ -583,32 +477,29 @@
 	priv = GET_PRIV (object);
 
 	/* Signal state change */
-	g_signal_emit_by_name (object, 
-			       "index-state-change", 
-			       tracker_status_get_as_string (),
-			       priv->tracker->first_time_index,
-			       priv->tracker->in_merge,
-			       priv->tracker->pause_manual,
-			       tracker_should_pause_on_battery (),
-			       priv->tracker->pause_io,
-			       tracker_config_get_enable_indexing (priv->config));
+	tracker_status_signal ();
 
         /* Signal progress */
-        g_signal_emit_by_name (object, 
-			       "index-progress", 
-                               "Files",                     
+        g_signal_emit_by_name (object,
+			       "index-progress",
+                               "Files",
                                "",
-                               priv->tracker->index_count,        
-                               priv->tracker->folders_processed,  
-                               priv->tracker->folders_count);     
-
+                               tracker_processor_get_files_total (priv->processor),
+                               tracker_processor_get_directories_found (priv->processor),
+                               tracker_processor_get_directories_total (priv->processor));
+
+#if 1
+	/* FIXME: We need a way of knowing WHAT service we have a
+	 * count for, i.e. emails, files, etc.
+	 */
         g_signal_emit_by_name (object,
-			       "index-progress", 
-                               "Emails",                
+			       "index-progress",
+                               "Emails",
                                "",
-                               priv->tracker->index_count,    
-                               priv->tracker->mbox_processed, 
-                               priv->tracker->mbox_count);    
+                               0,  /*priv->tracker->index_count,*/
+                               0,  /*priv->tracker->mbox_processed,*/
+                               0); /*priv->tracker->mbox_count);*/
+#endif
 
 	dbus_g_method_return (context);
 

Modified: branches/indexer-split/src/trackerd/tracker-daemon.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-daemon.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-daemon.h	Mon Jul 14 13:28:16 2008
@@ -26,7 +26,7 @@
 
 #include <libtracker-common/tracker-config.h>
 
-#include "tracker-main.h"
+#include "tracker-processor.h"
 
 #define TRACKER_DAEMON_SERVICE         "org.freedesktop.Tracker"
 #define TRACKER_DAEMON_PATH            "/org/freedesktop/Tracker"
@@ -54,11 +54,7 @@
 
 GType          tracker_daemon_get_type             (void);
 TrackerDaemon *tracker_daemon_new                  (TrackerConfig         *config,
-						    Tracker               *tracker);
-void           tracker_daemon_set_config           (TrackerDaemon         *object,
-						    TrackerConfig         *config);
-void           tracker_daemon_set_tracker          (TrackerDaemon         *object,
-						    Tracker               *tracker);
+						    TrackerProcessor      *processor);
 void           tracker_daemon_get_version          (TrackerDaemon         *object,
 						    DBusGMethodInvocation *context,
 						    GError **error);

Modified: branches/indexer-split/src/trackerd/tracker-db.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-db.c	Mon Jul 14 13:28:16 2008
@@ -32,6 +32,7 @@
 
 #include <libtracker-common/tracker-file-utils.h> 
 #include <libtracker-common/tracker-nfs-lock.h>
+#include <libtracker-common/tracker-parser.h>
 #include <libtracker-common/tracker-type-utils.h>
 #include <libtracker-common/tracker-utils.h>
 
@@ -44,9 +45,13 @@
 #include "tracker-xesam-manager.h"
 #include "tracker-main.h"
 
-#define ZLIBBUFSIZ            8192
+#define ZLIBBUFSIZ 8192
 
-extern Tracker *tracker;
+static gboolean         initialized;
+
+static TrackerConfig   *config;
+static TrackerLanguage *language;
+static TrackerIndexer  *file_index;
 
 static gchar *
 compress_string (const gchar *ptr, 
@@ -228,10 +233,10 @@
 		old_table = tracker_parser_text (old_table, 
 						 old_value, 
 						 tracker_field_get_weight (def), 
-						 tracker->language, 
- 						 tracker_config_get_max_words_to_index (tracker->config),
- 						 tracker_config_get_max_word_length (tracker->config),
- 						 tracker_config_get_min_word_length (tracker->config),
+						 language, 
+ 						 tracker_config_get_max_words_to_index (config),
+ 						 tracker_config_get_max_word_length (config),
+ 						 tracker_config_get_min_word_length (config),
 						 tracker_field_get_filtered (def), 
 						 tracker_field_get_delimited (def));
 	}
@@ -241,10 +246,10 @@
 		new_table = tracker_parser_text (new_table, 
 						 new_value, 
 						 tracker_field_get_weight (def), 
-						 tracker->language, 
- 						 tracker_config_get_max_words_to_index (tracker->config),
- 						 tracker_config_get_max_word_length (tracker->config),
- 						 tracker_config_get_min_word_length (tracker->config),
+						 language, 
+ 						 tracker_config_get_max_words_to_index (config),
+ 						 tracker_config_get_max_word_length (config),
+ 						 tracker_config_get_min_word_length (config),
 						 tracker_field_get_filtered (def), 
 						 tracker_field_get_delimited (def));
 	}
@@ -573,50 +578,6 @@
 }
 */
 
-static gint 
-get_memory_usage (void)
-{
-#if defined(__linux__)
-	gint    fd, length, mem = 0;
-	gchar   buffer[8192];
-	gchar  *stat_file;
-	gchar **terms;
-
-	stat_file = g_strdup_printf ("/proc/%d/stat", tracker->pid);
-	fd = g_open (stat_file, O_RDONLY); 
-	g_free (stat_file);
-
-	if (fd ==-1) {
-		return 0;
-	}
-	
-	length = read (fd, buffer, 8192);
-	buffer[length] = 0;
-	close (fd);
-
-	terms = g_strsplit (buffer, " ", -1);
-
-	if (terms) {
-		gint i;
-
-		for (i = 0; i < 24; i++) {
-			if (!terms[i]) {
-				break;
-			}		
-
-			if (i == 23) {
-				mem = 4 * atoi (terms[23]);
-			}
-		}
-	}
-
-	g_strfreev (terms);
-
-	return mem;	
-#endif
-	return 0;
-}
-
 static GArray *
 db_create_array_of_services (void)
 {
@@ -641,15 +602,38 @@
 }
 
 void
-tracker_db_init (void)
-{
-	/* Nothing to do? - maybe create connections? */
+tracker_db_init (TrackerConfig   *this_config,
+		 TrackerLanguage *this_language,
+		 TrackerIndexer  *this_file_index)
+{
+	g_return_if_fail (TRACKER_IS_CONFIG (this_config));
+	g_return_if_fail (TRACKER_IS_LANGUAGE (this_language));
+	g_return_if_fail (TRACKER_IS_INDEXER (this_file_index));
+	
+	if (initialized) {
+		return;
+	}
+
+	config = g_object_ref (this_config);
+	language = g_object_ref (this_language);
+	file_index = g_object_ref (this_file_index);
 }
 
 void
 tracker_db_shutdown (void)
 {
-	/* Nothing to do? */
+	if (!initialized) {
+		return;
+	}
+
+	g_object_unref (file_index);
+	file_index = NULL;
+
+	g_object_unref (language);
+	language = NULL;
+
+	g_object_unref (config);
+	config = NULL;
 }
 
 gboolean
@@ -774,9 +758,9 @@
 	g_return_val_if_fail (offset >= 0, NULL);
 
 	array = tracker_parser_text_into_array (search_string,
-						tracker->language,
-						tracker_config_get_max_word_length (tracker->config),
-						tracker_config_get_min_word_length (tracker->config));
+						language,
+						tracker_config_get_max_word_length (config),
+						tracker_config_get_min_word_length (config));
 
 	result_set = tracker_db_exec_proc (iface, 
 					   "GetRelatedServiceIDs", 
@@ -803,9 +787,9 @@
 	}
 
 	tree = tracker_query_tree_new (search_string, 
-				       tracker->file_index, 
-				       tracker->config,
-				       tracker->language,
+				       file_index, 
+				       config,
+				       language,
 				       services);
 	hits = tracker_query_tree_get_hits (tree, offset, limit);
 	result = NULL;
@@ -964,9 +948,9 @@
 	services = db_create_array_of_services ();
 
 	tree = tracker_query_tree_new (text, 
-				       tracker->file_index, 
-				       tracker->config,
-				       tracker->language,
+				       file_index, 
+				       config,
+				       language,
 				       services);
 	hits = tracker_query_tree_get_hits (tree, 0, 0);
 
@@ -1060,9 +1044,9 @@
 	services = db_create_array_of_services ();
 
 	tree = tracker_query_tree_new (text, 
-				       tracker->file_index, 
-				       tracker->config,
-				       tracker->language,
+				       file_index, 
+				       config,
+				       language,
 				       services);
 	hits = tracker_query_tree_get_hits (tree, 0, 0);
 
@@ -1158,9 +1142,9 @@
 	services = db_create_array_of_services ();
 
 	tree = tracker_query_tree_new (text, 
-				       tracker->file_index, 
-				       tracker->config,
-				       tracker->language,
+				       file_index, 
+				       config,
+				       language,
 				       services);
 	hits = tracker_query_tree_get_hits (tree, 0, 0);
 
@@ -1517,9 +1501,9 @@
 				gchar *mvalue;
 				
 				mvalue = tracker_parser_text_to_string (values[i],
-									tracker->language,
-									tracker_config_get_max_word_length (tracker->config),
-									tracker_config_get_min_word_length (tracker->config),
+									language,
+									tracker_config_get_max_word_length (config),
+									tracker_config_get_min_word_length (config),
 									FALSE, 
 									FALSE, 
 									FALSE);
@@ -1549,9 +1533,9 @@
 			}
 			
 			mvalue = tracker_parser_text_to_string (values[i], 
-								tracker->language,
-								tracker_config_get_max_word_length (tracker->config),
-								tracker_config_get_min_word_length (tracker->config),
+								language,
+								tracker_config_get_max_word_length (config),
+								tracker_config_get_min_word_length (config),
 								tracker_field_get_filtered (def), 
 								tracker_field_get_filtered (def), 
 								tracker_field_get_delimited (def));
@@ -1582,10 +1566,10 @@
 				hash_table = tracker_parser_text (hash_table, 
 								  values[i], 
 								  tracker_field_get_weight (def), 
-								  tracker->language, 
-								  tracker_config_get_max_words_to_index (tracker->config),
-								  tracker_config_get_max_word_length (tracker->config),
-								  tracker_config_get_min_word_length (tracker->config),
+								  language, 
+								  tracker_config_get_max_words_to_index (config),
+								  tracker_config_get_max_word_length (config),
+								  tracker_config_get_min_word_length (config),
 								  tracker_field_get_filtered (def), 
 								  tracker_field_get_delimited (def));
 			}
@@ -1622,9 +1606,9 @@
 			}
 			
 			mvalue = tracker_parser_text_to_string (values[i], 
-								tracker->language,
-								tracker_config_get_max_word_length (tracker->config),
-								tracker_config_get_min_word_length (tracker->config),
+								language,
+								tracker_config_get_max_word_length (config),
+								tracker_config_get_min_word_length (config),
 								tracker_field_get_filtered (def),  
 								tracker_field_get_filtered (def), 
 								tracker_field_get_delimited (def));
@@ -1856,9 +1840,9 @@
 			}
 
 			mvalue = tracker_parser_text_to_string (values[i], 
-								tracker->language,
-								tracker_config_get_max_word_length (tracker->config),
-								tracker_config_get_min_word_length (tracker->config),
+								language,
+								tracker_config_get_max_word_length (config),
+								tracker_config_get_min_word_length (config),
 								tracker_field_get_filtered (def),  
 								tracker_field_get_filtered (def), 
 								tracker_field_get_delimited (def));
@@ -1906,9 +1890,9 @@
 			}
 
 			mvalue = tracker_parser_text_to_string (values[i], 
-								tracker->language,
-								tracker_config_get_max_word_length (tracker->config),
-								tracker_config_get_min_word_length (tracker->config),
+								language,
+								tracker_config_get_max_word_length (config),
+								tracker_config_get_min_word_length (config),
 								tracker_field_get_filtered (def),  
 								tracker_field_get_filtered (def), 
 								tracker_field_get_delimited (def));
@@ -2131,9 +2115,9 @@
 	case TRACKER_FIELD_TYPE_INDEX:
 	case TRACKER_FIELD_TYPE_STRING:
 		mvalue = tracker_parser_text_to_string (value, 
-							tracker->language,
-							tracker_config_get_max_word_length (tracker->config),
-							tracker_config_get_min_word_length (tracker->config),
+							language,
+							tracker_config_get_max_word_length (config),
+							tracker_config_get_min_word_length (config),
 							tracker_field_get_filtered (def),  
 							tracker_field_get_filtered (def), 
 							tracker_field_get_delimited (def));
@@ -2876,7 +2860,7 @@
 			g_free (parent);
 		}
 
-		if (tracker_config_get_enable_xesam (tracker->config)) {
+		if (tracker_config_get_enable_xesam (config)) {
 			/* FIXME: Shouldn't this be the common interface? */
 			db_create_event (iface, sid, "Create");
 		}
@@ -3917,31 +3901,3 @@
 		g_object_unref (result_set);
 	}
 }
-
-gboolean
-tracker_db_regulate_transactions (TrackerDBInterface *iface, 
-				  gint                interval)
-{
-	g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), FALSE);
-
-	tracker->index_count++;
-	
-	if ((tracker->index_count == 1 ||
-	     tracker->index_count == interval  || 
-	     (tracker->index_count >= interval && 
-	      tracker->index_count % interval == 0))) {
-		if (tracker->index_count > 1) {
-			tracker_db_interface_end_transaction (iface);
-			tracker_db_interface_start_transaction (iface);
-
-			g_message ("Current memory usage is %d, word count %d and hits %d", 
-				   get_memory_usage (), 
-				   0,  /* was tracker->word_count, */
-				   0); /* was tracker->word_detail_count */
-		}
-
-		return TRUE;
-	}
-
-	return FALSE;
-}

Modified: branches/indexer-split/src/trackerd/tracker-db.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-db.h	Mon Jul 14 13:28:16 2008
@@ -26,8 +26,10 @@
 
 #include <glib.h>
 
+#include <libtracker-common/tracker-config.h>
 #include <libtracker-common/tracker-field.h>
 #include <libtracker-common/tracker-field-data.h>
+#include <libtracker-common/tracker-language.h>
 #include <libtracker-common/tracker-ontology.h>
 
 #include <libtracker-db/tracker-db-interface.h>
@@ -38,7 +40,9 @@
 
 G_BEGIN_DECLS
 
-void                tracker_db_init                              (void);
+void                tracker_db_init                              (TrackerConfig       *this_config,
+								  TrackerLanguage     *this_language,
+								  TrackerIndexer      *this_file_index);
 void                tracker_db_shutdown                          (void);
 
 /* Operations for TrackerDBInterface */
@@ -61,10 +65,6 @@
 void                tracker_db_set_option_int                    (const gchar         *option,
 								  gint                 value);
 
-/* High level transactions things */
-gboolean            tracker_db_regulate_transactions             (TrackerDBInterface  *iface,
-								  gint                 interval);
-
 /* Metadata API */
 gchar *             tracker_db_metadata_get_related_names        (TrackerDBInterface  *iface,
 								  const gchar         *name);

Modified: branches/indexer-split/src/trackerd/tracker-dbus.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-dbus.c	Mon Jul 14 13:28:16 2008
@@ -80,25 +80,19 @@
         return TRUE;
 }
 
-static gpointer
+static void
 dbus_register_object (DBusGConnection       *connection,
                       DBusGProxy            *proxy,
-                      GType                  object_type,
+		      GObject               *object,
                       const DBusGObjectInfo *info,
                       const gchar           *path)
 {
-        GObject *object;
-
         g_message ("Registering DBus object...");
         g_message ("  Path:'%s'", path);
-        g_message ("  Type:'%s'", g_type_name (object_type));
-
-        object = g_object_new (object_type, NULL);
+        g_message ("  Type:'%s'", G_OBJECT_TYPE_NAME (object));
 
-        dbus_g_object_type_install_info (object_type, info);
+        dbus_g_object_type_install_info (G_OBJECT_TYPE (object), info);
         dbus_g_connection_register_g_object (connection, path, object);
-
-        return object;
 }
 
 static void 
@@ -196,11 +190,18 @@
 }
 
 gboolean
-tracker_dbus_register_objects (Tracker *tracker)
+tracker_dbus_register_objects (TrackerConfig    *config,
+			       TrackerLanguage  *language,
+			       TrackerIndexer   *file_index,
+			       TrackerIndexer   *email_index,
+			       TrackerProcessor *processor)
 {
-        GObject *object;
+	gpointer object;
 
-	g_return_val_if_fail (tracker != NULL, FALSE);
+	g_return_val_if_fail (TRACKER_IS_CONFIG (config), FALSE);
+	g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), FALSE);
+	g_return_val_if_fail (TRACKER_IS_INDEXER (file_index), FALSE);
+	g_return_val_if_fail (TRACKER_IS_INDEXER (email_index), FALSE);
 
 	if (!connection || !proxy) {
 		g_critical ("DBus support must be initialized before registering objects!");
@@ -208,87 +209,98 @@
 	}
 
         /* Add org.freedesktop.Tracker */
-        if (!(object = dbus_register_object (connection, 
-                                             proxy,
-                                             TRACKER_TYPE_DAEMON,
-                                             &dbus_glib_tracker_daemon_object_info,
-                                             TRACKER_DAEMON_PATH))) {
-                return FALSE;
-        }
+	object = tracker_daemon_new (config, processor);
+	if (!object) {
+		g_critical ("Could not create TrackerDaemon object to register");
+		return FALSE;
+	}
 
-        g_object_set (object, "config", tracker->config, NULL);
-        g_object_set (object, "tracker", tracker, NULL);
+        dbus_register_object (connection, 
+			      proxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_daemon_object_info,
+			      TRACKER_DAEMON_PATH);
         objects = g_slist_prepend (objects, object);
 
         /* Add org.freedesktop.Tracker.Files */
-        if (!(object = dbus_register_object (connection, 
-                                             proxy,
-                                             TRACKER_TYPE_FILES,
-                                             &dbus_glib_tracker_files_object_info,
-                                             TRACKER_FILES_PATH))) {
-                return FALSE;
-        }
+	object = tracker_files_new ();
+	if (!object) {
+		g_critical ("Could not create TrackerFiles object to register");
+		return FALSE;
+	}
 
+        dbus_register_object (connection, 
+			      proxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_files_object_info,
+			      TRACKER_FILES_PATH);
         objects = g_slist_prepend (objects, object);
 
         /* Add org.freedesktop.Tracker.Keywords */
-        if (!(object = dbus_register_object (connection, 
-                                             proxy,
-                                             TRACKER_TYPE_KEYWORDS,
-                                             &dbus_glib_tracker_keywords_object_info,
-                                             TRACKER_KEYWORDS_PATH))) {
-                return FALSE;
-        }
+	object = tracker_keywords_new ();
+	if (!object) {
+		g_critical ("Could not create TrackerKeywords object to register");
+		return FALSE;
+	}
 
+        dbus_register_object (connection, 
+			      proxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_keywords_object_info,
+			      TRACKER_KEYWORDS_PATH);
         objects = g_slist_prepend (objects, object);
 
         /* Add org.freedesktop.Tracker.Metadata */
-        if (!(object = dbus_register_object (connection, 
-                                             proxy,
-                                             TRACKER_TYPE_METADATA,
-                                             &dbus_glib_tracker_metadata_object_info,
-                                             TRACKER_METADATA_PATH))) {
-                return FALSE;
-        }
+	object = tracker_metadata_new ();
+	if (!object) {
+		g_critical ("Could not create TrackerMetadata object to register");
+		return FALSE;
+	}
 
+        dbus_register_object (connection, 
+			      proxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_metadata_object_info,
+			      TRACKER_METADATA_PATH);
         objects = g_slist_prepend (objects, object);
 
         /* Add org.freedesktop.Tracker.Search */
-        if (!(object = dbus_register_object (connection, 
-                                             proxy,
-                                             TRACKER_TYPE_SEARCH,
-                                             &dbus_glib_tracker_search_object_info,
-                                             TRACKER_SEARCH_PATH))) {
-                return FALSE;
-        }
+	object = tracker_search_new (config, language, file_index, email_index);
+	if (!object) {
+		g_critical ("Could not create TrackerSearch object to register");
+		return FALSE;
+	}
 
-	g_object_set (object, "config", tracker->config, NULL);
-	g_object_set (object, "language", tracker->language, NULL);
-	g_object_set (object, "file-index", tracker->file_index, NULL);
-	g_object_set (object, "email-index", tracker->email_index, NULL);
-	objects = g_slist_prepend (objects, object);
+        dbus_register_object (connection, 
+			      proxy,
+			      G_OBJECT (object),
+			      &dbus_glib_tracker_search_object_info,
+			      TRACKER_SEARCH_PATH);
+        objects = g_slist_prepend (objects, object);
 
 	/* Register the XESAM object if enabled */
-        if (tracker_config_get_enable_xesam (tracker->config)) {
-		/* Add org.freedesktop.xesam.Search */
-		if (!(object = dbus_register_object (connection, 
-						     proxy,
-						     TRACKER_TYPE_XESAM,
-						     &dbus_glib_tracker_xesam_object_info,
-						     TRACKER_XESAM_PATH))) {
+        if (tracker_config_get_enable_xesam (config)) {
+		object = tracker_xesam_new ();
+		if (!object) {
+			g_critical ("Could not create TrackerXesam object to register");
 			return FALSE;
 		}
-		
+
+		dbus_register_object (connection, 
+				      proxy,
+				      G_OBJECT (object),
+				      &dbus_glib_tracker_xesam_object_info,
+				      TRACKER_XESAM_PATH);
+		objects = g_slist_prepend (objects, object);
+
 		dbus_g_proxy_add_signal (proxy, "NameOwnerChanged",
 					 G_TYPE_STRING, G_TYPE_STRING,
 					 G_TYPE_STRING, G_TYPE_INVALID);
 		
 		dbus_g_proxy_connect_signal (proxy, "NameOwnerChanged", 
 					     G_CALLBACK (tracker_xesam_name_owner_changed), 
-					     g_object_ref (object),
+					     g_object_ref (G_OBJECT (object)),
 					     dbus_name_owner_changed);
-		
-		objects = g_slist_prepend (objects, object);
         }
 	
         /* Reverse list since we added objects at the top each time */

Modified: branches/indexer-split/src/trackerd/tracker-dbus.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-dbus.h	Mon Jul 14 13:28:16 2008
@@ -24,19 +24,24 @@
 
 #include <glib.h>
 
-#include <libtracker-common/tracker-config.h>
 #include <dbus/dbus-glib-bindings.h>
 
-#include <libtracker-db/tracker-db-interface.h>
+#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-language.h>
 
-#include "tracker-main.h"
+#include "tracker-indexer.h"
+#include "tracker-processor.h"
 
 G_BEGIN_DECLS
 
-gboolean    tracker_dbus_init              (TrackerConfig *config);
+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);
+gboolean    tracker_dbus_register_objects  (TrackerConfig    *config,
+					    TrackerLanguage  *language,
+					    TrackerIndexer   *file_index,
+					    TrackerIndexer   *email_index,
+					    TrackerProcessor *processor);
+GObject    *tracker_dbus_get_object        (GType             type);
 DBusGProxy *tracker_dbus_indexer_get_proxy (void);
 
 G_END_DECLS

Modified: branches/indexer-split/src/trackerd/tracker-main.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-main.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-main.c	Mon Jul 14 13:28:16 2008
@@ -32,6 +32,7 @@
 #include <unistd.h> 
 #include <fcntl.h>
 #include <errno.h>
+#include <time.h>
 
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
@@ -52,6 +53,7 @@
 #include "tracker-dbus.h"
 #include "tracker-indexer.h"
 #include "tracker-indexer-client.h"
+#include "tracker-main.h"
 #include "tracker-monitor.h"
 #include "tracker-processor.h"
 #include "tracker-status.h"
@@ -63,53 +65,6 @@
 #include "mingw-compat.h"
 #endif
 
-/*
- *   The workflow to process files and notified file change events are
- *   as follows: 
- *
- *   1) File scan or file notification change (as reported by
- *   FAM/iNotify).  
-
- *   2) File Scheduler (we wait until a file's changes have stabilised
- *   (NB not neccesary with inotify)) 
-
- *   3) We process a file's basic metadata (stat) and determine what
- *   needs doing in a seperate thread. 
-
- *   4) We extract CPU intensive embedded metadata/text/thumbnail in
- *   another thread and save changes to the DB 
- *
- *
- *  Three threads are used to fully process a file event. Files or
- *  events to be processed are placed on asynchronous queues where
- *  another thread takes over the work. 
- *
- *  The main thread is very lightweight and no cpu intensive or heavy
- *  file I/O (or heavy DB access) is permitted here after
- *  initialisation of the daemon. This ensures the main thread can
- *  handle events and DBUS requests in a timely low latency manner. 
- *
- *  The File Process thread is for moderate CPU intensive load and I/O
- *  and involves calls to stat() and simple fast queries on the DB.
- *  The main thread queues files to be processed by this thread via
- *  the file_process async queue. As no heavily CPU intensive activity
- *  occurs here, we can quickly keep the DB representation of the
- *  watched file system up to date. Once a file has been processed
- *  here it is then placed on the file metadata queue which is handled
- *  by the File Metadata thread. 
- *
- *  The File Metadata thread is a low priority thread to handle the
- *  highly CPU intensive parts. During this phase, embedded metadata
- *  is extracted from files and if a text filter and/or thumbnailer is
- *  available for the mime type of the file then these will be spawned
- *  synchronously. Finally all metadata (including file's text
- *  contents and path to thumbnails) is saved to the DB. 
- *
- *  All responses including user initiated requests are queued by the
- *  main thread onto an asynchronous queue where potentially multiple
- *  threads are waiting to process them. 
- */
-
 #define ABOUT								  \
 	"Tracker " VERSION "\n"						  \
 	"Copyright (c) 2005-2008 Jamie McCracken (jamiemcc gnome org)\n" 
@@ -127,9 +82,6 @@
 	TRACKER_RUNNING_MAIN_INSTANCE
 } TrackerRunningLevel;
 
-/* Public */
-Tracker	             *tracker;
-
 /* Private */
 static GMainLoop     *main_loop;
 static gchar         *log_filename;
@@ -138,6 +90,13 @@
 static gchar         *user_data_dir;
 static gchar         *sys_tmp_dir;
 
+static gboolean       is_running; 
+static gboolean       is_readonly;
+static gboolean       is_first_time_index; 
+static gboolean       is_paused_manually;
+static gboolean       in_merge; 
+static gboolean       reindex_on_shutdown;
+
 /* Private command line parameters */
 static gint           verbosity = -1;
 static gint           initial_sleep = -1;
@@ -146,9 +105,9 @@
 static gchar        **monitors_to_include;
 static gchar        **crawl_dirs;
 
-static gboolean       reindex;
+static gboolean       force_reindex;
 static gboolean       disable_indexing;
-static gchar         *language;
+static gchar         *language_code;
 
 static GOptionEntry   entries_daemon[] = {
 	{ "verbosity", 'v', 0, 
@@ -180,15 +139,15 @@
 };
 
 static GOptionEntry   entries_indexer[] = {
-	{ "reindex", 'r', 0, 
-	  G_OPTION_ARG_NONE, &reindex, 
+	{ "force-reindex", 'r', 0, 
+	  G_OPTION_ARG_NONE, &force_reindex, 
 	  N_("Force a re-index of all content"), 
 	  NULL },
 	{ "disable-indexing", 'n', 0, 
 	  G_OPTION_ARG_NONE, &disable_indexing, 
 	  N_("Disable any indexing and monitoring"), NULL },
 	{ "language", 'l', 0, 
-	  G_OPTION_ARG_STRING, &language, 
+	  G_OPTION_ARG_STRING, &language_code, 
 	  N_("Language to use for stemmer and stop words "
 	     "(ISO 639-1 2 characters code)"), 
 	  NULL },
@@ -213,8 +172,7 @@
 
 static TrackerRunningLevel
 check_runtime_level (TrackerConfig *config,
-		     TrackerHal    *hal,
-		     gboolean       first_time_index)
+		     TrackerHal    *hal)
 {
 	TrackerRunningLevel  runlevel;
 	gchar               *lock_file;
@@ -268,7 +226,7 @@
 			return TRACKER_RUNNING_MAIN_INSTANCE;
 		}
 
-		if (!first_time_index && 
+		if (!is_first_time_index && 
 		    tracker_config_get_disable_indexing_on_battery (config)) { 
 			g_message ("Battery in use");
 			g_message ("Config is set to not index on battery");
@@ -280,7 +238,7 @@
 		 * overwritten by the config option to disable or not
 		 * indexing on battery initially. 
 		 */
-		if (first_time_index &&
+		if (is_first_time_index &&
 		    tracker_config_get_disable_indexing_on_battery_init (config)) {
 			g_message ("Battery in use & reindex is needed");
 			g_message ("Config is set to not index on battery for initial index");
@@ -472,10 +430,10 @@
 	/*
 	 * Create SQLite databases 
 	 */
-	if (!tracker->readonly && reindex) {
+	if (!is_readonly && force_reindex) {
 		TrackerDBInterface *iface;
 		
-		tracker->first_time_index = TRUE;
+		is_first_time_index = TRUE;
 		
 		/* Reset stats for embedded services if they are being reindexed */
 
@@ -495,18 +453,18 @@
 	}
 
 	/* Check db integrity if not previously shut down cleanly */
-	if (!tracker->readonly && 
-	    !tracker->first_time_index && 
+	if (!is_readonly && 
+	    !is_first_time_index && 
 	    tracker_db_get_option_int ("IntegrityCheck") == 1) {
 		g_message ("Performing integrity check as the daemon was not shutdown cleanly");
 		/* FIXME: Finish */
 	} 
 
-	if (!tracker->readonly) {
+	if (!is_readonly) {
 		tracker_db_set_option_int ("IntegrityCheck", 1);
 	} 
 
-	if (tracker->first_time_index) {
+	if (is_first_time_index) {
 		tracker_db_set_option_int ("InitialIndex", 1);
 	}
 
@@ -516,12 +474,9 @@
 static gboolean
 initialize_indexers (TrackerConfig *config)
 {
-	TrackerIndexer *indexer;
-	gchar          *final_index_name;
+	gchar *final_index_name;
 
-	/*
-	 * Create index files
-	 */
+	/* Create index files */
 	final_index_name = g_build_filename (data_dir, "file-index-final", NULL);
 	
 	if (g_file_test (final_index_name, G_FILE_TEST_EXISTS) && 
@@ -562,45 +517,12 @@
 	
 	g_free (final_index_name);
 
-	/* Create indexers */
-	indexer = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES, config);
-	if (!indexer) {
-		return FALSE;
-	}
-
-	tracker->file_index = indexer;
-
-	indexer = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES_UPDATE, config);
-	if (!indexer) {
-		return FALSE;
-	}
-
-	tracker->file_update_index = indexer;
-
-	indexer = tracker_indexer_new (TRACKER_INDEXER_TYPE_EMAILS, config);
-	if (!indexer) {
-		return FALSE;
-	}
-
-	tracker->email_index = indexer;
-
 	return TRUE;
 }
 
 static void
 shutdown_indexer (void)
 {
-	if (tracker->file_index) {
-		g_object_unref (tracker->file_index);
-	}
-
-	if (tracker->file_update_index) {
-		g_object_unref (tracker->file_update_index);
-	}
-
-	if (tracker->email_index) {
-		g_object_unref (tracker->email_index);
-	}
 }
 
 static void
@@ -626,9 +548,8 @@
 shutdown_directories (void)
 {
 	/* If we are reindexing, just remove the databases */
-	if (tracker->reindex) {
-		tracker_path_remove (data_dir);
-		g_mkdir_with_parents (data_dir, 00755);
+	if (reindex_on_shutdown) {
+		tracker_db_manager_remove_all ();
 	}
 }
 
@@ -637,7 +558,7 @@
 {
 	DBusGProxy *proxy;
 
-	if (!tracker->is_running) {
+	if (!is_running) {
 		return FALSE;
 	}
 
@@ -656,9 +577,15 @@
 	GOptionContext        *context = NULL;
 	GOptionGroup          *group;
 	GError                *error = NULL;
+        TrackerConfig         *config;
+        TrackerLanguage       *language;
+        TrackerHal            *hal;
+	TrackerProcessor      *processor;
+        TrackerIndexer        *file_index;
+        TrackerIndexer        *file_update_index;
+        TrackerIndexer        *email_index;
 	TrackerRunningLevel    runtime_level;
 	TrackerDBManagerFlags  flags;
-	TrackerProcessor      *processor;
 
         g_type_init ();
         
@@ -714,11 +641,6 @@
 
 	initialize_signal_handler ();
 
-	/* Create struct */
-	tracker = g_new0 (Tracker, 1);
-
-	tracker->pid = getpid ();
-
 	/* This makes sure we have all the locations like the data
 	 * dir, user data dir, etc all configured.
 	 * 
@@ -729,132 +651,140 @@
 	initialize_locations ();
 
         /* Initialize major subsystems */
-        tracker->config = tracker_config_new ();
-        tracker->language = tracker_language_new (tracker->config);
+        config = tracker_config_new ();
+        language = tracker_language_new (config);
 
 #ifdef HAVE_HAL
-        tracker->hal = tracker_hal_new ();
+        hal = tracker_hal_new ();
 #endif /* HAVE_HAL */
 
 	/* Daemon command line arguments */
 	if (verbosity > -1) {
-		tracker_config_set_verbosity (tracker->config, verbosity);
+		tracker_config_set_verbosity (config, verbosity);
 	}
 
 	if (initial_sleep > -1) {
-		tracker_config_set_initial_sleep (tracker->config, initial_sleep);
+		tracker_config_set_initial_sleep (config, initial_sleep);
 	}
 
 	if (low_memory) {
-		tracker_config_set_low_memory_mode (tracker->config, TRUE);
+		tracker_config_set_low_memory_mode (config, TRUE);
 	}
 
 	if (monitors_to_exclude) {
-                tracker_config_add_no_watch_directory_roots (tracker->config, 
-							     monitors_to_exclude);
+                tracker_config_add_no_watch_directory_roots (config, monitors_to_exclude);
 	}
 
 	if (monitors_to_include) {
-                tracker_config_add_watch_directory_roots (tracker->config, 
-							  monitors_to_include);
+                tracker_config_add_watch_directory_roots (config, monitors_to_include);
 	}
 
 	if (crawl_dirs) {
-                tracker_config_add_crawl_directory_roots (tracker->config, crawl_dirs);
+                tracker_config_add_crawl_directory_roots (config, crawl_dirs);
 	}
 
 	/* Indexer command line arguments */
 	if (disable_indexing) {
-		tracker_config_set_enable_indexing (tracker->config, FALSE);
+		tracker_config_set_enable_indexing (config, FALSE);
 	}
 
-	if (language) {
-		tracker_config_set_language (tracker->config, language);
+	if (language_code) {
+		tracker_config_set_language (config, language_code);
 	}
 
 	initialize_directories ();
 
 	/* Initialize other subsystems */
-	tracker_log_init (log_filename, tracker_config_get_verbosity (tracker->config));
+	tracker_log_init (log_filename, tracker_config_get_verbosity (config));
 	g_print ("Starting log:\n  File:'%s'\n", log_filename);
 
-	sanity_check_option_values (tracker->config);
+	sanity_check_option_values (config);
 
-	tracker_nfs_lock_init (tracker_config_get_nfs_locking (tracker->config));
+	tracker_nfs_lock_init (tracker_config_get_nfs_locking (config));
 
-	if (!tracker_dbus_init (tracker->config)) {
+	if (!tracker_dbus_init (config)) {
 		return EXIT_FAILURE;
 	}
 
-	if (!tracker_monitor_init (tracker->config)) {
+	if (!tracker_monitor_init (config)) {
 		return EXIT_FAILURE;
 	} 
 
 	flags = TRACKER_DB_MANAGER_REMOVE_CACHE;
 
-	if (reindex) {
+	if (force_reindex) {
 		flags |= TRACKER_DB_MANAGER_FORCE_REINDEX;
 	}
 
-	if (tracker_config_get_low_memory_mode (tracker->config)) {
+	if (tracker_config_get_low_memory_mode (config)) {
 		flags |= TRACKER_DB_MANAGER_LOW_MEMORY_MODE;
 	}
 
-	tracker_db_manager_init (flags, &tracker->first_time_index);
+	tracker_db_manager_init (flags, &is_first_time_index);
 
 	/*
 	 * Check instances running
 	 */
-	runtime_level = check_runtime_level (tracker->config, 
-					     tracker->hal, 
-					     tracker->first_time_index);
+	runtime_level = check_runtime_level (config, hal);
 
 	switch (runtime_level) {
 	case TRACKER_RUNNING_NON_ALLOWED: 
 		return EXIT_FAILURE;
 
 	case TRACKER_RUNNING_READ_ONLY:     
-		tracker->readonly = TRUE;
+		is_readonly = TRUE;
 		break;
 
 	case TRACKER_RUNNING_MAIN_INSTANCE: 
-		tracker->readonly = FALSE;
+		is_readonly = FALSE;
 		break;
 	}
 
-	tracker_db_init ();
-	tracker_xesam_manager_init ();
-        tracker_module_config_init ();
-
-	processor = tracker_processor_new (tracker->config, 
-					   tracker->hal);
-
-	umask (077);
-
 	if (!initialize_databases ()) {
 		return EXIT_FAILURE;
 	}
 
-	if (!initialize_indexers (tracker->config)) {
+	if (!initialize_indexers (config)) {
 		return EXIT_FAILURE;
 	}
 
+	file_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES, config);
+	file_update_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_FILES_UPDATE, config);
+	email_index = tracker_indexer_new (TRACKER_INDEXER_TYPE_EMAILS, config);
+
+	if (!TRACKER_IS_INDEXER (file_index) || 
+	    !TRACKER_IS_INDEXER (file_update_index) ||
+	    !TRACKER_IS_INDEXER (email_index)) {
+		g_critical ("Could not create indexer for all indexes (files, files-update, emails)");
+		return EXIT_FAILURE;
+	}
+
+	tracker_db_init (config, language, file_index);
+	tracker_xesam_manager_init ();
+        tracker_module_config_init ();
+
+	processor = tracker_processor_new (config, hal);
+
 	/* Set our status as running, if this is FALSE, threads stop
 	 * doing what they do and shutdown.
 	 */
-	tracker->is_running = TRUE;
+	is_running = TRUE;
 
 	/* Make Tracker available for introspection */
-	if (!tracker_dbus_register_objects (tracker)) {
+	if (!tracker_dbus_register_objects (config,
+					    language,
+					    file_index,
+					    email_index,
+					    processor)) {
 		return EXIT_FAILURE;
 	}
 
 	g_message ("Waiting for DBus requests...");
 
-	if (!tracker->readonly) {
+	if (!is_readonly) {
 		gint seconds;
 		
-		seconds = tracker_config_get_initial_sleep (tracker->config);
+		seconds = tracker_config_get_initial_sleep (config);
 		
 		if (seconds > 0) {
 			g_message ("Waiting %d seconds before starting",
@@ -863,13 +793,13 @@
 				       start_cb,
 				       processor);
 		} else {
-			g_idle_add (start_cb, tracker);
+			g_idle_add (start_cb, processor);
 		}
 	} else {
 		g_message ("Running in read-only mode, not starting crawler/indexing");
 	}
 
-	if (tracker->is_running) {
+	if (is_running) {
 		main_loop = g_main_loop_new (NULL, FALSE);
 		g_main_loop_run (main_loop);
 	}
@@ -884,9 +814,7 @@
 	/* Set kill timeout */
 	g_timeout_add_full (G_PRIORITY_LOW, 5000, shutdown_timeout_cb, NULL, NULL);
 
-	if (processor) {
-		g_object_unref (processor);
-	}
+	g_object_unref (processor);
 
 	shutdown_indexer ();
 	shutdown_databases ();
@@ -902,19 +830,17 @@
 	tracker_nfs_lock_shutdown ();
 	tracker_log_shutdown ();
 
+	/* Clean up object references */
+	g_object_unref (email_index);
+	g_object_unref (file_update_index);
+	g_object_unref (file_index);
+
 #ifdef HAVE_HAL
-	if (tracker->hal) {
-		g_object_unref (tracker->hal);
-	}
+	g_object_unref (hal);
 #endif /* HAVE_HAL */
 
-	if (tracker->language) {
-		g_object_unref (tracker->language);
-	}
-
-        if (tracker->config) {
-                g_object_unref (tracker->config);
-        }
+	g_object_unref (language);
+	g_object_unref (config);
 
 	shutdown_locations ();
 
@@ -924,7 +850,7 @@
 void
 tracker_shutdown (void)
 {
-	tracker->is_running = FALSE;
+	is_running = FALSE;
 
 	/* Stop any tight loop operations */
 /*	tracker_processor_stop ();*/
@@ -943,3 +869,75 @@
 {
 	return sys_tmp_dir;
 }
+
+gboolean
+tracker_get_is_readonly (void)
+{
+	return is_readonly;
+}
+
+void
+tracker_set_is_readonly (gboolean value)
+{
+	gboolean emit;
+
+	emit = is_readonly != value;
+
+	if (!emit) {
+		return;
+	}
+
+	/* Set value */
+	is_readonly = value;
+
+	/* Signal the status change */
+	tracker_status_signal ();
+}
+
+gboolean
+tracker_get_is_first_time_index (void)
+{
+	return is_first_time_index;
+}
+
+gboolean
+tracker_get_in_merge (void)
+{
+	return in_merge;
+}
+
+gboolean
+tracker_get_is_paused_manually (void)
+{
+	return is_paused_manually;
+}
+
+void
+tracker_set_is_paused_manually (gboolean value)
+{
+	gboolean emit;
+
+	emit = is_paused_manually != value;
+
+	if (!emit) {
+		return;
+	}
+	
+	if (value) {
+		g_message ("Tracker daemon has been paused by user");
+	} else {
+		g_message ("Tracker daemon has been resumed by user");
+	}
+
+	/* Set value */
+	is_paused_manually = value;
+
+	/* Signal the status change */
+	tracker_status_signal ();
+}
+
+void
+tracker_set_reindex_on_shutdown (gboolean value)
+{
+	reindex_on_shutdown = value;
+}

Modified: branches/indexer-split/src/trackerd/tracker-main.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-main.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-main.h	Mon Jul 14 13:28:16 2008
@@ -25,65 +25,24 @@
 
 #include "config.h"
 
-#include <time.h>
-
-#include <glib.h>
-
-#include <libtracker-common/tracker-config.h>
-#include <libtracker-common/tracker-language.h>
-#include <libtracker-common/tracker-parser.h>
-#include <libtracker-common/tracker-hal.h>
-
-#include <libtracker-db/tracker-db-action.h>
+G_BEGIN_DECLS
 
-#include "tracker-crawler.h"
-#include "tracker-indexer.h"
+void         tracker_shutdown                (void);
 
-G_BEGIN_DECLS
+const gchar *tracker_get_data_dir            (void);
+const gchar *tracker_get_sys_tmp_dir         (void);
 
-typedef struct {
-        TrackerConfig    *config;
-        TrackerLanguage  *language;
-        TrackerHal       *hal;
-
-        TrackerIndexer   *file_index;
-        TrackerIndexer   *file_update_index;
-        TrackerIndexer   *email_index;
-
- 	gboolean          is_running; 
-	gboolean          readonly;
-
-	gint              pid; 
-
-	gboolean          reindex;
-  
-	/* Pause/shutdown */
-	gboolean          pause_manual;
-	gboolean          pause_battery;
-	gboolean          pause_io;
-
-	/* Indexing options */
-
-	/* Table of stop words that are to be ignored by the parser */
-	gboolean          first_time_index; 
-	
-	gint              folders_count;  
-	gint              folders_processed;
-	gint              mbox_count; 
-	gint              mbox_processed;
-
-	/* Progress info for merges */
-	gboolean          in_merge; 
-	
-	/* Application run time values */
-	gint              index_count; 
-} Tracker;
+gboolean     tracker_get_is_readonly         (void);
+void         tracker_set_is_readonly         (gboolean value);
 
-void         tracker_shutdown        (void);
+gboolean     tracker_get_is_first_time_index (void);
+gboolean     tracker_get_in_merge            (void);
 
-const gchar *tracker_get_data_dir    (void);
-const gchar *tracker_get_sys_tmp_dir (void);
+gboolean     tracker_get_is_paused_manually  (void);
+void         tracker_set_is_paused_manually  (gboolean value);
 
+void         tracker_set_reindex_on_shutdown (gboolean value);
+      
 G_END_DECLS
 
 #endif /* __TRACKERD_MAIN_H__ */

Modified: branches/indexer-split/src/trackerd/tracker-processor.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-processor.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-processor.c	Mon Jul 14 13:28:16 2008
@@ -31,6 +31,7 @@
 #include "tracker-processor.h"
 #include "tracker-crawler.h"
 #include "tracker-monitor.h"
+#include "tracker-status.h"
 
 #define TRACKER_PROCESSOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_PROCESSOR, TrackerProcessorPrivate))
 
@@ -63,6 +64,8 @@
 
 static void tracker_processor_finalize (GObject          *object);
 static void process_next_module        (TrackerProcessor *processor);
+static void crawler_all_sent_cb        (TrackerCrawler   *crawler,
+					gpointer          user_data);
 static void crawler_finished_cb        (TrackerCrawler   *crawler,
 					guint             directories_found,
 					guint             directories_ignored,
@@ -89,7 +92,7 @@
 
 	object_class->finalize = tracker_processor_finalize;
 
-	signals [FINISHED] =
+	signals[FINISHED] =
 		g_signal_new ("finished",
 			      G_OBJECT_CLASS_TYPE (object_class),
 			      G_SIGNAL_RUN_LAST,
@@ -125,6 +128,9 @@
 	g_list_free (priv->modules);
 
 	g_signal_handlers_disconnect_by_func (priv->crawler,
+					      G_CALLBACK (crawler_all_sent_cb),
+					      object);
+	g_signal_handlers_disconnect_by_func (priv->crawler,
 					      G_CALLBACK (crawler_finished_cb),
 					      object);
 	g_object_unref (priv->crawler);
@@ -219,11 +225,12 @@
 		return;
 	}
 
-	/* Set up monitors */
-
-	/* Set up recursive monitors */
+	/* Set up monitors && recursive monitors */
+	tracker_status_set_and_signal (TRACKER_STATUS_WATCHING);
 
 	/* Gets all files and directories */
+	tracker_status_set_and_signal (TRACKER_STATUS_PENDING);
+
 	if (!tracker_crawler_start (priv->crawler, module_name)) {
 		/* If there is nothing to crawl, we are done, process
 		 * the next module.
@@ -251,6 +258,7 @@
 	if (!priv->current_module) {
 		priv->finished = TRUE;
 		tracker_processor_stop (processor);
+
 		return;
 	}
 
@@ -258,6 +266,17 @@
 }
 
 static void
+crawler_all_sent_cb (TrackerCrawler *crawler,
+		     gpointer        user_data)
+{
+	/* Do we even need this step Optimizing ? */
+	tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
+	
+	/* All done */
+	tracker_status_set_and_signal (TRACKER_STATUS_IDLE);
+}
+
+static void
 crawler_finished_cb (TrackerCrawler *crawler,
 		     guint           directories_found,
 		     guint           directories_ignored,
@@ -318,6 +337,8 @@
 	g_return_val_if_fail (TRACKER_IS_HAL (hal), NULL);
 #endif /* HAVE_HAL */
 
+	tracker_status_set_and_signal (TRACKER_STATUS_INITIALIZING);
+
 	processor = g_object_new (TRACKER_TYPE_PROCESSOR, NULL);
 
 	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
@@ -337,6 +358,9 @@
 
 	priv->crawler = tracker_crawler_new (config, hal);
 
+	g_signal_connect (priv->crawler, "all-sent",
+			  G_CALLBACK (crawler_all_sent_cb),
+			  processor);
 	g_signal_connect (priv->crawler, "finished",
 			  G_CALLBACK (crawler_finished_cb),
 			  processor);
@@ -396,5 +420,91 @@
 	g_message ("Total monitors   : %d\n",
 		   tracker_monitor_get_count ());
 
+	/* Here we set to IDLE when we were stopped, otherwise, we
+	 * we are currently in the process of sending files to the
+	 * indexer and we set the state to INDEXING
+	 */
+	if (!priv->finished) {
+		/* Do we even need this step Optimizing ? */
+		tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
+
+		/* All done */
+		tracker_status_set_and_signal (TRACKER_STATUS_IDLE);
+	} else {
+		tracker_status_set_and_signal (TRACKER_STATUS_INDEXING);
+	}
+
 	g_signal_emit (processor, signals[FINISHED], 0);
 }
+
+guint 
+tracker_processor_get_directories_found (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->directories_found;
+}
+
+guint 
+tracker_processor_get_directories_ignored (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->directories_ignored;
+}
+
+guint 
+tracker_processor_get_directories_total (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->directories_found + priv->directories_ignored;
+}
+
+guint 
+tracker_processor_get_files_found (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->files_found;
+}
+
+guint 
+tracker_processor_get_files_ignored (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->files_ignored;
+}
+
+guint 
+tracker_processor_get_files_total (TrackerProcessor *processor)
+{
+	TrackerProcessorPrivate *priv;
+
+	g_return_val_if_fail (TRACKER_IS_PROCESSOR (processor), 0);
+	
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
+	
+	return priv->files_found + priv->files_ignored;
+}

Modified: branches/indexer-split/src/trackerd/tracker-processor.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-processor.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-processor.h	Mon Jul 14 13:28:16 2008
@@ -24,6 +24,7 @@
 #include <glib-object.h>
 
 #include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-hal.h>
 
 G_BEGIN_DECLS
 
@@ -47,11 +48,20 @@
 	void (*finished) (TrackerProcessor *processor);
 };
 
-GType             tracker_processor_get_type (void) G_GNUC_CONST;
-TrackerProcessor *tracker_processor_new      (TrackerConfig    *config,
-					      TrackerHal       *hal);
-void              tracker_processor_start    (TrackerProcessor *processor);
-void              tracker_processor_stop     (TrackerProcessor *processor);
+GType             tracker_processor_get_type                (void) G_GNUC_CONST;
+
+TrackerProcessor *tracker_processor_new                     (TrackerConfig    *config,
+							     TrackerHal       *hal);
+void              tracker_processor_start                   (TrackerProcessor *processor);
+void              tracker_processor_stop                    (TrackerProcessor *processor);
+
+guint             tracker_processor_get_directories_found   (TrackerProcessor *processor);
+guint             tracker_processor_get_directories_ignored (TrackerProcessor *processor);
+guint             tracker_processor_get_directories_total   (TrackerProcessor *processor);
+
+guint             tracker_processor_get_files_found         (TrackerProcessor *processor);
+guint             tracker_processor_get_files_ignored       (TrackerProcessor *processor);
+guint             tracker_processor_get_files_total         (TrackerProcessor *processor);
 
 G_END_DECLS
 

Modified: branches/indexer-split/src/trackerd/tracker-search.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-search.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-search.c	Mon Jul 14 13:28:16 2008
@@ -48,25 +48,14 @@
 
 typedef struct {
 	DBusGProxy      *fd_proxy;
+
 	TrackerConfig   *config;
 	TrackerLanguage *language;
         TrackerIndexer  *file_index;
         TrackerIndexer  *email_index;
 } TrackerSearchPriv;
 
-enum {
-	PROP_0,
-	PROP_CONFIG,
-	PROP_LANGUAGE,
-	PROP_FILE_INDEX,
-	PROP_EMAIL_INDEX
-};
-
-static void search_finalize     (GObject      *object);
-static void search_set_property (GObject      *object,
-				 guint         param_id,
-				 const GValue *value,
-				 GParamSpec   *pspec);
+static void search_finalize (GObject *object);
 
 G_DEFINE_TYPE(TrackerSearch, tracker_search, G_TYPE_OBJECT)
 
@@ -78,34 +67,6 @@
 	object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = search_finalize;
-	object_class->set_property = search_set_property;
-
-	g_object_class_install_property (object_class,
-					 PROP_CONFIG,
-					 g_param_spec_object ("config",
-							      "Config",
-							      "TrackerConfig object",
-							      tracker_config_get_type (),
-							      G_PARAM_WRITABLE));
-	g_object_class_install_property (object_class,
-					 PROP_LANGUAGE,
-					 g_param_spec_object ("language",
-							      "Language",
-							      "Language",
-							      tracker_language_get_type (),
-							      G_PARAM_WRITABLE));
-	g_object_class_install_property (object_class,
-					 PROP_FILE_INDEX,
-					 g_param_spec_pointer ("file-index",
-							       "File index",
-							       "File index",
-							       G_PARAM_WRITABLE));
-	g_object_class_install_property (object_class,
-					 PROP_EMAIL_INDEX,
-					 g_param_spec_pointer ("email-index",
-							       "Email index",
-							       "Email index",
-							       G_PARAM_WRITABLE));
 
 	g_type_class_add_private (object_class, sizeof (TrackerSearchPriv));
 }
@@ -126,126 +87,38 @@
 		g_object_unref (priv->fd_proxy);
 	}
 
-	G_OBJECT_CLASS (tracker_search_parent_class)->finalize (object);
-}
-
-static void
-search_set_property (GObject      *object,
-		     guint 	param_id,
-		     const GValue *value,
-		     GParamSpec   *pspec)
-{
-	TrackerSearchPriv *priv;
-
-	priv = GET_PRIV (object);
+	g_object_unref (priv->email_index);
+	g_object_unref (priv->file_index);
+	g_object_unref (priv->language);
+	g_object_unref (priv->config);
 
-	switch (param_id) {
-	case PROP_CONFIG:
-		tracker_search_set_config (TRACKER_SEARCH (object),
-					   g_value_get_object (value));
-		break;
-	case PROP_LANGUAGE:
-		tracker_search_set_language (TRACKER_SEARCH (object),
-					     g_value_get_object (value));
-		break;
-	case PROP_FILE_INDEX:
-		tracker_search_set_file_index (TRACKER_SEARCH (object),
-					       g_value_get_pointer (value));
-		break;
-	case PROP_EMAIL_INDEX:
-		tracker_search_set_email_index (TRACKER_SEARCH (object),
-						g_value_get_pointer (value));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-		break;
-	};
+	G_OBJECT_CLASS (tracker_search_parent_class)->finalize (object);
 }
 
 TrackerSearch *
-tracker_search_new (void)
-{
-	return g_object_new (TRACKER_TYPE_SEARCH, NULL); 
-}
-
-void
-tracker_search_set_config (TrackerSearch *object,
-			   TrackerConfig *config)
+tracker_search_new (TrackerConfig   *config,
+		    TrackerLanguage *language,
+		    TrackerIndexer  *file_index,
+		    TrackerIndexer  *email_index)
 {
+	TrackerSearch     *object;
 	TrackerSearchPriv *priv;
 
-	g_return_if_fail (TRACKER_IS_SEARCH (object));
-	g_return_if_fail (TRACKER_IS_CONFIG (config));
-
-	priv = GET_PRIV (object);
-
-	if (config) {
-		g_object_ref (config);
-	}
-
-	if (priv->config) {
-		g_object_unref (priv->config);
-	}
-
-	priv->config = config;
-
-	g_object_notify (G_OBJECT (object), "config");
-}
-
-void
-tracker_search_set_language (TrackerSearch   *object,
-			     TrackerLanguage *language)
-{
-	TrackerSearchPriv *priv;
-
-	g_return_if_fail (TRACKER_IS_SEARCH (object));
-	g_return_if_fail (language != NULL);
-
-	priv = GET_PRIV (object);
-
-	if (language) {
-		g_object_ref (language);
-	}
-
-	if (priv->language) {
-		g_object_unref (priv->language);
-	}
-
-	priv->language = language;
-	
-	g_object_notify (G_OBJECT (object), "language");
-}
-
-void
-tracker_search_set_file_index (TrackerSearch  *object,
-			       TrackerIndexer *file_index)
-{
-	TrackerSearchPriv *priv;
+	g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
+	g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
+	g_return_val_if_fail (TRACKER_IS_INDEXER (file_index), NULL);
+	g_return_val_if_fail (TRACKER_IS_INDEXER (email_index), NULL);
 
-	g_return_if_fail (TRACKER_IS_SEARCH (object));
-	g_return_if_fail (file_index != NULL);
+	object = g_object_new (TRACKER_TYPE_SEARCH, NULL); 
 
 	priv = GET_PRIV (object);
 
-	priv->file_index = file_index;
-	
-	g_object_notify (G_OBJECT (object), "file-index");
-}
-
-void
-tracker_search_set_email_index (TrackerSearch  *object,
-				TrackerIndexer *email_index)
-{
-	TrackerSearchPriv *priv;
-
-	g_return_if_fail (TRACKER_IS_SEARCH (object));
-	g_return_if_fail (email_index != NULL);
-
-	priv = GET_PRIV (object);
+	priv->config = g_object_ref (config);
+	priv->language = g_object_ref (language);
+	priv->file_index = g_object_ref (file_index);
+	priv->email_index = g_object_ref (email_index);
 
-	priv->email_index = email_index;
-	
-	g_object_notify (G_OBJECT (object), "email-index");
+	return object;
 }
 
 /*
@@ -600,6 +473,8 @@
 		return FALSE;
         }
 
+	priv = GET_PRIV (object);
+
 	services[count++] = tracker_ontology_get_id_for_service_type (service);
 
 	if (strcmp (service, "Files") == 0) {
@@ -656,8 +531,6 @@
 	tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
 
-	priv = GET_PRIV (object);
-	
 	tracker_dbus_request_new (request_id,
                                   "DBus request to get search hit count for all, "
                                   "search text:'%s'",
@@ -670,6 +543,8 @@
 		return FALSE;
         }
 
+	priv = GET_PRIV (object);
+
         tree = tracker_query_tree_new (search_text, 
 				       priv->file_index, 
 				       priv->config,
@@ -893,7 +768,6 @@
 			    gchar         **values,
 			    GError        **error)
 {
-	TrackerSearchPriv  *priv;
 	TrackerDBInterface *iface;
 	TrackerDBResultSet *result_set;
 	guint               request_id;
@@ -907,8 +781,6 @@
 	tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
 
-	priv = GET_PRIV (object);
-
         tracker_dbus_request_new (request_id,
                                   "DBus request to get snippet, "
 				  "service:'%s', search text:'%s', id:'%s'",
@@ -951,8 +823,11 @@
         g_free (service_id);
 
 	if (result_set) {
-		gchar **strv;
-		gchar  *text;
+		TrackerSearchPriv  *priv;
+		gchar             **strv;
+		gchar              *text;
+
+		priv = GET_PRIV (object);
 
 		tracker_db_result_set_get (result_set, 0, &text, -1);
 		strv = tracker_parser_text_into_array (text, 
@@ -1301,15 +1176,15 @@
 
 	tracker_dbus_return_val_if_fail (search_text != NULL, FALSE, error);
 	tracker_dbus_return_val_if_fail (value != NULL, FALSE, error);
-
-	priv = GET_PRIV (object);
-        
+      
         tracker_dbus_request_new (request_id,
                                   "DBus request to for suggested words, "
 				  "term:'%s', max dist:%d",
 				  search_text,
 				  max_dist);
 
+	priv = GET_PRIV (object);
+
         *value = tracker_indexer_get_suggestion (priv->file_index, search_text, max_dist);
 
         if (!(*value)) {

Modified: branches/indexer-split/src/trackerd/tracker-search.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-search.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-search.h	Mon Jul 14 13:28:16 2008
@@ -53,15 +53,10 @@
 };
 
 GType          tracker_search_get_type          (void);
-TrackerSearch *tracker_search_new               (void);
-void           tracker_search_set_config        (TrackerSearch     *object,
-						 TrackerConfig     *config);
-void           tracker_search_set_language      (TrackerSearch     *object,
-						 TrackerLanguage   *language);
-void           tracker_search_set_file_index    (TrackerSearch     *object,
-						 TrackerIndexer    *file_index);
-void           tracker_search_set_email_index   (TrackerSearch     *object,
-						 TrackerIndexer    *email_index);
+TrackerSearch *tracker_search_new               (TrackerConfig *config,
+						 TrackerLanguage *language,
+						 TrackerIndexer *file_index,
+						 TrackerIndexer *email_index);
 gboolean       tracker_search_get_hit_count     (TrackerSearch     *object,
 						 const gchar       *service,
 						 const gchar       *search_text,

Modified: branches/indexer-split/src/trackerd/tracker-status.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-status.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-status.c	Mon Jul 14 13:28:16 2008
@@ -24,6 +24,7 @@
 #include "tracker-status.h"
 #include "tracker-dbus.h"
 #include "tracker-daemon.h"
+#include "tracker-main.h"
 
 static TrackerStatus status = TRACKER_STATUS_INITIALIZING;
 
@@ -113,35 +114,53 @@
 }
 
 void
-tracker_status_set_and_signal (TrackerStatus new_status,
-                               gboolean      first_time_index,
-                               gboolean      in_merge,
-                               gboolean      pause_manual,
-                               gboolean      pause_on_battery,
-                               gboolean      pause_io,
-                               gboolean      enable_indexing)
+tracker_status_signal (void)
 {
-        GObject  *object;
-        gboolean  emit;
+        GObject *object;
+
+        object = tracker_dbus_get_object (TRACKER_TYPE_DAEMON);
+
+	/* Pause IO is basically here to know when we are crawling
+	 * instead of indexing the file system. The point being that
+	 * we tell the indexer to pause while we crawl new files
+	 * created. This is redundant now since we don't do both in
+	 * the daemon. Should this be added back?
+	 */
+
+	/* Pause on battery is a config option, not sure how to get
+	 * that from here or the point of passing it in the state
+	 * change either. This signal is going to change because we
+	 * shouldn't send all this crap just for a simple state
+	 * change. This is passed as FALSE for now.
+	 */
+	
+        g_signal_emit_by_name (object, 
+                               "index-state-change", 
+                               tracker_status_to_string (status),
+                               tracker_get_is_first_time_index (),
+                               tracker_get_in_merge (),
+                               tracker_get_is_paused_manually (),
+                               FALSE, /* Pause on battery */
+                               FALSE, /* Pause IO */
+			       !tracker_get_is_readonly ());
+}
+
+void
+tracker_status_set_and_signal (TrackerStatus new_status)
+{
+        gboolean emit;
 
         emit = new_status != status;
         
-        tracker_status_set (new_status);
-
         if (!emit) {
                 return;
         }
 
-        object = tracker_dbus_get_object (TRACKER_TYPE_DAEMON);
+	g_message ("State change from '%s' --> '%s'",
+		   tracker_status_to_string (status),
+		   tracker_status_to_string (new_status));
 
-        g_signal_emit_by_name (object, 
-                               "index-state-change", 
-                               tracker_status_to_string (status),
-                               first_time_index,
-                               in_merge,
-                               pause_manual,
-                               pause_on_battery,
-                               pause_io,
-                               enable_indexing);
+        tracker_status_set (new_status);
+	tracker_status_signal ();
 }
 

Modified: branches/indexer-split/src/trackerd/tracker-status.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-status.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-status.h	Mon Jul 14 13:28:16 2008
@@ -44,13 +44,8 @@
 TrackerStatus tracker_status_get            (void);
 const gchar * tracker_status_get_as_string  (void);
 void          tracker_status_set            (TrackerStatus  new_status);
-void          tracker_status_set_and_signal (TrackerStatus  new_status,
-                                             gboolean       first_time_index,
-                                             gboolean       in_merge,
-                                             gboolean       pause_manual,
-                                             gboolean       pause_on_battery,
-                                             gboolean       pause_io,
-                                             gboolean       enable_indexing);
+void          tracker_status_set_and_signal (TrackerStatus  new_status);
+void          tracker_status_signal         (void);
 
 G_END_DECLS
 

Modified: branches/indexer-split/src/trackerd/tracker-utils.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-utils.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-utils.c	Mon Jul 14 13:28:16 2008
@@ -30,8 +30,6 @@
 #include "tracker-main.h"
 #include "tracker-xesam-manager.h"
 
-extern Tracker *tracker;
-
 gchar *
 tracker_get_radix_by_suffix (const gchar *str, 
 			     const gchar *suffix)
@@ -47,24 +45,6 @@
 }
 
 void
-tracker_throttle (gint multiplier)
-{
-	gint throttle;
-
-	throttle = tracker_config_get_throttle (tracker->config);
-
-	if (throttle < 1) {
-		return;
-	}
-
- 	throttle *= multiplier;
-
-	if (throttle > 0) {
-  		g_usleep (throttle);
-	}
-}
-
-void
 tracker_add_metadata_to_table (GHashTable  *meta_table, 
 			       const gchar *key, 
 			       const gchar *value)
@@ -76,61 +56,3 @@
 	g_hash_table_steal (meta_table, key);
 	g_hash_table_insert (meta_table, (gchar*) key, list);
 }
-
-gboolean
-tracker_is_low_diskspace (void)
-{
-	struct statvfs  st;
-	const gchar    *data_dir;
-        gint            low_disk_space_limit;
-
-        low_disk_space_limit = tracker_config_get_low_disk_space_limit (tracker->config);
-
-	if (low_disk_space_limit < 1) {
-		return FALSE;
-	}
-
-	data_dir = tracker_get_data_dir ();
-
-	if (statvfs (data_dir, &st) == -1) {
-		static gboolean reported = 0;
-
-		if (!reported) {
-			reported = 1;
-			g_critical ("Could not statvfs %s", data_dir);
-		}
-
-		return FALSE;
-	}
-
-	if (((long long) st.f_bavail * 100 / st.f_blocks) <= low_disk_space_limit) {
-		g_critical ("Disk space is low!");
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-gboolean
-tracker_should_pause (void)
-{
-	return  tracker->pause_manual || 
-		tracker_should_pause_on_battery () || 
-		tracker_is_low_diskspace () || 
-		tracker_indexer_are_databases_too_big ();
-}
-
-gboolean
-tracker_should_pause_on_battery (void)
-{
-        if (!tracker->pause_battery) {
-                return FALSE;
-        }
-
-	if (tracker->first_time_index) {
-		return tracker_config_get_disable_indexing_on_battery_init (tracker->config);
-	}
-
-        return tracker_config_get_disable_indexing_on_battery (tracker->config);
-}
-

Modified: branches/indexer-split/src/trackerd/tracker-utils.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-utils.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-utils.h	Mon Jul 14 13:28:16 2008
@@ -29,15 +29,11 @@
 
 gchar *  tracker_get_radix_by_suffix        (const gchar  *str,
                                              const gchar  *suffix);
-void     tracker_throttle                   (gint          multiplier);
 void     tracker_notify_file_data_available (void);
 void     tracker_add_metadata_to_table      (GHashTable   *meta_table,
                                              const char   *key,
                                              const char   *value);
 void     tracker_add_io_grace               (const char   *uri);
-gboolean tracker_is_diskspace_low           (void);
-gboolean tracker_should_pause               (void);
-gboolean tracker_should_pause_on_battery    (void);
 
 G_END_DECLS
 



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