telepathy-salut: muc-channel: do foreach over muc channel tube channels again

Jonny Lamb jonny at kemper.freedesktop.org
Tue Aug 28 06:30:44 PDT 2012


Module: telepathy-salut
Branch: master
Commit: 4b1bccbb832805a55722f92d9cdb8ff3aa45d75d
URL:    http://cgit.freedesktop.org/telepathy/telepathy-salut/commit/?id=4b1bccbb832805a55722f92d9cdb8ff3aa45d75d

Author: Jonny Lamb <jonny.lamb at collabora.co.uk>
Date:   Tue May 29 13:24:09 2012 +0100

muc-channel: do foreach over muc channel tube channels again

These have been stored in the Tubes channel before. No longer!

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

---

 src/muc-channel.c |   15 +++++++++++++++
 src/muc-channel.h |    3 +++
 src/muc-manager.c |   32 +++++++++++---------------------
 3 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/src/muc-channel.c b/src/muc-channel.c
index d403a85..6af5848 100644
--- a/src/muc-channel.c
+++ b/src/muc-channel.c
@@ -1298,3 +1298,18 @@ salut_muc_channel_tube_request (SalutMucChannel *self,
   return tube;
 }
 
+void
+salut_muc_channel_foreach (SalutMucChannel *self,
+    TpExportableChannelFunc func,
+    gpointer user_data)
+{
+  SalutMucChannelPrivate *priv = self->priv;
+  GHashTableIter iter;
+  gpointer value;
+
+  g_hash_table_iter_init (&iter, priv->tubes);
+  while (g_hash_table_iter_next (&iter, NULL, &value))
+    {
+      func (TP_EXPORTABLE_CHANNEL (value), user_data);
+    }
+}
diff --git a/src/muc-channel.h b/src/muc-channel.h
index 79787af..47abcb5 100644
--- a/src/muc-channel.h
+++ b/src/muc-channel.h
@@ -93,6 +93,9 @@ gboolean salut_muc_channel_add_member (GObject *iface, TpHandle handle,
 SalutTubeIface * salut_muc_channel_tube_request (SalutMucChannel *self,
     GHashTable *request_properties);
 
+void salut_muc_channel_foreach (SalutMucChannel *self,
+    TpExportableChannelFunc func, gpointer user_data);
+
 G_END_DECLS
 
 #endif /* #ifndef __SALUT_MUC_CHANNEL_H__*/
diff --git a/src/muc-manager.c b/src/muc-manager.c
index 6e0b4b4..c6be214 100644
--- a/src/muc-manager.c
+++ b/src/muc-manager.c
@@ -271,23 +271,6 @@ salut_muc_manager_dispose (GObject *object)
 
 /* Channel Manager interface */
 
-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);
-
-  data->foreach (channel, data->user_data);
-}
-
 static void
 salut_muc_manager_foreach_channel (TpChannelManager *iface,
                                    TpExportableChannelFunc foreach,
@@ -295,14 +278,21 @@ salut_muc_manager_foreach_channel (TpChannelManager *iface,
 {
   SalutMucManager *fac = SALUT_MUC_MANAGER (iface);
   SalutMucManagerPrivate *priv = SALUT_MUC_MANAGER_GET_PRIVATE (fac);
-  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))
+    {
+      TpExportableChannel *chan = TP_EXPORTABLE_CHANNEL (value);
 
-  g_hash_table_foreach (priv->text_channels, _foreach_slave, &data);
+      /* do the text channel */
+      foreach (chan, user_data);
+
+      /* now its tube channels */
+      salut_muc_channel_foreach (SALUT_MUC_CHANNEL (chan),
+          foreach, user_data);
+    }
 
   g_hash_table_iter_init (&iter, priv->tubes_channels);
   while (g_hash_table_iter_next (&iter, NULL, &value))



More information about the telepathy-commits mailing list