comparison libpurple/media/media.c @ 29202:ecdf669adac9

Have PURPLE_MEDIA_INFO_ACCEPT in stream-info emit for each accepted stream, session, participant, and conference.
author maiku@pidgin.im
date Wed, 28 Oct 2009 00:12:19 +0000
parents 918d4043cc33
children 86c23178a4fc
comparison
equal deleted inserted replaced
29201:918d4043cc33 29202:ecdf669adac9
729 { 729 {
730 #ifdef USE_VV 730 #ifdef USE_VV
731 g_return_if_fail(PURPLE_IS_MEDIA(media)); 731 g_return_if_fail(PURPLE_IS_MEDIA(media));
732 732
733 if (type == PURPLE_MEDIA_INFO_ACCEPT) { 733 if (type == PURPLE_MEDIA_INFO_ACCEPT) {
734 GList *streams; 734 GList *streams, *sessions = NULL, *participants = NULL;
735 735
736 g_return_if_fail(PURPLE_IS_MEDIA(media)); 736 g_return_if_fail(PURPLE_IS_MEDIA(media));
737 737
738 streams = purple_media_get_streams(media, 738 streams = purple_media_get_streams(media,
739 session_id, participant); 739 session_id, participant);
740 740
741 /* Emit stream acceptance */
741 for (; streams; streams = 742 for (; streams; streams =
742 g_list_delete_link(streams, streams)) { 743 g_list_delete_link(streams, streams)) {
743 PurpleMediaStream *stream = streams->data; 744 PurpleMediaStream *stream = streams->data;
744 745
745 stream->accepted = TRUE; 746 stream->accepted = TRUE;
747
748 g_signal_emit(media,
749 purple_media_signals[STREAM_INFO],
750 0, type, stream->session->id,
751 stream->participant, local);
752
753 if (g_list_find(sessions, stream->session) == NULL)
754 sessions = g_list_prepend(sessions,
755 stream->session);
756
757 if (g_list_find_custom(participants,
758 stream->participant,
759 (GCompareFunc)strcmp) == NULL)
760 participants = g_list_prepend(participants,
761 g_strdup(stream->participant));
746 } 762 }
763
764 /* Emit session acceptance */
765 for (; sessions; sessions =
766 g_list_delete_link(sessions, sessions)) {
767 PurpleMediaSession *session = sessions->data;
768
769 if (purple_media_accepted(media, session->id, NULL))
770 g_signal_emit(media, purple_media_signals[
771 STREAM_INFO], 0,
772 PURPLE_MEDIA_INFO_ACCEPT,
773 session->id, NULL, local);
774 }
775
776 /* Emit participant acceptance */
777 for (; participants; participants = g_list_delete_link(
778 participants, participants)) {
779 gchar *participant = participants->data;
780
781 if (purple_media_accepted(media, NULL, participant))
782 g_signal_emit(media, purple_media_signals[
783 STREAM_INFO], 0,
784 PURPLE_MEDIA_INFO_ACCEPT,
785 NULL, participant, local);
786
787 g_free(participant);
788 }
789
790 /* Emit conference acceptance */
791 if (purple_media_accepted(media, NULL, NULL))
792 g_signal_emit(media,
793 purple_media_signals[STREAM_INFO],
794 0, PURPLE_MEDIA_INFO_ACCEPT,
795 NULL, NULL, local);
796
797 return;
747 } 798 }
748 799
749 g_signal_emit(media, purple_media_signals[STREAM_INFO], 800 g_signal_emit(media, purple_media_signals[STREAM_INFO],
750 0, type, session_id, participant, local); 801 0, type, session_id, participant, local);
751 802