[Galago-commits] r2525 - in branches/libgalago/protocol-cleanup: . libgalago

galago-commits at freedesktop.org galago-commits at freedesktop.org
Fri Feb 3 00:00:20 PST 2006


Author: chipx86
Date: 2006-02-02 23:59:59 -0800 (Thu, 02 Feb 2006)
New Revision: 2525

Modified:
   branches/libgalago/protocol-cleanup/ChangeLog
   branches/libgalago/protocol-cleanup/libgalago/galago-account.c
   branches/libgalago/protocol-cleanup/libgalago/galago-core.c
   branches/libgalago/protocol-cleanup/libgalago/galago-presence.c
   branches/libgalago/protocol-cleanup/libgalago/galago-private.h
   branches/libgalago/protocol-cleanup/libgalago/galago-service.c
Log:
- Begin work on having AddPerson and SetPresence return object paths.
- Do some little cleanups and API changes. A lot of this is in flux.


Modified: branches/libgalago/protocol-cleanup/ChangeLog
===================================================================
--- branches/libgalago/protocol-cleanup/ChangeLog	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/ChangeLog	2006-02-03 07:59:59 UTC (rev 2525)
@@ -1,3 +1,13 @@
+Thu Feb 02 23:57:48 PST 2006  Christian Hammond <chipx86 at chipx86.com>
+
+	* libgalago/galago-account.c:
+	* libgalago/galago-core.c:
+	* libgalago/galago-presence.c:
+	* libgalago/galago-private.h:
+	* libgalago/galago-service.c:
+	  - Begin work on having AddPerson and SetPresence return object paths.
+	  - Do some little cleanups and API changes. A lot of this is in flux.
+
 Wed Feb 01 20:51:34 PST 2006  Christian Hammond <chipx86 at chipx86.com>
 
 	* libgalago/galago-account.c:

Modified: branches/libgalago/protocol-cleanup/libgalago/galago-account.c
===================================================================
--- branches/libgalago/protocol-cleanup/libgalago/galago-account.c	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/libgalago/galago-account.c	2006-02-03 07:59:59 UTC (rev 2525)
@@ -479,6 +479,7 @@
 	g_return_val_if_fail(GALAGO_IS_SERVICE(service),            NULL);
 	g_return_val_if_fail(GALAGO_IS_PERSON(person),              NULL);
 	g_return_val_if_fail(username != NULL && *username != '\0', NULL);
+	g_return_val_if_fail(obj_path == NULL || *obj_path != '\0', NULL);
 
 	service_origin = galago_object_get_origin(GALAGO_OBJECT(service));
 	person_origin  = galago_object_get_origin(GALAGO_OBJECT(person));
@@ -498,7 +499,8 @@
 							   NULL);
 
 		/* Set the object path, if specified. */
-		galago_object_set_dbus_path(GALAGO_OBJECT(account), obj_path);
+		if (service_origin == GALAGO_REMOTE)
+			galago_object_set_dbus_path(GALAGO_OBJECT(account), obj_path);
 
 		_galago_person_add_account(person, account);
 		_galago_service_add_account(service, account);
@@ -604,6 +606,24 @@
 	_galago_person_add_account(person, account);
 }
 
+void
+_galago_account_set_person(GalagoAccount *account, GalagoPerson *person)
+{
+	g_return_if_fail(account != NULL);
+	g_return_if_fail(person  != NULL);
+	g_return_if_fail(GALAGO_IS_ACCOUNT(account));
+	g_return_if_fail(GALAGO_IS_PERSON(person));
+	g_return_if_fail(galago_object_get_origin(GALAGO_OBJECT(person)) ==
+					 galago_object_get_origin(GALAGO_OBJECT(account)));
+
+	if (account->priv->person == person)
+		return;
+
+	_galago_person_remove_account(account->priv->person, account);
+	account->priv->person = person;
+	_galago_person_add_account(person, account);
+}
+
 GalagoPerson *
 galago_account_get_person(const GalagoAccount *account)
 {
@@ -848,38 +868,11 @@
 GalagoPresence *
 galago_account_create_presence(GalagoAccount *account)
 {
-	GalagoPresence *presence;
-
 	g_return_val_if_fail(galago_is_initted(),        NULL);
 	g_return_val_if_fail(account != NULL,            NULL);
 	g_return_val_if_fail(GALAGO_IS_ACCOUNT(account), NULL);
 
-	presence = galago_account_get_presence(account, FALSE);
-
-	if (presence == NULL)
-	{
-		const char *obj_prefix;
-
-		galago_context_push(galago_object_get_context(GALAGO_OBJECT(account)));
-		presence = g_object_new(GALAGO_TYPE_PRESENCE,
-			"origin",  galago_object_get_origin(GALAGO_OBJECT(account)),
-			"account", account,
-			NULL);
-		galago_context_pop();
-
-		obj_prefix = galago_object_get_dbus_path(GALAGO_OBJECT(account));
-
-		if (obj_prefix != NULL)
-		{
-			char *obj_path = g_strdup_printf("%s/presence", obj_prefix);
-			galago_object_set_dbus_path(GALAGO_OBJECT(presence), obj_path);
-			g_free(obj_path);
-		}
-
-		_galago_account_set_presence(account, presence);
-	}
-
-	return presence;
+	return _galago_presence_new(account, NULL);
 }
 
 GalagoPresence *

Modified: branches/libgalago/protocol-cleanup/libgalago/galago-core.c
===================================================================
--- branches/libgalago/protocol-cleanup/libgalago/galago-core.c	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/libgalago/galago-core.c	2006-02-03 07:59:59 UTC (rev 2525)
@@ -1368,8 +1368,10 @@
 _galago_dbus_core_add_person(GalagoPerson *person)
 {
 	DBusConnection *dbus_conn;
-	DBusMessage *message;
+	DBusMessage *message, *reply;
 	DBusMessageIter iter;
+	const char *obj_path;
+	DBusError error;
 
 	g_signal_emit(_core, signals[PERSON_ADDED], 0, person);
 
@@ -1388,13 +1390,26 @@
 
 	g_return_if_fail(message != NULL);
 
-	dbus_message_set_no_reply(message, TRUE);
-
 	dbus_message_iter_init_append(message, &iter);
 	galago_dbus_message_iter_append_object(&iter, GALAGO_OBJECT(person));
 
-	dbus_connection_send(dbus_conn, message, NULL);
+	dbus_error_init(&error);
+	reply = dbus_connection_send_with_reply_and_block(dbus_conn, message, -1,
+													  &error);
 	dbus_message_unref(message);
+
+	if (dbus_error_is_set(&error))
+	{
+		g_warning("Error sending AddPerson: %s", error.message);
+		return;
+	}
+
+	g_assert(reply != NULL);
+
+	dbus_message_iter_init(reply, &iter);
+	dbus_message_iter_get_basic(&iter, &obj_path);
+
+	galago_object_set_dbus_path(GALAGO_OBJECT(person), obj_path);
 }
 
 static void

Modified: branches/libgalago/protocol-cleanup/libgalago/galago-presence.c
===================================================================
--- branches/libgalago/protocol-cleanup/libgalago/galago-presence.c	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/libgalago/galago-presence.c	2006-02-03 07:59:59 UTC (rev 2525)
@@ -207,6 +207,9 @@
 	gboolean is_idle;
 	dbus_uint32_t idle_time;
 
+	galago_dbus_message_iter_append_string_or_nil(iter,
+		galago_object_get_dbus_path(object));
+
 	galago_dbus_message_iter_append_object(iter,
 		GALAGO_OBJECT(galago_presence_get_account(presence)));
 
@@ -226,9 +229,13 @@
 	GalagoPresence *presence;
 	GalagoAccount *account;
 	GList *l, *statuses;
+	const char *obj_path;
 	gboolean idle;
 	time_t idle_start_time = 0;
 
+	obj_path = galago_dbus_message_iter_get_string_or_nil(iter);
+	dbus_message_iter_next(iter);
+
 	account = galago_dbus_message_iter_get_object(iter, GALAGO_TYPE_ACCOUNT);
 	dbus_message_iter_next(iter);
 
@@ -238,7 +245,7 @@
 	dbus_message_iter_get_basic(iter, &idle_start_time);
 	dbus_message_iter_next(iter);
 
-	presence = galago_account_create_presence(account);
+	presence = _galago_presence_new(account, obj_path);
 	galago_presence_set_idle(presence, idle, idle_start_time);
 
 	statuses = galago_dbus_message_iter_get_object_list(iter,
@@ -299,7 +306,36 @@
 	}
 }
 
+GalagoPresence *
+_galago_presence_new(GalagoAccount *account, const char *obj_path)
+{
+	GalagoPresence *presence;
 
+	g_return_val_if_fail(galago_is_initted(),        NULL);
+	g_return_val_if_fail(account != NULL,            NULL);
+	g_return_val_if_fail(GALAGO_IS_ACCOUNT(account), NULL);
+	g_return_val_if_fail(obj_path == NULL || *obj_path != '\0', NULL);
+
+	presence = galago_account_get_presence(account, FALSE);
+
+	if (presence == NULL)
+	{
+		galago_context_push(galago_object_get_context(GALAGO_OBJECT(account)));
+		presence = g_object_new(GALAGO_TYPE_PRESENCE,
+			"origin",  galago_object_get_origin(GALAGO_OBJECT(account)),
+			"account", account,
+			NULL);
+		galago_context_pop();
+
+		galago_object_set_dbus_path(GALAGO_OBJECT(presence), obj_path);
+
+		_galago_account_set_presence(account, presence);
+	}
+
+	return presence;
+}
+
+
 /**************************************************************************
  * GalagoPresence API
  **************************************************************************/

Modified: branches/libgalago/protocol-cleanup/libgalago/galago-private.h
===================================================================
--- branches/libgalago/protocol-cleanup/libgalago/galago-private.h	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/libgalago/galago-private.h	2006-02-03 07:59:59 UTC (rev 2525)
@@ -109,4 +109,7 @@
 void _galago_person_remove_account(GalagoPerson *person,
 								   GalagoAccount *account);
 
+GalagoPresence *_galago_presence_new(GalagoAccount *account,
+									 const char *obj_path);
+
 #endif /* _GALAGO_PRIVATE_H_ */

Modified: branches/libgalago/protocol-cleanup/libgalago/galago-service.c
===================================================================
--- branches/libgalago/protocol-cleanup/libgalago/galago-service.c	2006-02-03 07:56:17 UTC (rev 2524)
+++ branches/libgalago/protocol-cleanup/libgalago/galago-service.c	2006-02-03 07:59:59 UTC (rev 2525)
@@ -422,7 +422,8 @@
 							   NULL);
 
 		/* Set the object path, if specified. */
-		galago_object_set_dbus_path(GALAGO_OBJECT(service), obj_path);
+		if (origin == GALAGO_REMOTE)
+			galago_object_set_dbus_path(GALAGO_OBJECT(service), obj_path);
 
 		galago_context_add_service(service);
 	}



More information about the galago-commits mailing list