[telepathy-gabble/master] Return from SearchChannel requests when 'probed' is emitted
Will Thompson
will.thompson at collabora.co.uk
Wed Aug 26 09:21:49 PDT 2009
---
src/search-manager.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/src/search-manager.c b/src/search-manager.c
index 509dd90..4d85bcd 100644
--- a/src/search-manager.c
+++ b/src/search-manager.c
@@ -245,6 +245,58 @@ search_channel_closed_cb (GabbleSearchChannel *chan,
g_hash_table_remove (self->priv->channels, chan);
}
+typedef struct {
+ GabbleSearchManager *self;
+ gpointer request_token;
+ gchar *server;
+} RequestContext;
+
+static RequestContext *
+request_context_new (GabbleSearchManager *self,
+ gpointer request_token,
+ const gchar *server)
+{
+ RequestContext *ctx = g_slice_new (RequestContext);
+
+ ctx->self = g_object_ref (self);
+ ctx->request_token = request_token;
+ ctx->server = g_strdup (server);
+
+ return ctx;
+}
+
+static void
+request_context_free (RequestContext *ctx)
+{
+ g_object_unref (ctx->self);
+ g_free (ctx->server);
+ g_slice_free (RequestContext, ctx);
+}
+
+static void
+search_channel_probed_cb (GabbleSearchChannel *chan,
+ gboolean success,
+ RequestContext *ctx)
+{
+ if (success)
+ {
+ GSList *request_tokens = g_slist_prepend (NULL, ctx->request_token);
+
+ tp_channel_manager_emit_new_channel (ctx->self,
+ (TpExportableChannel *) chan, request_tokens);
+
+ g_slist_free (request_tokens);
+ }
+ else
+ {
+ tp_channel_manager_emit_request_failed_printf (ctx->self,
+ ctx->request_token, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
+ "'%s' is not a (working) user directory server", ctx->server);
+ }
+
+ request_context_free (ctx);
+}
+
static void
new_search_channel (GabbleSearchManager *self,
const gchar *server,
@@ -252,7 +304,6 @@ new_search_channel (GabbleSearchManager *self,
{
GabbleSearchManagerPrivate *priv = self->priv;
GabbleSearchChannel *chan;
- GSList *request_tokens = g_slist_prepend (NULL, request_token);
g_assert (server != NULL);
@@ -263,9 +314,8 @@ new_search_channel (GabbleSearchManager *self,
g_hash_table_insert (priv->channels, chan, priv->channels);
g_signal_connect (chan, "closed", (GCallback) search_channel_closed_cb, self);
- tp_channel_manager_emit_new_channel (self, (TpExportableChannel *) chan,
- request_tokens);
- g_slist_free (request_tokens);
+ g_signal_connect (chan, "probed", (GCallback) search_channel_probed_cb,
+ request_context_new (self, request_token, server));
}
static gboolean
--
1.5.6.5
More information about the telepathy-commits
mailing list