brasero r1330 - in trunk: . src



Author: philippr
Date: Tue Sep 30 16:13:41 2008
New Revision: 1330
URL: http://svn.gnome.org/viewvc/brasero?rev=1330&view=rev

Log:
	Added a message when the input is a protected disc

	* src/brasero-burn-options.c (brasero_burn_options_valid_media_cb):
	* src/brasero-session-cfg.c (brasero_session_cfg_update),
	(brasero_session_cfg_check):
	* src/brasero-session-cfg.h:
	* src/burn-caps.c (brasero_caps_find_link_for_input),
	(brasero_caps_has_active_input), (brasero_burn_caps_is_input),
	(brasero_burn_caps_has_capability):
	* src/burn-caps.h:


Modified:
   trunk/ChangeLog
   trunk/src/brasero-burn-options.c
   trunk/src/brasero-session-cfg.c
   trunk/src/brasero-session-cfg.h
   trunk/src/burn-caps.c
   trunk/src/burn-caps.h

Modified: trunk/src/brasero-burn-options.c
==============================================================================
--- trunk/src/brasero-burn-options.c	(original)
+++ trunk/src/brasero-burn-options.c	Tue Sep 30 16:13:41 2008
@@ -277,10 +277,22 @@
 							      BRASERO_NOTIFY_CONTEXT_SIZE);
 		}
 	}
+	else if (valid == BRASERO_SESSION_DISC_PROTECTED) {
+		GtkWidget *message;
+
+		if (priv->message_input) {
+			gtk_widget_show (priv->message_input);
+			message = brasero_notify_message_add (BRASERO_NOTIFY (priv->message_input),
+							      _("Please, insert a disc that is not copy protected."),
+							      _("Such a medium can't be copied without the proper plugins."),
+							      -1,
+							      BRASERO_NOTIFY_CONTEXT_SIZE);
+		}
+	}
 	else if (valid == BRASERO_SESSION_NOT_SUPPORTED) {
 		brasero_notify_message_add (BRASERO_NOTIFY (priv->message_output),
-					    _("Please, replace the disc with a recordable CD or DVD."),
-					    _("The medium is not writable with the current set of plugins."),
+					    _("Please, replace the disc with a supported CD or DVD."),
+					    _("It is not possible to write with the current set of plugins."),
 					    -1,
 					    BRASERO_NOTIFY_CONTEXT_SIZE);
 	}

Modified: trunk/src/brasero-session-cfg.c
==============================================================================
--- trunk/src/brasero-session-cfg.c	(original)
+++ trunk/src/brasero-session-cfg.c	Tue Sep 30 16:13:41 2008
@@ -495,10 +495,19 @@
 	result = brasero_burn_caps_is_session_supported (priv->caps, BRASERO_BURN_SESSION (self));
 
 	if (result != BRASERO_BURN_OK) {
-		g_signal_emit (self,
-			       session_cfg_signals [IS_VALID_SIGNAL],
-			       0,
-			       BRASERO_SESSION_NOT_SUPPORTED);
+		/* This is a special case */
+		if (source.type == BRASERO_TRACK_TYPE_DISC
+		&& (source.subtype.media & BRASERO_MEDIUM_PROTECTED)
+		&&  brasero_burn_caps_has_capability (priv->caps, &source) != BRASERO_BURN_OK)
+			g_signal_emit (self,
+				       session_cfg_signals [IS_VALID_SIGNAL],
+				       0,
+				       BRASERO_SESSION_DISC_PROTECTED);
+		else
+			g_signal_emit (self,
+				       session_cfg_signals [IS_VALID_SIGNAL],
+				       0,
+				       BRASERO_SESSION_NOT_SUPPORTED);
 		return;
 	}
 
@@ -544,6 +553,7 @@
 {
 	BraseroSessionCfgPrivate *priv;
 	BraseroBurnResult result;
+	BraseroTrackType source = {0,};
 	BraseroDrive *burner;
 
 	priv = BRASERO_SESSION_CFG_PRIVATE (self);
@@ -553,6 +563,37 @@
 
 	priv->configuring = TRUE;
 
+	/* make sure there is a source */
+	brasero_burn_session_get_input_type (BRASERO_BURN_SESSION (self), &source);
+	if (source.type == BRASERO_TRACK_TYPE_NONE) {
+		priv->configuring = FALSE;
+		g_signal_emit (self,
+			       session_cfg_signals [IS_VALID_SIGNAL],
+			       0,
+			       BRASERO_SESSION_NOT_SUPPORTED);
+		return;
+	}
+
+	if (source.type == BRASERO_TRACK_TYPE_DISC
+	&&  source.subtype.media == BRASERO_MEDIUM_NONE) {
+		priv->configuring = FALSE;
+		g_signal_emit (self,
+			       session_cfg_signals [IS_VALID_SIGNAL],
+			       0,
+			       BRASERO_SESSION_NO_INPUT_MEDIUM);
+		return;
+	}
+
+	if (source.type == BRASERO_TRACK_TYPE_IMAGE
+	&&  source.subtype.img_format == BRASERO_IMAGE_FORMAT_NONE) {
+		priv->configuring = FALSE;
+		g_signal_emit (self,
+			       session_cfg_signals [IS_VALID_SIGNAL],
+			       0,
+			       BRASERO_SESSION_NO_INPUT_IMAGE);
+		return;
+	}
+
 	burner = brasero_burn_session_get_burner (BRASERO_BURN_SESSION (self));
 	if (!burner) {
 		priv->configuring = FALSE;
@@ -575,10 +616,19 @@
 	result = brasero_burn_caps_is_session_supported (priv->caps, BRASERO_BURN_SESSION (self));
 
 	if (result != BRASERO_BURN_OK) {
-		g_signal_emit (self,
-			       session_cfg_signals [IS_VALID_SIGNAL],
-			       0,
-			       BRASERO_SESSION_NOT_SUPPORTED);
+		/* This is a special case */
+		if (source.type == BRASERO_TRACK_TYPE_DISC
+		&& (source.subtype.media & BRASERO_MEDIUM_PROTECTED)
+		&&  brasero_burn_caps_has_capability (priv->caps, &source) != BRASERO_BURN_OK)
+			g_signal_emit (self,
+				       session_cfg_signals [IS_VALID_SIGNAL],
+				       0,
+				       BRASERO_SESSION_DISC_PROTECTED);
+		else
+			g_signal_emit (self,
+				       session_cfg_signals [IS_VALID_SIGNAL],
+				       0,
+				       BRASERO_SESSION_NOT_SUPPORTED);
 		return;
 	}
 

Modified: trunk/src/brasero-session-cfg.h
==============================================================================
--- trunk/src/brasero-session-cfg.h	(original)
+++ trunk/src/brasero-session-cfg.h	Tue Sep 30 16:13:41 2008
@@ -71,9 +71,10 @@
 	BRASERO_SESSION_UNKNOWN_IMAGE,
 	BRASERO_SESSION_NO_INPUT_MEDIUM,
 	BRASERO_SESSION_NO_OUTPUT,
-	BRASERO_SESSION_NOT_SUPPORTED,
 	BRASERO_SESSION_INSUFFICIENT_SPACE,
-	BRASERO_SESSION_OVERBURN_NECESSARY
+	BRASERO_SESSION_OVERBURN_NECESSARY,
+	BRASERO_SESSION_NOT_SUPPORTED,
+	BRASERO_SESSION_DISC_PROTECTED
 } BraseroSessionError;
 
 /**

Modified: trunk/src/burn-caps.c
==============================================================================
--- trunk/src/burn-caps.c	(original)
+++ trunk/src/burn-caps.c	Tue Sep 30 16:13:41 2008
@@ -2292,6 +2292,82 @@
 	return BRASERO_IMAGE_FORMAT_NONE;
 }
 
+static BraseroCapsLink *
+brasero_caps_find_link_for_input (BraseroCaps *caps,
+				  BraseroCaps *input)
+{
+	GSList *links;
+
+	for (links = caps->links; links; links = links->next) {
+		BraseroCapsLink *link;
+
+		link = links->data;
+		if (link->caps == input)
+			return link;
+	}
+
+	return NULL;
+}
+
+static gboolean
+brasero_caps_has_active_input (BraseroCaps *caps,
+			       BraseroCaps *input)
+{
+	GSList *links;
+
+	for (links = caps->links; links; links = links->next) {
+		BraseroCapsLink *link;
+
+		link = links->data;
+		if (link->caps != input)
+			continue;
+
+		if (brasero_caps_link_active (link))
+			return TRUE;
+	}
+
+	return FALSE;
+}
+
+static gboolean
+brasero_burn_caps_is_input (BraseroBurnCaps *self,
+			    BraseroCaps *input)
+{
+	GSList *iter;
+
+	for (iter = self->priv->caps_list; iter; iter = iter->next) {
+		BraseroCaps *tmp;
+
+		tmp = iter->data;
+		if (tmp == input)
+			continue;
+
+		if (brasero_caps_has_active_input (tmp, input))
+			return TRUE;
+	}
+
+	return FALSE;
+}
+
+BraseroBurnResult
+brasero_burn_caps_has_capability (BraseroBurnCaps *self,
+				  BraseroTrackType *type)
+{
+	GSList *iter;
+
+	for (iter = self->priv->caps_list; iter; iter = iter->next) {
+		BraseroCaps *caps;
+
+		caps = iter->data;
+
+		if (brasero_caps_is_compatible_type (caps, type)
+		&&  brasero_burn_caps_is_input (self, caps))
+			return BRASERO_BURN_OK;
+	}
+
+	return BRASERO_BURN_ERR;
+}
+
 static BraseroPluginIOFlag
 brasero_caps_get_flags (BraseroCaps *caps,
 			BraseroBurnFlag session_flags,
@@ -3616,23 +3692,6 @@
  * these functions are to create links
  */
 
-static BraseroCapsLink *
-brasero_caps_find_link_for_input (BraseroCaps *caps,
-				  BraseroCaps *input)
-{
-	GSList *links;
-
-	for (links = caps->links; links; links = links->next) {
-		BraseroCapsLink *link;
-
-		link = links->data;
-		if (link->caps == input)
-			return link;
-	}
-
-	return NULL;
-}
-
 static void
 brasero_caps_create_links (BraseroCaps *output,
 	 		   GSList *inputs,

Modified: trunk/src/burn-caps.h
==============================================================================
--- trunk/src/burn-caps.h	(original)
+++ trunk/src/burn-caps.h	Tue Sep 30 16:13:41 2008
@@ -98,6 +98,10 @@
  */
 
 BraseroBurnResult
+brasero_burn_caps_has_capability (BraseroBurnCaps *caps,
+				  BraseroTrackType *type);
+
+BraseroBurnResult
 brasero_burn_caps_can_blank (BraseroBurnCaps *caps,
 			     BraseroBurnSession *session);
 



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