changeset 29601:bcee1aab1c01

Keep track of participants better in purple_media_stream_info.
author maiku@pidgin.im
date Wed, 28 Oct 2009 18:24:10 +0000
parents 80bdae3ea957
children f66dec812ba9
files libpurple/media/media.c
diffstat 1 files changed, 4 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/media/media.c	Wed Oct 28 18:16:59 2009 +0000
+++ b/libpurple/media/media.c	Wed Oct 28 18:24:10 2009 +0000
@@ -809,7 +809,7 @@
 		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_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 @@
 			/* 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 @@
 
 			/* 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 @@
 			}
 		} 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 @@
 			}
 		}
 
-		/* 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;
 	}