cpw.maiku.media_refactor: af2b3531: Have PURPLE_MEDIA_INFO_ACCEPT in stream-...

maiku at pidgin.im maiku at pidgin.im
Tue Oct 27 20:28:08 EDT 2009


-----------------------------------------------------------------
Revision: af2b35314df29899f4ccb75315ea60ef1ca19c76
Ancestor: 849fc4c22258b647b93f48c4abcedf7fe5beb9f4
Author: maiku at pidgin.im
Date: 2009-10-28T00:12:19
Branch: im.pidgin.cpw.maiku.media_refactor
URL: http://d.pidgin.im/viewmtn/revision/info/af2b35314df29899f4ccb75315ea60ef1ca19c76

Modified files:
        libpurple/media/media.c

ChangeLog: 

Have PURPLE_MEDIA_INFO_ACCEPT in stream-info emit for each accepted stream,
session, participant, and conference.

-------------- next part --------------
============================================================
--- libpurple/media/media.c	512781b69967a7008ddbbc19144a3baf6f408410
+++ libpurple/media/media.c	694f7c78e4a564a446a7767ea21f943fafa0788a
@@ -731,19 +731,70 @@ purple_media_stream_info(PurpleMedia *me
 	g_return_if_fail(PURPLE_IS_MEDIA(media));
 
 	if (type == PURPLE_MEDIA_INFO_ACCEPT) {
-		GList *streams;
+		GList *streams, *sessions = NULL, *participants = NULL;
 
 		g_return_if_fail(PURPLE_IS_MEDIA(media));
 
 		streams = purple_media_get_streams(media,
 				session_id, participant);
 
+		/* Emit stream acceptance */
 		for (; streams; streams =
 				g_list_delete_link(streams, streams)) {
 			PurpleMediaStream *stream = streams->data;
 
 			stream->accepted = TRUE;
+
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, type, stream->session->id,
+					stream->participant, local);
+
+			if (g_list_find(sessions, stream->session) == NULL)
+				sessions = g_list_prepend(sessions,
+						stream->session);
+
+			if (g_list_find_custom(participants,
+					stream->participant,
+					(GCompareFunc)strcmp) == NULL)
+				participants = g_list_prepend(participants,
+						g_strdup(stream->participant));
 		}
+
+		/* Emit session acceptance */
+		for (; sessions; sessions =
+				g_list_delete_link(sessions, sessions)) {
+			PurpleMediaSession *session = sessions->data;
+
+			if (purple_media_accepted(media, session->id, NULL))
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0,
+						PURPLE_MEDIA_INFO_ACCEPT,
+						session->id, NULL, local);
+		}
+
+		/* Emit participant acceptance */
+		for (; participants; participants = g_list_delete_link(
+				participants, participants)) {
+			gchar *participant = participants->data;
+
+			if (purple_media_accepted(media, NULL, participant))
+				g_signal_emit(media, purple_media_signals[
+						STREAM_INFO], 0,
+						PURPLE_MEDIA_INFO_ACCEPT,
+						NULL, participant, local);
+
+			g_free(participant);
+		}
+
+		/* Emit conference acceptance */
+		if (purple_media_accepted(media, NULL, NULL))
+			g_signal_emit(media,
+					purple_media_signals[STREAM_INFO],
+					0, PURPLE_MEDIA_INFO_ACCEPT,
+					NULL, NULL, local);
+
+		return;
 	}
 
 	g_signal_emit(media, purple_media_signals[STREAM_INFO],


More information about the Commits mailing list