tracker r1877 - in branches/indexer-split: . data/dbus src/libtracker-common src/tracker-indexer src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1877 - in branches/indexer-split: . data/dbus src/libtracker-common src/tracker-indexer src/trackerd
- Date: Wed, 16 Jul 2008 12:23:03 +0000 (UTC)
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]