Mercurial > pidgin
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 |