[Goodies-commits] r5299 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Mon Aug 25 03:14:03 CEST 2008


Author: squisher
Date: 2008-08-25 01:14:03 +0000 (Mon, 25 Aug 2008)
New Revision: 5299

Added:
   xfburn/trunk/xfburn/xfburn-audio-disc-usage.c
   xfburn/trunk/xfburn/xfburn-audio-disc-usage.h
Modified:
   xfburn/trunk/xfburn/Makefile.am
   xfburn/trunk/xfburn/xfburn-audio-composition.c
   xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
   xfburn/trunk/xfburn/xfburn-perform-burn.c
Log:
Adding very basic audio cd support: only pcm wav supported so far, only a rough check for compatible files

Modified: xfburn/trunk/xfburn/Makefile.am
===================================================================
--- xfburn/trunk/xfburn/Makefile.am	2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/Makefile.am	2008-08-25 01:14:03 UTC (rev 5299)
@@ -34,6 +34,7 @@
 	xfburn-audio-composition.h					\
 	xfburn-disc-usage.h						\
 	xfburn-data-disc-usage.h					\
+	xfburn-audio-disc-usage.h					\
 	xfburn-fs-browser.h						\
 	xfburn-directory-browser.h					\
 	xfburn-preferences-dialog.h					\
@@ -67,6 +68,7 @@
 	xfburn-audio-composition.c    	                             	\
 	xfburn-disc-usage.c						\
 	xfburn-data-disc-usage.c					\
+	xfburn-audio-disc-usage.c					\
 	xfburn-fs-browser.c 	                                       	\
 	xfburn-directory-browser.c					\
 	xfburn-preferences-dialog.c					\

Modified: xfburn/trunk/xfburn/xfburn-audio-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.c	2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.c	2008-08-25 01:14:03 UTC (rev 5299)
@@ -50,7 +50,7 @@
 
 #include "xfburn-adding-progress.h"
 #include "xfburn-composition.h"
-#include "xfburn-disc-usage.h"
+#include "xfburn-audio-disc-usage.h"
 #include "xfburn-main-window.h"
 #include "xfburn-utils.h"
 #include "xfburn-burn-audio-cd-composition-dialog.h"
@@ -415,7 +415,7 @@
   /* FIXME: progress should have a busy cursor */
 
   /* disc usage */
-  priv->disc_usage = xfburn_disc_usage_new ();
+  priv->disc_usage = xfburn_audio_disc_usage_new ();
   gtk_box_pack_start (GTK_BOX (composition), priv->disc_usage, FALSE, FALSE, 5);
   gtk_widget_show (priv->disc_usage);
   g_signal_connect (G_OBJECT (priv->disc_usage), "begin-burn", G_CALLBACK (cb_begin_burn), composition);
@@ -486,15 +486,17 @@
       XfburnAudioTrack *track = g_new0 (XfburnAudioTrack, 1);
 
       gtk_tree_model_get (model, &iter, 
-                          AUDIO_COMPOSITION_COLUMN_CONTENT, &track->inputfile,
+                          AUDIO_COMPOSITION_COLUMN_PATH, &track->inputfile,
                           AUDIO_COMPOSITION_COLUMN_POS, &track->pos,
                           -1);
 
-      list = g_slist_append (list, track);
+      list = g_slist_prepend (list, track);
 
     } while (gtk_tree_model_iter_next (model, &iter));
   }
 
+  list = g_slist_reverse (list);
+
   return list;
 }
 
@@ -1114,7 +1116,7 @@
                           AUDIO_COMPOSITION_COLUMN_TYPE, AUDIO_COMPOSITION_TYPE_RAW, -1);
       gdk_threads_leave ();
 
-      //xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
+      xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
     }
     //g_free (humansize);
 

Copied: xfburn/trunk/xfburn/xfburn-audio-disc-usage.c (from rev 5286, xfburn/trunk/xfburn/xfburn-data-disc-usage.c)
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-disc-usage.c	                        (rev 0)
+++ xfburn/trunk/xfburn/xfburn-audio-disc-usage.c	2008-08-25 01:14:03 UTC (rev 5299)
@@ -0,0 +1,158 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2005-2006 Jean-François Wauthy (pollux at xfce.org)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Library General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef	HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include <gtk/gtk.h>
+#include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "xfburn-disc-usage.h"
+#include "xfburn-audio-disc-usage.h"
+#include "xfburn-global.h"
+#include "xfburn-settings.h"
+#include "xfburn-utils.h"
+#include "xfburn-stock.h"
+#include "xfburn-main-window.h"
+
+/* prototypes */
+static void xfburn_audio_disc_usage_class_init (XfburnAudioDiscUsageClass *);
+static void xfburn_audio_disc_usage_init (XfburnAudioDiscUsage *);
+
+static gboolean can_burn (XfburnDiscUsage *disc_usage);
+static void xfburn_audio_disc_usage_update_size (XfburnDiscUsage * disc_usage);
+
+/* globals */
+static XfburnDiscUsageClass *parent_class = NULL;
+
+#define DEFAULT_DISK_SIZE_LABEL 2
+#define LAST_CD_LABEL 4
+#define NUM_LABELS 7
+
+XfburnDiscLabels audiodiscsizes[] = {
+  {
+  200 *1024 * 1024, "200MB CD"},
+  {
+  681984000, "650MB CD"},
+  {
+  737280000, "700MB CD"},
+  {
+  829440000, "800MB CD"},
+  {
+  912384000, "900MB CD"},
+  {
+  G_GINT64_CONSTANT(0x1182a0000), "4.3GB DVD"}, /* 4 700 372 992 */
+  {
+  G_GINT64_CONSTANT(0x1fd3e0000), "7.9GB DVD"}, /* 8 543 666 176 */
+};
+
+/*******************************/
+/* XfburnAudioComposition class */
+/*******************************/
+GtkType
+xfburn_audio_disc_usage_get_type (void)
+{
+  static GtkType disc_usage_type = 0;
+
+  if (!disc_usage_type) {
+    static const GTypeInfo disc_usage_info = {
+      sizeof (XfburnAudioDiscUsageClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) xfburn_audio_disc_usage_class_init,
+      NULL,
+      NULL,
+      sizeof (XfburnAudioDiscUsage),
+      0,
+      (GInstanceInitFunc) xfburn_audio_disc_usage_init
+    };
+
+    disc_usage_type = g_type_register_static (XFBURN_TYPE_DISC_USAGE, "XfburnAudioDiscUsage", &disc_usage_info, 0);
+  }
+
+  return disc_usage_type;
+}
+
+static void
+xfburn_audio_disc_usage_class_init (XfburnAudioDiscUsageClass * klass)
+{
+  GObjectClass *gobject_class;
+  XfburnDiscUsageClass *pklass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+
+  /* override virtual methods */
+  pklass = XFBURN_DISC_USAGE_CLASS(klass);
+  
+  pklass->labels = parent_class->labels = audiodiscsizes;
+  pklass->update_size = parent_class->update_size = xfburn_audio_disc_usage_update_size;
+  pklass->can_burn = parent_class->can_burn = can_burn;
+}
+
+static void
+xfburn_audio_disc_usage_init (XfburnAudioDiscUsage * disc_usage)
+{
+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR ( XFBURN_DISC_USAGE (disc_usage)->progress_bar), "0 B");
+}
+
+/* internals */
+static void
+xfburn_audio_disc_usage_update_size (XfburnDiscUsage * disc_usage)
+{
+  gfloat fraction;
+  gchar *size;
+
+  fraction = disc_usage->size / audiodiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size;
+  if (fraction > 1.0)
+    fraction = 1.0;
+  if (fraction < 0.0)
+    fraction = 0.0;
+
+  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (disc_usage->progress_bar), fraction > 1.0 ? 1.0 : fraction);
+
+  if (xfburn_settings_get_boolean ("human-readable-units", TRUE))
+    size = xfburn_humanreadable_filesize ((guint64) disc_usage->size);
+  else
+    size = g_strdup_printf ("%.0lf B", disc_usage->size);
+
+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), size);
+
+  g_free (size);
+}
+
+static gboolean
+can_burn (XfburnDiscUsage *disc_usage)
+{
+  if (disc_usage->size == 0 || 
+      disc_usage->size > audiodiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+GtkWidget *
+xfburn_audio_disc_usage_new (void)
+{
+  return g_object_new (xfburn_audio_disc_usage_get_type (), NULL);
+}
+


Property changes on: xfburn/trunk/xfburn/xfburn-audio-disc-usage.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:mergeinfo
   + 

Copied: xfburn/trunk/xfburn/xfburn-audio-disc-usage.h (from rev 5286, xfburn/trunk/xfburn/xfburn-data-disc-usage.h)
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-disc-usage.h	                        (rev 0)
+++ xfburn/trunk/xfburn/xfburn-audio-disc-usage.h	2008-08-25 01:14:03 UTC (rev 5299)
@@ -0,0 +1,54 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2005-2006 Jean-François Wauthy (pollux at xfce.org)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Library General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFBURN_AUDIO_DISC_USAGE_H__
+#define __XFBURN_AUDIO_DISC_USAGE_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include "xfburn-disc-usage.h"
+
+G_BEGIN_DECLS
+
+#define XFBURN_TYPE_AUDIO_DISC_USAGE            (xfburn_audio_disc_usage_get_type ())
+#define XFBURN_AUDIO_DISC_USAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsage))
+#define XFBURN_AUDIO_DISC_USAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsageClass))
+#define XFBURN_IS_AUDIO_DISC_USAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE))
+#define XFBURN_IS_AUDIO_DISC_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_AUDIO_DISC_USAGE))
+#define XFBURN_AUDIO_DISC_USAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_AUDIO_DISC_USAGE, XfburnAudioDiscUsageClass))
+
+typedef struct
+{
+  XfburnDiscUsage disc_usage;
+} XfburnAudioDiscUsage;
+
+typedef struct
+{
+  XfburnDiscUsageClass parent_class;
+} XfburnAudioDiscUsageClass;
+
+GtkType xfburn_audio_disc_usage_get_type (void);
+GtkWidget *xfburn_audio_disc_usage_new (void);
+
+G_END_DECLS
+
+#endif


Property changes on: xfburn/trunk/xfburn/xfburn-audio-disc-usage.h
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:mergeinfo
   + 

Modified: xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c	2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-burn-audio-cd-composition-dialog.c	2008-08-25 01:14:03 UTC (rev 5299)
@@ -41,6 +41,7 @@
 #include "xfburn-burn-audio-cd-composition-dialog.h"
 #include "xfburn-progress-dialog.h"
 #include "xfburn-perform-burn.h"
+#include "xfburn-audio-composition.h"
 
 #define XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_BURN_AUDIO_CD_COMPOSITION_DIALOG, XfburnBurnAudioCdCompositionDialogPrivate))
 
@@ -60,11 +61,6 @@
   GtkWidget *entry_path_iso;
   GtkWidget *check_dummy;
   GtkWidget *button_proceed;
-  /*
-   * Disabled: change button_proceed functionality
-  GtkWidget *label_proceed;
-  GtkWidget *image_proceed;
-  */
 
   gint response;
 } XfburnBurnAudioCdCompositionDialogPrivate;
@@ -74,19 +70,6 @@
   PROP_TRACK_LIST,
 };
 
-/*
- * Disabled: change button_proceed functionality
-char *proceed_text[] = {
-  "Burn Composition",
-  "   Blank Disc   ",
-};
-
-char *proceed_image[] = {
-  "xfburn-burn-cd",
-  "xfburn-blank-cdrw",
-};
-*/
-
 /* prototypes */
 static void xfburn_burn_audio_cd_composition_dialog_class_init (XfburnBurnAudioCdCompositionDialogClass * klass);
 static GObject * xfburn_burn_audio_cd_composition_dialog_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties);
@@ -95,12 +78,6 @@
 static void xfburn_burn_audio_cd_composition_dialog_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec);
 static void xfburn_burn_audio_cd_composition_dialog_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec);
 
-/*
- * Disabled: change button_proceed functionality
-GtkWidget * create_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog, const gchar *stock, const gchar *text);
-void update_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog);
-static void cb_proceed_clicked (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
-*/
 static void cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
 static void cb_browse_iso (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog);
 static void cb_disc_refreshed (GtkWidget *device_box, XfburnDevice *device, XfburnBurnAudioCdCompositionDialog * dialog);
@@ -278,11 +255,6 @@
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
 
   priv->button_proceed = button = xfce_create_mixed_button ("xfburn-burn-cd", _("_Burn Composition"));
-  /*
-   * Disabled: change button_proceed functionality
-  button = create_proceed_button (obj, "xfburn-burn-cd", "");
-  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_proceed_clicked), obj);
-  */
 
   gtk_widget_show (button);
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
@@ -336,43 +308,6 @@
 }
 
 /* internals */
-/*
- * Disabled: change button_proceed functionality
-GtkWidget *
-create_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog, const gchar *stock, const gchar *text)
-{
-  XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
-  GtkWidget *button, *align, *image, *hbox, *label;
-
-  priv->button_proceed = button = gtk_button_new ();
-  priv->label_proceed = label = gtk_label_new_with_mnemonic (text);
-  gtk_label_set_mnemonic_widget (GTK_LABEL (label), button);
-
-  priv->image_proceed = image = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_BUTTON);
-  hbox = gtk_hbox_new (FALSE, 2);
-
-  align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
-
-  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-  gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
-  gtk_container_add (GTK_CONTAINER (button), align);
-  gtk_container_add (GTK_CONTAINER (align), hbox);
-  gtk_widget_show_all (align);
-
-  return button;
-}
-
-void 
-update_proceed_button (XfburnBurnAudioCdCompositionDialog * dialog)
-{
-  XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
-
-  gtk_label_set_text (GTK_LABEL (priv->label_proceed), _(proceed_text[priv->response]));
-  gtk_image_set_from_stock (GTK_IMAGE (priv->image_proceed), proceed_image[priv->response], GTK_ICON_SIZE_BUTTON);
-}
-*/
-
 static void
 cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
 {
@@ -394,15 +329,7 @@
   }
 }
 
-/*
- * Disabled: change button_proceed functionality
 static void
-cb_proceed_clicked (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
-{
-}
-*/
-
-static void
 cb_browse_iso (GtkButton * button, XfburnBurnAudioCdCompositionDialog * dialog)
 {
   XfburnBurnAudioCdCompositionDialogPrivate *priv = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_GET_PRIVATE (dialog);
@@ -418,16 +345,6 @@
 
   g_object_get (G_OBJECT (priv->device_box), "valid", &valid_disc, NULL);
 
-  /*
-   * Disabled: change button_proceed functionality
-  if (!valid_disc && xfburn_device_list_get_disc_status () == BURN_DISC_FULL && xfburn_device_list_disc_is_erasable ()) {
-    priv->response = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_BLANK;
-    valid_disc = TRUE;
-  } else {
-    priv->response = XFBURN_BURN_AUDIO_CD_COMPOSITION_DIALOG_BURN;
-  }
-  update_proceed_button (dialog);
-  */
   gtk_widget_set_sensitive (priv->button_proceed, valid_disc);
 }
 
@@ -511,8 +428,7 @@
 typedef struct {
   GtkWidget *dialog_progress;
   XfburnDevice *device;
-  struct burn_source *src;
-  gboolean is_fifo;
+  GSList *tracks;
   gint speed;
   XfburnWriteMode write_mode;
   gboolean eject;
@@ -522,12 +438,12 @@
 
 static void 
 thread_burn_prep_and_burn (ThreadBurnCompositionParams * params, struct burn_drive *drive,
-                           struct burn_disc *disc, struct burn_session *session, struct burn_track *track)
+                           struct burn_disc *disc, struct burn_session *session, int n_tracks, struct burn_track **tracks)
 {
   GtkWidget *dialog_progress = params->dialog_progress;
 
   struct burn_write_opts * burn_options;
-  gint ret;
+  gint ret,i;
 
   ret = burn_disc_add_session (disc, session, BURN_POS_END);
   if (ret == 0) {
@@ -535,12 +451,9 @@
     return;
   }
 
-  if (burn_track_set_source (track, params->src) != BURN_SOURCE_OK) {
-    xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Cannot attach source object to track object"));
-    return;
+  for (i=0; i<n_tracks; i++) {
+    burn_session_add_track (session, tracks[i], BURN_POS_END);
   }
-  
-  burn_session_add_track (session, track, BURN_POS_END);
 
   burn_options = burn_write_opts_new (drive);
   burn_write_opts_set_perform_opc (burn_options, 0);
@@ -572,7 +485,7 @@
   burn_drive_set_speed (drive, 0, params->speed);
   burn_write_opts_set_underrun_proof (burn_options, params->burnfree ? 1 : 0);
 
-  xfburn_perform_burn_write (dialog_progress, drive, params->write_mode, burn_options, disc, (params->is_fifo ? params->src : NULL));
+  xfburn_perform_burn_write (dialog_progress, drive, params->write_mode, burn_options, disc, NULL);
 
   burn_write_opts_free (burn_options);
 }
@@ -584,34 +497,88 @@
 
   struct burn_disc *disc;
   struct burn_session *session;
-  struct burn_track *track;
+  struct burn_track **tracks;
+  struct burn_source **srcs;
+  int *fds;
+  int n_tracks;
+  int i;
+  GSList *track_list;
 
   struct burn_drive_info *drive_info = NULL;
 
   if (!burn_initialize ()) {
     g_critical ("Unable to initialize libburn");
-    burn_source_free (params->src);
+    /* FIXME: free contents of params! */
     g_free (params);
     return;
   }
 
   disc = burn_disc_create ();
   session = burn_session_create ();
-  track = burn_track_create ();
 
+  n_tracks = g_slist_length (params->tracks);
+  tracks = g_new (struct burn_track *, n_tracks);
+  srcs = g_new (struct burn_source *, n_tracks);
+  fds = g_new (int, n_tracks);
+
+  track_list = params->tracks;
+  for (i=0; i<n_tracks; i++) {
+    char header[44];
+    XfburnAudioTrack *atrack = track_list->data;
+
+    fds[i] = open (atrack->inputfile, 0);
+    if (fds[i] == -1)
+      g_error ("Could not open %s!", atrack->inputfile);
+
+    read (fds[i], header, 44);
+
+    srcs[i] = burn_fd_source_new (fds[i], -1 , 0);
+    if (srcs[i] == NULL)
+      g_error ("Could not create burn_source from %s!", atrack->inputfile);
+
+    tracks[i] = burn_track_create ();
+    
+    if (burn_track_set_source (tracks[i], srcs[i]) != BURN_SOURCE_OK)
+      g_error ("Could not add source to track!");
+
+    /* FIXME: obviously this is a very crude check... */
+    header[4] = '\0';
+    if (strcmp (header, "RIFX") == 0)
+      burn_track_set_byte_swap (tracks[i], TRUE);
+    else if (strcmp (header, "RIFF") != 0)
+      g_error ("%s is not a wave file!", atrack->inputfile);
+
+    burn_track_define_data (tracks[i], 0, 0, 1, BURN_AUDIO);
+
+    track_list = g_slist_next (track_list);
+  }
+
+  /*
+      src_fifo = burn_fifo_source_new (src, 2048, xfburn_settings_get_int ("fifo-size", XFBURN_FIFO_DEFAULT_SIZE) / 2, 0);
+      burn_source_free (src);
+  */
+
+
   if (!xfburn_device_grab (params->device, &drive_info)) {
     xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Unable to grab drive"));
   } else {
-    thread_burn_prep_and_burn (params, drive_info->drive, disc, session, track);
+    thread_burn_prep_and_burn (params, drive_info->drive, disc, session, n_tracks, tracks);
     burn_drive_release (drive_info->drive, params->eject ? 1 : 0);
   }
 
-  burn_track_free (track);
+  for (i=0; i<n_tracks; i++) {
+    burn_track_free (tracks[i]);
+    burn_source_free (srcs[i]);
+    close (fds[i]);
+  }
+  g_free (srcs);
+  g_free (tracks);
+  g_free (fds);
   burn_session_free (session);
   burn_disc_free (disc);
   burn_finish ();
 
-  burn_source_free (params->src);
+  /* FIXME: free track_list here? */
   g_free (params);
 }
 
@@ -632,8 +599,6 @@
     }
     */
 
-    /* FIXME: create burn source from priv->track_list */
-
     dialog_progress = xfburn_progress_dialog_new (GTK_WINDOW (dialog));
     gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), gtk_window_get_transient_for (GTK_WINDOW (dialog)));
     gtk_widget_hide (GTK_WIDGET (dialog));
@@ -655,21 +620,17 @@
       XfburnDevice *device;
       gint speed;
       XfburnWriteMode write_mode;
-      struct burn_source * src_fifo = NULL;
+      //struct burn_source * src_fifo = NULL;
 
       device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX (priv->device_box));
       speed = xfburn_device_box_get_speed (XFBURN_DEVICE_BOX (priv->device_box));
       write_mode = xfburn_device_box_get_mode (XFBURN_DEVICE_BOX (priv->device_box));
 
-      src_fifo = burn_fifo_source_new (src, 2048, xfburn_settings_get_int ("fifo-size", XFBURN_FIFO_DEFAULT_SIZE) / 2, 0);
-      burn_source_free (src);
-
       /* burn composition */
       params = g_new0 (ThreadBurnCompositionParams, 1);
       params->dialog_progress = dialog_progress;
       params->device = device;
-      params->src = src_fifo;
-      params->is_fifo = TRUE;
+      params->tracks = priv->track_list;
       params->speed = speed;
       params->write_mode = write_mode;
       params->eject = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->check_eject));

Modified: xfburn/trunk/xfburn/xfburn-perform-burn.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-perform-burn.c	2008-08-24 22:59:50 UTC (rev 5298)
+++ xfburn/trunk/xfburn/xfburn-perform-burn.c	2008-08-25 01:14:03 UTC (rev 5299)
@@ -67,6 +67,7 @@
   XfburnProgressDialogStatus final_status;
   const char *final_message;
   gdouble percent = 0.0;
+  int dbg_no;
 
   while (burn_drive_get_status (drive, NULL) != BURN_DRIVE_IDLE)
     usleep(100001);
@@ -112,9 +113,12 @@
 
   while (burn_drive_get_status (drive, NULL) == BURN_DRIVE_SPAWNING)
     usleep(1002);
+
   time_start = time (NULL);
+  dbg_no = 0;
   while ((status = burn_drive_get_status (drive, &progress)) != BURN_DRIVE_IDLE) {
     time_t time_now = time (NULL);
+    dbg_no++;
 
     switch (status) {
     case BURN_DRIVE_WRITING:
@@ -124,6 +128,8 @@
         int fifo_status, fifo_size, fifo_free;
         char *fifo_text;
 
+        if ((dbg_no % 16) == 0)
+          DBG ("track = %d\tsector %d/%d", progress.track, progress.sector, progress.sectors);
 	percent = (gdouble) (progress.buffer_capacity - progress.buffer_available) / (gdouble) progress.buffer_capacity;
 	xfburn_progress_dialog_set_buffer_bar_fraction (XFBURN_PROGRESS_DIALOG (dialog_progress), percent);
 




More information about the Goodies-commits mailing list