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