telepathy-gabble: muc-factory: fix listing of channels

Jonny Lamb jonny at kemper.freedesktop.org
Tue Aug 28 06:19:32 PDT 2012


Module: telepathy-gabble
Branch: master
Commit: f5b269b50df5b859fee0c168deafa97b107d9ad7
URL:    http://cgit.freedesktop.org/telepathy/telepathy-gabble/commit/?id=f5b269b50df5b859fee0c168deafa97b107d9ad7

Author: Jonny Lamb <jonny.lamb at collabora.co.uk>
Date:   Mon Mar 26 17:35:17 2012 -0400

muc-factory: fix listing of channels

Signed-off-by: Jonny Lamb <jonny.lamb at collabora.co.uk>

---

 src/muc-channel.h |    3 +++
 src/muc-factory.c |   53 +++++++++++++++--------------------------------------
 2 files changed, 18 insertions(+), 38 deletions(-)

diff --git a/src/muc-channel.h b/src/muc-channel.h
index 601154b..32c5b92 100644
--- a/src/muc-channel.h
+++ b/src/muc-channel.h
@@ -99,6 +99,9 @@ GabbleTubeIface * gabble_muc_channel_tube_request (GabbleMucChannel *self,
     GHashTable *request_properties,
     gboolean require_new);
 
+void gabble_muc_channel_foreach_tubes (GabbleMucChannel *gmuc,
+    TpExportableChannelFunc foreach, gpointer user_data);
+
 #ifdef ENABLE_VOIP
 GabbleCallMucChannel * gabble_muc_channel_get_call (GabbleMucChannel *gmuc);
 GList * gabble_muc_channel_get_call_channels (GabbleMucChannel *self);
diff --git a/src/muc-factory.c b/src/muc-factory.c
index 9b01244..5338937 100644
--- a/src/muc-factory.c
+++ b/src/muc-factory.c
@@ -951,39 +951,6 @@ gabble_muc_factory_constructor (GType type, guint n_props,
   return obj;
 }
 
-
-struct _ForeachData
-{
-  TpExportableChannelFunc foreach;
-  gpointer user_data;
-};
-
-static void
-_foreach_slave (gpointer key, gpointer value, gpointer user_data)
-{
-  struct _ForeachData *data = (struct _ForeachData *) user_data;
-  TpExportableChannel *channel = TP_EXPORTABLE_CHANNEL (value);
-  GabbleMucChannel *gmuc = GABBLE_MUC_CHANNEL (value);
-  GabbleTubesChannel *tube = NULL;
-
-  data->foreach (channel, data->user_data);
-
-  g_object_get (gmuc, "tube", &tube, NULL);
-
-  if (tube != NULL)
-    {
-      channel = TP_EXPORTABLE_CHANNEL (tube);
-      data->foreach (channel, data->user_data);
-      gabble_tubes_channel_foreach (tube, data->foreach, data->user_data);
-      g_object_unref (tube);
-    }
-
-#ifdef ENABLE_VOIP
-  g_list_foreach (gabble_muc_channel_get_call_channels (gmuc),
-      (GFunc) data->foreach, data->user_data);
-#endif
-}
-
 static void
 gabble_muc_factory_foreach_channel (TpChannelManager *manager,
                                     TpExportableChannelFunc foreach,
@@ -991,14 +958,24 @@ gabble_muc_factory_foreach_channel (TpChannelManager *manager,
 {
   GabbleMucFactory *fac = GABBLE_MUC_FACTORY (manager);
   GabbleMucFactoryPrivate *priv = fac->priv;
-  struct _ForeachData data;
+  GHashTableIter iter;
+  gpointer value;
 
-  data.user_data = user_data;
-  data.foreach = foreach;
+  g_hash_table_iter_init (&iter, priv->text_channels);
+  while (g_hash_table_iter_next (&iter, NULL, &value))
+    {
+      GabbleMucChannel *gmuc = GABBLE_MUC_CHANNEL (value);
 
-  g_hash_table_foreach (priv->text_channels, _foreach_slave, &data);
-}
+      foreach (TP_EXPORTABLE_CHANNEL (gmuc), user_data);
+
+      gabble_muc_channel_foreach_tubes (gmuc, foreach, user_data);
 
+#ifdef ENABLE_VOIP
+      g_list_foreach (gabble_muc_channel_get_call_channels (gmuc),
+          (GFunc) foreach, user_data);
+#endif
+    }
+}
 
 /**
  * ensure_muc_channel:



More information about the telepathy-commits mailing list