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;