diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2012-05-29 13:24:09 +0100 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2012-05-31 13:52:39 +0100 |
commit | 4b1bccbb832805a55722f92d9cdb8ff3aa45d75d (patch) | |
tree | 3f4f9fdc1538bda4b435dbaa7d6ff1d2a0a9c053 /src | |
parent | f60a51b46c64e5db8469cd9e89a7107de4454be3 (diff) | |
download | telepathy-salut-4b1bccbb832805a55722f92d9cdb8ff3aa45d75d.tar.gz |
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@collabora.co.uk>
Diffstat (limited to 'src')
-rw-r--r-- | src/muc-channel.c | 15 | ||||
-rw-r--r-- | src/muc-channel.h | 3 | ||||
-rw-r--r-- | 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 d403a851..6af58488 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 79787af4..47abcb5f 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 6e0b4b43..c6be2140 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)) |