aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2011-01-10 18:02:02 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2011-01-10 18:02:02 +0800
commit363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6 (patch)
tree0db8c671e8825d5343053b37c2a3b3e196c8b176 /libempathy-gtk
parentd5f5cfab4704fad9fad29a1e69a230645f0a4aa5 (diff)
parent98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13 (diff)
downloadgsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar.gz
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar.bz2
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar.lz
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar.xz
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.tar.zst
gsoc2013-empathy-363c9bdf35a11cde6ba7a0da3bc2cb7fcdb7a1b6.zip
Merge remote branch 'glassrose/accounts-supporting-chatrooms-only-603027'
Diffstat (limited to 'libempathy-gtk')
-rw-r--r--libempathy-gtk/empathy-account-chooser.c71
-rw-r--r--libempathy-gtk/empathy-account-chooser.h4
2 files changed, 75 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index f1c0ec6b4..809c2933a 100644
--- a/libempathy-gtk/empathy-account-chooser.c
+++ b/libempathy-gtk/empathy-account-chooser.c
@@ -957,6 +957,77 @@ empathy_account_chooser_filter_is_connected (
callback (is_connected, callback_data);
}
+typedef struct {
+ EmpathyAccountChooserFilterResultCallback callback;
+ gpointer user_data;
+} FilterCallbackData;
+
+static void
+conn_prepared_cb (GObject *conn,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ FilterCallbackData *data = user_data;
+ GError *myerr = NULL;
+ TpCapabilities *caps;
+
+ if (!tp_proxy_prepare_finish (conn, result, &myerr)) {
+ data->callback (FALSE, data->user_data);
+ g_slice_free (FilterCallbackData, data);
+ return;
+ }
+
+ caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
+ data->callback (tp_capabilities_supports_text_chatrooms (caps),
+ data->user_data);
+
+ g_slice_free (FilterCallbackData, data);
+}
+
+/**
+ * empathy_account_chooser_filter_supports_multichat:
+ * @account: a #TpAccount
+ * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
+ * @callback_data: data passed to the @callback
+ * @user_data: user data or %NULL
+ *
+ * An #EmpathyAccountChooserFilterFunc that returns accounts that both
+ * support multiuser text chat and are connected.
+ *
+ * Returns (via the callback) TRUE if @account both supports muc and is connected
+ */
+void
+empathy_account_chooser_filter_supports_chatrooms (
+ TpAccount *account,
+ EmpathyAccountChooserFilterResultCallback callback,
+ gpointer callback_data,
+ gpointer user_data)
+{
+ TpConnection *connection;
+ FilterCallbackData *cb_data;
+ GQuark features[] = { TP_CONNECTION_FEATURE_CAPABILITIES, 0 };
+
+ if (tp_account_get_connection_status (account, NULL) !=
+ TP_CONNECTION_STATUS_CONNECTED) {
+ callback (FALSE, callback_data);
+ return;
+ }
+
+ /* check if CM supports multiuser text chat */
+ connection = tp_account_get_connection (account);
+ if (connection == NULL) {
+ callback (FALSE, callback_data);
+ return;
+ }
+
+ cb_data = g_slice_new0 (FilterCallbackData);
+ cb_data->callback = callback;
+ cb_data->user_data = callback_data;
+
+ tp_proxy_prepare_async (connection, features, conn_prepared_cb,
+ cb_data);
+}
+
gboolean
empathy_account_chooser_is_ready (EmpathyAccountChooser *self)
{
diff --git a/libempathy-gtk/empathy-account-chooser.h b/libempathy-gtk/empathy-account-chooser.h
index dfd372c3e..04e6230bd 100644
--- a/libempathy-gtk/empathy-account-chooser.h
+++ b/libempathy-gtk/empathy-account-chooser.h
@@ -91,6 +91,10 @@ void empathy_account_chooser_filter_is_connected (TpAccount
EmpathyAccountChooserFilterResultCallback callback,
gpointer callback_data,
gpointer user_data);
+void empathy_account_chooser_filter_supports_chatrooms (TpAccount *account,
+ EmpathyAccountChooserFilterResultCallback callback,
+ gpointer callback_data,
+ gpointer user_data);
gboolean empathy_account_chooser_is_ready (EmpathyAccountChooser *chooser);
G_END_DECLS