diff libpurple/media.c @ 24990:607d82dce00e

Have XMPP use the new ready signal.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sun, 04 Jan 2009 09:56:54 +0000
parents 7caa7e2ce870
children b0e6a64cbf2e
line wrap: on
line diff
--- a/libpurple/media.c	Sun Jan 04 07:42:12 2009 +0000
+++ b/libpurple/media.c	Sun Jan 04 09:56:54 2009 +0000
@@ -642,7 +642,8 @@
 	GList *sessions;
 	gboolean conf_ready = TRUE;
 
-	if ((session != NULL) && ((session->accepted == FALSE) ||
+	if ((session != NULL) && ((media->priv->initiator == FALSE &&
+			session->accepted == FALSE) ||
 			(purple_media_codecs_ready(media, session->id) == FALSE)))
 		return;
 
@@ -652,28 +653,31 @@
 		PurpleMediaSession *session_data = sessions->data;
 		GList *streams = purple_media_get_streams(media,
 				session_data->id, NULL);
+		gboolean session_ready = TRUE;
 
-		if ((session_data->accepted == FALSE) ||
+		if ((media->priv->initiator == FALSE &&
+				session_data->accepted == FALSE) ||
 				(purple_media_codecs_ready(
 				media, session_data->id) == FALSE))
 			conf_ready = FALSE;
 
 		for (; streams; streams = g_list_delete_link(streams, streams)) {
 			PurpleMediaStream *stream = streams->data;
-			if (stream->candidates_prepared == TRUE &&
-					session_data == session)
+			if (stream->candidates_prepared == FALSE) {
+				session_ready = FALSE;
+				conf_ready = FALSE;
+			} else if (session_data == session)
 				g_signal_emit(media, purple_media_signals[READY_NEW],
 						0, session_data->id, stream->participant);
 		}
 
-		if (session == session_data || session == NULL)
+		if (session_ready == TRUE &&
+				(session == session_data || session == NULL))
 			g_signal_emit(media, purple_media_signals[READY_NEW],
 					0, session_data->id, NULL);
 	}
 
 	if (conf_ready == TRUE) {
-		g_list_free(sessions);
-	} else {
 		g_signal_emit(media, purple_media_signals[READY_NEW],
 				0, NULL, NULL);
 	}