[brasero] When we set a temporary output for a task then use that output and not the one from BraseroBurnSessi



commit a51a29f6d29a711394b35a2fc4c995153c78f151
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Mon Oct 12 13:45:16 2009 +0200

    When we set a temporary output for a task then use that output and not the one from BraseroBurnSession to determine the supported flags

 libbrasero-burn/brasero-burn.c           |   41 ++++++++++++++++++++---------
 libbrasero-burn/brasero-caps-session.c   |   42 +++++++++++++++++++++++------
 libbrasero-burn/brasero-session-helper.h |    6 ++++
 3 files changed, 67 insertions(+), 22 deletions(-)
---
diff --git a/libbrasero-burn/brasero-burn.c b/libbrasero-burn/brasero-burn.c
index 40c7938..80262f2 100644
--- a/libbrasero-burn/brasero-burn.c
+++ b/libbrasero-burn/brasero-burn.c
@@ -1794,9 +1794,9 @@ start:
 
 static BraseroBurnResult
 brasero_burn_check_session_consistency (BraseroBurn *burn,
+                                        BraseroTrackType *output,
 					GError **error)
 {
-	BraseroMedia media;
 	BraseroBurnFlag flag;
 	BraseroBurnFlag flags;
 	BraseroBurnFlag retval;
@@ -1822,23 +1822,28 @@ brasero_burn_check_session_consistency (BraseroBurn *burn,
 			     _("There is no track to burn"));
 		return BRASERO_BURN_ERR;
 	}
-	brasero_track_type_free (input);
 
 	/* No need to check if a burner was set as this
 	 * is done when locking. */
 
-	media = brasero_burn_session_get_dest_media (priv->session);
-
 	/* save then wipe out flags from session to check them one by one */
 	flags = brasero_burn_session_get_flags (priv->session);
 	brasero_burn_session_set_flags (BRASERO_BURN_SESSION (priv->session), BRASERO_BURN_FLAG_NONE);
 
-	result = brasero_burn_session_get_burn_flags (priv->session,
-						      &supported,
-						      &compulsory);
+	if (!output || brasero_track_type_get_has_medium (output))
+		result = brasero_burn_session_get_burn_flags (priv->session,
+							      &supported,
+							      &compulsory);
+	else
+		result = brasero_caps_session_get_file_flags (input,
+		                                              output,
+		                                              &supported,
+		                                              &compulsory);
 
-	if (result != BRASERO_BURN_OK)
+	if (result != BRASERO_BURN_OK) {
+		brasero_track_type_free (input);
 		return result;
+	}
 
 	for (flag = 1; flag < BRASERO_BURN_FLAG_LAST; flag <<= 1) {
 		/* see if this flag was originally set */
@@ -1852,9 +1857,16 @@ brasero_burn_check_session_consistency (BraseroBurn *burn,
 		 * media type that doesn't need it. */
 		if (supported & flag) {
 			brasero_burn_session_add_flag (priv->session, flag);
-			brasero_burn_session_get_burn_flags (priv->session,
-							     &supported,
-							     &compulsory);
+
+			if (!output || brasero_track_type_get_has_medium (output))
+				result = brasero_burn_session_get_burn_flags (priv->session,
+									      &supported,
+									      &compulsory);
+			else
+				result = brasero_caps_session_get_file_flags (input,
+									      output,
+									      &supported,
+									      &compulsory);
 		}
 		else {
 			BRASERO_BURN_LOG_FLAGS (flag, "Flag set but not supported:");
@@ -1864,6 +1876,8 @@ brasero_burn_check_session_consistency (BraseroBurn *burn,
 
 			}
 			else if (flag & BRASERO_BURN_FLAG_MERGE) {
+				brasero_track_type_free (input);
+
 				/* we pay attention to one flag in particular
 				 * (MERGE) if it was set then it must be
 				 * supported. Otherwise error out. */
@@ -1878,6 +1892,7 @@ brasero_burn_check_session_consistency (BraseroBurn *burn,
 			 * burnproof useless for them. */
 		}
 	}
+	brasero_track_type_free (input);
 
 	retval = brasero_burn_session_get_flags (priv->session);
 	if (retval != flags)
@@ -1909,7 +1924,7 @@ brasero_burn_run_tasks (BraseroBurn *burn,
 	brasero_burn_session_push_settings (priv->session);
 
 	/* check flags consistency */
-	result = brasero_burn_check_session_consistency (burn, error);
+	result = brasero_burn_check_session_consistency (burn, temp_output, error);
 	if (result != BRASERO_BURN_OK) {
 		brasero_burn_session_pop_settings (priv->session);
 		return result;
@@ -2011,7 +2026,7 @@ brasero_burn_run_tasks (BraseroBurn *burn,
 				 * that it won't be possible */
 				brasero_burn_session_pop_settings (priv->session);
 				brasero_burn_session_push_settings (priv->session);
-				result = brasero_burn_check_session_consistency (burn, error);
+				result = brasero_burn_check_session_consistency (burn, temp_output,error);
 				if (result != BRASERO_BURN_OK)
 					break;
 			}
diff --git a/libbrasero-burn/brasero-caps-session.c b/libbrasero-burn/brasero-caps-session.c
index 5db65e4..7389494 100644
--- a/libbrasero-burn/brasero-caps-session.c
+++ b/libbrasero-burn/brasero-caps-session.c
@@ -1879,6 +1879,33 @@ brasero_burn_caps_get_flags_same_src_dest (BraseroBurnCaps *self,
 }
 
 /**
+ * This is meant to use as internal API
+ */
+BraseroBurnResult
+brasero_caps_session_get_file_flags (BraseroTrackType *input,
+                                     BraseroTrackType *output,
+                                     BraseroBurnFlag *supported,
+                                     BraseroBurnFlag *compulsory)
+{
+	BraseroBurnFlag compulsory_flags = BRASERO_BURN_FLAG_NONE;
+	BraseroBurnFlag supported_flags = BRASERO_BURN_FLAG_CHECK_SIZE|BRASERO_BURN_FLAG_NOGRACE;
+
+	BRASERO_BURN_LOG ("FLAGS: image required");
+
+	/* In this case no APPEND/MERGE is possible */
+	if (brasero_track_type_get_has_medium (input))
+		supported_flags |= BRASERO_BURN_FLAG_EJECT;
+
+	*supported = supported_flags;
+	*compulsory = compulsory_flags;
+
+	BRASERO_BURN_LOG_FLAGS (supported_flags, "FLAGS: supported");
+	BRASERO_BURN_LOG_FLAGS (compulsory_flags, "FLAGS: compulsory");
+
+	return BRASERO_BURN_OK;
+}
+
+/**
  * brasero_burn_session_get_burn_flags:
  * @session: a #BraseroBurnSession
  * @supported: a #BraseroBurnFlag or NULL
@@ -1921,17 +1948,14 @@ brasero_burn_session_get_burn_flags (BraseroBurnSession *session,
 				    "FLAGS: searching available flags for input");
 
 	if (brasero_burn_session_is_dest_file (session)) {
-		BRASERO_BURN_LOG ("FLAGS: image required");
-
-		/* In this case no APPEND/MERGE is possible */
-		if (brasero_track_type_get_has_medium (input))
-			supported_flags |= BRASERO_BURN_FLAG_EJECT;
+		BraseroTrackType *output;
 
-		*supported = supported_flags;
-		*compulsory = compulsory_flags;
+		BRASERO_BURN_LOG ("FLAGS: image required");
 
-		BRASERO_BURN_LOG_FLAGS (supported_flags, "FLAGS: supported");
-		BRASERO_BURN_LOG_FLAGS (compulsory_flags, "FLAGS: compulsory");
+		output = brasero_track_type_new ();
+		brasero_burn_session_get_output_type (session, output);
+		brasero_caps_session_get_file_flags (input, output, supported, compulsory);
+		brasero_track_type_free (output);
 
 		brasero_track_type_free (input);
 		g_object_unref (self);
diff --git a/libbrasero-burn/brasero-session-helper.h b/libbrasero-burn/brasero-session-helper.h
index e930c51..8e96c10 100644
--- a/libbrasero-burn/brasero-session-helper.h
+++ b/libbrasero-burn/brasero-session-helper.h
@@ -46,6 +46,12 @@ G_BEGIN_DECLS
  */
 
 BraseroBurnResult
+brasero_caps_session_get_file_flags (BraseroTrackType *input,
+                                     BraseroTrackType *output,
+                                     BraseroBurnFlag *supported,
+                                     BraseroBurnFlag *compulsory);
+
+BraseroBurnResult
 brasero_burn_session_set_image_output_format (BraseroBurnSession *self,
 					    BraseroImageFormat format);
 



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