From 2c9b0fdb4a5e4187e4bee87a4a12a1d5ddb98bb6 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Fri, 20 Feb 2009 13:15:45 +0100 Subject: [PATCH] Extract protocol from the connection's object-path and correctly set the special group for xmpp-local contacts. --- libempathy/empathy-tp-contact-list.c | 8 +++++--- libempathy/empathy-utils.c | 29 ++++++++++++++++++++++++++++ libempathy/empathy-utils.h | 3 ++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/libempathy/empathy-tp-contact-list.c b/libempathy/empathy-tp-contact-list.c index 051c342c..636f2ed3 100644 --- a/libempathy/empathy-tp-contact-list.c +++ b/libempathy/empathy-tp-contact-list.c @@ -700,7 +700,7 @@ tp_contact_list_constructed (GObject *list) { EmpathyTpContactListPriv *priv = GET_PRIV (list); - const gchar *protocol_name = NULL; + gchar *protocol_name = NULL; const gchar *names[] = {NULL, NULL}; priv->factory = empathy_tp_contact_factory_dup_singleton (priv->connection); @@ -734,11 +734,13 @@ tp_contact_list_constructed (GObject *list) /* Check for protocols that does not support contact groups. We can * put all contacts into a special group in that case. - * FIXME: Default group should be an information in the profile */ - //protocol_name = tp_connection_get_protocol (priv->connection); + * FIXME: Default group should be an information in the profile + * FIXME: replace with tp_connection_parse_object_path once released */ + protocol_name = empathy_connection_get_protocol (priv->connection, NULL); if (!tp_strdiff (protocol_name, "local-xmpp")) { priv->protocol_group = _("People nearby"); } + g_free (protocol_name); } static void diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 047dd931..8b140ad4 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -378,3 +378,32 @@ empathy_check_available_state (void) return TRUE; } + +gchar * +empathy_connection_get_protocol (TpConnection *connection, + gchar **ret_cmname) +{ + const gchar *object_path; + const gchar *cmname; + const gchar *proto; + const gchar *account; + gchar *ret; + + g_return_val_if_fail (TP_IS_CONNECTION (connection), NULL); + + /* Object path is in the form: + * /org/freedesktop/Telepathy/Connection/cmname/proto/account */ + object_path = tp_proxy_get_object_path (TP_PROXY (connection)); + cmname = object_path + strlen ("/org/freedesktop/Telepathy/Connection/"); + proto = strstr (cmname, "/") + 1; + account = strstr (proto, "/") + 1; + + if (ret_cmname) { + *ret_cmname = g_strndup (cmname, proto - cmname - 1); + g_strdelimit (*ret_cmname, "_", '-'); + } + + ret = g_strndup (proto, account - proto - 1); + return g_strdelimit (ret, "_", '-'); +} + diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h index e6bcfebf..090de9df 100644 --- a/libempathy/empathy-utils.h +++ b/libempathy/empathy-utils.h @@ -78,7 +78,8 @@ gboolean empathy_proxy_equal (gconstpointer a, gconstpointer b); guint empathy_proxy_hash (gconstpointer key); gboolean empathy_check_available_state (void); - +gchar * empathy_connection_get_protocol (TpConnection *connection, + gchar **cm_name); G_END_DECLS #endif /* __EMPATHY_UTILS_H__ */ -- 2.39.2