[empathy] Extract protocol from the connection's object-path and correctly set the special group for xmpp-loca



commit 2c9b0fdb4a5e4187e4bee87a4a12a1d5ddb98bb6
Author: Xavier Claessens <xclaesse gmail com>
Date:   Fri Feb 20 13:15:45 2009 +0100

    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 051c342..636f2ed 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 047dd93..8b140ad 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 e6bcfeb..090de9d 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__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]