Mercurial > pidgin.yaz
comparison libpurple/media.c @ 28428:afa79877d972
Detect that there has been an error in the GStreamer pipeline, output an
appropriate message and end the conference.
author | maiku@pidgin.im |
---|---|
date | Sun, 23 Aug 2009 09:12:32 +0000 |
parents | f0eaa57f58c3 |
children | 0775b7b7298e |
comparison
equal
deleted
inserted
replaced
28427:3571b38c1a7e | 28428:afa79877d972 |
---|---|
2127 } | 2127 } |
2128 } | 2128 } |
2129 } | 2129 } |
2130 break; | 2130 break; |
2131 } | 2131 } |
2132 case GST_MESSAGE_ERROR: { | |
2133 GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg)); | |
2134 GstElement *lastElement = NULL; | |
2135 while (!GST_IS_PIPELINE(element)) { | |
2136 if (element == media->priv->confbin) { | |
2137 purple_media_error("media", _("Conference error.")); | |
2138 purple_media_end(media, NULL, NULL); | |
2139 break; | |
2140 } | |
2141 lastElement = element; | |
2142 element = GST_ELEMENT_PARENT(element); | |
2143 } | |
2144 if (GST_IS_PIPELINE(element)) { | |
2145 GList *sessions = g_hash_table_get_values(media->priv->sessions); | |
2146 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) { | |
2147 PurpleMediaSession *session = sessions->data; | |
2148 | |
2149 if (session->src == lastElement) { | |
2150 if (session->type & PURPLE_MEDIA_AUDIO) | |
2151 purple_media_error(media, _("Error with your microphone.")); | |
2152 else | |
2153 purple_media_error(media, _("Error with your webcam.")); | |
2154 purple_media_end(media, NULL, NULL); | |
2155 break; | |
2156 } | |
2157 } | |
2158 g_list_free(sessions); | |
2159 } | |
2160 } | |
2132 default: | 2161 default: |
2133 break; | 2162 break; |
2134 } | 2163 } |
2135 | 2164 |
2136 return TRUE; | 2165 return TRUE; |