diff options
author | Michael Ruprecht <maiku@pidgin.im> | 2009-10-28 18:24:10 +0000 |
---|---|---|
committer | Michael Ruprecht <maiku@pidgin.im> | 2009-10-28 18:24:10 +0000 |
commit | 0733d5835aaeb9d997cab162263a2999bc466a36 (patch) | |
tree | c3cc2f1f859b0ac6f967db337df5543ac3c9e651 | |
parent | 957ee83a215f1fbf3407f237c669a742f502c2cf (diff) | |
download | pidgin-0733d5835aaeb9d997cab162263a2999bc466a36.tar.gz |
Keep track of participants better in purple_media_stream_info.
-rw-r--r-- | libpurple/media/media.c | 22 |
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; } |