diff options
author | Michael Ruprecht <maiku@pidgin.im> | 2009-10-28 00:12:19 +0000 |
---|---|---|
committer | Michael Ruprecht <maiku@pidgin.im> | 2009-10-28 00:12:19 +0000 |
commit | 323c3117e05ecfa288bf2b90bc34640d748151d7 (patch) | |
tree | d436567917a8b7979b4cee711c7c5b46addbc506 | |
parent | 31b39785d3b9f08902aefc389819a4f7f9942cfc (diff) | |
download | pidgin-323c3117e05ecfa288bf2b90bc34640d748151d7.tar.gz |
Have PURPLE_MEDIA_INFO_ACCEPT in stream-info emit for each accepted stream,
session, participant, and conference.
-rw-r--r-- | libpurple/media/media.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/libpurple/media/media.c b/libpurple/media/media.c index 8519b3313b..68ad2298c8 100644 --- a/libpurple/media/media.c +++ b/libpurple/media/media.c @@ -731,19 +731,70 @@ purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type, 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], |