[brasero] New BraseroSessionSpan object which adds the capabilities to span the current session on multiple di



commit e8790c48c315dbafe9790bf1cbbacdc51450a947
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Sat May 16 11:07:27 2009 +0200

    New BraseroSessionSpan object which adds the capabilities to span the current session on multiple discs
---
 libbrasero-burn/Makefile.am              |    5 ++++-
 libbrasero-burn/brasero-data-project.c   |   10 ++++++----
 libbrasero-burn/brasero-data-project.h   |    2 +-
 libbrasero-burn/brasero-session-cfg.c    |    2 +-
 libbrasero-burn/brasero-session-cfg.h    |    5 +++--
 libbrasero-burn/brasero-session.c        |    7 ++++---
 libbrasero-burn/brasero-track-data-cfg.c |   30 +++++++++++++-----------------
 libbrasero-burn/brasero-track-data-cfg.h |    9 +++++++++
 8 files changed, 41 insertions(+), 29 deletions(-)

diff --git a/libbrasero-burn/Makefile.am b/libbrasero-burn/Makefile.am
index c1f4f88..95e236a 100644
--- a/libbrasero-burn/Makefile.am
+++ b/libbrasero-burn/Makefile.am
@@ -46,6 +46,7 @@ libbraseroburninclude_HEADERS =					\
 	brasero-track-image.h					\
 	brasero-track-image-cfg.h				\
 	brasero-session.h                 			\
+	brasero-session-span.h					\
 	brasero-session-cfg.h					\
 	brasero-burn.h						\
 	brasero-burn-options.h        			        \
@@ -189,7 +190,9 @@ libbrasero_burn_la_SOURCES = 		\
 	brasero-data-options.c                 \
 	brasero-data-options.h                 \
 	brasero-video-options.h                 \
-	brasero-video-options.c
+	brasero-video-options.c                 \
+	brasero-session-span.h                 \
+	brasero-session-span.c
 
 if BUILD_INOTIFY
 libbrasero_burn_la_SOURCES += brasero-file-monitor.c brasero-file-monitor.h
diff --git a/libbrasero-burn/brasero-data-project.c b/libbrasero-burn/brasero-data-project.c
index 8f0ec4f..9ef2254 100644
--- a/libbrasero-burn/brasero-data-project.c
+++ b/libbrasero-burn/brasero-data-project.c
@@ -2546,7 +2546,7 @@ brasero_data_project_span_generate (BraseroDataProject *self,
 	brasero_track_data_set_source (track, grafts, excluded);
 }
 
-gboolean
+BraseroBurnResult
 brasero_data_project_span (BraseroDataProject *self,
 			   goffset max_sectors,
 			   gboolean append_slash,
@@ -2560,8 +2560,9 @@ brasero_data_project_span (BraseroDataProject *self,
 
 	priv = BRASERO_DATA_PROJECT_PRIVATE (self);
 
+	/* When empty this is an error */
 	if (!g_hash_table_size (priv->grafts))
-		return FALSE;
+		return BRASERO_BURN_ERR;
 
 	callback_data.files_num = 0;
 	callback_data.grafts = NULL;
@@ -2640,8 +2641,9 @@ brasero_data_project_span (BraseroDataProject *self,
 		children = children->next;
 	}
 
+	/* This means it's finished */
 	if (!callback_data.grafts)
-		return FALSE;
+		return BRASERO_BURN_OK;
 
 	brasero_data_project_span_generate (self,
 					    &callback_data,
@@ -2655,7 +2657,7 @@ brasero_data_project_span (BraseroDataProject *self,
 	g_slist_free (callback_data.grafts);
 	g_slist_free (callback_data.joliet_grafts);
 
-	return TRUE;
+	return BRASERO_BURN_RETRY;
 }
 
 void
diff --git a/libbrasero-burn/brasero-data-project.h b/libbrasero-burn/brasero-data-project.h
index eabf6fa..4d81134 100644
--- a/libbrasero-burn/brasero-data-project.h
+++ b/libbrasero-burn/brasero-data-project.h
@@ -231,7 +231,7 @@ brasero_data_project_set_sort_function (BraseroDataProject *project,
 					GtkSortType sort_type,
 					GCompareFunc sort_func);
 
-gboolean
+BraseroBurnResult
 brasero_data_project_span (BraseroDataProject *project,
 			   goffset max_sectors,
 			   gboolean append_slash,
diff --git a/libbrasero-burn/brasero-session-cfg.c b/libbrasero-burn/brasero-session-cfg.c
index 1d60b89..39539e9 100644
--- a/libbrasero-burn/brasero-session-cfg.c
+++ b/libbrasero-burn/brasero-session-cfg.c
@@ -81,7 +81,7 @@ enum
 
 static guint session_cfg_signals [LAST_SIGNAL] = { 0 };
 
-G_DEFINE_TYPE (BraseroSessionCfg, brasero_session_cfg, BRASERO_TYPE_BURN_SESSION);
+G_DEFINE_TYPE (BraseroSessionCfg, brasero_session_cfg, BRASERO_TYPE_SESSION_SPAN);
 
 #define BRASERO_DEST_SAVED_FLAGS		(BRASERO_DRIVE_PROPERTIES_FLAGS|BRASERO_BURN_FLAG_MULTI)
 #define BRASERO_DRIVE_PROPERTIES_KEY		"/apps/brasero/drives"
diff --git a/libbrasero-burn/brasero-session-cfg.h b/libbrasero-burn/brasero-session-cfg.h
index 1aaa629..8d6ec5b 100644
--- a/libbrasero-burn/brasero-session-cfg.h
+++ b/libbrasero-burn/brasero-session-cfg.h
@@ -34,6 +34,7 @@
 #include <glib-object.h>
 
 #include <brasero-session.h>
+#include <brasero-session-span.h>
 
 G_BEGIN_DECLS
 
@@ -49,12 +50,12 @@ typedef struct _BraseroSessionCfg BraseroSessionCfg;
 
 struct _BraseroSessionCfgClass
 {
-	BraseroBurnSessionClass parent_class;
+	BraseroSessionSpanClass parent_class;
 };
 
 struct _BraseroSessionCfg
 {
-	BraseroBurnSession parent_instance;
+	BraseroSessionSpan parent_instance;
 };
 
 GType brasero_session_cfg_get_type (void) G_GNUC_CONST;
diff --git a/libbrasero-burn/brasero-session.c b/libbrasero-burn/brasero-session.c
index 2f9f672..a15c8b1 100644
--- a/libbrasero-burn/brasero-session.c
+++ b/libbrasero-burn/brasero-session.c
@@ -1199,6 +1199,10 @@ brasero_burn_session_pop_tracks (BraseroBurnSession *self)
 
 	priv = BRASERO_BURN_SESSION_PRIVATE (self);
 
+	/* Don't go further if there is no list of tracks on the pile */
+	if (!priv->pile_tracks)
+		return;
+
 	if (priv->tracks) {
 		brasero_burn_session_stop_tracks_monitoring (self);
 
@@ -1214,9 +1218,6 @@ brasero_burn_session_pop_tracks (BraseroBurnSession *self)
 		}
 	}
 
-	if (!priv->pile_tracks)
-		return;
-
 	sources = priv->pile_tracks->data;
 	priv->pile_tracks = g_slist_remove (priv->pile_tracks, sources);
 	priv->tracks = sources;
diff --git a/libbrasero-burn/brasero-track-data-cfg.c b/libbrasero-burn/brasero-track-data-cfg.c
index a3b2e38..7eeae09 100644
--- a/libbrasero-burn/brasero-track-data-cfg.c
+++ b/libbrasero-burn/brasero-track-data-cfg.c
@@ -2301,34 +2301,30 @@ brasero_track_data_cfg_session_loaded_cb (BraseroDataSession *session,
 		       loaded);
 }
 
-static BraseroTrack *
+BraseroBurnResult
 brasero_track_data_cfg_span (BraseroTrackDataCfg *track,
-			     goffset sectors)
+			     goffset sectors,
+			     BraseroTrackData *new_track)
 {
 	BraseroTrackDataCfgPrivate *priv;
-	BraseroTrackData *new_track;
-	gboolean res;
+	BraseroBurnResult result;
 
 	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
 	if (priv->loading
 	||  brasero_data_vfs_is_active (BRASERO_DATA_VFS (priv->tree))
 	||  brasero_data_session_get_loaded_medium (BRASERO_DATA_SESSION (priv->tree)) != NULL)
-		return NULL;
-
-	new_track = brasero_track_data_new ();
-	res = brasero_data_project_span (BRASERO_DATA_PROJECT (priv->tree),
-					 sectors,
-					 TRUE,
-					 TRUE, /* FIXME */
-					 new_track);
+		return BRASERO_BURN_NOT_READY;
 
-	if (!res) {
-		g_object_unref (new_track);
-		return NULL;
-	}
+	result = brasero_data_project_span (BRASERO_DATA_PROJECT (priv->tree),
+					    sectors,
+					    TRUE,
+					    TRUE, /* FIXME */
+					    new_track);
+	if (result != BRASERO_BURN_RETRY)
+		return result;
 
 	brasero_track_tag_copy_missing (BRASERO_TRACK (new_track), BRASERO_TRACK (track));
-	return BRASERO_TRACK (new_track);
+	return BRASERO_BURN_RETRY;
 }
 
 static void
diff --git a/libbrasero-burn/brasero-track-data-cfg.h b/libbrasero-burn/brasero-track-data-cfg.h
index fe422ec..fc74ecb 100644
--- a/libbrasero-burn/brasero-track-data-cfg.h
+++ b/libbrasero-burn/brasero-track-data-cfg.h
@@ -148,6 +148,15 @@ brasero_track_data_cfg_restore (BraseroTrackDataCfg *track,
 GtkTreeModel *
 brasero_track_data_cfg_get_filtered_model (BraseroTrackDataCfg *track);
 
+/**
+ * Track Spanning
+ */
+
+BraseroBurnResult
+brasero_track_data_cfg_span (BraseroTrackDataCfg *track,
+			     goffset sectors,
+			     BraseroTrackData *new_track);
+
 G_END_DECLS
 
 #endif /* _BRASERO_TRACK_DATA_CFG_H_ */



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