summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/cm/contactlist/conn.c112
-rw-r--r--examples/cm/contactlist/conn.h1
-rw-r--r--telepathy-glib/connection-aliasing.c25
-rw-r--r--telepathy-glib/contact.c13
-rw-r--r--tests/lib/contacts-conn.c65
5 files changed, 108 insertions, 108 deletions
diff --git a/examples/cm/contactlist/conn.c b/examples/cm/contactlist/conn.c
index b233b2526..caec16e7f 100644
--- a/examples/cm/contactlist/conn.c
+++ b/examples/cm/contactlist/conn.c
@@ -26,6 +26,8 @@ static void init_aliasing (gpointer, gpointer);
G_DEFINE_TYPE_WITH_CODE (ExampleContactListConnection,
example_contact_list_connection,
TP_TYPE_BASE_CONNECTION,
+ G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
+ tp_dbus_properties_mixin_iface_init);
G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING,
init_aliasing);
G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS,
@@ -159,25 +161,15 @@ alias_updated_cb (ExampleContactList *contact_list,
TpHandle contact,
ExampleContactListConnection *self)
{
- GPtrArray *aliases;
- GValueArray *pair;
+ GHashTable *aliases;
- pair = g_value_array_new (2);
- g_value_array_append (pair, NULL);
- g_value_array_append (pair, NULL);
- g_value_init (pair->values + 0, G_TYPE_UINT);
- g_value_init (pair->values + 1, G_TYPE_STRING);
- g_value_set_uint (pair->values + 0, contact);
- g_value_set_string (pair->values + 1,
- example_contact_list_get_alias (contact_list, contact));
-
- aliases = g_ptr_array_sized_new (1);
- g_ptr_array_add (aliases, pair);
+ aliases = g_hash_table_new (NULL, NULL);
+ g_hash_table_insert (aliases, GUINT_TO_POINTER (contact),
+ (gpointer) example_contact_list_get_alias (contact_list, contact));
tp_svc_connection_interface_aliasing_emit_aliases_changed (self, aliases);
- g_ptr_array_unref (aliases);
- g_value_array_free (pair);
+ g_hash_table_unref (aliases);
}
static void
@@ -420,6 +412,29 @@ get_interfaces_always_present (TpBaseConnection *base)
return interfaces;
}
+enum
+{
+ ALIASING_DP_ALIAS_FLAGS,
+};
+
+static void
+aliasing_get_dbus_property (GObject *object,
+ GQuark interface,
+ GQuark name,
+ GValue *value,
+ gpointer user_data)
+{
+ switch (GPOINTER_TO_UINT (user_data))
+ {
+ case ALIASING_DP_ALIAS_FLAGS:
+ g_value_set_uint (value, TP_CONNECTION_ALIAS_FLAG_USER_SET);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
static void
example_contact_list_connection_class_init (
ExampleContactListConnectionClass *klass)
@@ -427,6 +442,18 @@ example_contact_list_connection_class_init (
TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass;
GObjectClass *object_class = (GObjectClass *) klass;
GParamSpec *param_spec;
+ static TpDBusPropertiesMixinPropImpl aliasing_props[] = {
+ { "AliasFlags", GUINT_TO_POINTER (ALIASING_DP_ALIAS_FLAGS), NULL },
+ { NULL }
+ };
+ static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
+ { TP_IFACE_CONNECTION_INTERFACE_ALIASING,
+ aliasing_get_dbus_property,
+ NULL,
+ aliasing_props,
+ },
+ { NULL }
+ };
object_class->get_property = get_property;
object_class->set_property = set_property;
@@ -464,57 +491,10 @@ example_contact_list_connection_class_init (
tp_presence_mixin_init_dbus_properties (object_class);
tp_base_contact_list_mixin_class_init (base_class);
-}
-
-static void
-get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing,
- DBusGMethodInvocation *context)
-{
- TpBaseConnection *base = TP_BASE_CONNECTION (aliasing);
-
- TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
- tp_svc_connection_interface_aliasing_return_from_get_alias_flags (context,
- TP_CONNECTION_ALIAS_FLAG_USER_SET);
-}
-
-static void
-get_aliases (TpSvcConnectionInterfaceAliasing *aliasing,
- const GArray *contacts,
- DBusGMethodInvocation *context)
-{
- ExampleContactListConnection *self =
- EXAMPLE_CONTACT_LIST_CONNECTION (aliasing);
- TpBaseConnection *base = TP_BASE_CONNECTION (aliasing);
- TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
- TP_HANDLE_TYPE_CONTACT);
- GHashTable *result;
- GError *error = NULL;
- guint i;
-
- TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
-
- if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error))
- {
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return;
- }
-
- result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
-
- for (i = 0; i < contacts->len; i++)
- {
- TpHandle contact = g_array_index (contacts, TpHandle, i);
- const gchar *alias = example_contact_list_get_alias (
- self->priv->contact_list, contact);
-
- g_hash_table_insert (result, GUINT_TO_POINTER (contact),
- (gchar *) alias);
- }
- tp_svc_connection_interface_aliasing_return_from_get_aliases (context,
- result);
- g_hash_table_unref (result);
+ klass->properties_mixin.interfaces = prop_interfaces;
+ tp_dbus_properties_mixin_class_init (object_class,
+ G_STRUCT_OFFSET (ExampleContactListConnectionClass, properties_mixin));
}
static void
@@ -606,9 +586,7 @@ init_aliasing (gpointer iface,
#define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\
klass, x)
- IMPLEMENT(get_alias_flags);
IMPLEMENT(request_aliases);
- IMPLEMENT(get_aliases);
IMPLEMENT(set_aliases);
#undef IMPLEMENT
}
diff --git a/examples/cm/contactlist/conn.h b/examples/cm/contactlist/conn.h
index cb9b52cca..725eb507f 100644
--- a/examples/cm/contactlist/conn.h
+++ b/examples/cm/contactlist/conn.h
@@ -27,6 +27,7 @@ struct _ExampleContactListConnectionClass {
TpBaseConnectionClass parent_class;
TpPresenceMixinClass presence_mixin;
TpContactsMixinClass contacts_mixin;
+ TpDBusPropertiesMixinClass properties_mixin;
};
struct _ExampleContactListConnection {
diff --git a/telepathy-glib/connection-aliasing.c b/telepathy-glib/connection-aliasing.c
index f5e5f3b8e..c65b61671 100644
--- a/telepathy-glib/connection-aliasing.c
+++ b/telepathy-glib/connection-aliasing.c
@@ -23,6 +23,7 @@
#include "telepathy-glib/connection.h"
#include <telepathy-glib/cli-connection.h>
+#include <telepathy-glib/cli-misc.h>
#include <telepathy-glib/dbus.h>
#include <telepathy-glib/interfaces.h>
@@ -73,22 +74,31 @@ tp_connection_can_set_contact_alias (TpConnection *self)
}
static void
-get_alias_flag_cb (TpConnection *self,
- TpConnectionAliasFlags flags,
+get_all_cb (TpProxy *proxy,
+ GHashTable *properties,
const GError *error,
gpointer user_data,
- GObject *weak_object)
+ GObject *object)
{
+ TpConnection *self = (TpConnection *) proxy;
GSimpleAsyncResult *result = user_data;
+ gboolean valid;
if (error != NULL)
{
- DEBUG ("Failed to get AliasFlag : %s", error->message);
+ DEBUG ("Failed to get Aliasing properties: %s", error->message);
g_simple_async_result_set_from_error (result, error);
goto finally;
}
- self->priv->alias_flags = flags;
+ self->priv->alias_flags = tp_asv_get_uint32 (properties, "AliasFlags",
+ &valid);
+ if (!valid)
+ {
+ g_simple_async_result_set_error (result,
+ TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
+ "Aliasing iface is missing AliasFlags property");
+ }
finally:
g_simple_async_result_complete (result);
@@ -108,6 +118,7 @@ _tp_connection_prepare_aliasing_async (TpProxy *proxy,
result = g_simple_async_result_new ((GObject *) proxy, callback, user_data,
_tp_connection_prepare_aliasing_async);
- tp_cli_connection_interface_aliasing_call_get_alias_flags (self, -1,
- get_alias_flag_cb, result, g_object_unref, G_OBJECT (self));
+ tp_cli_dbus_properties_call_get_all (self, -1,
+ TP_IFACE_CONNECTION_INTERFACE_ALIASING,
+ get_all_cb, result, g_object_unref, G_OBJECT (self));
}
diff --git a/telepathy-glib/contact.c b/telepathy-glib/contact.c
index fcb548112..39cf2b0b3 100644
--- a/telepathy-glib/contact.c
+++ b/telepathy-glib/contact.c
@@ -1623,17 +1623,18 @@ tp_contact_init (TpContact *self)
static void
contacts_aliases_changed (TpConnection *connection,
- const GPtrArray *alias_structs,
+ GHashTable *aliases,
gpointer user_data G_GNUC_UNUSED,
GObject *weak_object G_GNUC_UNUSED)
{
- guint i;
+ GHashTableIter iter;
+ gpointer key, value;
- for (i = 0; i < alias_structs->len; i++)
+ g_hash_table_iter_init (&iter, aliases);
+ while (g_hash_table_iter_next (&iter, &key, &value))
{
- GValueArray *pair = g_ptr_array_index (alias_structs, i);
- TpHandle handle = g_value_get_uint (pair->values + 0);
- const gchar *alias = g_value_get_string (pair->values + 1);
+ TpHandle handle = GPOINTER_TO_UINT (key);
+ const gchar *alias = value;
TpContact *contact = _tp_connection_lookup_contact (connection, handle);
if (contact != NULL)
diff --git a/tests/lib/contacts-conn.c b/tests/lib/contacts-conn.c
index 87a1bdc09..10b5c52cb 100644
--- a/tests/lib/contacts-conn.c
+++ b/tests/lib/contacts-conn.c
@@ -532,6 +532,29 @@ tp_tests_contacts_get_interfaces_always_present (TpBaseConnection *base)
return interfaces;
}
+enum
+{
+ ALIASING_DP_ALIAS_FLAGS,
+};
+
+static void
+aliasing_get_dbus_property (GObject *object,
+ GQuark interface,
+ GQuark name,
+ GValue *value,
+ gpointer user_data)
+{
+ switch (GPOINTER_TO_UINT (user_data))
+ {
+ case ALIASING_DP_ALIAS_FLAGS:
+ g_value_set_uint (value, TP_CONNECTION_ALIAS_FLAG_USER_SET);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
static void
tp_tests_contacts_connection_class_init (TpTestsContactsConnectionClass *klass)
{
@@ -539,12 +562,21 @@ tp_tests_contacts_connection_class_init (TpTestsContactsConnectionClass *klass)
(TpBaseConnectionClass *) klass;
GObjectClass *object_class = (GObjectClass *) klass;
TpPresenceMixinClass *mixin_class;
+ static TpDBusPropertiesMixinPropImpl aliasing_props[] = {
+ { "AliasFlags", GUINT_TO_POINTER (ALIASING_DP_ALIAS_FLAGS), NULL },
+ { NULL }
+ };
static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
{ TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO,
conn_contact_info_properties_getter,
NULL,
conn_contact_info_properties,
},
+ { TP_IFACE_CONNECTION_INTERFACE_ALIASING,
+ aliasing_get_dbus_property,
+ NULL,
+ aliasing_props,
+ },
{ NULL }
};
@@ -606,34 +638,23 @@ tp_tests_contacts_connection_change_aliases (TpTestsContactsConnection *self,
const TpHandle *handles,
const gchar * const *aliases)
{
- GPtrArray *structs = g_ptr_array_sized_new (n);
+ GHashTable *changes = g_hash_table_new (NULL, NULL);
guint i;
for (i = 0; i < n; i++)
{
- GValueArray *pair = g_value_array_new (2);
-
DEBUG ("contact#%u -> %s", handles[i], aliases[i]);
g_hash_table_insert (self->priv->aliases,
GUINT_TO_POINTER (handles[i]), g_strdup (aliases[i]));
- g_value_array_append (pair, NULL);
- g_value_init (pair->values + 0, G_TYPE_UINT);
- g_value_set_uint (pair->values + 0, handles[i]);
-
- g_value_array_append (pair, NULL);
- g_value_init (pair->values + 1, G_TYPE_STRING);
- g_value_set_string (pair->values + 1, aliases[i]);
-
- g_ptr_array_add (structs, pair);
+ g_hash_table_insert (changes,
+ GUINT_TO_POINTER (handles[i]), (gchar *) aliases[i]);
}
- tp_svc_connection_interface_aliasing_emit_aliases_changed (self,
- structs);
+ tp_svc_connection_interface_aliasing_emit_aliases_changed (self, changes);
- g_ptr_array_foreach (structs, (GFunc) g_value_array_free, NULL);
- g_ptr_array_unref (structs);
+ g_hash_table_unref (changes);
}
void
@@ -762,17 +783,6 @@ tp_tests_contacts_connection_set_default_contact_info (
}
static void
-my_get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing,
- DBusGMethodInvocation *context)
-{
- TpBaseConnection *base = TP_BASE_CONNECTION (aliasing);
-
- TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
- tp_svc_connection_interface_aliasing_return_from_get_alias_flags (context,
- TP_CONNECTION_ALIAS_FLAG_USER_SET);
-}
-
-static void
my_request_aliases (TpSvcConnectionInterfaceAliasing *aliasing,
const GArray *contacts,
DBusGMethodInvocation *context)
@@ -876,7 +886,6 @@ init_aliasing (gpointer g_iface,
#define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\
klass, my_##x)
- IMPLEMENT(get_alias_flags);
IMPLEMENT(request_aliases);
IMPLEMENT(set_aliases);
#undef IMPLEMENT