[Telepathy-commits] [telepathy-salut/master] muc-manager: remove all the queued_requests machinery as we emit the new-channel signal directly anyway
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Tue Nov 25 09:58:33 PST 2008
---
src/salut-muc-manager.c | 105 ++++++++++------------------------------------
1 files changed, 23 insertions(+), 82 deletions(-)
diff --git a/src/salut-muc-manager.c b/src/salut-muc-manager.c
index 9d7a4f9..5d52ba6 100644
--- a/src/salut-muc-manager.c
+++ b/src/salut-muc-manager.c
@@ -87,11 +87,6 @@ struct _SalutMucManagerPrivate
GHashTable *tubes_channels;
#endif
- /* Map from channels to the request-tokens of requests that they will
- * satisfy when they're ready.
- * Borrowed TpExportableChannel => GSList of gpointer */
- GHashTable *queued_requests;
-
gboolean dispose_has_run;
};
@@ -116,9 +111,6 @@ salut_muc_manager_init (SalutMucManager *obj)
priv->tubes_channels = g_hash_table_new_full (g_direct_hash, g_direct_equal,
NULL, g_object_unref);
#endif
-
- priv->queued_requests = g_hash_table_new_full (g_direct_hash,
- g_direct_equal, NULL, NULL);
}
static void
@@ -174,29 +166,6 @@ closed_channel_foreach (TpHandle handle,
salut_muc_channel_emit_closed (channel);
}
-static gboolean
-cancel_queued_requests (gpointer k,
- gpointer v,
- gpointer d)
-{
- SalutMucManager *self = SALUT_MUC_MANAGER (d);
- GSList *requests_satisfied = v;
- GSList *iter;
-
- requests_satisfied = g_slist_reverse (requests_satisfied);
-
- for (iter = requests_satisfied; iter != NULL; iter = iter->next)
- {
- tp_channel_manager_emit_request_failed (self,
- iter->data, TP_ERRORS, TP_ERROR_DISCONNECTED,
- "Unable to complete this channel request, we're disconnecting!");
- }
-
- g_slist_free (requests_satisfied);
-
- return TRUE;
-}
-
static void
salut_muc_manager_close_all (SalutMucManager *self)
{
@@ -210,14 +179,6 @@ salut_muc_manager_close_all (SalutMucManager *self)
priv->status_changed_id = 0;
}
- if (priv->queued_requests != NULL)
- {
- g_hash_table_foreach_steal (priv->queued_requests,
- cancel_queued_requests, self);
- g_hash_table_destroy (priv->queued_requests);
- priv->queued_requests = NULL;
- }
-
if (priv->text_channels)
{
GHashTable *tmp = priv->text_channels;
@@ -521,21 +482,6 @@ _get_connection (SalutMucManager *mgr,
protocol, parameters, error);
}
-static void
-salut_muc_manager_emit_new_channel (SalutMucManager *self,
- TpExportableChannel *channel)
-{
- SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (self);
- GSList *requests_satisfied;
-
- requests_satisfied = g_hash_table_lookup (priv->queued_requests, channel);
- g_hash_table_steal (priv->queued_requests, channel);
- requests_satisfied = g_slist_reverse (requests_satisfied);
- tp_channel_manager_emit_new_channel (self, channel, requests_satisfied);
- g_slist_free (requests_satisfied);
-}
-
-
static SalutMucChannel *
salut_muc_manager_new_muc_channel (SalutMucManager *mgr,
TpHandle handle,
@@ -620,6 +566,7 @@ new_tubes_channel (SalutMucManager *self,
static SalutMucChannel *
salut_muc_manager_request_new_muc_channel (SalutMucManager *mgr,
TpHandle handle,
+ gpointer request_token,
GError **error)
{
SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (mgr);
@@ -634,6 +581,7 @@ salut_muc_manager_request_new_muc_channel (SalutMucManager *mgr,
gchar *address;
guint16 p;
gboolean r;
+ GSList *tokens = NULL;
SalutRoomlistManager *roomlist_manager;
g_object_get (priv->connection, "roomlist-manager", &roomlist_manager, NULL);
@@ -695,6 +643,14 @@ salut_muc_manager_request_new_muc_channel (SalutMucManager *mgr,
* succeed */
g_assert (r);
+ if (request_token != NULL)
+ tokens = g_slist_prepend (tokens, request_token);
+
+ tp_channel_manager_emit_new_channel (mgr, TP_EXPORTABLE_CHANNEL (text_chan),
+ tokens);
+
+ g_slist_free (tokens);
+
return text_chan;
}
@@ -702,11 +658,13 @@ static SalutTubesChannel *
create_tubes_channel (SalutMucManager *self,
TpHandle handle,
TpHandle initiator,
+ gpointer request_token,
GError **error)
{
SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (self);
SalutMucChannel *text_chan;
SalutTubesChannel *tubes_chan;
+ GSList *tokens = NULL;
text_chan = g_hash_table_lookup (priv->text_channels,
GUINT_TO_POINTER (handle));
@@ -716,9 +674,8 @@ create_tubes_channel (SalutMucManager *self,
DEBUG ("have to create the text channel before the tubes one");
/* FIXME: this channel will come out with Requested: True. */
text_chan = salut_muc_manager_request_new_muc_channel (self,
- handle, error);
- salut_muc_manager_emit_new_channel (self,
- TP_EXPORTABLE_CHANNEL (text_chan));
+ handle, NULL, error);
+
if (text_chan == NULL)
return NULL;
}
@@ -726,22 +683,15 @@ create_tubes_channel (SalutMucManager *self,
tubes_chan = new_tubes_channel (self, handle, text_chan, initiator);
g_assert (tubes_chan != NULL);
- return tubes_chan;
-}
+ if (request_token != NULL)
+ tokens = g_slist_prepend (tokens, request_token);
-static void
-salut_muc_manager_associate_request (SalutMucManager *self,
- gpointer channel,
- gpointer request)
-{
- SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (self);
- GSList *list = g_hash_table_lookup (priv->queued_requests, channel);
+ tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (tubes_chan),
+ tokens);
- g_assert (TP_IS_EXPORTABLE_CHANNEL (channel));
+ g_slist_free (tokens);
- g_hash_table_steal (priv->queued_requests, channel);
- list = g_slist_prepend (list, request);
- g_hash_table_insert (priv->queued_requests, channel, list);
+ return tubes_chan;
}
static gboolean
@@ -800,11 +750,7 @@ salut_muc_manager_request (SalutMucManager *self,
else
{
text_chan = salut_muc_manager_request_new_muc_channel (self,
- handle, NULL);
- salut_muc_manager_associate_request (self, text_chan,
- request_token);
- salut_muc_manager_emit_new_channel (self,
- TP_EXPORTABLE_CHANNEL (text_chan));
+ handle, request_token, NULL);
}
return TRUE;
@@ -837,14 +783,9 @@ salut_muc_manager_request (SalutMucManager *self,
else
{
tubes_chan = create_tubes_channel (self, handle,
- base_conn->self_handle, &error);
+ base_conn->self_handle, request_token, &error);
if (tubes_chan == NULL)
goto error;
-
- salut_muc_manager_associate_request (self, tubes_chan,
- request_token);
- salut_muc_manager_emit_new_channel (self,
- TP_EXPORTABLE_CHANNEL (tubes_chan));
}
return TRUE;
@@ -1109,7 +1050,7 @@ salut_muc_manager_ensure_tubes_channel (SalutMucManager *self,
return tubes_chan;
}
- tubes_chan = create_tubes_channel (self, handle, actor, NULL);
+ tubes_chan = create_tubes_channel (self, handle, actor, NULL, NULL);
g_assert (tubes_chan != NULL);
g_object_ref (tubes_chan);
--
1.5.6.5
More information about the Telepathy-commits
mailing list