[Galago-commits] r2576 - in trunk/galago-daemon: . src tools

galago-commits at freedesktop.org galago-commits at freedesktop.org
Sun Feb 12 03:26:28 PST 2006


Author: chipx86
Date: 2006-02-12 03:25:58 -0800 (Sun, 12 Feb 2006)
New Revision: 2576

Modified:
   trunk/galago-daemon/ChangeLog
   trunk/galago-daemon/src/core.c
   trunk/galago-daemon/src/meta-account.c
   trunk/galago-daemon/src/meta-person.c
   trunk/galago-daemon/src/person-list.c
   trunk/galago-daemon/src/person.c
   trunk/galago-daemon/tools/list-people.c
Log:
Updated to work with the new way of handling persistent (more or less) person IDs and per-session handles. After these changes, the IDs published by, say, eds-feed end up showing up on the client end.  Apps now have a far better chance of a person's ID being tied to the correct thing in a later session.


Modified: trunk/galago-daemon/ChangeLog
===================================================================
--- trunk/galago-daemon/ChangeLog	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/ChangeLog	2006-02-12 11:25:58 UTC (rev 2576)
@@ -1,3 +1,17 @@
+Sun Feb 12 03:23:40 PST 2006  Christian Hammond <chipx86 at chipx86.com>
+
+	* src/core.c:
+	* src/meta-account.c:
+	* src/meta-person.c:
+	* src/person.c:
+	* src/person-list.c:
+	* tools/list-people.c:
+	  - Updated to work with the new way of handling persistent (more or
+	    less) person IDs and per-session handles. After these changes, the
+	    IDs published by, say, eds-feed end up showing up on the client end.
+	    Apps now have a far better chance of a person's ID being tied to the
+	    correct thing in a later session.
+
 Thu Feb 09 00:34:52 PST 2006  Christian Hammond <chipx86 at chipx86.com>
 
 	* configure.ac:

Modified: trunk/galago-daemon/src/core.c
===================================================================
--- trunk/galago-daemon/src/core.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/src/core.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -24,6 +24,9 @@
 #include "person-list.h"
 #include "utils.h"
 
+/* Provided by libgalago */
+void _galago_person_set_session_id(GalagoPerson *person, const char *id);
+
 static DBusHandlerResult
 coco_add_service(DBusConnection *dbus_conn, DBusMessage *message,
                  GalagodCoCo *coco)
@@ -85,29 +88,32 @@
 {
 	DBusMessage *reply;
 	DBusMessageIter iter;
+	GalagodMetaPerson *meta_person;
 	GalagoPerson *person;
+	const char *uid;
 	char *obj_path;
 
 	dbus_message_iter_init(message, &iter);
 	person = galago_dbus_message_iter_get_object(&iter, GALAGO_TYPE_PERSON);
-
 	g_object_set_data(G_OBJECT(person), "coco", coco);
+	obj_path = galagod_person_generate_path(person);
+	galago_object_set_dbus_path(GALAGO_OBJECT(person), obj_path);
 
+	galagod_people_add(person);
+
+	meta_person = GALAGOD_META_PERSON(person);
+	uid = galago_person_get_id(galagod_meta_person_get_person(meta_person));
+
 	/* Send the reply containing the object path. */
 	reply = dbus_message_new_method_return(message);
 	dbus_message_iter_init_append(reply, &iter);
-
-	obj_path = galagod_person_generate_path(person);
-	galago_object_set_dbus_path(GALAGO_OBJECT(person), obj_path);
 	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &obj_path);
-
+	galago_dbus_message_iter_append_string_or_nil(&iter, uid);
 	dbus_connection_send(dbus_conn, reply, NULL);
 	dbus_message_unref(reply);
 
 	g_free(obj_path);
 
-	galagod_people_add(person);
-
 	return DBUS_HANDLER_RESULT_HANDLED;
 }
 

Modified: trunk/galago-daemon/src/meta-account.c
===================================================================
--- trunk/galago-daemon/src/meta-account.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/src/meta-account.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -53,6 +53,7 @@
 	GalagodMetaAccount *meta_account;
 	char *obj_path;
 
+	g_assert(meta_person != NULL);
 	g_return_val_if_fail(meta_service != NULL, NULL);
 	g_return_val_if_fail(meta_person  != NULL, NULL);
 	g_return_val_if_fail(username     != NULL, NULL);

Modified: trunk/galago-daemon/src/meta-person.c
===================================================================
--- trunk/galago-daemon/src/meta-person.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/src/meta-person.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -25,27 +25,17 @@
 
 #include <string.h>
 #include <time.h>
-#include <unistd.h>
 
 /* Provided by libgalago */
-void _galago_account_set_person(GalagoAccount *account,
-								GalagoPerson *person);
+void _galago_account_set_person(GalagoAccount *account, GalagoPerson *person);
+void _galago_person_set_id(GalagoPerson *person, const char *id);
+void _galago_person_set_session_id(GalagoPerson *person,
+								   const char *session_id);
 
-static const char *
-galagod_get_uid(void)
-{
-	static char id[64];
-	static int serial = 0;
 
-	g_snprintf(id, sizeof(id), "%08lx-%04lx-%04lx-%04x",
-			   (unsigned long)time(NULL),
-			   (unsigned long)getpid(),
-			   (unsigned long)g_random_int_range(0, 65535),
-			   serial++);
+/* person-list.c */
+extern GHashTable *meta_people_table;
 
-	return id;
-}
-
 GalagodMetaPerson *
 galagod_meta_person_new(void)
 {
@@ -55,7 +45,9 @@
 	meta_person = g_new0(GalagodMetaPerson, 1);
 
 	galago_context_push(galagod_get_context());
-	meta_person->person = galago_create_person(galagod_get_uid());
+	meta_person->person = galago_create_person(NULL);
+	g_object_set_data(G_OBJECT(meta_person->person), "valid_uid_set",
+					  GINT_TO_POINTER(FALSE));
 
 	obj_path = galagod_person_generate_path(meta_person->person);
 	galago_object_set_dbus_path(GALAGO_OBJECT(meta_person->person), obj_path);
@@ -157,13 +149,26 @@
 galagod_meta_person_add_person(GalagodMetaPerson *meta_person,
 							   GalagoPerson *person)
 {
+	const char *person_id;
+
 	g_return_if_fail(meta_person != NULL);
 	g_return_if_fail(person      != NULL);
 
 	meta_person->people = g_list_append(meta_person->people, person);
-
 	g_object_set_data(G_OBJECT(person), "meta-person", meta_person);
 
+	person_id = galago_person_get_id(person);
+
+	if (galago_person_get_id(meta_person->person) == NULL &&
+		person_id != NULL)
+	{
+		_galago_person_set_id(meta_person->person, person_id);
+		g_object_set_data(G_OBJECT(meta_person->person), "valid_uid_set",
+						  GINT_TO_POINTER(TRUE));
+		g_hash_table_insert(meta_people_table, g_strdup(person_id),
+							meta_person);
+	}
+
 	galagod_person_add_filter(person);
 }
 

Modified: trunk/galago-daemon/src/person-list.c
===================================================================
--- trunk/galago-daemon/src/person-list.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/src/person-list.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -21,7 +21,7 @@
 #include "person-list.h"
 #include "meta-account.h"
 
-static GHashTable *meta_people_table = NULL;
+GHashTable *meta_people_table = NULL;
 static GList *meta_people = NULL;
 static GalagodMetaPerson *meta_me = NULL;
 static size_t meta_person_count = 0;
@@ -159,14 +159,8 @@
 void
 galagod_people_add_meta_person(GalagodMetaPerson *meta_person)
 {
-	const char *id;
-
 	g_return_if_fail(meta_person != NULL);
 
-	id = galago_person_get_id(galagod_meta_person_get_person(meta_person));
-
-	g_hash_table_insert(meta_people_table, g_strdup(id), meta_person);
-
 	meta_people = g_list_append(meta_people, meta_person);
 	meta_person_count++;
 }
@@ -179,8 +173,10 @@
 	g_return_if_fail(meta_person != NULL);
 
 	id = galago_person_get_id(galagod_meta_person_get_person(meta_person));
-	g_hash_table_remove(meta_people_table, id);
 
+	if (id != NULL)
+		g_hash_table_remove(meta_people_table, id);
+
 	meta_people = g_list_remove(meta_people, meta_person);
 
 	meta_person_count--;

Modified: trunk/galago-daemon/src/person.c
===================================================================
--- trunk/galago-daemon/src/person.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/src/person.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -21,7 +21,23 @@
 #include "filter.h"
 #include "meta-person.h"
 #include "utils.h"
+#include <unistd.h>
 
+static const char *
+galagod_get_uid(void)
+{
+	static char id[64];
+	static int serial = 0;
+
+	g_snprintf(id, sizeof(id), "%08lx-%04lx-%04lx-%04x",
+			   (unsigned long)time(NULL),
+			   (unsigned long)getpid(),
+			   (unsigned long)g_random_int_range(0, 65535),
+			   serial++);
+
+	return id;
+}
+
 static void
 _galagod_dbus_person_emit(GalagoPerson *person, const char *signal_name)
 {
@@ -118,9 +134,20 @@
 
 	if (account == NULL)
 	{
-		reply = galagod_object_not_found_error_new(message,
-			"The account '%s' on person '%s' could not be found.",
-			username, galago_person_get_id(main_person));
+		const char *person_id = galago_person_get_id(main_person);
+
+		if (person_id != NULL)
+		{
+			reply = galagod_object_not_found_error_new(message,
+				"The account '%s' on person '%s' could not be found.",
+				username, person_id);
+		}
+		else
+		{
+			reply = galagod_object_not_found_error_new(message,
+				"The account '%s' on person could not be found.",
+				username );
+		}
 	}
 	else
 	{
@@ -252,9 +279,19 @@
 
 	if (photo == NULL)
 	{
-		reply = galagod_object_not_found_error_new(message,
-			"The photo for person '%s' could not be found.",
-			galago_person_get_id(main_person));
+		const char *person_id = galago_person_get_id(main_person);
+
+		if (person_id != NULL)
+		{
+			reply = galagod_object_not_found_error_new(message,
+				"The photo for person '%s' could not be found.",
+				galago_person_get_id(main_person));
+		}
+		else
+		{
+			reply = galagod_object_not_found_error_new(message,
+				"The photo for person could not be found.");
+		}
 	}
 	else
 	{
@@ -292,7 +329,7 @@
 		(coco == NULL
 		 ? galago_context_get_obj_path_prefix()
 		 : galago_object_get_dbus_path(GALAGO_OBJECT(coco))),
-		galago_dbus_normalize_name(galago_person_get_id(person)));
+		galago_dbus_normalize_name(galagod_get_uid()));
 }
 
 void

Modified: trunk/galago-daemon/tools/list-people.c
===================================================================
--- trunk/galago-daemon/tools/list-people.c	2006-02-12 11:23:31 UTC (rev 2575)
+++ trunk/galago-daemon/tools/list-people.c	2006-02-12 11:25:58 UTC (rev 2576)
@@ -28,6 +28,7 @@
 {
 	GList *l;
 	const char *display_name, *uid, *me_text = "";
+	const char *displayed_uid;
 
 	uid = galago_person_get_id(person);
 	display_name = galago_person_get_display_name(person);
@@ -35,10 +36,15 @@
 	if (galago_person_is_me(person))
 		me_text = " (me) ";
 
+	if (uid == NULL)
+		displayed_uid = "no uid";
+	else
+		displayed_uid = uid;
+
 	if (display_name == NULL)
-		printf("%s<%s>:\n", me_text, uid);
+		printf("%s<%s>:\n", me_text, displayed_uid);
 	else
-		printf("%s %s<%s>\n", display_name, me_text, uid);
+		printf("%s %s<%s>\n", display_name, me_text, displayed_uid);
 
 	for (l = galago_person_get_accounts(person, TRUE); l != NULL; l = l->next)
 	{



More information about the galago-commits mailing list