tracker r1870 - in branches/indexer-split: . data/dbus src/tracker-indexer



Author: mr
Date: Mon Jul 14 10:24:34 2008
New Revision: 1870
URL: http://svn.gnome.org/viewvc/tracker?rev=1870&view=rev

Log:
	* data/dbus/tracker-indexer.xml:
	* src/tracker-indexer/tracker-indexer.[ch]:
	* src/tracker-indexer/tracker-main.c: Commit patch from Ivan to
	make the indexer DBus API completely asynchronous.


Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/data/dbus/tracker-indexer.xml
   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

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	Mon Jul 14 10:24:34 2008
@@ -11,21 +11,26 @@
 <node name="/">
   <interface name="org.freedesktop.Tracker.Indexer">  
     <method name="GetRunning">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="b" name="is_running" direction="out" />
     </method>
     <method name="SetRunning">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="b" name="should_be_running" direction="in" />
     </method>
 
     <method name="FilesCheck">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="s" name="module" direction="in" />
       <arg type="as" name="files" direction="in" />
     </method>
     <method name="FilesUpdate">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="s" name="module" direction="in" />
       <arg type="as" name="files" direction="in" />
     </method>
     <method name="FilesDelete">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="s" name="module" direction="in" />
       <arg type="as" name="files" direction="in" />
     </method>

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	Mon Jul 14 10:24:34 2008
@@ -362,9 +362,8 @@
 
 	switch (prop_id) {
 	case PROP_RUNNING:
-		tracker_indexer_set_running (indexer, 
-					     g_value_get_boolean (value), 
-					     NULL);
+		tracker_indexer_set_is_running (indexer, 
+						g_value_get_boolean (value));
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -504,7 +503,7 @@
 
 	priv->timer = g_timer_new ();
 
-	tracker_indexer_set_running (indexer, TRUE, NULL);
+	tracker_indexer_set_is_running (indexer, TRUE);
 
 	g_free (index_file);
 }
@@ -834,23 +833,27 @@
 }
 
 gboolean
-tracker_indexer_set_running (TrackerIndexer  *indexer,
-			     gboolean         should_be_running,
-			     GError         **error)
+tracker_indexer_get_is_running (TrackerIndexer *indexer) 
 {
 	TrackerIndexerPrivate *priv;
-	guint                  request_id;
-	gboolean               changed = FALSE;
 
-	request_id = tracker_dbus_get_next_request_id ();
-
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
+	g_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 
-        tracker_dbus_request_new (request_id,
-                                  "DBus request to %s indexer", 
-                                  should_be_running ? "start" : "stop");
+	return priv->idle_id != 0;
+}
+
+void
+tracker_indexer_set_is_running (TrackerIndexer *indexer,
+				gboolean        should_be_running)
+{
+	TrackerIndexerPrivate *priv;
+	gboolean               changed = FALSE;
+
+	g_return_if_fail (TRACKER_IS_INDEXER (indexer));
+
+	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 
 	if (should_be_running && priv->idle_id == 0) {
 		priv->idle_id = g_idle_add ((GSourceFunc) indexing_func, indexer);
@@ -864,35 +867,56 @@
 	if (changed) {
 		g_object_notify (G_OBJECT (indexer), "running");
 	}
+}
 
-	tracker_dbus_request_success (request_id);
+void
+tracker_indexer_set_running (TrackerIndexer         *indexer,
+			     gboolean                should_be_running,
+			     DBusGMethodInvocation  *context,
+			     GError                **error)
+{
 
-	return TRUE;
+	guint request_id;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+
+        tracker_dbus_request_new (request_id,
+                                  "DBus request to %s indexer", 
+                                  should_be_running ? "start" : "stop");
+
+
+	tracker_indexer_set_is_running (indexer, should_be_running);
+
+	dbus_g_method_return (context);
+
+	tracker_dbus_request_success (request_id);
 }
 
-gboolean
-tracker_indexer_get_running (TrackerIndexer  *indexer,
-			     gboolean        *is_running,
-			     GError         **error)
+void
+tracker_indexer_get_running (TrackerIndexer         *indexer,
+			     DBusGMethodInvocation  *context,
+			     GError                **error)
 {
 	TrackerIndexerPrivate *priv;
 	guint                  request_id;
+	gboolean               is_running;
 
 	request_id = tracker_dbus_get_next_request_id ();
 
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
-	tracker_dbus_return_val_if_fail (is_running != NULL, FALSE, error);
+	tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 
 	tracker_dbus_request_new (request_id,
                                   "DBus request to get running status");
 
-	*is_running = priv->idle_id != 0;
+	is_running = tracker_indexer_get_is_running (indexer); 
 
-	tracker_dbus_request_success (request_id);
+	dbus_g_method_return (context, is_running);
 
-	return TRUE;
+	tracker_dbus_request_success (request_id);
 }
 
 void
@@ -908,19 +932,21 @@
 	}
 }
 
-gboolean
-tracker_indexer_files_check (TrackerIndexer  *indexer,
-			     const gchar     *module_name,
-			     GStrv            files,
-			     GError         **error)
+void
+tracker_indexer_files_check (TrackerIndexer          *indexer,
+			     const gchar             *module_name,
+			     GStrv                    files,
+			     DBusGMethodInvocation   *context,
+			     GError                 **error)
 {
 	TrackerIndexerPrivate *priv;
 	GModule               *module;
 	guint                  request_id;
 	gint                   i;
+	GError                *actual_error = NULL;
 
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
-	tracker_dbus_return_val_if_fail (files != NULL, FALSE, error);
+	tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+	tracker_dbus_async_return_if_fail (files != NULL, FALSE);
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 	request_id = tracker_dbus_get_next_request_id ();
@@ -931,40 +957,45 @@
 
 	module = g_hash_table_lookup (priv->indexer_modules, module_name);
 
-	if (!module) {
+	if (module) {
+		/* Add files to the queue */
+		for (i = 0; files[i]; i++) {
+			PathInfo *info;
+
+			info = path_info_new (module, files[i]);
+			tracker_indexer_add_file (indexer, info);
+		}
+	} else {
 		tracker_dbus_request_failed (request_id,
-					     error,
+					     &actual_error,
 					     "The module '%s' is not loaded",
 					     module_name);
-		return FALSE;
 	}
 
-	/* Add files to the queue */
-	for (i = 0; files[i]; i++) {
-		PathInfo *info;
-
-		info = path_info_new (module, files[i]);
-		tracker_indexer_add_file (indexer, info);
+	if (!actual_error) {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	} else {
+		dbus_g_method_return_error (context, actual_error);
+		g_error_free (actual_error);
 	}
-
-	tracker_dbus_request_success (request_id);
-
-	return TRUE;
 }
 
-gboolean
-tracker_indexer_files_update (TrackerIndexer  *indexer,
-			      const gchar     *module_name,
-			      GStrv            files,
-			      GError         **error)
+void
+tracker_indexer_files_update (TrackerIndexer         *indexer,
+			      const gchar            *module_name,
+			      GStrv                   files,
+			      DBusGMethodInvocation  *context,
+			      GError                **error)
 {
 	TrackerIndexerPrivate *priv;
 	GModule               *module;
 	guint                  request_id;
 	gint                   i;
+	GError                *actual_error = NULL;
 
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
-	tracker_dbus_return_val_if_fail (files != NULL, FALSE, error);
+	tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+	tracker_dbus_async_return_if_fail (files != NULL, FALSE);
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 	request_id = tracker_dbus_get_next_request_id ();
@@ -975,40 +1006,45 @@
 
 	module = g_hash_table_lookup (priv->indexer_modules, module_name);
 
-	if (!module) {
+	if (module) {
+		/* Add files to the queue */
+		for (i = 0; files[i]; i++) {
+			PathInfo *info;
+
+			info = path_info_new (module, files[i]);
+			tracker_indexer_add_file (indexer, info);
+		}
+	} else {
 		tracker_dbus_request_failed (request_id,
-					     error,
+					     &actual_error,
 					     "The module '%s' is not loaded",
 					     module_name);
-		return FALSE;
 	}
 
-	/* Add files to the queue */
-	for (i = 0; files[i]; i++) {
-		PathInfo *info;
-
-		info = path_info_new (module, files[i]);
-		tracker_indexer_add_file (indexer, info);
+	if (!actual_error) {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	} else {
+		dbus_g_method_return_error (context, actual_error);
+		g_error_free (actual_error);
 	}
-
-	tracker_dbus_request_success (request_id);
-
-	return TRUE;
 }
 
-gboolean
-tracker_indexer_files_delete (TrackerIndexer  *indexer,
-			      const gchar     *module_name,
-			      GStrv            files,
-			      GError         **error)
+void
+tracker_indexer_files_delete (TrackerIndexer         *indexer,
+			      const gchar            *module_name,
+			      GStrv                   files,
+			      DBusGMethodInvocation  *context,
+			      GError                **error)
 {
 	TrackerIndexerPrivate *priv;
 	GModule               *module;
 	guint                  request_id;
 	gint                   i;
+	GError                *actual_error = NULL;
 
-	tracker_dbus_return_val_if_fail (TRACKER_IS_INDEXER (indexer), FALSE, error);
-	tracker_dbus_return_val_if_fail (files != NULL, FALSE, error);
+	tracker_dbus_async_return_if_fail (TRACKER_IS_INDEXER (indexer), FALSE);
+	tracker_dbus_async_return_if_fail (files != NULL, FALSE);
 
 	priv = TRACKER_INDEXER_GET_PRIVATE (indexer);
 	request_id = tracker_dbus_get_next_request_id ();
@@ -1019,24 +1055,28 @@
 
 	module = g_hash_table_lookup (priv->indexer_modules, module_name);
 
-	if (!module) {
+	if (module) {
+		/* Add files to the queue */
+		for (i = 0; files[i]; i++) {
+			PathInfo *info;
+
+			info = path_info_new (module, files[i]);
+			tracker_indexer_add_file (indexer, info);
+		}
+
+	} else {
 		tracker_dbus_request_failed (request_id,
-					     error,
+					     &actual_error,
 					     "The module '%s' is not loaded",
 					     module_name);
-		return FALSE;
 	}
 
-	/* Add files to the queue */
-	for (i = 0; files[i]; i++) {
-		PathInfo *info;
-
-		info = path_info_new (module, files[i]);
-		tracker_indexer_add_file (indexer, info);
+	if (!actual_error) {
+		dbus_g_method_return (context);
+		tracker_dbus_request_success (request_id);
+	} else {
+		dbus_g_method_return_error (context, actual_error);
+		g_error_free (actual_error);
 	}
-
-	tracker_dbus_request_success (request_id);
-
-	return TRUE;
 }
 

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	Mon Jul 14 10:24:34 2008
@@ -23,6 +23,7 @@
 #define __TRACKER_INDEXER_H__
 
 #include <glib-object.h>
+#include <dbus/dbus-glib.h>
 
 #define TRACKER_INDEXER_SERVICE      "org.freedesktop.Tracker.Indexer"
 #define TRACKER_INDEXER_PATH         "/org/freedesktop/Tracker/Indexer"
@@ -54,26 +55,40 @@
 
 GType           tracker_indexer_get_type     (void) G_GNUC_CONST;
 TrackerIndexer *tracker_indexer_new          (void);
-gboolean        tracker_indexer_set_running  (TrackerIndexer  *indexer,
-					      gboolean         should_be_running,
-					      GError         **error);
-gboolean        tracker_indexer_get_running  (TrackerIndexer  *indexer,
-					      gboolean        *is_running,
-					      GError         **error);
-void            tracker_indexer_process_all  (TrackerIndexer  *indexer);
-gboolean        tracker_indexer_files_check  (TrackerIndexer  *indexer,
-					      const gchar     *module,
-					      GStrv            files,
-					      GError         **error);
-gboolean        tracker_indexer_files_update (TrackerIndexer  *indexer,
-					      const gchar     *module,
-					      GStrv            files,
-					      GError         **error);
-gboolean        tracker_indexer_files_delete (TrackerIndexer  *indexer,
-					      const gchar     *module,
-					      GStrv            files,
-					      GError         **error);
-void           tracker_indexer_process_all       (TrackerIndexer *indexer);
+
+/* GObject methods */
+gboolean        tracker_indexer_get_is_running   (TrackerIndexer *indexer);
+void            tracker_indexer_set_is_running   (TrackerIndexer *indexer,
+						  gboolean       is_running);
+
+
+/* DBus methods */
+void tracker_indexer_set_running  (TrackerIndexer         *indexer,
+				   gboolean                should_be_running,
+				   DBusGMethodInvocation  *context,
+				   GError                **error);
+void tracker_indexer_get_running  (TrackerIndexer         *indexer,
+				   DBusGMethodInvocation  *context,
+				   GError                **error);
+void tracker_indexer_process_all  (TrackerIndexer         *indexer);
+void tracker_indexer_files_check  (TrackerIndexer         *indexer,
+				   const gchar            *module,
+				   GStrv                   files,
+				   DBusGMethodInvocation  *context,
+				   GError                **error);
+void tracker_indexer_files_update (TrackerIndexer         *indexer,
+				   const gchar            *module,
+				   GStrv                   files,
+				   DBusGMethodInvocation  *context,
+				   GError                **error);
+void tracker_indexer_files_delete (TrackerIndexer         *indexer,
+				   const gchar            *module,
+				   GStrv                   files,
+				   DBusGMethodInvocation  *context,
+				   GError                **error);
+void tracker_indexer_process_all  (TrackerIndexer         *indexer);
+
+
 
 G_END_DECLS
 

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	Mon Jul 14 10:24:34 2008
@@ -184,11 +184,10 @@
 quit_timeout_cb (gpointer user_data)
 {
         TrackerIndexer *indexer;
-        gboolean        running = FALSE;
 
         indexer = TRACKER_INDEXER (user_data);
 
-        if (!tracker_indexer_get_running (indexer, &running, NULL) || !running) {
+        if (!tracker_indexer_get_is_running (indexer)) {
                 g_message ("Indexer is still not running after %d seconds, quitting...",
                            QUIT_TIMEOUT);
                 g_main_loop_quit (main_loop);



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