[tracker/direct-access-update-fd-passing] GAsynResult-ize it all, squash



commit d832d5d35a92e4c359999e882498c4ebd5a7eb09
Author: Philip Van Hoof <philip codeminded be>
Date:   Wed Jul 21 12:06:53 2010 +0200

    GAsynResult-ize it all, squash

 src/libtracker-bus/tracker-bus-fd-update.c |   65 ++++++++++++++-------------
 1 files changed, 34 insertions(+), 31 deletions(-)
---
diff --git a/src/libtracker-bus/tracker-bus-fd-update.c b/src/libtracker-bus/tracker-bus-fd-update.c
index 25d30f7..7decd63 100644
--- a/src/libtracker-bus/tracker-bus-fd-update.c
+++ b/src/libtracker-bus/tracker-bus-fd-update.c
@@ -50,7 +50,7 @@ typedef struct {
 	FastOperationType operation_type;
 	GCancellable *cancellable;
 	DBusPendingCall *dbus_call;
-	GAsyncReadyCallback callback;
+	GSimpleAsyncResult *res;
 	gpointer user_data;
 } FastAsyncData;
 
@@ -86,6 +86,10 @@ fast_async_data_free (gpointer data)
 			dbus_connection_unref (fad->connection);
 		}
 
+		if (fad->res) {
+			/* Don't free, weak */
+		}
+
 		g_slice_free (FastAsyncData, fad);
 	}
 }
@@ -119,6 +123,12 @@ unmarshal_hash_table (DBusMessageIter *iter)
 }
 
 static void
+free_inner_array (gpointer elem)
+{
+	g_ptr_array_free (elem, TRUE);
+}
+
+static void
 sparql_update_fast_callback (DBusPendingCall *call,
                              void            *user_data)
 {
@@ -139,25 +149,12 @@ sparql_update_fast_callback (DBusPendingCall *call,
 		dbus_set_g_error (&error, &dbus_error);
 		dbus_error_free (&dbus_error);
 
-		g_print ("TODO: callback error !\n");
-
-		/*
-		switch (fad->operation_type) {
-		case FAST_UPDATE:
-		case FAST_UPDATE_BATCH:
-			(* fad->void_callback) (error, fad->user_data);
-			break;
-		case FAST_UPDATE_BLANK:
-			(* fad->gptrarray_callback) (NULL, error, fad->user_data);
-			break;
-		default:
-			g_assert_not_reached ();
-			break;
-		}
-		*/
+		g_simple_async_result_set_from_error (fad->res, error);
 
 		dbus_message_unref (reply);
 
+		g_simple_async_result_complete (fad->res);
+
 		fast_async_data_free (fad);
 
 		return;
@@ -167,14 +164,14 @@ sparql_update_fast_callback (DBusPendingCall *call,
 	switch (fad->operation_type) {
 	case FAST_UPDATE:
 	case FAST_UPDATE_BLANK:
-		result = g_ptr_array_new ();
+		result = g_ptr_array_new_with_free_func (free_inner_array);
 		dbus_message_iter_init (reply, &iter);
 		dbus_message_iter_recurse (&iter, &subiter);
 
 		while (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID) {
 			GPtrArray *inner_array;
 
-			inner_array = g_ptr_array_new ();
+			inner_array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_hash_table_unref);
 			g_ptr_array_add (result, inner_array);
 			dbus_message_iter_recurse (&subiter, &subsubiter);
 
@@ -186,9 +183,11 @@ sparql_update_fast_callback (DBusPendingCall *call,
 			dbus_message_iter_next (&subiter);
 		}
 
-		g_print ("TODO: callback !\n");
+		g_simple_async_result_set_op_res_gpointer (fad->res, result, NULL);
+
+		g_simple_async_result_complete (fad->res);
 
-//		(* fad->gptrarray_callback) (result, error, fad->user_data);
+		g_ptr_array_free (result, TRUE);
 
 		break;
 	default:
@@ -329,10 +328,10 @@ sparql_update_fast (DBusConnection     *connection,
 }
 
 static void
-sparql_update_fast_async (DBusConnection *connection,
-                          const gchar    *query,
-                          FastAsyncData  *fad,
-                          GError        **error)
+sparql_update_fast_async (DBusConnection      *connection,
+                          const gchar         *query,
+                          FastAsyncData       *fad,
+                          GError             **error)
 {
 	DBusPendingCall *call;
 
@@ -386,11 +385,12 @@ tracker_bus_fd_sparql_update_async (DBusGConnection       *connection,
 	GError *error = NULL;
 
 	g_return_if_fail (query != NULL);
-	g_return_if_fail (callback != NULL);
 
 	fad = fast_async_data_new (dbus_g_connection_get_connection (connection),
 	                           FAST_UPDATE, cancellable, user_data);
-	fad->callback = callback;
+
+	fad->res = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+	                                      tracker_bus_fd_sparql_update_async);
 
 	sparql_update_fast_async (dbus_g_connection_get_connection (connection),
 	                          query, fad, &error);
@@ -398,6 +398,7 @@ tracker_bus_fd_sparql_update_async (DBusGConnection       *connection,
 	if (error) {
 		g_critical ("Could not initiate update: %s", error->message);
 		g_error_free (error);
+		g_object_unref (fad->res);
 		fast_async_data_free (fad);
 	}
 
@@ -439,14 +440,14 @@ tracker_bus_fd_sparql_update_blank (DBusGConnection *connection,
 		return NULL;
 	}
 
-	result = g_ptr_array_new ();
+	result = g_ptr_array_new_with_free_func (free_inner_array);
 	dbus_message_iter_init (reply, &iter);
 	dbus_message_iter_recurse (&iter, &subiter);
 
 	while (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID) {
 		GPtrArray *inner_array;
 
-		inner_array = g_ptr_array_new ();
+		inner_array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_hash_table_destroy);
 		g_ptr_array_add (result, inner_array);
 		dbus_message_iter_recurse (&subiter, &subsubiter);
 
@@ -486,7 +487,9 @@ tracker_bus_fd_sparql_update_blank_async (DBusGConnection       *connection,
 	                           cancellable,
 	                           user_data);
 	
-	fad->callback = callback;
+
+	fad->res = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+	                                      tracker_bus_fd_sparql_update_blank_async);
 
 	sparql_update_fast_async (dbus_g_connection_get_connection (connection),
 	                          query, fad, &error);
@@ -494,7 +497,7 @@ tracker_bus_fd_sparql_update_blank_async (DBusGConnection       *connection,
 	if (error) {
 		g_critical ("Could not initiate update: %s", error->message);
 		g_error_free (error);
-
+		g_object_unref (fad->res);
 		fast_async_data_free (fad);
 	}
 



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