summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2012-03-26 17:35:17 -0400
committerJonny Lamb <jonny.lamb@collabora.co.uk>2012-05-18 09:09:46 +0100
commit3ff4f054d6220a515cd00481ebad6da50628f21f (patch)
treeb2c95e289dedb1bb2627a02507b6616a400df0e6
parent8c7d783211415998e82b890ef561c84fafc43603 (diff)
muc-factory: fix listing of channels
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r--src/muc-channel.h3
-rw-r--r--src/muc-factory.c53
2 files changed, 18 insertions, 38 deletions
diff --git a/src/muc-channel.h b/src/muc-channel.h
index 601154bd8..32c5b929b 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 9b01244bc..53389379f 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: