tracker r1877 - in branches/indexer-split: . data/dbus src/libtracker-common src/tracker-indexer src/trackerd



Author: mr
Date: Wed Jul 16 12:23:03 2008
New Revision: 1877
URL: http://svn.gnome.org/viewvc/tracker?rev=1877&view=rev

Log:
Updates

Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/data/dbus/tracker-indexer.xml
   branches/indexer-split/src/libtracker-common/tracker-utils.c
   branches/indexer-split/src/libtracker-common/tracker-utils.h
   branches/indexer-split/src/tracker-indexer/tracker-indexer-module.c
   branches/indexer-split/src/tracker-indexer/tracker-indexer-module.h
   branches/indexer-split/src/tracker-indexer/tracker-indexer.c
   branches/indexer-split/src/tracker-indexer/tracker-indexer.h
   branches/indexer-split/src/tracker-indexer/tracker-main.c
   branches/indexer-split/src/tracker-indexer/tracker-marshal.list
   branches/indexer-split/src/tracker-indexer/tracker-module.h
   branches/indexer-split/src/trackerd/tracker-db.c
   branches/indexer-split/src/trackerd/tracker-dbus.c
   branches/indexer-split/src/trackerd/tracker-main.c
   branches/indexer-split/src/trackerd/tracker-marshal.list
   branches/indexer-split/src/trackerd/tracker-processor.c
   branches/indexer-split/src/trackerd/tracker-xesam-manager.c
   branches/indexer-split/src/trackerd/tracker-xesam-manager.h

Modified: branches/indexer-split/data/dbus/tracker-indexer.xml
==============================================================================
--- branches/indexer-split/data/dbus/tracker-indexer.xml	(original)
+++ branches/indexer-split/data/dbus/tracker-indexer.xml	Wed Jul 16 12:23:03 2008
@@ -27,13 +27,23 @@
       <arg type="as" name="files" direction="in" />
     </method>
     
-    <!-- The old signal in the daemon used to send the time taken, we
-	 can add this later
-      -->
-    <signal name="Status"/>
-    <signal name="Finished"/>
-    <signal name="ModuleStarted"/>
-    <signal name="ModuleFinished"/>
-
+    <!-- Signals --> 
+    <signal name="Status">
+      <arg type="d" name="elapsed_time" />
+      <arg type="s" name="current_module_name" />
+      <arg type="u" name="items_done" />
+      <arg type="u" name="items_remaining" />
+    </signal>
+    <signal name="Started" />
+    <signal name="Finished">
+      <arg type="d" name="elapsed_time" />
+      <arg type="u" name="items_done" />
+    </signal>
+    <signal name="ModuleStarted">
+      <arg type="s" name="module_name" />
+    </signal>
+    <signal name="ModuleFinished">
+      <arg type="s" name="module_name" />
+    </signal>
   </interface>
 </node>

Modified: branches/indexer-split/src/libtracker-common/tracker-utils.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-utils.c	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-utils.c	Wed Jul 16 12:23:03 2008
@@ -22,6 +22,9 @@
 #include <string.h>
 
 #include <glib.h>
+#include <glib/gi18n.h>
+
+#include "tracker-utils.h"
 
 inline gboolean
 tracker_is_empty_string (const char *str)
@@ -115,51 +118,79 @@
 }
 
 gchar *
-tracker_estimate_time_left (GTimer *timer,
-			    guint   items_done,
-			    guint   items_remaining)
+tracker_seconds_estimate_to_string (gdouble seconds_elapsed,
+				    guint   items_done,
+				    guint   items_remaining)
 {
-	GString *s;
-	gdouble  elapsed;
-	gdouble  per_item;
-	gdouble  total;
-	gint     days, hrs, mins, secs;
+	gdouble per_item;
+	gdouble total;
+
+	g_return_val_if_fail (seconds_elapsed >= 0.0, g_strdup (_("unknown time")));
 	
-	if (items_done == 0) {
-		return g_strdup (" unknown time");
+	/* We don't want division by 0 or if total is 0 because items
+	 * remaining is 0 then, equally pointless.
+	 */
+	if (items_done < 1 || 
+	    items_remaining < 1) {
+		return g_strdup (_("unknown time"));
 	}
 
-	elapsed = g_timer_elapsed (timer, NULL);
-	per_item = elapsed / items_done;
+	per_item = seconds_elapsed / items_done;
 	total = per_item * items_remaining;
 
-	if (total <= 0) {
-		return g_strdup (" unknown time");
-	}
+	return tracker_seconds_to_string (total);
+}
 
-	secs = (gint) total % 60;
-	total /= 60;
-	mins = (gint) total % 60;
-	total /= 60;
-	hrs  = (gint) total % 24;
-	days = (gint) total / 24;
+gchar *
+tracker_seconds_to_string (gdouble seconds_elapsed)
+{
+	GString *s;
+	gdouble  total;
+	gint     days, hours, minutes, seconds;
+
+	g_return_val_if_fail (seconds_elapsed >= 0.0, g_strdup (_("unknown time")));
+
+	total    = seconds_elapsed;
+
+	seconds  = (gint) total % 60;
+	total   /= 60;
+	minutes  = (gint) total % 60;
+	total   /= 60;
+	hours    = (gint) total % 24;
+	days     = (gint) total / 24;
 
 	s = g_string_new ("");
 
 	if (days) {
-		g_string_append_printf (s, " %d day%s", days, days == 1 ? "" : "s");
+		g_string_append_printf (s, "%s%d day%s", 
+					s->len > 0 ? " " : "",
+					days, 
+					days == 1 ? "" : "s");
 	}
 	
-	if (hrs) {
-		g_string_append_printf (s, " %2.2d hour%s", hrs, hrs == 1 ? "" : "s");
+	if (hours) {
+		g_string_append_printf (s, "%s%2.2d hour%s", 
+					s->len > 0 ? " " : "",
+					hours, 
+					hours == 1 ? "" : "s");
+	}
+
+	if (minutes) {
+		g_string_append_printf (s, "%s%2.2d minute%s", 
+					s->len > 0 ? " " : "",
+					minutes, 
+					minutes == 1 ? "" : "s"); 
 	}
 
-	if (mins) {
-		g_string_append_printf (s, " %2.2d minute%s", mins, mins == 1 ? "" : "s"); 
+	if (seconds) {
+		g_string_append_printf (s, "%s%2.2d second%s", 
+					s->len > 0 ? " " : "",
+					seconds, 
+					seconds == 1 ? "" : "s");
 	}
 
-	if (secs) {
-		g_string_append_printf (s, " %2.2d second%s", secs, secs == 1 ? "" : "s");
+	if (s->len < 1) {
+		g_string_append_printf (s, _("unknown time"));
 	}
 
 	return g_string_free (s, FALSE);

Modified: branches/indexer-split/src/libtracker-common/tracker-utils.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-utils.h	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-utils.h	Wed Jul 16 12:23:03 2008
@@ -24,15 +24,16 @@
 
 #include <glib.h>
 
-gboolean tracker_is_empty_string    (const char  *str);
-gchar *  tracker_string_replace     (const gchar *haystack,
-				     gchar       *needle,
-				     gchar       *replacement);
-gchar *  tracker_string_remove      (gchar       *haystack,
-				     const gchar *needle);
-gchar *  tracker_escape_string      (const gchar *in);
-gchar *  tracker_estimate_time_left (GTimer      *timer,
-				     guint        items_done,
-				     guint        items_remaining);
+gboolean tracker_is_empty_string            (const char  *str);
+gchar *  tracker_string_replace             (const gchar *haystack,
+					     gchar       *needle,
+					     gchar       *replacement);
+gchar *  tracker_string_remove              (gchar       *haystack,
+					     const gchar *needle);
+gchar *  tracker_escape_string              (const gchar *in);
+gchar *  tracker_seconds_estimate_to_string (gdouble      seconds_elapsed,
+					     guint        items_done,
+					     guint        items_remaining);
+gchar *  tracker_seconds_to_string          (gdouble      seconds_elapsed);
 
 #endif /* __LIBTRACKER_COMMON_UTILS_H__ */

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-module.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-module.c	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-module.c	Wed Jul 16 12:23:03 2008
@@ -82,12 +82,14 @@
 
 TrackerFile *
 tracker_indexer_module_file_new (GModule     *module,
+				 const gchar *module_name,
 				 const gchar *path)
 {
 	TrackerModuleFileGetDataFunc func;
 	TrackerFile *file = NULL;
 
 	file = g_slice_new0 (TrackerFile);
+	file->module_name = g_strdup (module_name);
 	file->path = g_strdup (path);
 
 	if (g_module_symbol (module, "tracker_module_file_get_data", (gpointer *) &func)) {
@@ -108,6 +110,7 @@
 		(func) (file->data);
 	}
 
+	g_free (file->module_name);
 	g_free (file->path);
 	g_slice_free (TrackerFile, file);
 }

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-module.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-module.h	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-module.h	Wed Jul 16 12:23:03 2008
@@ -35,6 +35,7 @@
 G_CONST_RETURN gchar *  tracker_indexer_module_get_name               (GModule     *module);
 
 TrackerFile *           tracker_indexer_module_file_new               (GModule     *module,
+								       const gchar *module_name,
 								       const gchar *path);
 void                    tracker_indexer_module_file_free              (GModule     *module,
 								       TrackerFile *file);

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c	Wed Jul 16 12:23:03 2008
@@ -75,10 +75,10 @@
 #define TRACKER_INDEXER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_INDEXER, TrackerIndexerPrivate))
 
 /* Flush every 'x' seconds */
-#define FLUSH_FREQUENCY             10
+#define FLUSH_FREQUENCY             5
 
 /* Transaction every 'x' items */
-#define TRANSACTION_MAX             50
+#define TRANSACTION_MAX             100
 
 /* Throttle defaults */
 #define THROTTLE_DEFAULT            0
@@ -160,13 +160,14 @@
 
 static PathInfo *
 path_info_new (GModule *module,
+	       const gchar *module_name,
 	       const gchar *path)
 {
 	PathInfo *info;
 
 	info = g_slice_new (PathInfo);
 	info->module = module;
-	info->file = tracker_indexer_module_file_new (module, path);
+	info->file = tracker_indexer_module_file_new (module, module_name, path);
 
 	return info;
 }
@@ -210,29 +211,33 @@
 signal_status (TrackerIndexer *indexer,
 	       const gchar    *why)
 {
-	guint length;
+	gdouble seconds_elapsed;
+	guint   items_remaining;
 
-	length = g_queue_get_length (indexer->private->file_queue);
+	items_remaining = g_queue_get_length (indexer->private->file_queue);
+	seconds_elapsed = g_timer_elapsed (indexer->private->timer, NULL);
 
 	if (indexer->private->items_indexed > 0) {
 		gchar *str;
 
-		str = tracker_estimate_time_left (indexer->private->timer, 
-						  indexer->private->items_indexed, 
-						  length);
+		str = tracker_seconds_estimate_to_string (seconds_elapsed, 
+							  indexer->private->items_indexed, 
+							  items_remaining);
 		
-		g_message ("Indexed %d, %d remaining, %s est. left (%s)", 
+		g_message ("Indexed %d, %d remaining, current module:'%s', %s est. left (%s)", 
 			   indexer->private->items_indexed,
-			   length,
+			   items_remaining,
+			   indexer->private->current_module_name,
 			   str,
 			   why);
 		g_free (str);
 	}
 	
 	g_signal_emit (indexer, signals[STATUS], 0, 
-		       g_timer_elapsed (indexer->private->timer, NULL),
+		       seconds_elapsed,
+		       indexer->private->current_module_name,
 		       indexer->private->items_indexed,
-		       length);
+		       items_remaining);
 }
 
 static gboolean
@@ -440,10 +445,11 @@
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (TrackerIndexerClass, status),
 			      NULL, NULL,
-			      tracker_marshal_VOID__UINT_UINT_UINT,
+			      tracker_marshal_VOID__DOUBLE_STRING_UINT_UINT,
 			      G_TYPE_NONE,
-			      3,
-			      G_TYPE_UINT,
+			      4,
+			      G_TYPE_DOUBLE,
+			      G_TYPE_STRING,
 			      G_TYPE_UINT,
 			      G_TYPE_UINT);
 	signals[STARTED] = 
@@ -461,9 +467,10 @@
 			      G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (TrackerIndexerClass, finished),
 			      NULL, NULL,
-			      g_cclosure_marshal_VOID__UINT,
+			      tracker_marshal_VOID__DOUBLE_UINT,
 			      G_TYPE_NONE, 
-			      1,
+			      2,
+			      G_TYPE_DOUBLE,
 			      G_TYPE_UINT);
 	signals[MODULE_STARTED] =
 		g_signal_new ("module-started",
@@ -512,6 +519,9 @@
 	}
 
 	indexer->private->idle_id = g_idle_add (process_func, indexer);
+	
+	g_timer_destroy (indexer->private->timer);
+	indexer->private->timer = g_timer_new ();
 
 	g_signal_emit (indexer, signals[STARTED], 0);
 }
@@ -519,6 +529,9 @@
 static void
 check_stopped (TrackerIndexer *indexer)
 {
+	gchar   *str;
+	gdouble  seconds_elapsed;
+
 	if (indexer->private->idle_id == 0) {
 		return;
 	}
@@ -528,14 +541,22 @@
 
 	/* No more modules to query, we're done */
 	g_timer_stop (indexer->private->timer);
-	
-	g_message ("Indexer finished in %4.4f seconds, %d items indexed in total",
-		   g_timer_elapsed (indexer->private->timer, NULL),
-		   indexer->private->items_indexed);
+	seconds_elapsed = g_timer_elapsed (indexer->private->timer, NULL);
 
+	/* Clean up source ID */
 	indexer->private->idle_id = 0;
 	
+	/* Print out how long it took us */
+	str = tracker_seconds_to_string (seconds_elapsed);
+
+	g_message ("Indexer finished in %s, %d items indexed in total",
+		   str,
+		   indexer->private->items_indexed);
+	g_free (str);
+
+	/* Finally signal done */
 	g_signal_emit (indexer, signals[FINISHED], 0, 
+		       seconds_elapsed,
 		       indexer->private->items_indexed);
 }
 
@@ -731,6 +752,10 @@
 
 	g_debug ("Processing file:'%s'", info->file->path);
 
+	/* Set the current module */
+	g_free (indexer->private->current_module_name);
+	indexer->private->current_module_name = g_strdup (info->file->module_name);
+	
 	/* Sleep to throttle back indexing */
 	indexer_throttle (indexer->private->config, 100);
 
@@ -816,11 +841,11 @@
 
 		path = g_build_filename (info->file->path, name, NULL);
 
-		new_info = path_info_new (info->module, path);
+		new_info = path_info_new (info->module, info->file->module_name, path);
 		add_file (indexer, new_info);
 
 		if (recurse && g_file_test (path, G_FILE_TEST_IS_DIR)) {
-			new_info = path_info_new (info->module, path);
+			new_info = path_info_new (info->module, info->file->module_name, path);
 			add_directory (indexer, new_info);
 		}
 
@@ -877,7 +902,7 @@
 	for (d = dirs; d; d = d->next) {
 		PathInfo *info;
 
-		info = path_info_new (module, d->data);
+		info = path_info_new (module, module_name, d->data);
 		add_directory (indexer, info);
 	}
 
@@ -985,7 +1010,7 @@
 		for (i = 0; files[i]; i++) {
 			PathInfo *info;
 
-			info = path_info_new (module, files[i]);
+			info = path_info_new (module, module_name, files[i]);
 			add_file (indexer, info);
 		}
 	} else {
@@ -1032,7 +1057,7 @@
 		for (i = 0; files[i]; i++) {
 			PathInfo *info;
 
-			info = path_info_new (module, files[i]);
+			info = path_info_new (module, module_name, files[i]);
 			add_file (indexer, info);
 		}
 	} else {
@@ -1079,7 +1104,7 @@
 		for (i = 0; files[i]; i++) {
 			PathInfo *info;
 
-			info = path_info_new (module, files[i]);
+			info = path_info_new (module, module_name, files[i]);
 			add_file (indexer, info);
 		}
 

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.h	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.h	Wed Jul 16 12:23:03 2008
@@ -53,11 +53,13 @@
 	GObjectClass parent_class;
 
 	void (*status)          (TrackerIndexer *indexer,
-				 guint           seconds_elapsed,
+				 gdouble         seconds_elapsed,
+				 const gchar    *current_module_name,
 				 guint           items_indexed,
 				 guint           items_remaining);
 	void (*started)         (TrackerIndexer *indexer);
 	void (*finished)        (TrackerIndexer *indexer,
+				 gdouble         seconds_elapsed,
 				 guint           items_indexed);
 	void (*module_started)  (TrackerIndexer *indexer,
 				 const gchar    *module_name);

Modified: branches/indexer-split/src/tracker-indexer/tracker-main.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-main.c	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-main.c	Wed Jul 16 12:23:03 2008
@@ -203,6 +203,7 @@
 
 static void
 indexer_finished_cb (TrackerIndexer *indexer,
+                     gdouble seconds_elapsed,
                      guint items_indexed,
 		     gpointer user_data)
 {

Modified: branches/indexer-split/src/tracker-indexer/tracker-marshal.list
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-marshal.list	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-marshal.list	Wed Jul 16 12:23:03 2008
@@ -1 +1,2 @@
-VOID:UINT,UINT,UINT
+VOID:DOUBLE,UINT
+VOID:DOUBLE,STRING,UINT,UINT

Modified: branches/indexer-split/src/tracker-indexer/tracker-module.h
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-module.h	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-module.h	Wed Jul 16 12:23:03 2008
@@ -28,6 +28,7 @@
 
 struct TrackerFile {
 	gchar    *path;
+        gchar    *module_name;
 	gpointer  data;
 };
 

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	Wed Jul 16 12:23:03 2008
@@ -462,7 +462,7 @@
 
 	g_free (eid);
 
-	tracker_xesam_manager_wakeup (NULL);
+	tracker_xesam_manager_wakeup ();
 
 	return id;
 }

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	Wed Jul 16 12:23:03 2008
@@ -41,6 +41,7 @@
 #include "tracker-xesam-glue.h"
 #include "tracker-indexer-client.h"
 #include "tracker-utils.h"
+#include "tracker-marshal.h"
 
 static DBusGConnection *connection;
 static DBusGProxy      *proxy;
@@ -326,8 +327,6 @@
 DBusGProxy *
 tracker_dbus_indexer_get_proxy (void)
 {
-	GError *error = NULL;
-
 	if (!connection) {
 		g_critical ("DBus support must be initialized before starting the indexer!");
 		return NULL;
@@ -344,12 +343,35 @@
 			g_critical ("Couldn't create a DBusGProxy to the indexer service");
 			return NULL;
 		}
+			 
+		/* Add marshallers */
+		dbus_g_object_register_marshaller (tracker_marshal_VOID__DOUBLE_STRING_UINT_UINT,
+						   G_TYPE_NONE,
+						   G_TYPE_DOUBLE,
+						   G_TYPE_STRING,
+						   G_TYPE_UINT,
+						   G_TYPE_UINT,
+						   G_TYPE_INVALID);
+		dbus_g_object_register_marshaller (tracker_marshal_VOID__DOUBLE_UINT,
+						   G_TYPE_NONE,
+						   G_TYPE_DOUBLE,
+						   G_TYPE_UINT,
+						   G_TYPE_INVALID);
+
+		/* Add signals, why can't we use introspection for this? */
+		dbus_g_proxy_add_signal (proxy_for_indexer,
+					 "Status",
+					 G_TYPE_DOUBLE,
+					 G_TYPE_STRING,
+					 G_TYPE_UINT,
+					 G_TYPE_UINT,
+					 G_TYPE_INVALID);
+		dbus_g_proxy_add_signal (proxy_for_indexer,
+					 "Finished",
+					 G_TYPE_DOUBLE,
+					 G_TYPE_UINT,
+					 G_TYPE_INVALID);
 	}
 
-	if (error) {
-		g_warning ("Couldn't start indexer, %s",
-			   error->message);
-	}
-	
 	return proxy_for_indexer;
 }

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	Wed Jul 16 12:23:03 2008
@@ -556,18 +556,12 @@
 static gboolean
 start_cb (gpointer user_data)
 {
-	DBusGProxy *proxy;
-
 	if (!is_running) {
 		return FALSE;
 	}
 
-	/* Get files first */
 	tracker_processor_start (user_data);
 	
-	proxy = tracker_dbus_indexer_get_proxy ();
-	tracker_xesam_subscribe_index_updated (proxy);
-
 	return FALSE;
 }
 
@@ -821,9 +815,9 @@
 	shutdown_directories ();
 
 	/* Shutdown major subsystems */
-	tracker_dbus_shutdown ();
         tracker_module_config_shutdown ();
 	tracker_xesam_manager_shutdown ();
+	tracker_dbus_shutdown ();
 	tracker_db_manager_shutdown ();
 	tracker_db_shutdown ();
 	tracker_monitor_shutdown ();

Modified: branches/indexer-split/src/trackerd/tracker-marshal.list
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-marshal.list	(original)
+++ branches/indexer-split/src/trackerd/tracker-marshal.list	Wed Jul 16 12:23:03 2008
@@ -3,12 +3,12 @@
 VOID:STRING,STRING,STRING
 VOID:STRING,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN
 
-# HitsRemoved, HitsModified DBus signals
+# XESAM signals -- HitsRemoved, HitsModified
 VOID:STRING,BOXED
 
-# HitsAdded DBus signal
+# XESAM signals -- HitsAdded
 VOID:STRING,UINT
 
-#hits-added, hits-modified, hits-removed GObject signals
-VOID:OBJECT
-
+# Indexer signals
+VOID:DOUBLE,UINT
+VOID:DOUBLE,STRING,UINT,UINT

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	Wed Jul 16 12:23:03 2008
@@ -27,9 +27,11 @@
 
 #include <libtracker-common/tracker-module-config.h>
 #include <libtracker-common/tracker-hal.h>
+#include <libtracker-common/tracker-utils.h>
 
 #include "tracker-processor.h"
 #include "tracker-crawler.h"
+#include "tracker-dbus.h"
 #include "tracker-monitor.h"
 #include "tracker-status.h"
 
@@ -43,6 +45,8 @@
 
 	TrackerCrawler *crawler;
 
+	DBusGProxy     *indexer_proxy;
+
 	GList          *modules;
 	GList          *current_module;
 
@@ -64,6 +68,16 @@
 
 static void tracker_processor_finalize (GObject          *object);
 static void process_next_module        (TrackerProcessor *processor);
+static void indexer_status_cb          (DBusGProxy       *proxy,
+					gdouble           seconds_elapsed,
+					const gchar      *current_module_name,
+					guint             items_done,
+					guint             items_remaining,
+					gpointer          user_data);
+static void indexer_finished_cb        (DBusGProxy       *proxy,
+					gdouble           seconds_elapsed,
+					guint             items_done,
+					gpointer          user_data);
 static void crawler_all_sent_cb        (TrackerCrawler   *crawler,
 					gpointer          user_data);
 static void crawler_finished_cb        (TrackerCrawler   *crawler,
@@ -72,6 +86,7 @@
 					guint             files_found,
 					guint             files_ignored,
 					gpointer          user_data);
+
 #ifdef HAVE_HAL
 static void mount_point_added_cb       (TrackerHal       *hal,
 					const gchar      *mount_point,
@@ -117,9 +132,11 @@
 static void
 tracker_processor_finalize (GObject *object)
 {
+	TrackerProcessor        *processor;
 	TrackerProcessorPrivate *priv;
 
-	priv = TRACKER_PROCESSOR_GET_PRIVATE (object);
+	processor = TRACKER_PROCESSOR (object);
+	priv = TRACKER_PROCESSOR_GET_PRIVATE (processor);
 
 	if (priv->timer) {
 		g_timer_destroy (priv->timer);
@@ -127,6 +144,14 @@
 
 	g_list_free (priv->modules);
 
+	dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Finished",
+					G_CALLBACK (indexer_finished_cb),
+					processor);
+	dbus_g_proxy_disconnect_signal (priv->indexer_proxy, "Status",
+					G_CALLBACK (indexer_status_cb),
+					processor);
+	g_object_unref (priv->indexer_proxy);
+	
 	g_signal_handlers_disconnect_by_func (priv->crawler,
 					      G_CALLBACK (crawler_all_sent_cb),
 					      object);
@@ -266,14 +291,60 @@
 }
 
 static void
-crawler_all_sent_cb (TrackerCrawler *crawler,
-		     gpointer        user_data)
-{
+indexer_status_cb (DBusGProxy  *proxy,
+		   gdouble      seconds_elapsed,
+		   const gchar *current_module_name,
+		   guint        items_done,
+		   guint        items_remaining,
+		   gpointer     user_data)
+{
+	gchar *str;
+
+	str = tracker_seconds_estimate_to_string (seconds_elapsed, 
+						  items_done, 
+						  items_remaining);
+
+	g_message ("Indexed %d, %d remaining, current module:'%s', %s est. left", 
+		   items_done,
+		   items_remaining,
+		   current_module_name,
+		   str);
+	g_free (str);
+}
+
+static void
+indexer_finished_cb (DBusGProxy  *proxy,
+		     gdouble      seconds_elapsed,
+		     guint        items_done,
+		     gpointer     user_data)
+{
+	TrackerProcessor *processor;
+	gchar            *str;
+
+	str = tracker_seconds_to_string (seconds_elapsed);
+
+	g_message ("Indexer finished in %s, %d items indexed in total",
+		   str,
+		   items_done);
+	g_free (str);
+
 	/* Do we even need this step Optimizing ? */
 	tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
-	
-	/* All done */
+
+	/* Now the indexer is done, we can signal our status as IDLE */ 
 	tracker_status_set_and_signal (TRACKER_STATUS_IDLE);
+
+	/* Signal the processor is now finished */
+	processor = TRACKER_PROCESSOR (user_data);
+	g_signal_emit (processor, signals[FINISHED], 0);
+}
+
+static void
+crawler_all_sent_cb (TrackerCrawler *crawler,
+		     gpointer        user_data)
+{
+	g_message ("All items have been sent to the indexer to process, "
+		   "waiting for indexer to finished");
 }
 
 static void
@@ -330,6 +401,7 @@
 {
 	TrackerProcessor        *processor;
 	TrackerProcessorPrivate *priv;
+	DBusGProxy              *proxy;
 
 	g_return_val_if_fail (TRACKER_IS_CONFIG (config), NULL);
 
@@ -365,6 +437,21 @@
 			  G_CALLBACK (crawler_finished_cb),
 			  processor);
 
+	/* Set up the indexer proxy and signalling to know when we are
+	 * finished.
+	 */
+	proxy = tracker_dbus_indexer_get_proxy ();
+	priv->indexer_proxy = g_object_ref (proxy);
+	
+	dbus_g_proxy_connect_signal (proxy, "Status",
+				     G_CALLBACK (indexer_status_cb),
+				     g_object_ref (processor),
+				     (GClosureNotify) g_object_unref);
+	dbus_g_proxy_connect_signal (proxy, "Finished",
+				     G_CALLBACK (indexer_finished_cb),
+				     g_object_ref (processor),
+				     (GClosureNotify) g_object_unref);
+
 	return processor;
 }
 
@@ -430,11 +517,11 @@
 
 		/* All done */
 		tracker_status_set_and_signal (TRACKER_STATUS_IDLE);
+
+		g_signal_emit (processor, signals[FINISHED], 0);
 	} else {
 		tracker_status_set_and_signal (TRACKER_STATUS_INDEXING);
 	}
-
-	g_signal_emit (processor, signals[FINISHED], 0);
 }
 
 guint 

Modified: branches/indexer-split/src/trackerd/tracker-xesam-manager.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-xesam-manager.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-xesam-manager.c	Wed Jul 16 12:23:03 2008
@@ -25,6 +25,7 @@
 #include <unistd.h>
 
 #include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-utils.h>
 
 #include <libtracker-db/tracker-db-manager.h>
 
@@ -36,6 +37,17 @@
 static gchar      *xesam_dir;
 static gboolean    live_search_handler_running = FALSE;
 
+static void
+indexer_status_cb (DBusGProxy  *proxy,
+		   gdouble      seconds_elapsed,
+		   const gchar *current_module_name,
+		   guint        items_done,
+		   guint        items_remaining,
+		   gpointer     user_data)
+{
+	tracker_xesam_manager_wakeup ();	
+}
+
 GQuark
 tracker_xesam_manager_error_quark (void)
 {
@@ -51,6 +63,8 @@
 void 
 tracker_xesam_manager_init (void)
 {
+	DBusGProxy *proxy;
+
 	if (xesam_sessions) {
 		return;
 	}
@@ -62,61 +76,27 @@
 
 	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_index_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);
+	proxy = tracker_dbus_indexer_get_proxy ();
+	dbus_g_proxy_connect_signal (proxy, "Status",
+				     G_CALLBACK (indexer_status_cb),
+				     g_object_ref (proxy),
+				     (GClosureNotify) g_object_unref);
 }
 
 void
 tracker_xesam_manager_shutdown (void)
 {
+	DBusGProxy *proxy;
+
 	if (!xesam_sessions) {
 		return;
 	}
 
+	proxy = tracker_dbus_indexer_get_proxy ();
+	dbus_g_proxy_disconnect_signal (proxy, "Status",
+					G_CALLBACK (indexer_status_cb),
+					NULL);
+
 	g_free (xesam_dir);
 	xesam_dir = NULL;
 
@@ -348,7 +328,7 @@
 }
 
 void 
-tracker_xesam_manager_wakeup (gpointer user_data)
+tracker_xesam_manager_wakeup (void)
 {
 	/* This happens each time a new event is created */
 
@@ -360,7 +340,6 @@
 	 * we didn't get a wakeup-call nor we had items to process this loop
 	 */
 
-
 	if (!live_search_handler_running) {
 		live_search_handler_running = TRUE;
 		g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE,

Modified: branches/indexer-split/src/trackerd/tracker-xesam-manager.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-xesam-manager.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-xesam-manager.h	Wed Jul 16 12:23:03 2008
@@ -29,7 +29,7 @@
 
 G_BEGIN_DECLS
 
-#define TRACKER_XESAM_ERROR_DOMAIN tracker_xesam_manager_error_quark()
+#define TRACKER_XESAM_ERROR_DOMAIN tracker_xesam_manager_error_quark ()
 
 typedef enum {
 	TRACKER_XESAM_ERROR_SEARCH_ID_NOT_REGISTERED = 1,
@@ -63,8 +63,7 @@
 						       GError                 **error);
 gchar *  tracker_xesam_manager_generate_unique_key    (void);
 gboolean tracker_xesam_manager_is_uri_in_xesam_dir    (const gchar             *uri);
-void     tracker_xesam_subscribe_index_updated        (DBusGProxy *proxy);
-void     tracker_xesam_manager_wakeup                 (gpointer user_data);
+void     tracker_xesam_manager_wakeup                 (void);
 
 G_END_DECLS
 



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