diff libpurple/media.c @ 25656:e17dbd941380

merge of '0685fc29468269a2af68268baa627b09f83339e4' and '8222acabc1382453e8dda5b8d507e4df0f0a91ff'
author Mike Ruprecht <maiku@soc.pidgin.im>
date Tue, 27 May 2008 04:55:10 +0000
parents 43b3b9ff6028
children cbe97caec684
line wrap: on
line diff
--- a/libpurple/media.c	Tue May 27 04:54:12 2008 +0000
+++ b/libpurple/media.c	Tue May 27 04:55:10 2008 +0000
@@ -546,7 +546,7 @@
 			!GST_IS_PROPERTY_PROBE (element) ||
 			!(probe = GST_PROPERTY_PROBE (element)) ||
 			!(pspec = gst_property_probe_get_property (probe, "device"))) {
-		purple_debug_info("Found source '%s' (%s) - no device",
+		purple_debug_info("media", "Found source '%s' (%s) - no device\n",
 				longname, GST_PLUGIN_FEATURE (factory)->name);
 	} else {
 		gint n;
@@ -571,6 +571,12 @@
 				gst_element_set_state (element, GST_STATE_NULL);
 
 				ret = g_list_append(ret, device);
+
+				name = purple_media_get_device_name(GST_ELEMENT(element), device);
+				purple_debug_info("media", "Found source '%s' (%s) - device '%s' (%s)\n",
+						  longname, GST_PLUGIN_FEATURE (factory)->name,
+						  name, g_value_get_string(device));
+				g_free(name);
 			}
 		}
 	}
@@ -704,7 +710,7 @@
 	gst_element_set_state(pipeline, GST_STATE_PLAYING);
 }
 
-static void
+static gboolean
 purple_media_add_stream_internal(PurpleMedia *media, FsSession **session, GList **streams,
 				 GstElement *src, const gchar *who, FsMediaType type,
 				 FsStreamDirection type_direction, const gchar *transmitter)
@@ -718,7 +724,18 @@
 	FsSession *s = NULL;
 
 	if (!*session) {
-		*session = fs_conference_new_session(media->priv->conference, type, NULL);
+		GError *err = NULL;
+		*session = fs_conference_new_session(media->priv->conference, type, &err);
+
+		if (err != NULL) {
+			purple_debug_error("media", "Error creating session: %s\n", err->message);
+			g_error_free(err);
+			purple_conv_present_error(who,
+						  purple_connection_get_account(purple_media_get_connection(media)),
+						  _("Error creating session."));
+			return FALSE;
+		}
+
 		if (src) {
 			GstPad *sinkpad;
 			GstPad *srcpad;
@@ -776,9 +793,11 @@
 		/* change direction */
 		g_object_set(stream, "direction", type_direction, NULL);
 	}
+
+	return TRUE;
 }
 
-void
+gboolean
 purple_media_add_stream(PurpleMedia *media, const gchar *who,
 			PurpleMediaStreamType type,
 			const gchar *transmitter)
@@ -795,11 +814,13 @@
 		else
 			type_direction = FS_DIRECTION_NONE;
 
-		purple_media_add_stream_internal(media, &media->priv->audio_session,
-						 &media->priv->audio_streams,
-				 		 media->priv->audio_src, who,
-						 FS_MEDIA_TYPE_AUDIO, type_direction,
-						 transmitter);
+		if (!purple_media_add_stream_internal(media, &media->priv->audio_session,
+						      &media->priv->audio_streams,
+				 		      media->priv->audio_src, who,
+						      FS_MEDIA_TYPE_AUDIO, type_direction,
+						      transmitter)) {
+			return FALSE;
+		}
 	}
 	if (type & PURPLE_MEDIA_VIDEO) {
 		if (type & PURPLE_MEDIA_SEND_VIDEO && type & PURPLE_MEDIA_RECV_VIDEO)
@@ -811,12 +832,15 @@
 		else
 			type_direction = FS_DIRECTION_NONE;
 
-		purple_media_add_stream_internal(media, &media->priv->video_session,
-						 &media->priv->video_streams,
-				 		 media->priv->video_src, who,
-						 FS_MEDIA_TYPE_VIDEO, type_direction,
-						 transmitter);
+		if (!purple_media_add_stream_internal(media, &media->priv->video_session,
+						      &media->priv->video_streams,
+				 		      media->priv->video_src, who,
+						      FS_MEDIA_TYPE_VIDEO, type_direction,
+						      transmitter)) {
+			return FALSE;
+		}
 	}
+	return TRUE;
 }
 
 void