[Galago-commits] r2374 - in trunk/libgalago: . libgalago tests
galago-commits at freedesktop.org
galago-commits at freedesktop.org
Wed Dec 14 00:27:33 PST 2005
Author: chipx86
Date: 2005-12-14 00:27:23 -0800 (Wed, 14 Dec 2005)
New Revision: 2374
Added:
trunk/libgalago/tests/get-person-attr.c
trunk/libgalago/tests/person-attr-test.c
Removed:
trunk/libgalago/tests/get-property.c
trunk/libgalago/tests/property-test.c
Modified:
trunk/libgalago/ChangeLog
trunk/libgalago/libgalago/galago-core.c
trunk/libgalago/libgalago/galago-dbus.h
trunk/libgalago/libgalago/galago-object.c
trunk/libgalago/libgalago/galago-object.h
trunk/libgalago/libgalago/galago-person.c
trunk/libgalago/libgalago/galago-person.h
trunk/libgalago/tests/Makefile.am
Log:
Moved Person Properties out into a more generic Object Attributes model. Subclasses of GalagoObject can set a flag indicating if they support object attributes. Right now, this is only GalagoPerson, but GalagoAccount will later. These are only meant for remoted attributes. Locally stored in-process data should use GObject user data support.
Modified: trunk/libgalago/ChangeLog
===================================================================
--- trunk/libgalago/ChangeLog 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/ChangeLog 2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,3 +1,23 @@
+Wed Dec 14 00:25:47 PST 2005 Christian Hammond <chipx86 at chipx86.com>
+
+ * libgalago/galago-core.c:
+ * libgalago/galago-dbus.h:
+ * libgalago/galago-object.c:
+ * libgalago/galago-object.h:
+ * libgalago/galago-person.c:
+ * libgalago/galago-person.h:
+ * tests/Makefile.am:
+ A tests/get-person-attr.c:
+ D tests/get-property.c:
+ A tests/person-attr-test.c:
+ D tests/property-test.c:
+ - Moved Person Properties out into a more generic Object Attributes
+ model. Subclasses of GalagoObject can set a flag indicating if they
+ support object attributes. Right now, this is only GalagoPerson,
+ but GalagoAccount will later. These are only meant for remoted
+ attributes. Locally stored in-process data should use GObject user
+ data support.
+
Sun Dec 04 04:36:39 PST 2005 Christian Hammond <chipx86 at chipx86.com>
* libgalago/galago-core.c:
Modified: trunk/libgalago/libgalago/galago-core.c
===================================================================
--- trunk/libgalago/libgalago/galago-core.c 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-core.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -425,6 +425,12 @@
dbus_message_iter_init(message, &iter);
+#define MATCH_ATTRIBUTABLE_OBJECTS(signalname) \
+ (dbus_message_is_signal(message, GALAGO_DBUS_ACCOUNT_INTERFACE, \
+ (signalname)) || \
+ dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE, \
+ (signalname)))
+
/*
* Core
*/
@@ -444,6 +450,71 @@
g_object_unref(service);
}
/*
+ * Attributes
+ *
+ * This applies to Person and Account objects.
+ */
+ else if (MATCH_ATTRIBUTABLE_OBJECTS("AttributeSet"))
+ {
+ GalagoObject *object = galago_context_get_object(path);
+
+ if (object != NULL)
+ {
+ DBusMessageIter value_iter;
+ const char *name;
+ int arg_type;
+
+ dbus_message_iter_get_basic(&iter, &name);
+ dbus_message_iter_next(&iter);
+
+ dbus_message_iter_recurse(&iter, &value_iter);
+ arg_type = dbus_message_iter_get_arg_type(&iter);
+
+ switch (arg_type)
+ {
+ case DBUS_TYPE_STRING:
+ {
+ const char *value;
+ dbus_message_iter_get_basic(&value_iter, &value);
+ galago_object_set_attr_string(object, name, value);
+ break;
+ }
+
+ case DBUS_TYPE_BOOLEAN:
+ {
+ gboolean value;
+ dbus_message_iter_get_basic(&value_iter, &value);
+ galago_object_set_attr_bool(object, name, value);
+ break;
+ }
+
+ case DBUS_TYPE_UINT32:
+ {
+ dbus_uint32_t value;
+ dbus_message_iter_get_basic(&value_iter, &value);
+ galago_object_set_attr_int(object, name, value);
+ break;
+ }
+
+ default:
+ g_warning("Invalid property type %d received from "
+ "AttributeSet", arg_type);
+ break;
+ }
+ }
+ }
+ else if (MATCH_ATTRIBUTABLE_OBJECTS("AttributeRemoved"))
+ {
+ GalagoObject *object = galago_context_get_object(path);
+
+ if (object != NULL)
+ {
+ const char *name;
+ dbus_message_iter_get_basic(&iter, &name);
+ galago_object_remove_attr(object, name);
+ }
+ }
+ /*
* Service
*/
else if (dbus_message_is_signal(message, GALAGO_DBUS_SERVICE_INTERFACE,
@@ -592,75 +663,6 @@
* Person
*/
else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
- "PropertySet"))
- {
- GalagoPerson *person;
- const char *name;
-
- person = GALAGO_PERSON(galago_context_get_object(path));
-
- if (person != NULL)
- {
- DBusMessageIter value_iter;
- int arg_type;
-
- dbus_message_iter_get_basic(&iter, &name);
- dbus_message_iter_next(&iter);
-
- dbus_message_iter_recurse(&iter, &value_iter);
-
- arg_type = dbus_message_iter_get_arg_type(&iter);
-
- switch (arg_type)
- {
- case DBUS_TYPE_STRING:
- {
- const char *value;
- dbus_message_iter_get_basic(&value_iter, &value);
- galago_person_set_property_string(person, name, value);
- break;
- }
-
- case DBUS_TYPE_BOOLEAN:
- {
- gboolean value;
- dbus_message_iter_get_basic(&value_iter, &value);
- galago_person_set_property_bool(person, name, value);
- break;
- }
-
- case DBUS_TYPE_UINT32:
- {
- dbus_uint32_t value;
- dbus_message_iter_get_basic(&value_iter, &value);
- galago_person_set_property_uint32(person, name, value);
- break;
- }
-
- default:
- g_warning("Invalid property type %d passed to "
- "SetProperty", arg_type);
- break;
- }
- }
- }
- else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
- "PropertyRemoved"))
- {
- GalagoPerson *person;
-
- person = GALAGO_PERSON(galago_context_get_object(path));
-
- if (person != NULL)
- {
- const char *name;
-
- dbus_message_iter_get_basic(&iter, &name);
-
- galago_person_remove_property(person, name);
- }
- }
- else if (dbus_message_is_signal(message, GALAGO_DBUS_PERSON_INTERFACE,
"PhotoSet"))
{
galago_dbus_message_iter_get_object(&iter, GALAGO_TYPE_IMAGE);
Modified: trunk/libgalago/libgalago/galago-dbus.h
===================================================================
--- trunk/libgalago/libgalago/galago-dbus.h 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-dbus.h 2005-12-14 08:27:23 UTC (rev 2374)
@@ -32,7 +32,7 @@
#define GALAGO_DBUS_SERVICE "org.freedesktop.Galago"
-#define GALAGO_DBUS_ERROR_INVALID_PROPERTY "org.freedesktop.Galago.Error.InvalidProperty"
+#define GALAGO_DBUS_ERROR_INVALID_ATTRIBUTE "org.freedesktop.Galago.Error.InvalidAttribute"
#define GALAGO_DBUS_ERROR_OBJECT_NOT_FOUND "org.freedesktop.Galago.Error.ObjectNotFound"
G_BEGIN_DECLS
Modified: trunk/libgalago/libgalago/galago-object.c
===================================================================
--- trunk/libgalago/libgalago/galago-object.c 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-object.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -31,6 +31,7 @@
GalagoContext *context;
gchar *dbus_path;
GalagoOrigin origin;
+ GHashTable *attrs_table;
gboolean watched : 1;
};
@@ -38,7 +39,8 @@
{
PROP_0,
PROP_CONTEXT,
- PROP_ORIGIN
+ PROP_ORIGIN,
+ PROP_SUPPORTS_ATTRS
};
enum
@@ -47,13 +49,21 @@
LAST_SIGNAL
};
+#define GALAGO_OBJECT_SUPPORTS_ATTRS(object) \
+ (GALAGO_OBJECT_GET_CLASS(GALAGO_OBJECT(object))->supports_attrs)
+
static void galago_object_dispose(GObject *gobject);
static void galago_object_finalize(GObject *gobject);
+static void galago_object_real_dbus_push_full(GalagoObject *object);
static void galago_object_real_destroy(GalagoObject *object);
static void galago_object_set_property(GObject *gobject, guint prop_id,
const GValue *value, GParamSpec *pspec);
static void galago_object_get_property(GObject *gobject, guint prop_id,
GValue *value, GParamSpec *pspec);
+static void _galago_dbus_object_set_attr(GalagoObject *object,
+ const char *name, GValue *value);
+static GValue *_galago_dbus_object_get_attr(const GalagoObject *object,
+ const char *name);
static GObjectClass *parent_class = NULL;
static guint signals[LAST_SIGNAL] = {0};
@@ -67,9 +77,11 @@
parent_class = g_type_class_peek_parent(klass);
+ klass->supports_attrs = FALSE;
+
klass->dbus_message_append = NULL;
klass->dbus_message_get = NULL;
- klass->dbus_push_full = NULL;
+ klass->dbus_push_full = galago_object_real_dbus_push_full;
klass->dbus_get_signature = NULL;
klass->destroy = galago_object_real_destroy;
@@ -99,6 +111,13 @@
GALAGO_TYPE_ORIGIN,
GALAGO_LOCAL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property(gobject_class, PROP_SUPPORTS_ATTRS,
+ g_param_spec_boolean("supports-attrs",
+ "Support Remote Attributes",
+ "Indicates if this object supports remote "
+ "attributes",
+ FALSE, G_PARAM_READABLE));
}
static void
@@ -132,13 +151,34 @@
GalagoObject *object = GALAGO_OBJECT(gobject);
if (object->priv != NULL)
+ {
+ if (object->priv->attrs_table != NULL)
+ g_hash_table_destroy(object->priv->attrs_table);
+
g_free(object->priv);
+ }
if (G_OBJECT_CLASS(parent_class)->finalize != NULL)
G_OBJECT_CLASS(parent_class)->finalize(gobject);
}
static void
+_push_key(const char *name, GValue *value, GalagoObject *object)
+{
+ _galago_dbus_object_set_attr(object, name, value);
+}
+
+static void
+galago_object_real_dbus_push_full(GalagoObject *object)
+{
+ if (object->priv->attrs_table != NULL)
+ {
+ g_hash_table_foreach(object->priv->attrs_table,
+ (GHFunc)_push_key, object);
+ }
+}
+
+static void
galago_object_real_destroy(GalagoObject *object)
{
g_signal_handlers_destroy(object);
@@ -178,6 +218,11 @@
g_value_set_enum(value, galago_object_get_origin(object));
break;
+ case PROP_SUPPORTS_ATTRS:
+ g_value_set_boolean(value,
+ GALAGO_OBJECT_GET_CLASS(object)->supports_attrs);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
@@ -280,3 +325,338 @@
return object->priv->context;
}
+
+void
+galago_object_set_attr_string(GalagoObject *object, const char *name,
+ const char *str_value)
+{
+ GValue *value;
+
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(str_value != NULL && *str_value != '\0');
+ g_return_if_fail(GALAGO_IS_PERSON(object));
+
+ value = g_new0(GValue, 1);
+ g_value_init(value, G_TYPE_STRING);
+ g_value_set_string(value, str_value);
+ galago_object_set_attr(object, name, value);
+}
+
+void
+galago_object_set_attr_bool(GalagoObject *object, const char *name,
+ gboolean bool_value)
+{
+ GValue *value;
+
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(GALAGO_IS_PERSON(object));
+
+ value = g_new0(GValue, 1);
+ g_value_init(value, G_TYPE_BOOLEAN);
+ g_value_set_boolean(value, bool_value);
+ galago_object_set_attr(object, name, value);
+}
+
+void
+galago_object_set_attr_int(GalagoObject *object, const char *name,
+ gint32 int_value)
+{
+ GValue *value;
+
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(GALAGO_IS_PERSON(object));
+
+ value = g_new0(GValue, 1);
+ g_value_init(value, G_TYPE_INT);
+ g_value_set_int(value, int_value);
+ galago_object_set_attr(object, name, value);
+}
+
+static void
+destroy_value(GValue *value)
+{
+ g_value_unset(value);
+ g_free(value);
+}
+
+void
+galago_object_set_attr(GalagoObject *object, const char *name, GValue *value)
+{
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(GALAGO_IS_PERSON(object));
+ g_return_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object));
+ g_return_if_fail(name != NULL && *name != '\0');
+ g_return_if_fail(value != NULL);
+ g_return_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING) ||
+ G_VALUE_HOLDS(value, G_TYPE_BOOLEAN) ||
+ G_VALUE_HOLDS(value, G_TYPE_INT));
+
+ if (object->priv->attrs_table == NULL)
+ {
+ object->priv->attrs_table =
+ g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
+ (GFreeFunc)destroy_value);
+ }
+
+ g_hash_table_replace(object->priv->attrs_table,
+ g_ascii_strdown(name, -1), value);
+
+ if (GALAGO_OBJECT_IS_LOCAL(object))
+ _galago_dbus_object_set_attr(object, name, value);
+}
+
+gboolean
+galago_object_remove_attr(GalagoObject *object, const char *name)
+{
+ char *temp;
+
+ g_return_val_if_fail(object != NULL, FALSE);
+ g_return_val_if_fail(GALAGO_IS_PERSON(object), FALSE);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
+ g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
+
+ if (object->priv->attrs_table == NULL)
+ return TRUE;
+
+ temp = g_ascii_strdown(name, -1);
+ g_hash_table_remove(object->priv->attrs_table, temp);
+ g_free(temp);
+
+ if (GALAGO_OBJECT_IS_LOCAL(object) && galago_is_connected() &&
+ galago_is_feed())
+ {
+ galago_dbus_send_message(GALAGO_OBJECT(object), "RemoveAttribute",
+ galago_value_new(GALAGO_VALUE_TYPE_STRING, &name, NULL),
+ NULL);
+ }
+
+ return TRUE;
+}
+
+const char *
+galago_object_get_attr_string(const GalagoObject *object, const char *name)
+{
+ const GValue *value;
+
+ g_return_val_if_fail(object != NULL, NULL);
+ g_return_val_if_fail(GALAGO_IS_PERSON(object), NULL);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+ g_return_val_if_fail(name != NULL && *name != '\0', NULL);
+
+ value = galago_object_get_attr(object, name);
+
+ if (value == NULL)
+ return NULL;
+
+ g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING), NULL);
+
+ return g_value_get_string(value);
+}
+
+gboolean
+galago_object_get_attr_bool(const GalagoObject *object, const char *name)
+{
+ const GValue *value;
+
+ g_return_val_if_fail(object != NULL, FALSE);
+ g_return_val_if_fail(GALAGO_IS_PERSON(object), FALSE);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), FALSE);
+ g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
+
+ value = galago_object_get_attr(object, name);
+
+ if (value == NULL)
+ return FALSE;
+
+ g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_BOOLEAN), FALSE);
+
+ return g_value_get_boolean(value);
+}
+
+gint32
+galago_object_get_attr_int(const GalagoObject *object, const char *name)
+{
+ const GValue *value;
+
+ g_return_val_if_fail(object != NULL, 0);
+ g_return_val_if_fail(GALAGO_IS_PERSON(object), 0);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), 0);
+ g_return_val_if_fail(name != NULL && *name != '\0', 0);
+
+ value = galago_object_get_attr(object, name);
+
+ if (value == NULL)
+ return 0;
+
+ g_return_val_if_fail(G_VALUE_HOLDS(value, G_TYPE_STRING), 0);
+
+ return g_value_get_int(value);
+}
+
+const GValue *
+galago_object_get_attr(const GalagoObject *object, const char *name)
+{
+ GValue *value = NULL;
+ char *temp;
+
+ g_return_val_if_fail(object != NULL, NULL);
+ g_return_val_if_fail(GALAGO_IS_PERSON(object), NULL);
+ g_return_val_if_fail(GALAGO_OBJECT_SUPPORTS_ATTRS(object), NULL);
+ g_return_val_if_fail(name != NULL && *name != '\0', NULL);
+
+ temp = g_ascii_strdown(name, -1);
+
+ if (object->priv->attrs_table != NULL)
+ value = g_hash_table_lookup(object->priv->attrs_table, temp);
+
+ if (value == NULL && GALAGO_OBJECT_IS_REMOTE(object))
+ value = _galago_dbus_object_get_attr(object, temp);
+
+ g_free(temp);
+
+ return value;
+}
+
+
+/**************************************************************************
+ * D-BUS Functions
+ **************************************************************************/
+static void
+_galago_dbus_object_set_attr(GalagoObject *object, const char *name,
+ GValue *value)
+{
+ DBusMessage *message;
+ DBusMessageIter iter, value_iter;
+ gboolean success = TRUE;
+
+ if (!galago_is_connected() || !galago_is_feed())
+ return;
+
+ message = galago_dbus_message_new_method_call(GALAGO_OBJECT(object),
+ "SetAttribute", FALSE,
+ &iter);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+
+ if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+ {
+ const char *str = g_value_get_string(value);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_STRING_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_STRING, &str);
+ dbus_message_iter_close_container(&iter, &value_iter);
+ }
+ else if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
+ {
+ gboolean b = g_value_get_boolean(value);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_BOOLEAN_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_BOOLEAN, &b);
+ dbus_message_iter_close_container(&iter, &value_iter);
+ }
+ else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+ {
+ gint32 i = g_value_get_int(value);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_INT32_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter, DBUS_TYPE_INT32, &i);
+ dbus_message_iter_close_container(&iter, &value_iter);
+ }
+ else
+ g_assert_not_reached();
+
+ if (success)
+ dbus_connection_send(galago_get_dbus_conn(), message, NULL);
+
+ dbus_message_unref(message);
+}
+
+static GValue *
+_galago_dbus_object_get_attr(const GalagoObject *object, const char *name)
+{
+ DBusConnection *dbus_conn;
+ DBusMessage *message, *reply;
+ DBusMessageIter iter, value_iter;
+ DBusError error;
+ GValue *value = NULL;
+
+ if (!galago_is_connected())
+ return NULL;
+
+ dbus_conn = galago_get_dbus_conn();
+
+ message = galago_dbus_message_new_method_call(GALAGO_OBJECT(object),
+ "GetAttribute", TRUE, &iter);
+ g_return_val_if_fail(message != NULL, NULL);
+
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+
+ 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))
+ {
+ if (!dbus_error_has_name(&error, GALAGO_DBUS_ERROR_INVALID_ATTRIBUTE))
+ {
+ g_warning("Error sending Object.GetAttribute(%s, %s): %s",
+ galago_object_get_dbus_path(object), name, error.message);
+ }
+
+ goto exit;
+ }
+
+ dbus_message_iter_init(reply, &iter);
+ dbus_message_iter_recurse(&iter, &value_iter);
+
+ value = g_new0(GValue, 1);
+
+ int type = dbus_message_iter_get_arg_type(&value_iter);
+ switch (type)
+ {
+ case DBUS_TYPE_STRING:
+ {
+ const char *data;
+ dbus_message_iter_get_basic(&value_iter, &data);
+ g_value_init(value, G_TYPE_STRING);
+ g_value_set_string(value, data);
+ break;
+ }
+
+ case DBUS_TYPE_BOOLEAN:
+ {
+ gboolean data;
+ dbus_message_iter_get_basic(&value_iter, &data);
+ g_value_init(value, G_TYPE_BOOLEAN);
+ g_value_set_boolean(value, data);
+ break;
+ }
+
+ case DBUS_TYPE_UINT32:
+ {
+ int data;
+ dbus_message_iter_get_basic(&value_iter, &data);
+ g_value_init(value, G_TYPE_INT);
+ g_value_set_int(value, data);
+ break;
+ }
+
+ default:
+ g_warning("Unknown attribute type %d for attribute %s",
+ type, name);
+ break;
+ }
+
+ dbus_message_unref(reply);
+
+exit:
+ dbus_error_free(&error);
+
+ return value;
+}
Modified: trunk/libgalago/libgalago/galago-object.h
===================================================================
--- trunk/libgalago/libgalago/galago-object.h 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-object.h 2005-12-14 08:27:23 UTC (rev 2374)
@@ -61,6 +61,7 @@
const char *dbus_interface;
const char *dbus_signature;
+ gboolean supports_attrs;
/* Virtual functions */
void (*dbus_message_append)(DBusMessageIter *iter,
@@ -230,6 +231,103 @@
*/
GalagoContext *galago_object_get_context(const GalagoObject *object);
+/**
+ * Sets a string attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute to set.
+ * @param value The value of the attribute.
+ */
+void galago_object_set_attr_string(GalagoObject *object, const char *name,
+ const char *value);
+
+/**
+ * Sets a boolean attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute to set.
+ * @param value The value of the attribute.
+ */
+void galago_object_set_attr_bool(GalagoObject *object, const char *name,
+ gboolean value);
+
+/**
+ * Sets an integer attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute to set.
+ * @param value The value of the attribute.
+ */
+void galago_object_set_attr_int(GalagoObject *object, const char *name,
+ gint32 value);
+
+/**
+ * Sets an attribute on an object.
+ *
+ * This is limited to string, boolean, and integer value types.
+ *
+ * @param object The object.
+ * @param name The name of the attribute to set.
+ * @param value The value of the attribute.
+ */
+void galago_object_set_attr(GalagoObject *object, const char *name,
+ GValue *value);
+
+/**
+ * Removes an attribute on an object.
+ *
+ * @param object The object
+ * @param name The name of the attribute to remove
+ *
+ * @return TRUE if the attribute was removed, or FALSE.
+ */
+gboolean galago_object_remove_attr(GalagoObject *object, const char *name);
+
+/**
+ * Returns the value of a string attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+const char *galago_object_get_attr_string(const GalagoObject *object,
+ const char *name);
+
+/**
+ * Returns the value of a boolean attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+gboolean galago_object_get_attr_bool(const GalagoObject *object,
+ const char *name);
+
+/**
+ * Returns the value of an integer attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+gint32 galago_object_get_attr_int(const GalagoObject *object,
+ const char *name);
+
+/**
+ * Returns the value of an attribute on an object.
+ *
+ * @param object The object.
+ * @param name The name of the attribute.
+ *
+ * @return The attribute value, or NULL.
+ */
+const GValue *galago_object_get_attr(const GalagoObject *object,
+ const char *name);
+
+
/*@}*/
G_END_DECLS
Modified: trunk/libgalago/libgalago/galago-person.c
===================================================================
--- trunk/libgalago/libgalago/galago-person.c 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-person.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -31,12 +31,8 @@
struct _GalagoPersonPrivate
{
char *id;
-
GalagoImage *photo;
-
GHashTable *accounts_table;
- GHashTable *properties_table;
-
GList *accounts;
};
@@ -70,11 +66,6 @@
const char *obj_path);
static void _galago_dbus_person_set_photo(GalagoPerson *person,
GalagoImage *photo);
-static void _galago_dbus_person_set_property(GalagoPerson *person,
- const char *name,
- GalagoValue *value);
-static GalagoValue *_galago_dbus_person_get_property(
- const GalagoPerson *person, const char *name);
/**************************************************************************
@@ -105,6 +96,7 @@
parent_class = g_type_class_peek_parent(klass);
object_class->dbus_interface = GALAGO_DBUS_PERSON_INTERFACE;
+ object_class->supports_attrs = TRUE;
object_class->destroy = galago_person_destroy;
object_class->dbus_message_append = galago_person_dbus_message_append;
@@ -214,9 +206,6 @@
g_hash_table_destroy(person->priv->accounts_table);
- if (person->priv->properties_table != NULL)
- g_hash_table_destroy(person->priv->properties_table);
-
galago_context_push(galago_object_get_context(object));
galago_context_remove_person(person);
galago_context_pop();
@@ -273,16 +262,6 @@
}
static void
-_push_key(void *key, void *val, void *user_data)
-{
- const char *name = (const char *)key;
- GalagoValue *value = (GalagoValue *)val;
- GalagoPerson *person = (GalagoPerson *)user_data;
-
- _galago_dbus_person_set_property(person, name, value);
-}
-
-static void
galago_person_dbus_push_full(GalagoObject *object)
{
GalagoPerson *person = (GalagoPerson *)object;
@@ -290,11 +269,8 @@
_galago_dbus_person_set_photo(person,
galago_person_get_photo(person, FALSE));
- if (person->priv->properties_table != NULL)
- {
- g_hash_table_foreach(person->priv->properties_table,
- _push_key, person);
- }
+ if (GALAGO_OBJECT_CLASS(parent_class)->dbus_push_full != NULL)
+ GALAGO_OBJECT_CLASS(parent_class)->dbus_push_full(object);
}
static gchar *
@@ -454,10 +430,10 @@
/* XXX This is all a hack, but for now, it should work. Improve this! */
- first_name = galago_person_get_property_string(person,
- GALAGO_PERSON_PROP_FIRST_NAME);
- last_name = galago_person_get_property_string(person,
- GALAGO_PERSON_PROP_LAST_NAME);
+ first_name = galago_object_get_attr_string(GALAGO_OBJECT(person),
+ GALAGO_PERSON_ATTR_FIRST_NAME);
+ last_name = galago_object_get_attr_string(GALAGO_OBJECT(person),
+ GALAGO_PERSON_ATTR_LAST_NAME);
if (first_name != NULL || last_name != NULL)
{
@@ -719,195 +695,7 @@
return account;
}
-void
-galago_person_set_property_string(GalagoPerson *person, const char *name,
- const char *str_value)
-{
- g_return_if_fail(person != NULL);
- g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(str_value != NULL && *str_value != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(person));
- galago_person_set_property(person, name,
- galago_value_new(GALAGO_VALUE_TYPE_STRING, &str_value, NULL));
-}
-
-void
-galago_person_set_property_bool(GalagoPerson *person, const char *name,
- gboolean bool_value)
-{
- g_return_if_fail(person != NULL);
- g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(person));
-
- galago_person_set_property(person, name,
- galago_value_new(GALAGO_VALUE_TYPE_BOOLEAN, &bool_value, NULL));
-}
-
-void
-galago_person_set_property_uint32(GalagoPerson *person, const char *name,
- guint32 uint_value)
-{
- g_return_if_fail(person != NULL);
- g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(GALAGO_IS_PERSON(person));
-
- galago_person_set_property(person, name,
- galago_value_new(GALAGO_VALUE_TYPE_UINT, &uint_value, NULL));
-}
-
-#define IS_TYPE_INTEGER(type) \
- ((type) == GALAGO_VALUE_TYPE_UINT || \
- (type) == GALAGO_VALUE_TYPE_INT || \
- (type) == GALAGO_VALUE_TYPE_SHORT || \
- (type) == GALAGO_VALUE_TYPE_USHORT || \
- (type) == GALAGO_VALUE_TYPE_LONG || \
- (type) == GALAGO_VALUE_TYPE_ULONG)
-
-void
-galago_person_set_property(GalagoPerson *person, const char *name,
- GalagoValue *value)
-{
- GalagoType value_type;
-
- g_return_if_fail(person != NULL);
- g_return_if_fail(name != NULL && *name != '\0');
- g_return_if_fail(value != NULL);
- g_return_if_fail(GALAGO_IS_PERSON(person));
-
- value_type = galago_value_get_type(value);
-
- g_return_if_fail(value_type == GALAGO_VALUE_TYPE_STRING ||
- value_type == GALAGO_VALUE_TYPE_BOOLEAN ||
- IS_TYPE_INTEGER(value_type));
-
- if (person->priv->properties_table == NULL)
- {
- person->priv->properties_table =
- g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
- (GFreeFunc)galago_value_destroy);
- }
-
- g_hash_table_replace(person->priv->properties_table,
- g_ascii_strdown(name, -1), value);
-
- if (GALAGO_OBJECT_IS_LOCAL(person))
- _galago_dbus_person_set_property(person, name, value);
-}
-
-gboolean
-galago_person_remove_property(GalagoPerson *person, const char *name)
-{
- char *temp;
-
- g_return_val_if_fail(person != NULL, FALSE);
- g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
- g_return_val_if_fail(GALAGO_IS_PERSON(person), FALSE);
-
- if (person->priv->properties_table == NULL)
- return TRUE;
-
- temp = g_ascii_strdown(name, -1);
- g_hash_table_remove(person->priv->properties_table, temp);
- g_free(temp);
-
- if (GALAGO_OBJECT_IS_LOCAL(person) && galago_is_connected() &&
- galago_is_feed())
- {
- galago_dbus_send_message(GALAGO_OBJECT(person), "RemoveProperty",
- galago_value_new(GALAGO_VALUE_TYPE_STRING, &name, NULL),
- NULL);
- }
-
- return TRUE;
-}
-
-const char *
-galago_person_get_property_string(const GalagoPerson *person,
- const char *name)
-{
- const GalagoValue *value;
-
- g_return_val_if_fail(person != NULL, NULL);
- g_return_val_if_fail(name != NULL && *name != '\0', NULL);
- g_return_val_if_fail(GALAGO_IS_PERSON(person), NULL);
-
- value = galago_person_get_property(person, name);
-
- if (value == NULL)
- return NULL;
-
- g_return_val_if_fail(
- galago_value_get_type(value) == GALAGO_VALUE_TYPE_STRING, NULL);
-
- return galago_value_get_string(value);
-}
-
-gboolean
-galago_person_get_property_bool(const GalagoPerson *person, const char *name)
-{
- const GalagoValue *value;
-
- g_return_val_if_fail(person != NULL, FALSE);
- g_return_val_if_fail(name != NULL && *name != '\0', FALSE);
- g_return_val_if_fail(GALAGO_IS_PERSON(person), FALSE);
-
- value = galago_person_get_property(person, name);
-
- if (value == NULL)
- return FALSE;
-
- g_return_val_if_fail(
- galago_value_get_type(value) == GALAGO_VALUE_TYPE_BOOLEAN, FALSE);
-
- return galago_value_get_boolean(value);
-}
-
-guint32
-galago_person_get_property_uint32(const GalagoPerson *person,
- const char *name)
-{
- const GalagoValue *value;
-
- g_return_val_if_fail(person != NULL, 0);
- g_return_val_if_fail(name != NULL && *name != '\0', 0);
- g_return_val_if_fail(GALAGO_IS_PERSON(person), 0);
-
- value = galago_person_get_property(person, name);
-
- if (value == NULL)
- return 0;
-
- g_return_val_if_fail(
- galago_value_get_type(value) == GALAGO_VALUE_TYPE_UINT, 0);
-
- return galago_value_get_uint(value);
-}
-
-const GalagoValue *
-galago_person_get_property(const GalagoPerson *person, const char *name)
-{
- GalagoValue *value = NULL;
- char *temp;
-
- g_return_val_if_fail(person != NULL, 0);
- g_return_val_if_fail(name != NULL && *name != '\0', 0);
- g_return_val_if_fail(GALAGO_IS_PERSON(person), 0);
-
- temp = g_ascii_strdown(name, -1);
-
- if (person->priv->properties_table != NULL)
- value = g_hash_table_lookup(person->priv->properties_table, temp);
-
- if (value == NULL && GALAGO_OBJECT_IS_REMOTE(person))
- value = _galago_dbus_person_get_property(person, temp);
-
- g_free(temp);
-
- return value;
-}
-
-
/**************************************************************************
* D-BUS Functions
**************************************************************************/
@@ -925,157 +713,3 @@
NULL);
}
}
-
-static void
-_galago_dbus_person_set_property(GalagoPerson *person, const char *name,
- GalagoValue *value)
-{
- DBusMessage *message;
- DBusMessageIter iter, value_iter;
- GalagoType type;
- gboolean success = TRUE;
-
- if (!galago_is_connected() || !galago_is_feed())
- return;
-
- type = galago_value_get_type(value);
-
- message = galago_dbus_message_new_method_call(GALAGO_OBJECT(person),
- "SetProperty", FALSE,
- &iter);
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
-
- switch (type)
- {
- case GALAGO_VALUE_TYPE_STRING:
- {
- const char *str = galago_value_get_string(value);
- dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
- DBUS_TYPE_STRING_AS_STRING,
- &value_iter);
- dbus_message_iter_append_basic(&value_iter,
- DBUS_TYPE_STRING, &str);
- dbus_message_iter_close_container(&iter, &value_iter);
- break;
- }
-
- case GALAGO_VALUE_TYPE_BOOLEAN:
- {
- gboolean b = galago_value_get_boolean(value);
- dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
- DBUS_TYPE_BOOLEAN_AS_STRING,
- &value_iter);
- dbus_message_iter_append_basic(&value_iter,
- DBUS_TYPE_BOOLEAN, &b);
- dbus_message_iter_close_container(&iter, &value_iter);
- break;
- }
-
- case GALAGO_VALUE_TYPE_UINT:
- {
- unsigned int i = galago_value_get_uint(value);
- dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
- DBUS_TYPE_UINT32_AS_STRING,
- &value_iter);
- dbus_message_iter_append_basic(&value_iter,
- DBUS_TYPE_UINT32, &i);
- dbus_message_iter_close_container(&iter, &value_iter);
- break;
- }
-
- default:
- g_warning("Unknown property type %d for property %s",
- type, name);
- success = FALSE;
- return;
- }
-
- if (success)
- dbus_connection_send(galago_get_dbus_conn(), message, NULL);
-
- dbus_message_unref(message);
-}
-
-static GalagoValue *
-_galago_dbus_person_get_property(const GalagoPerson *person, const char *name)
-{
- DBusConnection *dbus_conn;
- DBusMessage *message, *reply;
- DBusMessageIter iter, value_iter;
- DBusError error;
- GalagoValue *value = NULL;
-
- if (!galago_is_connected())
- return NULL;
-
- dbus_conn = galago_get_dbus_conn();
-
- message = galago_dbus_message_new_method_call(GALAGO_OBJECT(person),
- "GetProperty", TRUE, &iter);
-
- g_return_val_if_fail(message != NULL, NULL);
-
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
-
- 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))
- {
- if (!dbus_error_has_name(&error, GALAGO_DBUS_ERROR_INVALID_PROPERTY))
- {
- g_warning("Error sending Person.GetProperty(%s, %s): %s",
- galago_person_get_id(person), name, error.message);
- }
-
- goto exit;
- }
-
- dbus_message_iter_init(reply, &iter);
- dbus_message_iter_recurse(&iter, &value_iter);
-
- int type = dbus_message_iter_get_arg_type(&value_iter);
-
- switch (type)
- {
- case DBUS_TYPE_STRING:
- {
- const char *data;
- dbus_message_iter_get_basic(&value_iter, &data);
- value = galago_value_new(GALAGO_VALUE_TYPE_STRING, &data, NULL);
- break;
- }
-
- case DBUS_TYPE_BOOLEAN:
- {
- gboolean data;
- dbus_message_iter_get_basic(&value_iter, &data);
- value = galago_value_new(GALAGO_VALUE_TYPE_BOOLEAN, &data, NULL);
- break;
- }
-
- case DBUS_TYPE_UINT32:
- {
- int data;
- dbus_message_iter_get_basic(&value_iter, &data);
- value = galago_value_new(GALAGO_VALUE_TYPE_UINT, &data, NULL);
- break;
- }
-
- default:
- g_warning("Unknown property type %d for property %s",
- type, name);
- break;
- }
-
- dbus_message_unref(reply);
-
-exit:
- dbus_error_free(&error);
-
- return value;
-}
Modified: trunk/libgalago/libgalago/galago-person.h
===================================================================
--- trunk/libgalago/libgalago/galago-person.h 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/libgalago/galago-person.h 2005-12-14 08:27:23 UTC (rev 2374)
@@ -74,15 +74,6 @@
#endif
};
-typedef enum
-{
- GALAGO_PROPERTY_TYPE_UNKNOWN = -1, /**< Unknown property type. */
- GALAGO_PROPERTY_TYPE_STRING = 0, /**< String type. */
- GALAGO_PROPERTY_TYPE_BOOL, /**< Boolean type. */
- GALAGO_PROPERTY_TYPE_UINT32 /**< Unsigned 32-bit integer type */
-
-} GalagoPropertyType;
-
#define GALAGO_TYPE_PERSON (galago_person_get_type())
/** Cast @c obj to a GalagoPerson. */
@@ -111,19 +102,19 @@
G_BEGIN_DECLS
/**************************************************************************/
-/** @name Common Property Definitions */
+/** @name Common Attribute Definitions */
/**************************************************************************/
/*{*/
-#define GALAGO_PERSON_PROP_UID "uid"
-#define GALAGO_PERSON_PROP_FIRST_NAME "first-name"
-#define GALAGO_PERSON_PROP_MIDDLE_NAME "middle-name"
-#define GALAGO_PERSON_PROP_LAST_NAME "last-name"
-#define GALAGO_PERSON_PROP_ADDRESS "address"
-#define GALAGO_PERSON_PROP_CITY "city"
-#define GALAGO_PERSON_PROP_STATE "state"
-#define GALAGO_PERSON_PROP_COUNTRY "country"
-#define GALAGO_PERSON_PROP_ZIPCODE "zipcode"
+#define GALAGO_PERSON_ATTR_UID "uid"
+#define GALAGO_PERSON_ATTR_FIRST_NAME "first-name"
+#define GALAGO_PERSON_ATTR_MIDDLE_NAME "middle-name"
+#define GALAGO_PERSON_ATTR_LAST_NAME "last-name"
+#define GALAGO_PERSON_ATTR_ADDRESS "address"
+#define GALAGO_PERSON_ATTR_CITY "city"
+#define GALAGO_PERSON_ATTR_STATE "state"
+#define GALAGO_PERSON_ATTR_COUNTRY "country"
+#define GALAGO_PERSON_ATTR_ZIPCODE "zipcode"
/*@}*/
@@ -272,102 +263,6 @@
const char *username,
gboolean query);
-/**
- * Sets a string property on a person.
- *
- * @param person The person.
- * @param name The name of the property to set.
- * @param value The value of the property.
- */
-void galago_person_set_property_string(GalagoPerson *person, const char *name,
- const char *value);
-
-/**
- * Sets a boolean property on a person.
- *
- * @param person The person.
- * @param name The name of the property to set.
- * @param value The value of the property.
- */
-void galago_person_set_property_bool(GalagoPerson *person, const char *name,
- gboolean value);
-
-/**
- * Sets a uint32 property on a person.
- *
- * @param person The person.
- * @param name The name of the property to set.
- * @param value The value of the property.
- */
-void galago_person_set_property_uint32(GalagoPerson *person, const char *name,
- guint32 value);
-
-/**
- * Sets a property on a person.
- *
- * This is limited to string, boolean, and uint32 value types.
- *
- * @param person The person.
- * @param name The name of the property to set.
- * @param value The value of the property.
- */
-void galago_person_set_property(GalagoPerson *person, const char *name,
- GalagoValue *value);
-
-/**
- * Removes a property on a person.
- *
- * @param person The person
- * @param name The name of the property to remove
- *
- * @return TRUE if the property was removed, or FALSE.
- */
-gboolean galago_person_remove_property(GalagoPerson *person, const char *name);
-
-/**
- * Returns the value of a string property on a person.
- *
- * @param person The person.
- * @param name The name of the property.
- *
- * @return The property value, or NULL.
- */
-const char *galago_person_get_property_string(const GalagoPerson *person,
- const char *name);
-
-/**
- * Returns the value of a boolean property on a person.
- *
- * @param person The person.
- * @param name The name of the property.
- *
- * @return The property value, or NULL.
- */
-gboolean galago_person_get_property_bool(const GalagoPerson *person,
- const char *name);
-
-/**
- * Returns the value of a uint32 property on a person.
- *
- * @param person The person.
- * @param name The name of the property.
- *
- * @return The property value, or NULL.
- */
-guint32 galago_person_get_property_uint32(const GalagoPerson *person,
- const char *name);
-
-/**
- * Returns the value of a property on a person.
- *
- * @param person The person.
- * @param name The name of the property.
- *
- * @return The property value, or NULL.
- */
-const GalagoValue *galago_person_get_property(const GalagoPerson *person,
- const char *name);
-
/*@}*/
G_END_DECLS
Modified: trunk/libgalago/tests/Makefile.am
===================================================================
--- trunk/libgalago/tests/Makefile.am 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/Makefile.am 2005-12-14 08:27:23 UTC (rev 2374)
@@ -6,12 +6,12 @@
noinst_PROGRAMS = \
get-avatar \
+ get-person-attr \
get-presence \
- get-property \
monitor \
presence-feed \
presence-feed-2 \
- property-test \
+ person-attr-test \
$(unittests)
common_ldflags = \
@@ -24,8 +24,8 @@
get_presence_SOURCES = get-presence.c
get_presence_LDADD = $(common_ldflags)
-get_property_SOURCES = get-property.c
-get_property_LDADD = $(common_ldflags)
+get_person_attr_SOURCES = get-person-attr.c
+get_person_attr_LDADD = $(common_ldflags)
monitor_SOURCES = monitor.c
monitor_LDADD = $(common_ldflags)
@@ -36,8 +36,8 @@
presence_feed_2_SOURCES = presence-feed-2.c
presence_feed_2_LDADD = $(common_ldflags)
-property_test_SOURCES = property-test.c
-property_test_LDADD = $(common_ldflags)
+person_attr_test_SOURCES = person-attr-test.c
+person_attr_test_LDADD = $(common_ldflags)
check_libgalago_SOURCES = check-libgalago.c
check_libgalago_LDADD = $(common_ldflags) $(CHECK_LIBS)
Copied: trunk/libgalago/tests/get-person-attr.c (from rev 2356, trunk/libgalago/tests/get-property.c)
===================================================================
--- trunk/libgalago/tests/get-property.c 2005-12-03 06:15:28 UTC (rev 2356)
+++ trunk/libgalago/tests/get-person-attr.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -0,0 +1,76 @@
+/**
+ * @file get-person-attr.c Queries the attributes of a person.
+ *
+ * @Copyright (C) 2004-2005 Christian Hammond
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <libgalago/galago.h>
+#include <stdio.h>
+
+int
+main(int argc, char **argv)
+{
+ char *person_id, *attr_name;
+ GalagoPerson *person;
+ const GValue *value;
+
+ if (argc != 3)
+ {
+ fprintf(stderr, "Usage: get-person-attr person-id attribute\n");
+ exit(1);
+ }
+
+ person_id = argv[1];
+ attr_name = argv[2];
+
+ galago_init("get-person-attr", FALSE);
+
+ person = galago_get_person(person_id, GALAGO_REMOTE, TRUE);
+
+ if (person == NULL)
+ {
+ fprintf(stderr, "Unknown person %s\n", person_id);
+ exit(1);
+ }
+
+ value = galago_object_get_attr(GALAGO_OBJECT(person), attr_name);
+
+ if (value == NULL)
+ {
+ fprintf(stderr, "Attribute '%s' is not set\n", attr_name);
+ exit(1);
+ }
+
+ if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+ {
+ printf("%s\n", g_value_get_string(value));
+ }
+ else if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
+ {
+ printf("%s\n", g_value_get_boolean(value) ? "true" : "false");
+ }
+ else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+ {
+ printf("%d\n", g_value_get_int(value));
+ }
+ else
+ {
+ fprintf(stderr, "Unknown attribute type returned\n");
+ }
+
+ return 0;
+}
Deleted: trunk/libgalago/tests/get-property.c
===================================================================
--- trunk/libgalago/tests/get-property.c 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/get-property.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,79 +0,0 @@
-/**
- * @file get-property.c Queries the property of a person.
- *
- * @Copyright (C) 2004-2005 Christian Hammond
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-#include <libgalago/galago.h>
-#include <stdio.h>
-
-int
-main(int argc, char **argv)
-{
- char *person_id, *prop_name;
- GalagoPerson *person;
- const GalagoValue *property;
-
- if (argc != 3)
- {
- fprintf(stderr, "Usage: get-property person-id property\n");
- exit(1);
- }
-
- person_id = argv[1];
- prop_name = argv[2];
-
- galago_init("get_property", FALSE);
-
- person = galago_get_person(person_id, GALAGO_REMOTE, TRUE);
-
- if (person == NULL)
- {
- fprintf(stderr, "Unknown person %s\n", person_id);
- exit(1);
- }
-
- property = galago_person_get_property(person, prop_name);
-
- if (property == NULL)
- {
- fprintf(stderr, "Property '%s' is not set\n", prop_name);
- exit(1);
- }
-
- switch (galago_value_get_type(property))
- {
- case GALAGO_VALUE_TYPE_STRING:
- printf("%s\n", galago_value_get_string(property));
- break;
-
- case GALAGO_VALUE_TYPE_BOOLEAN:
- printf("%s\n",
- galago_value_get_boolean(property) ? "true" : "false");
- break;
-
- case GALAGO_VALUE_TYPE_UINT:
- printf("%d\n", galago_value_get_uint(property));
- break;
-
- default:
- fprintf(stderr, "Unknown property type returned\n");
- break;
- }
-
- return 0;
-}
Copied: trunk/libgalago/tests/person-attr-test.c (from rev 2356, trunk/libgalago/tests/property-test.c)
===================================================================
--- trunk/libgalago/tests/property-test.c 2005-12-03 06:15:28 UTC (rev 2356)
+++ trunk/libgalago/tests/person-attr-test.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -0,0 +1,80 @@
+/**
+ * @file person-attr-test.c A simple test for person attributes
+ *
+ * @Copyright (C) 2005 Christian Hammond <chipx86 at chipx86.com>
+ * @Copyright (C) 2004 Trent Lloyd <lathiat at bur.st>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <libgalago/galago.h>
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+ GalagoService *service;
+ GalagoAccount *account;
+ GalagoPerson *person;
+ GalagoPresence *presence;
+ GalagoStatus *status;
+
+ if (!galago_init("person-attr-test-feed", TRUE))
+ exit(1);
+
+ /* Setup our test service */
+ service = galago_create_service("lathiat", "Lathiats Godly Program", 0);
+ person = galago_create_person("dizzy");
+ account = galago_service_create_account(service, person, "lathiat");
+ presence = galago_account_create_presence(account);
+
+ status = galago_status_new(GALAGO_STATUS_AVAILABLE, "harass",
+ "Taking harassments", TRUE);
+
+ galago_presence_add_status(presence, status);
+
+ galago_object_set_attr_string(GALAGO_OBJECT(person),
+ "email", "lathiat at bur.st");
+ galago_object_set_attr_string(GALAGO_OBJECT(person),
+ "x-godly", "false");
+
+ printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=false)=%s\n",
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+ printf("Removing godly\n");
+
+ galago_object_remove_attr(GALAGO_OBJECT(person), "x-godly");
+
+ printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=NULL)=%s\n",
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+ printf("Changing email\n");
+
+ galago_object_set_attr_string(GALAGO_OBJECT(person),
+ "email", "lathiat at sixlabs.org");
+
+ printf("Properties: (email=lathiat at sixlabs.org)=%s, (x-godly=NULL)=%s\n",
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "email"),
+ galago_object_get_attr_string(GALAGO_OBJECT(person), "x-godly"));
+
+ printf("done.\n");
+
+ return 0;
+}
Deleted: trunk/libgalago/tests/property-test.c
===================================================================
--- trunk/libgalago/tests/property-test.c 2005-12-13 22:45:11 UTC (rev 2373)
+++ trunk/libgalago/tests/property-test.c 2005-12-14 08:27:23 UTC (rev 2374)
@@ -1,76 +0,0 @@
-/**
- * @file property-test.c A simple test for properties
- *
- * @Copyright (C) 2004 Trent Lloyd <lathiat at bur.st>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-#include <libgalago/galago.h>
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <string.h>
-
-int
-main(int argc, char *argv[])
-{
- GalagoService *service;
- GalagoAccount *account;
- GalagoPerson *person;
- GalagoPresence *presence;
- GalagoStatus *status;
-
- if (!galago_init("property-test-feed", TRUE))
- return 1;
-
- /* Setup our test service */
- service = galago_create_service("lathiat", "Lathiats Godly Program", 0);
- person = galago_create_person("dizzy");
- account = galago_service_create_account(service, person, "lathiat");
- presence = galago_account_create_presence(account);
-
- status = galago_status_new(GALAGO_STATUS_AVAILABLE, "harass",
- "Taking harassments", TRUE);
-
- galago_presence_add_status(presence, status);
-
- galago_person_set_property_string(person, "email", "lathiat at bur.st");
- galago_person_set_property_string(person, "x-godly", "false");
-
- printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=false)=%s\n",
- galago_person_get_property_string(person, "email"),
- galago_person_get_property_string(person, "x-godly"));
-
- printf("Removing godly\n");
-
- galago_person_remove_property(person, "x-godly");
-
- printf("Properties: (email=lathiat at bur.st)=%s, (x-godly=NULL)=%s\n",
- galago_person_get_property_string(person, "email"),
- galago_person_get_property_string(person, "x-godly"));
-
- printf("Changing email\n");
-
- galago_person_set_property_string(person, "email", "lathiat at sixlabs.org");
-
- printf("Properties: (email=lathiat at sixlabs.org)=%s, (x-godly=NULL)=%s\n",
- galago_person_get_property_string(person, "email"),
- galago_person_get_property_string(person, "x-godly"));
-
- printf("done.\n");
-
- return 0;
-}
More information about the galago-commits
mailing list