totem r5086 - in trunk: . src src/backend



Author: hadess
Date: Fri Feb  8 20:52:09 2008
New Revision: 5086
URL: http://svn.gnome.org/viewvc/totem?rev=5086&view=rev

Log:
2008-02-08  Bastien Nocera  <hadess hadess net>

	* src/backend/bacon-video-widget-gst-0.10.c:
	(bacon_video_widget_can_play):
	* src/backend/bacon-video-widget-xine.c:
	(bacon_video_widget_can_play):
	* src/backend/bacon-video-widget.h:
	Change the API to give a more detailed information as to why it
	can't play a specific media

	* src/totem.c: (totem_action_load_media):
	Better error message depending on the retval of _can_play()



Modified:
   trunk/ChangeLog
   trunk/src/backend/bacon-video-widget-gst-0.10.c
   trunk/src/backend/bacon-video-widget-xine.c
   trunk/src/backend/bacon-video-widget.h
   trunk/src/totem.c

Modified: trunk/src/backend/bacon-video-widget-gst-0.10.c
==============================================================================
--- trunk/src/backend/bacon-video-widget-gst-0.10.c	(original)
+++ trunk/src/backend/bacon-video-widget-gst-0.10.c	Fri Feb  8 20:52:09 2008
@@ -3889,10 +3889,10 @@
   return res;
 }
 
-gboolean
+BaconVideoWidgetCanPlayStatus
 bacon_video_widget_can_play (BaconVideoWidget * bvw, TotemDiscMediaType type)
 {
-  gboolean res;
+  BaconVideoWidgetCanPlayStatus res;
 
   g_return_val_if_fail (bvw != NULL, FALSE);
   g_return_val_if_fail (BACON_IS_VIDEO_WIDGET (bvw), FALSE);
@@ -3900,24 +3900,27 @@
 
   switch (type) {
     case MEDIA_TYPE_VCD:
-      res = TRUE;
+      res = BVW_CAN_PLAY_SUCCESS;
       break;
     case MEDIA_TYPE_DVD: {
       GstElement *element;
 
       element = gst_element_factory_make ("dvdreadsrc", "test_dvdsrc");
-      res = (element != NULL);
-      if (element != NULL)
+      if (element == NULL) {
+        res = BVW_CAN_PLAY_MISSING_PLUGINS;
+      } else {
         g_object_unref (element);
+        res = BVW_CAN_PLAY_SUCCESS;
+      }
       break;
     }
     case MEDIA_TYPE_CDDA:
     default:
-      res = FALSE;
+      res = BVW_CAN_PLAY_UNSUPPORTED;
       break;
   }
 
-  GST_DEBUG ("type=%d, can_play=%s", type, (res) ? "TRUE" : "FALSE");
+  GST_DEBUG ("type=%d, can_play=%d", type, res);
   return res;
 }
 
@@ -4007,6 +4010,10 @@
       break;
     }
 
+    case MEDIA_TYPE_DVB: {
+      //FIXME
+    }
+
     default:
       mrls = NULL;
       break;

Modified: trunk/src/backend/bacon-video-widget-xine.c
==============================================================================
--- trunk/src/backend/bacon-video-widget-xine.c	(original)
+++ trunk/src/backend/bacon-video-widget-xine.c	Fri Feb  8 20:52:09 2008
@@ -3452,21 +3452,41 @@
 			XINE_STREAM_INFO_SEEKABLE);
 }
 
-gboolean
+BaconVideoWidgetCanPlayStatus
 bacon_video_widget_can_play (BaconVideoWidget *bvw, TotemDiscMediaType type)
 {
 	switch (type)
 	{
 	case MEDIA_TYPE_DVD:
-		return bvw->priv->can_dvd;
+		if (bvw->priv->can_dvd != FALSE)
+			return BVW_CAN_PLAY_SUCCESS;
+		break;
 	case MEDIA_TYPE_VCD:
-		return bvw->priv->can_vcd;
+		if (bvw->priv->can_vcd != FALSE)
+			return BVW_CAN_PLAY_SUCCESS;
+		break;
 	case MEDIA_TYPE_DVB:
-		return bvw->priv->can_dvb;
+		if (bvw->priv->can_dvb != FALSE) {
+			char *path;
+
+			path = g_build_filename (g_get_home_dir (),
+						 ".xine",
+						 "channels.conf",
+						 NULL);
+			if (g_file_test (path, G_FILE_TEST_IS_REGULAR) == FALSE) {
+				g_free (path);
+				return BVW_CAN_PLAY_MISSING_CHANNELS;
+			}
+			g_free (path);
+			return BVW_CAN_PLAY_SUCCESS;
+		}
+		break;
 	case MEDIA_TYPE_CDDA:
 	default:
-		return FALSE;
+		return BVW_CAN_PLAY_UNSUPPORTED;
 	}
+
+	return BVW_CAN_PLAY_MISSING_PLUGINS;
 }
 
 char **

Modified: trunk/src/backend/bacon-video-widget.h
==============================================================================
--- trunk/src/backend/bacon-video-widget.h	(original)
+++ trunk/src/backend/bacon-video-widget.h	Fri Feb  8 20:52:09 2008
@@ -171,7 +171,15 @@
 						  int speed);
 int bacon_video_widget_get_connection_speed      (BaconVideoWidget *bvw);
 
-gboolean bacon_video_widget_can_play             (BaconVideoWidget *bvw,
+typedef enum {
+	BVW_CAN_PLAY_SUCCESS,
+	BVW_CAN_PLAY_MISSING_CHANNELS,
+	BVW_CAN_PLAY_MISSING_PLUGINS,
+	BVW_CAN_PLAY_UNSUPPORTED
+} BaconVideoWidgetCanPlayStatus;
+
+BaconVideoWidgetCanPlayStatus bacon_video_widget_can_play
+						 (BaconVideoWidget *bvw,
 						  TotemDiscMediaType type);
 
 gchar **bacon_video_widget_get_mrls		 (BaconVideoWidget *bvw,

Modified: trunk/src/totem.c
==============================================================================
--- trunk/src/totem.c	(original)
+++ trunk/src/totem.c	Fri Feb  8 20:52:09 2008
@@ -481,15 +481,22 @@
 	char **mrls;
 	char *msg;
 	gboolean retval;
+	BaconVideoWidgetCanPlayStatus status;
 
-	if (bacon_video_widget_can_play (totem->bvw, type) == FALSE) {
-		if (type == MEDIA_TYPE_DVD || type == MEDIA_TYPE_VCD)
+	status = bacon_video_widget_can_play (totem->bvw, type);
+
+	if (status != BVW_CAN_PLAY_SUCCESS) {
+		if (status == BVW_CAN_PLAY_MISSING_CHANNELS) {
+			//FIXME we need to launch the scanner
+			return FALSE;
+		} else if (status == BVW_CAN_PLAY_UNSUPPORTED) {
+			msg = g_strdup_printf(_("Totem cannot play this type of media (%s) because it is not supported."), _(totem_cd_get_human_readable_name (type)));
+		} else if (status == BVW_CAN_PLAY_MISSING_PLUGINS) {
 			msg = g_strdup_printf(_("Totem cannot play this type of media (%s) because it does not have the appropriate plugins to be able to read from the disc."), _(totem_cd_get_human_readable_name (type)));
-		else
-			msg = g_strdup_printf (_("Totem cannot play this type of media (%s) because you do not have the appropriate plugins to handle it."), _(totem_cd_get_human_readable_name (type)));
-		totem_interface_error_with_link (msg, _("Please install the necessary plugins and restart Totem to be able to play this media."),
-				"http://www.gnome.org/projects/totem/#codecs";, _("More information about media plugins"),
-				GTK_WINDOW (totem->win), totem);
+			totem_interface_error_with_link (msg, _("Please install the necessary plugins and restart Totem to be able to play this media."),
+							 "http://www.gnome.org/projects/totem/#codecs";, _("More information about media plugins"),
+							 GTK_WINDOW (totem->win), totem);
+		}
 		g_free (msg);
 		return FALSE;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]