summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Ruprecht <maiku@pidgin.im>2009-10-28 18:24:10 +0000
committerMichael Ruprecht <maiku@pidgin.im>2009-10-28 18:24:10 +0000
commit0733d5835aaeb9d997cab162263a2999bc466a36 (patch)
treec3cc2f1f859b0ac6f967db337df5543ac3c9e651
parent957ee83a215f1fbf3407f237c669a742f502c2cf (diff)
downloadpidgin-0733d5835aaeb9d997cab162263a2999bc466a36.tar.gz
Keep track of participants better in purple_media_stream_info.
-rw-r--r--libpurple/media/media.c22
1 files changed, 4 insertions, 18 deletions
diff --git a/libpurple/media/media.c b/libpurple/media/media.c
index 90ae63884d..3e36c578a9 100644
--- a/libpurple/media/media.c
+++ b/libpurple/media/media.c
@@ -809,7 +809,7 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
return;
} else if (type == PURPLE_MEDIA_INFO_HANGUP ||
type == PURPLE_MEDIA_INFO_REJECT) {
- GList *streams, *participants = NULL;
+ GList *streams;
g_return_if_fail(PURPLE_IS_MEDIA(media));
@@ -825,12 +825,6 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
purple_media_signals[STREAM_INFO],
0, type, stream->session->id,
stream->participant, local);
-
- if (g_list_find_custom(participants,
- stream->participant,
- (GCompareFunc)strcmp) == NULL)
- participants = g_list_prepend(participants,
- g_strdup(stream->participant));
}
if (session_id != NULL && participant != NULL) {
@@ -839,6 +833,7 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
/* Emit for everything in the conference */
GList *sessions = g_hash_table_get_values(
media->priv->sessions);
+ GList *participants = media->priv->participants;
/* Emit for sessions */
for (; sessions; sessions = g_list_delete_link(
@@ -852,15 +847,12 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
/* Emit for participants */
for (; participants; participants =
- g_list_delete_link(
- participants, participants)) {
+ g_list_next(participants)) {
gchar *participant = participants->data;
g_signal_emit(media, purple_media_signals[
STREAM_INFO], 0, type,
NULL, participant, local);
-
- g_free(participant);
}
/* Emit for conference */
@@ -884,7 +876,7 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
}
} else if (participant != NULL) {
/* Emit just the specific participant */
- if (!g_list_find_custom(participants,
+ if (!g_list_find_custom(media->priv->participants,
participant, (GCompareFunc)strcmp)) {
purple_debug_warning("media",
"Couldn't find participant"
@@ -896,12 +888,6 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
}
}
- /* Clear participants if any remain */
- for (; participants; participants = g_list_delete_link(
- participants, participants)) {
- g_free(participants->data);
- }
-
purple_media_end(media, session_id, participant);
return;
}