From 5a7cfe477ccf6c5280c0281046d277b4f14740af Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Wed, 16 Dec 2009 12:04:49 +0000 Subject: new-message-dialog: filter out CM which doesn't support 1-1 chat --- libempathy-gtk/empathy-new-message-dialog.c | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'libempathy-gtk') diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index ca20b4005..3b60b63d5 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-dialog.c @@ -26,6 +26,8 @@ #include #include +#include + #include #include #include @@ -63,6 +65,38 @@ empathy_new_message_dialog_got_response (EmpathyContactSelectorDialog *dialog, empathy_dispatcher_chat_with_contact_id (connection, contact_id, NULL, NULL); } +static gboolean +empathy_new_message_account_filter (EmpathyContactSelectorDialog *dialog, + TpAccount *account) +{ + TpConnection *connection; + EmpathyDispatcher *dispatcher; + GList *classes; + + if (tp_account_get_connection_status (account, NULL) != + TP_CONNECTION_STATUS_CONNECTED) + return FALSE; + + /* check if CM supports 1-1 text chat */ + connection = tp_account_get_connection (account); + if (connection == NULL) + return FALSE; + + dispatcher = empathy_dispatcher_dup_singleton (); + + classes = empathy_dispatcher_find_requestable_channel_classes + (dispatcher, connection, TP_IFACE_CHANNEL_TYPE_TEXT, + TP_HANDLE_TYPE_CONTACT, NULL); + + g_object_unref (dispatcher); + + if (classes == NULL) + return FALSE; + + g_list_free (classes); + return TRUE; +} + static GObject * empathy_new_message_dialog_constructor (GType type, guint n_props, @@ -123,6 +157,7 @@ empathy_new_message_dialog_class_init ( object_class->constructor = empathy_new_message_dialog_constructor; dialog_class->got_response = empathy_new_message_dialog_got_response; + dialog_class->account_filter = empathy_new_message_account_filter; } /** -- cgit v1.2.3