[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