[Telepathy-commits] [telepathy-gabble/master] Go through all tube channels in ListChannels: the old ones (Channel.Type.Tubes) and the new ones (Channel.Type.{Stream|DBus}Tube)

Alban Crequy alban.crequy at collabora.co.uk
Mon Nov 3 11:20:53 PST 2008


---
 src/private-tubes-factory.c |    6 ++++++
 src/tubes-channel.c         |   29 +++++++++++++++++++++++++++++
 src/tubes-channel.h         |    6 +++++-
 3 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/src/private-tubes-factory.c b/src/private-tubes-factory.c
index d4636ab..6004e9d 100644
--- a/src/private-tubes-factory.c
+++ b/src/private-tubes-factory.c
@@ -368,7 +368,13 @@ _foreach_slave (gpointer key,
 
   g_assert (TP_IS_CHANNEL_IFACE (chan));
 
+  /* Add channels of type Channel.Type.Tubes */
   data->foreach (chan, data->user_data);
+
+  /* Add channels of type Channel.Type.{Stream|DBus}Tube which live in the
+   * GabbleTubesChannel object */
+  gabble_tubes_channel_foreach (GABBLE_TUBES_CHANNEL (chan), data->foreach,
+      data->user_data);
 }
 
 static void
diff --git a/src/tubes-channel.c b/src/tubes-channel.c
index 20b36b4..901f7e4 100644
--- a/src/tubes-channel.c
+++ b/src/tubes-channel.c
@@ -664,6 +664,35 @@ _emit_d_bus_names_changed_foreach_data
   TpHandle contact;
 };
 
+struct _ForeachData
+{
+  GabbleExportableChannelFunc foreach;
+  gpointer user_data;
+};
+
+static void
+foreach_slave (gpointer key,
+               gpointer value,
+               gpointer user_data)
+{
+  GabbleTubeIface *tube = GABBLE_TUBE_IFACE (value);
+  struct _ForeachData *data = (struct _ForeachData *) user_data;
+
+  data->foreach (GABBLE_EXPORTABLE_CHANNEL (tube), data->user_data);
+}
+
+void gabble_tubes_channel_foreach (GabbleTubesChannel *self,
+    GabbleExportableChannelFunc foreach, gpointer user_data)
+{
+  struct _ForeachData data;
+  GabbleTubesChannelPrivate *priv = GABBLE_TUBES_CHANNEL_GET_PRIVATE (self);
+
+  data.user_data = user_data;
+  data.foreach = foreach;
+
+  g_hash_table_foreach (priv->tubes, foreach_slave, &data);
+}
+
 static void
 emit_d_bus_names_changed_foreach (gpointer key,
                                   gpointer value,
diff --git a/src/tubes-channel.h b/src/tubes-channel.h
index 2024671..2f71b19 100644
--- a/src/tubes-channel.h
+++ b/src/tubes-channel.h
@@ -25,8 +25,9 @@
 
 #include <telepathy-glib/base-connection.h>
 
-#include "muc-channel.h"
 #include "bytestream-iface.h"
+#include "exportable-channel.h"
+#include "muc-channel.h"
 
 G_BEGIN_DECLS
 
@@ -67,6 +68,9 @@ GType gabble_tubes_channel_get_type (void);
   (G_TYPE_INSTANCE_GET_CLASS ((obj), GABBLE_TYPE_TUBES_CHANNEL,\
                               GabbleTubesChannelClass))
 
+void gabble_tubes_channel_foreach (GabbleTubesChannel *self,
+    GabbleExportableChannelFunc foreach, gpointer user_data);
+
 void gabble_tubes_channel_presence_updated (GabbleTubesChannel *chan,
     TpHandle contact, LmMessage *presence);
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list