diff libpurple/mediamanager.c @ 23801:43b3b9ff6028

Added better Farsight error handling. Fixes several crash bugs related to missing GStreamer/Farsight plugins.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Tue, 27 May 2008 02:24:03 +0000
parents e1c8ec1259de
children cbe97caec684
line wrap: on
line diff
--- a/libpurple/mediamanager.c	Sun May 25 04:01:44 2008 +0000
+++ b/libpurple/mediamanager.c	Tue May 27 02:24:03 2008 +0000
@@ -133,13 +133,22 @@
 				  const char *conference_type,
 				  const char *remote_user)
 {
+	PurpleMedia *media;
 	FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL));
+	GstStateChangeReturn ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_READY);
 
-	PurpleMedia *media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
-					  "screenname", remote_user,
-					  "connection", gc, 
-					  "farsight-conference", conference,
-					  NULL));
+	if (ret == GST_STATE_CHANGE_FAILURE) {
+		purple_conv_present_error(remote_user,
+					  purple_connection_get_account(gc),
+					  _("Error creating conference."));
+		return NULL;
+	}
+
+	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
+			     "screenname", remote_user,
+			     "connection", gc, 
+			     "farsight-conference", conference,
+			     NULL));
 	manager->priv->medias = g_list_append(manager->priv->medias, media);
 	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media);
 	return media;