[brasero] When we set a temporary output for a task then use that output and not the one from BraseroBurnSessi
- From: Philippe Rouquier <philippr src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [brasero] When we set a temporary output for a task then use that output and not the one from BraseroBurnSessi
- Date: Mon, 12 Oct 2009 11:53:14 +0000 (UTC)
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]