r11243 - in /packages/unstable/brasero/debian: changelog control patches/000_cdrecord2wodim-0.4.4.patch patches/000_cdrtools2cdrkit.patch
otavio at users.alioth.debian.org
otavio at users.alioth.debian.org
Fri Jun 1 20:37:44 UTC 2007
Author: otavio
Date: Fri Jun 1 20:37:43 2007
New Revision: 11243
URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=11243
Log:
* Replace 000_cdrecord2wodim-0.4.4.patch with 000_cdrtools2cdrkit.patch
and try to be as simple as possible to new releases merge easier
(Closes: #411274)
Added:
packages/unstable/brasero/debian/patches/000_cdrtools2cdrkit.patch
- copied, changed from r11239, packages/unstable/brasero/debian/patches/000_cdrecord2wodim-0.4.4.patch
Removed:
packages/unstable/brasero/debian/patches/000_cdrecord2wodim-0.4.4.patch
Modified:
packages/unstable/brasero/debian/changelog
packages/unstable/brasero/debian/control
Modified: packages/unstable/brasero/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/unstable/brasero/debian/changelog?rev=11243&op=diff
==============================================================================
--- packages/unstable/brasero/debian/changelog (original)
+++ packages/unstable/brasero/debian/changelog Fri Jun 1 20:37:43 2007
@@ -9,6 +9,9 @@
* Change get-orig-source target to retrieve from GNOME project instead
of SourceForge.
* New upstream version.
+ * Replace 000_cdrecord2wodim-0.4.4.patch with 000_cdrtools2cdrkit.patch
+ and try to be as simple as possible to new releases merge easier
+ (Closes: #411274)
-- Otavio Salvador <otavio at ossystems.com.br> Fri, 01 Jun 2007 16:50:19 -0300
Modified: packages/unstable/brasero/debian/control
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/unstable/brasero/debian/control?rev=11243&op=diff
==============================================================================
--- packages/unstable/brasero/debian/control (original)
+++ packages/unstable/brasero/debian/control Fri Jun 1 20:37:43 2007
@@ -3,7 +3,7 @@
Priority: optional
Maintainer: OndÅej Surý <ondrej at debian.org>
Build-Depends: debhelper (>= 5.0.0), autotools-dev, cdbs, libgnome2-dev (>= 2.10.0), libgtk2.0-dev (>= 2.6.0), libgnomeui-dev (>= 2.10.0), libgnomevfs2-dev (>= 2.14.1), gnome-pkg-tools, libnautilus-burn-dev (>= 2.14.0), pkg-config, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, libtotem-plparser-dev, libxml2-dev (>= 2.6.0), libhal-dev (>= 0.5), libgdl-1-dev, libdbus-glib-1-dev (>= 0.30), libxml-parser-perl, libnotify-dev
-Uploaders: Debian GNOME Maintainers <pkg-gnome-maintainers at lists.alioth.debian.org>, Andrew Lau <netsnipe at users.sourceforge.net>, Clément Stenac <zorglub at debian.org>, Dafydd Harries <daf at debian.org>, Guilherme de S. Pastore <gpastore at debian.org>, Gustavo Franco <stratus at debian.org>, Gustavo Noronha Silva <kov at debian.org>, J.H.M. Dassen (Ray) <jdassen at debian.org>, Jordi Mallach <jordi at debian.org>, Jose Carlos Garcia Sogo <jsogo at debian.org>, Josselin Mouette <joss at debian.org>, Loic Minier <lool at dooz.org>, Marc 'HE' Brockschmidt <he at debian.org>, Marco Cabizza <marco87 at gmail.com>, Oystein Gisnas <oystein at gisnas.net>, Ross Burton <ross at debian.org>, Sebastien Bacher <seb128 at debian.org>, Sjoerd Simons <sjoerd at debian.org>
+Uploaders: Debian GNOME Maintainers <pkg-gnome-maintainers at lists.alioth.debian.org>
Standards-Version: 3.7.2.1
Package: brasero
Copied: packages/unstable/brasero/debian/patches/000_cdrtools2cdrkit.patch (from r11239, packages/unstable/brasero/debian/patches/000_cdrecord2wodim-0.4.4.patch)
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/unstable/brasero/debian/patches/000_cdrtools2cdrkit.patch?rev=11243&op=diff
==============================================================================
--- packages/unstable/brasero/debian/patches/000_cdrecord2wodim-0.4.4.patch (original)
+++ packages/unstable/brasero/debian/patches/000_cdrtools2cdrkit.patch Fri Jun 1 20:37:43 2007
@@ -1,2400 +1,2440 @@
-diff -urN brasero-0.4.4.orig/src/burn-caps.c brasero-0.4.4/src/burn-caps.c
---- brasero-0.4.4.orig/src/burn-caps.c 2006-09-07 17:47:40.000000000 +0200
-+++ brasero-0.4.4/src/burn-caps.c 2006-10-23 10:41:59.000000000 +0200
-@@ -47,7 +47,7 @@
- #include "burn-mkisofs-base.h"
- #include "burn-mkisofs.h"
- #include "burn-cdrdao.h"
--#include "burn-cdrecord.h"
-+#include "burn-wodim.h"
- #include "burn-growisofs.h"
- #include "burn-dvd-rw-format.h"
- #include "brasero-ncb.h"
-@@ -57,8 +57,8 @@
- * given, and also creates the most appropriate recorder and imager objects */
+diff -Nur brasero-0.5.2-ORIG/debian/patches/000_cdrecord2wodim-0.4.4.patch brasero-0.5.2/debian/patches/000_cdrecord2wodim-0.4.4.patch
+--- brasero-0.5.2-ORIG/debian/patches/000_cdrecord2wodim-0.4.4.patch 2007-06-01 17:07:38.000000000 -0300
++++ brasero-0.5.2/debian/patches/000_cdrecord2wodim-0.4.4.patch 2007-06-01 17:33:41.000000000 -0300
+@@ -1,2400 +0,0 @@
+-diff -urN brasero-0.4.4.orig/src/burn-caps.c brasero-0.4.4/src/burn-caps.c
+---- brasero-0.4.4.orig/src/burn-caps.c 2006-09-07 17:47:40.000000000 +0200
+-+++ brasero-0.4.4/src/burn-caps.c 2006-10-23 10:41:59.000000000 +0200
+-@@ -47,7 +47,7 @@
+- #include "burn-mkisofs-base.h"
+- #include "burn-mkisofs.h"
+- #include "burn-cdrdao.h"
+--#include "burn-cdrecord.h"
+-+#include "burn-wodim.h"
+- #include "burn-growisofs.h"
+- #include "burn-dvd-rw-format.h"
+- #include "brasero-ncb.h"
+-@@ -57,8 +57,8 @@
+- * given, and also creates the most appropriate recorder and imager objects */
+-
+- /* FIXME: extension
+-- gboolean cdrecord_02 => no on the fly
+-- gboolean cdrecord_02_1 => no the fly for audio
+-+ gboolean wodim_02 => no on the fly
+-+ gboolean wodim_02_1 => no the fly for audio
+- gboolean dvdrecord
+- */
+-
+-@@ -176,7 +176,7 @@
+-
+- /* This is for a bug in fedora 5 that prevents from sending
+- * SCSI commands as a normal user through cdrdao. There is a
+-- * fallback fortunately with cdrecord and raw images but no
+-+ * fallback fortunately with wodim and raw images but no
+- * on_the_fly burning */
+- caps->priv->cdrdao_disabled = 1;
+-
+-@@ -489,10 +489,10 @@
+- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_GROWISOFS, NULL));
+- else
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- }
+- else if (BRASERO_IS_TRANSCODE (source->contents.imager.obj)) {
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- }
+- else if (BRASERO_IS_GROWISOFS (source->contents.imager.obj)) {
+- obj = BRASERO_RECORDER (source->contents.imager.obj);
+-@@ -508,7 +508,7 @@
+- g_object_ref (obj);
+- }
+- else if (BRASERO_IS_MKISOFS (source->contents.imager.obj))
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- else
+- return BRASERO_BURN_NOT_SUPPORTED;
+-
+-@@ -518,7 +518,7 @@
+- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+- return BRASERO_BURN_NOT_SUPPORTED;
+-
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- break;
+-
+- case BRASERO_TRACK_SOURCE_ISO:
+-@@ -526,27 +526,27 @@
+- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_GROWISOFS, NULL));
+- else
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- break;
+-
+- case BRASERO_TRACK_SOURCE_CUE:
+- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+- return BRASERO_BURN_NOT_SUPPORTED;
+-
+-- /* here we have to solution either cdrdao or cdrecord but we'll
+-+ /* here we have to solution either cdrdao or wodim but we'll
+- * use cdrdao only as a fallback except for on the fly burning
+- * see above in IMAGERS */
+- if (!caps->priv->cdrdao_disabled)
+- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CDRDAO, NULL));
+- else
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- break;
+-
+- case BRASERO_TRACK_SOURCE_RAW:
+- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+- return BRASERO_BURN_NOT_SUPPORTED;
+-
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- break;
+-
+- default:
+-@@ -554,8 +554,8 @@
+- }
+-
+- /* This is for certain type of screwed up setup */
+-- if (BRASERO_IS_CD_RECORD (obj) && caps->priv->immediate)
+-- brasero_cdrecord_set_immediate (BRASERO_CD_RECORD (obj),
+-+ if (BRASERO_IS_WODIM (obj) && caps->priv->immediate)
+-+ brasero_wodim_set_immediate (BRASERO_WODIM (obj),
+- caps->priv->minbuf);
+-
+- *recorder = obj;
+-@@ -584,7 +584,7 @@
+- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_DVD_RW_FORMAT, NULL));
+- }
+- else if (type == NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
+-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
+- else
+- return BRASERO_BURN_NOT_SUPPORTED;
+-
+-@@ -690,7 +690,7 @@
+- if (type <= NAUTILUS_BURN_MEDIA_TYPE_CDRW) {
+- /* with CDs there are two possible default:
+- * - if cdrdao is working => copy on the fly
+-- * - readcd -clone => image => cdrecord */
+-+ * - readcd -clone => image => wodim */
+- if (!caps->priv->cdrdao_disabled)
+- return BRASERO_TRACK_SOURCE_CUE;
+- else
+-diff -urN brasero-0.4.4.orig/src/burn-cdrecord.c brasero-0.4.4/src/burn-cdrecord.c
+---- brasero-0.4.4.orig/src/burn-cdrecord.c 2006-09-07 17:47:40.000000000 +0200
+-+++ brasero-0.4.4/src/burn-cdrecord.c 1970-01-01 01:00:00.000000000 +0100
+-@@ -1,1042 +0,0 @@
+--/***************************************************************************
+-- * cdrecord.c
+-- *
+-- * dim jan 22 15:22:52 2006
+-- * Copyright 2006 Rouquier Philippe
+-- * brasero-app at wanadoo.fr
+-- ***************************************************************************/
+--
+--/*
+-- * 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
+--
+--#include <string.h>
+--#include <math.h>
+--
+--#include <glib.h>
+--#include <glib-object.h>
+--#include <glib/gi18n-lib.h>
+--#include <glib/gstdio.h>
+--
+--#include <nautilus-burn-drive.h>
+--
+--#include "burn-basics.h"
+--#include "burn-common.h"
+--#include "burn-cdrecord.h"
+--#include "burn-process.h"
+--#include "burn-recorder.h"
+--#include "burn-imager.h"
+--#include "brasero-ncb.h"
+--
+--static void brasero_cdrecord_class_init (BraseroCDRecordClass *klass);
+--static void brasero_cdrecord_init (BraseroCDRecord *sp);
+--static void brasero_cdrecord_finalize (GObject *object);
+--static void brasero_cdrecord_iface_init_record (BraseroRecorderIFace *iface);
+--
+--static BraseroBurnResult
+--brasero_cdrecord_stderr_read (BraseroProcess *process,
+-- const char *line);
+--static BraseroBurnResult
+--brasero_cdrecord_stdout_read (BraseroProcess *process,
+-- const char *line);
+--static BraseroBurnResult
+--brasero_cdrecord_set_argv (BraseroProcess *process,
+-- GPtrArray *argv,
+-- gboolean has_master,
+-- GError **error);
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_rate (BraseroJob *job,
+-- gint64 *rate);
+--static BraseroBurnResult
+--brasero_cdrecord_get_written (BraseroJob *job,
+-- gint64 *written);
+--static BraseroBurnResult
+--brasero_cdrecord_get_fifo (BraseroRecorder *recorder,
+-- gint *fifo);
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_drive (BraseroRecorder *recorder,
+-- NautilusBurnDrive *drive,
+-- GError **error);
+--static BraseroBurnResult
+--brasero_cdrecord_set_source (BraseroJob *job,
+-- const BraseroTrackSource *track,
+-- GError **error);
+--static BraseroBurnResult
+--brasero_cdrecord_set_flags (BraseroRecorder *recorder,
+-- BraseroRecorderFlag flags,
+-- GError **error);
+--static BraseroBurnResult
+--brasero_cdrecord_set_rate (BraseroJob *job,
+-- gint64 speed);
+--
+--static BraseroBurnResult
+--brasero_cdrecord_record (BraseroRecorder *recorder,
+-- GError **error);
+--static BraseroBurnResult
+--brasero_cdrecord_blank (BraseroRecorder *recorder,
+-- GError **error);
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_action_string (BraseroJob *job,
+-- BraseroBurnAction action,
+-- char **string);
+--
+--typedef enum {
+-- BRASERO_CD_RECORD_ACTION_NONE,
+-- BRASERO_CD_RECORD_ACTION_BLANK,
+-- BRASERO_CD_RECORD_ACTION_RECORD
+--} BraseroCDRecordAction;
+--
+--struct BraseroCDRecordPrivate {
+-- BraseroCDRecordAction action;
+--
+-- NautilusBurnDrive *drive;
+-- BraseroTrackSource *track;
+-- BraseroTrackSource *inf;
+-- int speed;
+--
+-- gint64 current_track_end_pos;
+-- gint64 current_track_written;
+-- gint64 tracks_total_bytes;
+-- gint64 b_written;
+--
+-- int current_track_num;
+-- int track_count;
+--
+-- int fifo;
+-- gint64 cur_speed;
+--
+-- int minbuf;
+--
+-- int dao:1;
+-- int dummy:1;
+-- int multi:1;
+-- int nograce:1;
+-- int overburn:1;
+-- int immediate:1;
+-- int burnproof:1;
+--
+-- int blank_fast:1;
+--};
+--
+--static GObjectClass *parent_class = NULL;
+--
+--GType
+--brasero_cdrecord_get_type ()
+--{
+-- static GType type = 0;
+--
+-- if(type == 0) {
+-- static const GTypeInfo our_info = {
+-- sizeof (BraseroCDRecordClass),
+-- NULL,
+-- NULL,
+-- (GClassInitFunc)brasero_cdrecord_class_init,
+-- NULL,
+-- NULL,
+-- sizeof (BraseroCDRecord),
+-- 0,
+-- (GInstanceInitFunc)brasero_cdrecord_init,
+-- };
+--
+-- static const GInterfaceInfo recorder_info =
+-- {
+-- (GInterfaceInitFunc) brasero_cdrecord_iface_init_record,
+-- NULL,
+-- NULL
+-- };
+--
+-- type = g_type_register_static (BRASERO_TYPE_PROCESS,
+-- "BraseroCDRecord",
+-- &our_info,
+-- 0);
+-- g_type_add_interface_static (type,
+-- BRASERO_TYPE_RECORDER,
+-- &recorder_info);
+-- }
+--
+-- return type;
+--}
+--
+--static void
+--brasero_cdrecord_class_init (BraseroCDRecordClass *klass)
+--{
+-- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+-- BraseroJobClass *job_class = BRASERO_JOB_CLASS (klass);
+-- BraseroProcessClass *process_class = BRASERO_PROCESS_CLASS (klass);
+--
+-- parent_class = g_type_class_peek_parent(klass);
+-- object_class->finalize = brasero_cdrecord_finalize;
+--
+-- job_class->get_action_string = brasero_cdrecord_get_action_string;
+-- job_class->get_written = brasero_cdrecord_get_written;
+-- job_class->set_source = brasero_cdrecord_set_source;
+-- job_class->set_rate = brasero_cdrecord_set_rate;
+-- job_class->get_rate = brasero_cdrecord_get_rate;
+--
+-- process_class->stderr_func = brasero_cdrecord_stderr_read;
+-- process_class->stdout_func = brasero_cdrecord_stdout_read;
+-- process_class->set_argv = brasero_cdrecord_set_argv;
+--}
+--
+--static void
+--brasero_cdrecord_iface_init_record (BraseroRecorderIFace *iface)
+--{
+-- iface->blank = brasero_cdrecord_blank;
+-- iface->record = brasero_cdrecord_record;
+-- iface->set_drive = brasero_cdrecord_set_drive;
+-- iface->set_flags = brasero_cdrecord_set_flags;
+-- iface->get_fifo = brasero_cdrecord_get_fifo;
+--}
+--
+--static void
+--brasero_cdrecord_init (BraseroCDRecord *obj)
+--{
+-- obj->priv = g_new0 (BraseroCDRecordPrivate, 1);
+--}
+--
+--static void
+--brasero_cdrecord_finalize (GObject *object)
+--{
+-- BraseroCDRecord *cobj;
+-- cobj = BRASERO_CD_RECORD(object);
+--
+-- if (cobj->priv->drive) {
+-- nautilus_burn_drive_unref (cobj->priv->drive);
+-- cobj->priv->drive = NULL;
+-- }
+--
+-- if (cobj->priv->track) {
+-- brasero_track_source_free (cobj->priv->track);
+-- cobj->priv->track = NULL;
+-- }
+--
+-- if (cobj->priv->inf) {
+-- brasero_track_source_free (cobj->priv->inf);
+-- cobj->priv->inf = NULL;
+-- }
+--
+-- g_free(cobj->priv);
+-- G_OBJECT_CLASS(parent_class)->finalize(object);
+--}
+--
+--BraseroCDRecord *
+--brasero_cdrecord_new ()
+--{
+-- BraseroCDRecord *obj;
+--
+-- obj = BRASERO_CD_RECORD(g_object_new(BRASERO_TYPE_CD_RECORD, NULL));
+--
+-- return obj;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_stderr_read (BraseroProcess *process, const char *line)
+--{
+-- BraseroCDRecord *cdrecord = BRASERO_CD_RECORD (process);
+--
+-- if (strstr (line, "Cannot open SCSI driver.")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_PERMISSION,
+-- _("You don't seem to have the required permission to use this drive")));
+-- }
+-- else if (strstr (line, "No disk / Wrong disk!") != NULL) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_MEDIA_NONE,
+-- _("There doesn't seem to be a disc in the drive")));
+-- }
+-- else if (strstr (line, "This means that we are checking recorded media.") != NULL) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_MEDIA_NOT_WRITABLE,
+-- _("The CD has already been recorded")));
+-- }
+-- else if (strstr (line, "Cannot blank disk, aborting.") != NULL) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_MEDIA_NOT_REWRITABLE,
+-- _("The CD cannot be blanked")));
+-- }
+-- else if (!cdrecord->priv->overburn
+-- && strstr (line, "Data may not fit on current disk")) {
+-- /* we don't error out if overburn was chosen */
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_MEDIA_SPACE,
+-- _("The files selected did not fit on the CD")));
+-- }
+-- else if (strstr (line ,"cdrecord: A write error occured")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("an unknown error occured.")));
+-- /* FIXME: future message if overburn is activated.
+-- * a write error occured which was likely due to overburning the
+-- * disc */
+-- }
+-- else if (strstr (line, "Inappropriate audio coding")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
+-- _("All audio files must be stereo, 16-bit digital audio with 44100Hz samples")));
+-- }
+-- else if (strstr (line, "cannot write medium - incompatible format") != NULL) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
+-- _("The image does not seem to be a proper iso9660 file system")));
+-- }
+-- else if (strstr (line, "DMA speed too slow") != NULL) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_SLOW_DMA,
+-- _("The system is too slow to write the CD at this speed. Try a lower speed")));
+-- }
+-- else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_SCSI_IOCTL,
+-- _("You don't seem to have the required permission to use this drive")));
+-- }
+-- else if (strstr (line, "Device or resource busy")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_BUSY_DRIVE,
+-- _("The drive seems to be busy (maybe check you have proper permissions to use it)")));
+-- }
+-- else if (strstr (line, "Illegal write mode for this drive")) {
+-- /* NOTE : when it happened I had to unlock the
+-- * drive with cdrdao and eject it. Should we ? */
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_BUSY_DRIVE,
+-- _("The drive seems to be busy (maybe you should reload the media)")));
+-- }
+-- else if (strstr (line, "cdrecord: No such file or directory. Cannot open")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("the image file cannot be found")));
+-- }
+-- else if (strstr (line, "Bad file descriptor. read error on input file")
+-- || strstr (line, "No tracks specified. Need at least one.")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("internal error")));
+-- }
+-- else if (strstr (line, "Could not write Lead-in")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("the cd information could not be written")));
+-- }
+-- else if (strstr (line, "Cannot fixate disk")) {
+-- /* FIXME: replace error message with
+-- * "the disc could not be closed" */
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("internal error")));
+-- }
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static void
+--brasero_cdrecord_check_fifo (BraseroCDRecord *cdrecord, int buf)
+--{
+-- BraseroJob *slave;
+-- gint64 rate = (cdrecord->priv->speed + 1) * CDR_SPEED;
+--
+-- slave = brasero_job_get_slave (BRASERO_JOB (cdrecord));
+-- if (!slave)
+-- return;
+--
+-- if (cdrecord->priv->fifo < 50) {
+-- /* we try to raise the rate */
+-- rate = (cdrecord->priv->speed * 2) * CDR_SPEED;
+-- }
+-- else if (cdrecord->priv->fifo > 95) {
+-- /* we try to lower the rate */
+-- if (buf < 90)
+-- rate = (cdrecord->priv->speed * 1.5) * CDR_SPEED;
+-- }
+--
+-- brasero_job_debug_message (BRASERO_JOB (cdrecord),
+-- "setting rate to %" G_GINT64_FORMAT,
+-- rate);
+-- brasero_job_set_rate (slave, rate);
+--}
+--
+--static void
+--brasero_cdrecord_compute (BraseroCDRecord *cdrecord,
+-- int mb_written,
+-- int mb_total,
+-- gdouble speed,
+-- int track_num)
+--{
+-- double percent;
+-- gint64 bytes;
+-- gint64 this_remain;
+-- gint64 total;
+-- long secs;
+--
+-- if (cdrecord->priv->tracks_total_bytes > 0)
+-- total = cdrecord->priv->tracks_total_bytes;
+-- else
+-- total = mb_total * 1048576;
+--
+-- if (track_num > cdrecord->priv->current_track_num) {
+-- cdrecord->priv->current_track_num = track_num;
+-- cdrecord->priv->current_track_end_pos += mb_total * 1048576;
+-- }
+--
+-- this_remain = (mb_total - mb_written) * 1048576;
+-- bytes = (total - cdrecord->priv->current_track_end_pos) + this_remain;
+-- cdrecord->priv->b_written = total - bytes;
+--
+-- secs = brasero_burn_common_compute_time_remaining (bytes, (double) speed * CDR_SPEED);
+--
+-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
+-- BRASERO_BURN_ACTION_WRITING,
+-- FALSE);
+--
+-- if (cdrecord->priv->tracks_total_bytes > 0) {
+-- percent = 0.98 * (1.0 - (double) bytes / (double) cdrecord->priv->tracks_total_bytes);
+-- }
+-- else {
+-- percent = 0.98 * ((double) ((track_num - 1) / (double)cdrecord->priv->track_count)
+-- + ((double)mb_written / mb_total) / (double)cdrecord->priv->track_count);
+-- }
+--
+-- brasero_job_progress_changed (BRASERO_JOB (cdrecord), percent, secs);
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_stdout_read (BraseroProcess *process, const char *line)
+--{
+-- guint track;
+-- guint speed_1, speed_2;
+-- BraseroCDRecord *cdrecord;
+-- int mb_written = 0, mb_total = 0, fifo = 0, buf = 0;
+--
+-- cdrecord = BRASERO_CD_RECORD (process);
+--
+-- if (sscanf (line, "Track %2u: %d of %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
+-- &track, &mb_written, &mb_total, &fifo, &buf, &speed_1, &speed_2) == 7) {
+-- gdouble speed;
+--
+-- cdrecord->priv->fifo = fifo;
+-- cdrecord->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
+--
+-- cdrecord->priv->current_track_written = mb_written * 1048576;
+-- speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
+-- brasero_cdrecord_compute (cdrecord,
+-- mb_written,
+-- mb_total,
+-- speed,
+-- track);
+--
+-- brasero_cdrecord_check_fifo (cdrecord, buf);
+-- }
+-- else if (sscanf (line, "Track %2u: %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
+-- &track, &mb_written, &fifo, &buf, &speed_1, &speed_2) == 6) {
+-- int mb_total;
+--
+-- /* this line is printed when cdrecord writes on the fly */
+-- cdrecord->priv->fifo = fifo;
+-- cdrecord->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
+-- cdrecord->priv->current_track_written = mb_written * 1048576;
+--
+-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-- gdouble speed;
+--
+-- /* we must ask the imager what is the total size */
+-- brasero_imager_get_size (BRASERO_IMAGER (cdrecord->priv->track->contents.imager.obj),
+-- &cdrecord->priv->tracks_total_bytes,
+-- FALSE,
+-- NULL);
+-- mb_total = cdrecord->priv->tracks_total_bytes / 1048576;
+-- speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
+-- brasero_cdrecord_compute (cdrecord,
+-- mb_written,
+-- mb_total,
+-- speed,
+-- track);
+-- }
+-- else
+-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
+-- BRASERO_BURN_ACTION_WRITING,
+-- FALSE);
+--
+-- brasero_cdrecord_check_fifo (cdrecord, buf);
+-- }
+-- else if (sscanf (line, "Track %*d: %*s %d MB ", &mb_total) == 1) {
+-- if (mb_total > 0) {
+-- cdrecord->priv->tracks_total_bytes += mb_total * 1048576;
+-- }
+-- }
+-- else if (strstr (line, "Sending CUE sheet")) {
+-- brasero_job_action_changed (BRASERO_JOB (process),
+-- BRASERO_BURN_ACTION_WRITING_CD_TEXT,
+-- FALSE);
+-- }
+-- else if (g_str_has_prefix (line, "Re-load disk and hit <CR>")
+-- || g_str_has_prefix (line, "send SIGUSR1 to continue")) {
+-- /* NOTE: There seems to be a BUG somewhere when writing raw images
+-- * with clone mode. After disc has been written and fixated cdrecord
+-- * asks the media to be reloaded. So we simply ignore this message
+-- * and returns that everything went well. Which is indeed the case */
+-- if (brasero_job_get_current_action (BRASERO_JOB (process)) == BRASERO_BURN_ACTION_FIXATING) {
+-- brasero_job_finished (BRASERO_JOB (process));
+-- return BRASERO_BURN_OK;
+-- }
+--
+-- /* This is not supposed to happen since we checked for the cd
+-- before starting, but we try to handle it anyway, since mmc
+-- profiling can fail. */
+-- /* NOTE : nautilus_burn_recorder used to send sigusr1 or return */
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_RELOAD_MEDIA,
+-- _("The media needs to be reloaded before being recorded")));
+-- }
+-- else if (g_str_has_prefix (line, "Fixating...")) {
+-- brasero_job_progress_changed (BRASERO_JOB (process),
+-- 0.98,
+-- -1);
+-- brasero_job_action_changed (BRASERO_JOB (process),
+-- BRASERO_BURN_ACTION_FIXATING,
+-- FALSE);
+-- }
+-- else if (g_str_has_prefix (line, "Last chance to quit, ")) {
+-- brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
+-- }
+-- else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
+-- || strstr (line, "Blanking entire disk")) {
+-- brasero_job_action_changed (BRASERO_JOB (process),
+-- BRASERO_BURN_ACTION_BLANKING,
+-- FALSE);
+-- }
+-- else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) {
+-- brasero_job_error (BRASERO_JOB (process),
+-- g_error_new (BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("internal error")));
+-- }
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_argv_record (BraseroCDRecord *cdrecord,
+-- GPtrArray *argv,
+-- GError **error)
+--{
+-- if (!cdrecord->priv->track)
+-- return BRASERO_BURN_NOT_READY;
+--
+-- if (cdrecord->priv->immediate) {
+-- g_ptr_array_add (argv, g_strdup ("-immed"));
+-- g_ptr_array_add (argv, g_strdup_printf ("minbuf=%i", cdrecord->priv->minbuf));
+-- }
+--
+-- if (cdrecord->priv->speed > 0) {
+-- char *speed_str;
+--
+-- speed_str = g_strdup_printf ("speed=%d", cdrecord->priv->speed);
+-- g_ptr_array_add (argv, speed_str);
+-- }
+--
+-- if (cdrecord->priv->dao)
+-- g_ptr_array_add (argv, g_strdup ("-dao"));
+-- if (cdrecord->priv->overburn)
+-- g_ptr_array_add (argv, g_strdup ("-overburn"));
+-- if (cdrecord->priv->burnproof)
+-- g_ptr_array_add (argv, g_strdup ("driveropts=burnfree"));
+-- if (cdrecord->priv->multi)
+-- g_ptr_array_add (argv, g_strdup ("-multi"));
+--
+-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-- BraseroTrackSourceType track_type;
+-- BraseroBurnResult result;
+-- BraseroImager *imager;
+-- int buffer_size;
+-- gint64 sectors;
+--
+-- imager = cdrecord->priv->track->contents.imager.obj;
+--
+-- /* we need to know what is the type of the track (audio / data) */
+-- result = brasero_imager_get_track_type (imager, &track_type);
+-- if (result != BRASERO_BURN_OK) {
+-- g_set_error (error,
+-- BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("imager doesn't seem to be ready"));
+-- return BRASERO_BURN_ERR;
+-- }
+--
+-- /* ask the size */
+-- result = brasero_imager_get_size (imager, §ors, TRUE, error);
+-- if (result != BRASERO_BURN_OK) {
+-- if (!error)
+-- g_set_error (error,
+-- BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("imager doesn't seem to be ready"));
+-- return BRASERO_BURN_ERR;
+-- }
+--
+-- /* we create a buffer depending on the size
+-- * buffer 4m> < 64m and is 1/25th of size otherwise */
+-- buffer_size = sectors * 2352 / 1024 / 1024 / 25;
+-- if (buffer_size > 32)
+-- buffer_size = 32;
+-- else if (buffer_size < 4)
+-- buffer_size = 4;
+--
+-- g_ptr_array_add (argv, g_strdup_printf ("fs=%im", buffer_size));
+--
+-- if (track_type == BRASERO_TRACK_SOURCE_ISO
+-- || track_type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
+-- g_ptr_array_add (argv, g_strdup_printf ("tsize=%Lis", sectors));
+--
+-- g_ptr_array_add (argv, g_strdup ("-data"));
+-- g_ptr_array_add (argv, g_strdup ("-nopad"));
+-- g_ptr_array_add (argv, g_strdup ("-"));
+--
+-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
+-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else if (track_type == BRASERO_TRACK_SOURCE_RAW) {
+-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-- g_ptr_array_add (argv, g_strdup ("-raw96r"));
+-- g_ptr_array_add (argv, g_strdup ("-clone"));
+--
+-- /* we need to generate the toc first */
+-- if (result != BRASERO_BURN_OK)
+-- return result;
+--
+-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
+-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else if (track_type == BRASERO_TRACK_SOURCE_AUDIO) {
+-- GSList *iter;
+--
+-- /* we need to get the inf first */
+-- result = brasero_imager_set_output_type (imager,
+-- BRASERO_TRACK_SOURCE_INF,
+-- error);
+-- if (result != BRASERO_BURN_OK)
+-- return result;
+--
+-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
+-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), TRUE);
+--
+-- result = brasero_imager_get_track (imager,
+-- &cdrecord->priv->inf,
+-- error);
+--
+-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
+--
+-- if (result != BRASERO_BURN_OK)
+-- return result;
+--
+-- result = brasero_imager_set_output_type (imager,
+-- BRASERO_TRACK_SOURCE_AUDIO,
+-- error);
+-- if (result != BRASERO_BURN_OK)
+-- return result;
+--
+-- /* now we set the rate of the slave slightly above the speed */
+-- brasero_job_set_rate (BRASERO_JOB (imager),
+-- (cdrecord->priv->speed + 1) * CDR_SPEED);
+--
+-- /* now set the rest of the arguments */
+-- g_ptr_array_add (argv, g_strdup ("-dao"));
+-- g_ptr_array_add (argv, g_strdup ("-audio"));
+-- g_ptr_array_add (argv, g_strdup ("-useinfo"));
+-- g_ptr_array_add (argv, g_strdup ("-text"));
+--
+-- for (iter = cdrecord->priv->inf->contents.inf.files; iter; iter = iter->next) {
+-- gchar *arg;
+--
+-- arg = g_strdup (iter->data);
+-- g_ptr_array_add (argv, arg);
+-- }
+-- }
+-- else
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), TRUE);
+-- }
+-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_AUDIO) {
+-- GSList *iter;
+--
+-- /* CD-text cannot be written in tao mode (which is the default) */
+-- g_ptr_array_add (argv, g_strdup ("-dao"));
+--
+-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-- g_ptr_array_add (argv, g_strdup ("-audio"));
+-- g_ptr_array_add (argv, g_strdup ("-pad"));
+-- g_ptr_array_add (argv, g_strdup ("-useinfo"));
+-- g_ptr_array_add (argv, g_strdup ("-text"));
+--
+-- for (iter = cdrecord->priv->track->contents.audio.files; iter; iter = iter->next) {
+-- gchar *arg;
+--
+-- arg = g_strdup (iter->data);
+-- g_ptr_array_add (argv, arg);
+-- }
+--
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_ISO
+-- || cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
+-- gchar *isopath;
+--
+-- isopath = brasero_track_source_get_iso_localpath (cdrecord->priv->track);
+-- if (!isopath)
+-- return BRASERO_BURN_ERR;
+--
+-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-- g_ptr_array_add (argv, g_strdup ("-data"));
+-- g_ptr_array_add (argv, g_strdup ("-nopad"));
+-- g_ptr_array_add (argv, isopath);
+--
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_RAW) {
+-- gchar *rawpath;
+--
+-- rawpath = brasero_track_source_get_raw_localpath (cdrecord->priv->track);
+-- if (!rawpath)
+-- return BRASERO_BURN_ERR;
+--
+-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-- g_ptr_array_add (argv, g_strdup ("-raw96r"));
+-- g_ptr_array_add (argv, g_strdup ("-clone"));
+-- g_ptr_array_add (argv, rawpath);
+--
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_CUE) {
+-- gchar *cue_str;
+-- gchar *cuepath;
+--
+-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-- g_ptr_array_add (argv, g_strdup ("-dao"));
+--
+-- cuepath = brasero_track_source_get_cue_localpath (cdrecord->priv->track);
+-- if (!cuepath)
+-- return BRASERO_BURN_ERR;
+--
+-- cue_str = g_strdup_printf ("cuefile=%s", cuepath);
+-- g_free (cuepath);
+--
+-- g_ptr_array_add (argv, cue_str);
+--
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
+-- }
+-- else
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_argv_blank (BraseroCDRecord *cdrecord, GPtrArray *argv)
+--{
+-- char *blank_str;
+--
+-- blank_str = g_strdup_printf ("blank=%s", cdrecord->priv->blank_fast ? "fast" : "all");
+-- g_ptr_array_add (argv, blank_str);
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_argv (BraseroProcess *process,
+-- GPtrArray *argv,
+-- gboolean has_master,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+-- BraseroBurnResult result;
+-- char *dev_str;
+--
+-- cdrecord = BRASERO_CD_RECORD (process);
+--
+-- if (has_master)
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- if (!cdrecord->priv->drive)
+-- return BRASERO_BURN_NOT_READY;
+--
+-- g_ptr_array_add (argv, g_strdup ("cdrecord"));
+-- g_ptr_array_add (argv, g_strdup ("-v"));
+--
+-- dev_str = g_strdup_printf ("dev=%s",
+-- NCB_DRIVE_GET_DEVICE (cdrecord->priv->drive));
+--
+-- g_ptr_array_add (argv, dev_str);
+--
+-- if (cdrecord->priv->dummy)
+-- g_ptr_array_add (argv, g_strdup ("-dummy"));
+--
+-- if (cdrecord->priv->nograce)
+-- g_ptr_array_add (argv, g_strdup ("gracetime=0"));
+--
+-- if (cdrecord->priv->action == BRASERO_CD_RECORD_ACTION_RECORD)
+-- result = brasero_cdrecord_set_argv_record (cdrecord, argv, error);
+-- else if (cdrecord->priv->action == BRASERO_CD_RECORD_ACTION_BLANK)
+-- result = brasero_cdrecord_set_argv_blank (cdrecord, argv);
+-- else
+-- return BRASERO_BURN_NOT_READY;
+--
+-- if (result == BRASERO_BURN_OK || result == BRASERO_BURN_CANCEL) {
+-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
+-- BRASERO_BURN_ACTION_PREPARING,
+-- FALSE);
+-- brasero_job_progress_changed (BRASERO_JOB (cdrecord), 0, -1);
+-- }
+--
+-- return result;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_drive (BraseroRecorder *recorder,
+-- NautilusBurnDrive *drive,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+-- NautilusBurnMediaType media;
+--
+-- media = nautilus_burn_drive_get_media_type (drive);
+-- if (media > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- cdrecord = BRASERO_CD_RECORD (recorder);
+--
+-- if (cdrecord->priv->drive) {
+-- nautilus_burn_drive_unref (cdrecord->priv->drive);
+-- cdrecord->priv->drive = NULL;
+-- }
+--
+-- cdrecord->priv->drive = drive;
+-- nautilus_burn_drive_ref (drive);
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_source (BraseroJob *job,
+-- const BraseroTrackSource *track,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- cdrecord = BRASERO_CD_RECORD (job);
+--
+-- if (track->type != BRASERO_TRACK_SOURCE_AUDIO
+-- && track->type != BRASERO_TRACK_SOURCE_CUE
+-- && track->type != BRASERO_TRACK_SOURCE_RAW
+-- && track->type != BRASERO_TRACK_SOURCE_ISO
+-- && track->type != BRASERO_TRACK_SOURCE_ISO_JOLIET
+-- && track->type != BRASERO_TRACK_SOURCE_IMAGER)
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- if (cdrecord->priv->inf) {
+-- brasero_track_source_free (cdrecord->priv->inf);
+-- cdrecord->priv->inf = NULL;
+-- }
+--
+-- if (cdrecord->priv->track)
+-- brasero_track_source_free (cdrecord->priv->track);
+--
+-- cdrecord->priv->track = brasero_track_source_copy (track);
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_flags (BraseroRecorder *recorder,
+-- BraseroRecorderFlag flags,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- cdrecord = BRASERO_CD_RECORD (recorder);
+--
+-- cdrecord->priv->dummy = (flags & BRASERO_RECORDER_FLAG_DUMMY) != 0;
+-- cdrecord->priv->dao = (flags & BRASERO_RECORDER_FLAG_DAO) != 0;
+-- cdrecord->priv->nograce = (flags & BRASERO_RECORDER_FLAG_NOGRACE) != 0;
+-- cdrecord->priv->burnproof = (flags & BRASERO_RECORDER_FLAG_BURNPROOF) != 0;
+-- cdrecord->priv->overburn = (flags & BRASERO_RECORDER_FLAG_OVERBURN) != 0;
+-- cdrecord->priv->blank_fast = (flags & BRASERO_RECORDER_FLAG_FAST_BLANK) != 0;
+-- cdrecord->priv->multi = (flags & BRASERO_RECORDER_FLAG_MULTI) != 0;
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_set_rate (BraseroJob *job,
+-- gint64 speed)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- if (brasero_job_is_running (job))
+-- return BRASERO_BURN_RUNNING;
+--
+-- cdrecord = BRASERO_CD_RECORD (job);
+-- cdrecord->priv->speed = speed / CDR_SPEED;
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_blank (BraseroRecorder *recorder,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+-- BraseroBurnResult result;
+--
+-- cdrecord = BRASERO_CD_RECORD (recorder);
+--
+-- if (!nautilus_burn_drive_can_rewrite (cdrecord->priv->drive)) {
+-- g_set_error (error,
+-- BRASERO_BURN_ERROR,
+-- BRASERO_BURN_ERROR_GENERAL,
+-- _("the drive cannot rewrite CDs or DVDs"));
+-- return BRASERO_BURN_ERR;
+-- }
+--
+-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_BLANK;
+-- result = brasero_job_run (BRASERO_JOB (cdrecord), error);
+-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_NONE;
+--
+-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
+-- BRASERO_BURN_ACTION_NONE,
+-- FALSE);
+--
+-- return result;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_record (BraseroRecorder *recorder,
+-- GError **error)
+--{
+-- BraseroCDRecord *cdrecord;
+-- BraseroBurnResult result;
+--
+-- cdrecord = BRASERO_CD_RECORD (recorder);
+--
+-- if (!cdrecord->priv->track)
+-- return BRASERO_BURN_NOT_READY;
+--
+-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_RECORD;
+--
+-- /* set as slave if track is an imager (on the fly burning) */
+-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-- BraseroJob *slave;
+--
+-- slave = BRASERO_JOB (cdrecord->priv->track->contents.imager.obj);
+-- brasero_job_set_slave (BRASERO_JOB (cdrecord), slave);
+-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), TRUE);
+-- }
+-- else
+-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
+--
+-- result = brasero_job_run (BRASERO_JOB (cdrecord), error);
+-- brasero_job_set_slave (BRASERO_JOB (cdrecord), NULL);
+-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_NONE;
+-- return result;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_rate (BraseroJob *job,
+-- gint64 *rate)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- cdrecord = BRASERO_CD_RECORD (job);
+--
+-- if (rate)
+-- *rate = cdrecord->priv->cur_speed;
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_written (BraseroJob *job,
+-- gint64 *written)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- cdrecord = BRASERO_CD_RECORD (job);
+--
+-- if (written)
+-- *written = cdrecord->priv->b_written;
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_fifo (BraseroRecorder *recorder,
+-- gint *fifo)
+--{
+-- BraseroCDRecord *cdrecord;
+--
+-- cdrecord = BRASERO_CD_RECORD (recorder);
+--
+-- if (fifo)
+-- *fifo = cdrecord->priv->fifo;
+--
+-- return BRASERO_BURN_OK;
+--}
+--
+--static BraseroBurnResult
+--brasero_cdrecord_get_action_string (BraseroJob *job,
+-- BraseroBurnAction action,
+-- char **string)
+--{
+-- job = brasero_job_get_slave (job);
+-- if (!job)
+-- return BRASERO_BURN_NOT_SUPPORTED;
+--
+-- return brasero_job_get_action_string (job, action, string);
+--}
+--
+--void
+--brasero_cdrecord_set_immediate (BraseroCDRecord *cdrecord, gint minbuf)
+--{
+-- g_return_if_fail (BRASERO_IS_CD_RECORD (cdrecord));
+--
+-- if (minbuf > 95 || minbuf < 25)
+-- minbuf = 30;
+--
+-- cdrecord->priv->immediate = 1;
+-- cdrecord->priv->minbuf = minbuf;
+--}
+-diff -urN brasero-0.4.4.orig/src/burn-cdrecord.h brasero-0.4.4/src/burn-cdrecord.h
+---- brasero-0.4.4.orig/src/burn-cdrecord.h 2006-09-07 17:47:40.000000000 +0200
+-+++ brasero-0.4.4/src/burn-cdrecord.h 1970-01-01 01:00:00.000000000 +0100
+-@@ -1,59 +0,0 @@
+--/***************************************************************************
+-- * cdrecord.h
+-- *
+-- * dim jan 22 15:22:52 2006
+-- * Copyright 2006 Rouquier Philippe
+-- * brasero-app at wanadoo.fr
+-- ***************************************************************************/
+--
+--/*
+-- * 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 CDRECORD_H
+--#define CDRECORD_H
+--
+--#include <glib.h>
+--#include <glib-object.h>
+--
+--#include "burn-process.h"
+--
+--G_BEGIN_DECLS
+--
+--#define BRASERO_TYPE_CD_RECORD (brasero_cdrecord_get_type ())
+--#define BRASERO_CD_RECORD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), BRASERO_TYPE_CD_RECORD, BraseroCDRecord))
+--#define BRASERO_CD_RECORD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), BRASERO_TYPE_CD_RECORD, BraseroCDRecordClass))
+--#define BRASERO_IS_CD_RECORD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), BRASERO_TYPE_CD_RECORD))
+--#define BRASERO_IS_CD_RECORD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), BRASERO_TYPE_CD_RECORD))
+--#define BRASERO_CD_RECORD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), BRASERO_TYPE_CD_RECORD, BraseroCDRecordClass))
+--
+--typedef struct BraseroCDRecordPrivate BraseroCDRecordPrivate;
+--
+--typedef struct {
+-- BraseroProcess parent;
+-- BraseroCDRecordPrivate *priv;
+--} BraseroCDRecord;
+--
+--typedef struct {
+-- BraseroProcessClass parent_class;
+--} BraseroCDRecordClass;
+--
+--GType brasero_cdrecord_get_type ();
+--BraseroCDRecord *brasero_cdrecord_new ();
+--
+--void
+--brasero_cdrecord_set_immediate (BraseroCDRecord *cdrecord, gint minbuf);
+--
+--#endif /* CDRECORD_H */
+-diff -urN brasero-0.4.4.orig/src/burn-mkisofs.c brasero-0.4.4/src/burn-mkisofs.c
+---- brasero-0.4.4.orig/src/burn-mkisofs.c 2006-09-07 17:47:40.000000000 +0200
+-+++ brasero-0.4.4/src/burn-mkisofs.c 2006-10-23 10:42:44.000000000 +0200
+-@@ -704,7 +704,7 @@
+- gboolean res;
+- int tmp;
+-
+-- command = g_strdup_printf ("cdrecord -msinfo dev=%s",
+-+ command = g_strdup_printf ("wodim -msinfo dev=%s",
+- NCB_DRIVE_GET_DEVICE (mkisofs->priv->drive));
+-
+- res = g_spawn_command_line_sync (command,
+-diff -urN brasero-0.4.4.orig/src/burn-wodim.c brasero-0.4.4/src/burn-wodim.c
+---- brasero-0.4.4.orig/src/burn-wodim.c 1970-01-01 01:00:00.000000000 +0100
+-+++ brasero-0.4.4/src/burn-wodim.c 2006-10-23 10:41:33.000000000 +0200
+-@@ -0,0 +1,1042 @@
+-+/***************************************************************************
+-+ * wodim.c
+-+ *
+-+ * dim jan 22 15:22:52 2006
+-+ * Copyright 2006 Rouquier Philippe
+-+ * brasero-app at wanadoo.fr
+-+ ***************************************************************************/
+-+
+-+/*
+-+ * 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
+-+
+-+#include <string.h>
+-+#include <math.h>
+-+
+-+#include <glib.h>
+-+#include <glib-object.h>
+-+#include <glib/gi18n-lib.h>
+-+#include <glib/gstdio.h>
+-+
+-+#include <nautilus-burn-drive.h>
+-+
+-+#include "burn-basics.h"
+-+#include "burn-common.h"
+-+#include "burn-wodim.h"
+-+#include "burn-process.h"
+-+#include "burn-recorder.h"
+-+#include "burn-imager.h"
+-+#include "brasero-ncb.h"
+-+
+-+static void brasero_wodim_class_init (BraseroWodimClass *klass);
+-+static void brasero_wodim_init (BraseroWodim *sp);
+-+static void brasero_wodim_finalize (GObject *object);
+-+static void brasero_wodim_iface_init_record (BraseroRecorderIFace *iface);
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_stderr_read (BraseroProcess *process,
+-+ const char *line);
+-+static BraseroBurnResult
+-+brasero_wodim_stdout_read (BraseroProcess *process,
+-+ const char *line);
+-+static BraseroBurnResult
+-+brasero_wodim_set_argv (BraseroProcess *process,
+-+ GPtrArray *argv,
+-+ gboolean has_master,
+-+ GError **error);
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_rate (BraseroJob *job,
+-+ gint64 *rate);
+-+static BraseroBurnResult
+-+brasero_wodim_get_written (BraseroJob *job,
+-+ gint64 *written);
+-+static BraseroBurnResult
+-+brasero_wodim_get_fifo (BraseroRecorder *recorder,
+-+ gint *fifo);
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_drive (BraseroRecorder *recorder,
+-+ NautilusBurnDrive *drive,
+-+ GError **error);
+-+static BraseroBurnResult
+-+brasero_wodim_set_source (BraseroJob *job,
+-+ const BraseroTrackSource *track,
+-+ GError **error);
+-+static BraseroBurnResult
+-+brasero_wodim_set_flags (BraseroRecorder *recorder,
+-+ BraseroRecorderFlag flags,
+-+ GError **error);
+-+static BraseroBurnResult
+-+brasero_wodim_set_rate (BraseroJob *job,
+-+ gint64 speed);
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_record (BraseroRecorder *recorder,
+-+ GError **error);
+-+static BraseroBurnResult
+-+brasero_wodim_blank (BraseroRecorder *recorder,
+-+ GError **error);
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_action_string (BraseroJob *job,
+-+ BraseroBurnAction action,
+-+ char **string);
+-+
+-+typedef enum {
+-+ BRASERO_WODIM_ACTION_NONE,
+-+ BRASERO_WODIM_ACTION_BLANK,
+-+ BRASERO_WODIM_ACTION_RECORD
+-+} BraseroWodimAction;
+-+
+-+struct BraseroWodimPrivate {
+-+ BraseroWodimAction action;
+-+
+-+ NautilusBurnDrive *drive;
+-+ BraseroTrackSource *track;
+-+ BraseroTrackSource *inf;
+-+ int speed;
+-+
+-+ gint64 current_track_end_pos;
+-+ gint64 current_track_written;
+-+ gint64 tracks_total_bytes;
+-+ gint64 b_written;
+-+
+-+ int current_track_num;
+-+ int track_count;
+-+
+-+ int fifo;
+-+ gint64 cur_speed;
+-+
+-+ int minbuf;
+-+
+-+ int dao:1;
+-+ int dummy:1;
+-+ int multi:1;
+-+ int nograce:1;
+-+ int overburn:1;
+-+ int immediate:1;
+-+ int burnproof:1;
+-+
+-+ int blank_fast:1;
+-+};
+-+
+-+static GObjectClass *parent_class = NULL;
+-+
+-+GType
+-+brasero_wodim_get_type ()
+-+{
+-+ static GType type = 0;
+-+
+-+ if(type == 0) {
+-+ static const GTypeInfo our_info = {
+-+ sizeof (BraseroWodimClass),
+-+ NULL,
+-+ NULL,
+-+ (GClassInitFunc)brasero_wodim_class_init,
+-+ NULL,
+-+ NULL,
+-+ sizeof (BraseroWodim),
+-+ 0,
+-+ (GInstanceInitFunc)brasero_wodim_init,
+-+ };
+-+
+-+ static const GInterfaceInfo recorder_info =
+-+ {
+-+ (GInterfaceInitFunc) brasero_wodim_iface_init_record,
+-+ NULL,
+-+ NULL
+-+ };
+-+
+-+ type = g_type_register_static (BRASERO_TYPE_PROCESS,
+-+ "BraseroWodim",
+-+ &our_info,
+-+ 0);
+-+ g_type_add_interface_static (type,
+-+ BRASERO_TYPE_RECORDER,
+-+ &recorder_info);
+-+ }
+-+
+-+ return type;
+-+}
+-+
+-+static void
+-+brasero_wodim_class_init (BraseroWodimClass *klass)
+-+{
+-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+-+ BraseroJobClass *job_class = BRASERO_JOB_CLASS (klass);
+-+ BraseroProcessClass *process_class = BRASERO_PROCESS_CLASS (klass);
+-+
+-+ parent_class = g_type_class_peek_parent(klass);
+-+ object_class->finalize = brasero_wodim_finalize;
+-+
+-+ job_class->get_action_string = brasero_wodim_get_action_string;
+-+ job_class->get_written = brasero_wodim_get_written;
+-+ job_class->set_source = brasero_wodim_set_source;
+-+ job_class->set_rate = brasero_wodim_set_rate;
+-+ job_class->get_rate = brasero_wodim_get_rate;
+-+
+-+ process_class->stderr_func = brasero_wodim_stderr_read;
+-+ process_class->stdout_func = brasero_wodim_stdout_read;
+-+ process_class->set_argv = brasero_wodim_set_argv;
+-+}
+-+
+-+static void
+-+brasero_wodim_iface_init_record (BraseroRecorderIFace *iface)
+-+{
+-+ iface->blank = brasero_wodim_blank;
+-+ iface->record = brasero_wodim_record;
+-+ iface->set_drive = brasero_wodim_set_drive;
+-+ iface->set_flags = brasero_wodim_set_flags;
+-+ iface->get_fifo = brasero_wodim_get_fifo;
+-+}
+-+
+-+static void
+-+brasero_wodim_init (BraseroWodim *obj)
+-+{
+-+ obj->priv = g_new0 (BraseroWodimPrivate, 1);
+-+}
+-+
+-+static void
+-+brasero_wodim_finalize (GObject *object)
+-+{
+-+ BraseroWodim *cobj;
+-+ cobj = BRASERO_WODIM(object);
+-+
+-+ if (cobj->priv->drive) {
+-+ nautilus_burn_drive_unref (cobj->priv->drive);
+-+ cobj->priv->drive = NULL;
+-+ }
+-+
+-+ if (cobj->priv->track) {
+-+ brasero_track_source_free (cobj->priv->track);
+-+ cobj->priv->track = NULL;
+-+ }
+-+
+-+ if (cobj->priv->inf) {
+-+ brasero_track_source_free (cobj->priv->inf);
+-+ cobj->priv->inf = NULL;
+-+ }
+-+
+-+ g_free(cobj->priv);
+-+ G_OBJECT_CLASS(parent_class)->finalize(object);
+-+}
+-+
+-+BraseroWodim *
+-+brasero_wodim_new ()
+-+{
+-+ BraseroWodim *obj;
+-+
+-+ obj = BRASERO_WODIM(g_object_new(BRASERO_TYPE_WODIM, NULL));
+-+
+-+ return obj;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_stderr_read (BraseroProcess *process, const char *line)
+-+{
+-+ BraseroWodim *wodim = BRASERO_WODIM (process);
+-+
+-+ if (strstr (line, "Cannot open SCSI driver.")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_PERMISSION,
+-+ _("You don't seem to have the required permission to use this drive")));
+-+ }
+-+ else if (strstr (line, "No disk / Wrong disk!") != NULL) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_MEDIA_NONE,
+-+ _("There doesn't seem to be a disc in the drive")));
+-+ }
+-+ else if (strstr (line, "This means that we are checking recorded media.") != NULL) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_MEDIA_NOT_WRITABLE,
+-+ _("The CD has already been recorded")));
+-+ }
+-+ else if (strstr (line, "Cannot blank disk, aborting.") != NULL) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_MEDIA_NOT_REWRITABLE,
+-+ _("The CD cannot be blanked")));
+-+ }
+-+ else if (!wodim->priv->overburn
+-+ && strstr (line, "Data may not fit on current disk")) {
+-+ /* we don't error out if overburn was chosen */
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_MEDIA_SPACE,
+-+ _("The files selected did not fit on the CD")));
+-+ }
+-+ else if (strstr (line ,"wodim: A write error occured")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("an unknown error occured.")));
+-+ /* FIXME: future message if overburn is activated.
+-+ * a write error occured which was likely due to overburning the
+-+ * disc */
+-+ }
+-+ else if (strstr (line, "Inappropriate audio coding")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
+-+ _("All audio files must be stereo, 16-bit digital audio with 44100Hz samples")));
+-+ }
+-+ else if (strstr (line, "cannot write medium - incompatible format") != NULL) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
+-+ _("The image does not seem to be a proper iso9660 file system")));
+-+ }
+-+ else if (strstr (line, "DMA speed too slow") != NULL) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_SLOW_DMA,
+-+ _("The system is too slow to write the CD at this speed. Try a lower speed")));
+-+ }
+-+ else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_SCSI_IOCTL,
+-+ _("You don't seem to have the required permission to use this drive")));
+-+ }
+-+ else if (strstr (line, "Device or resource busy")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_BUSY_DRIVE,
+-+ _("The drive seems to be busy (maybe check you have proper permissions to use it)")));
+-+ }
+-+ else if (strstr (line, "Illegal write mode for this drive")) {
+-+ /* NOTE : when it happened I had to unlock the
+-+ * drive with cdrdao and eject it. Should we ? */
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_BUSY_DRIVE,
+-+ _("The drive seems to be busy (maybe you should reload the media)")));
+-+ }
+-+ else if (strstr (line, "wodim: No such file or directory. Cannot open")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("the image file cannot be found")));
+-+ }
+-+ else if (strstr (line, "Bad file descriptor. read error on input file")
+-+ || strstr (line, "No tracks specified. Need at least one.")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("internal error")));
+-+ }
+-+ else if (strstr (line, "Could not write Lead-in")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("the cd information could not be written")));
+-+ }
+-+ else if (strstr (line, "Cannot fixate disk")) {
+-+ /* FIXME: replace error message with
+-+ * "the disc could not be closed" */
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("internal error")));
+-+ }
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static void
+-+brasero_wodim_check_fifo (BraseroWodim *wodim, int buf)
+-+{
+-+ BraseroJob *slave;
+-+ gint64 rate = (wodim->priv->speed + 1) * CDR_SPEED;
+-+
+-+ slave = brasero_job_get_slave (BRASERO_JOB (wodim));
+-+ if (!slave)
+-+ return;
+-+
+-+ if (wodim->priv->fifo < 50) {
+-+ /* we try to raise the rate */
+-+ rate = (wodim->priv->speed * 2) * CDR_SPEED;
+-+ }
+-+ else if (wodim->priv->fifo > 95) {
+-+ /* we try to lower the rate */
+-+ if (buf < 90)
+-+ rate = (wodim->priv->speed * 1.5) * CDR_SPEED;
+-+ }
+-+
+-+ brasero_job_debug_message (BRASERO_JOB (wodim),
+-+ "setting rate to %" G_GINT64_FORMAT,
+-+ rate);
+-+ brasero_job_set_rate (slave, rate);
+-+}
+-+
+-+static void
+-+brasero_wodim_compute (BraseroWodim *wodim,
+-+ int mb_written,
+-+ int mb_total,
+-+ gdouble speed,
+-+ int track_num)
+-+{
+-+ double percent;
+-+ gint64 bytes;
+-+ gint64 this_remain;
+-+ gint64 total;
+-+ long secs;
+-+
+-+ if (wodim->priv->tracks_total_bytes > 0)
+-+ total = wodim->priv->tracks_total_bytes;
+-+ else
+-+ total = mb_total * 1048576;
+-+
+-+ if (track_num > wodim->priv->current_track_num) {
+-+ wodim->priv->current_track_num = track_num;
+-+ wodim->priv->current_track_end_pos += mb_total * 1048576;
+-+ }
+-+
+-+ this_remain = (mb_total - mb_written) * 1048576;
+-+ bytes = (total - wodim->priv->current_track_end_pos) + this_remain;
+-+ wodim->priv->b_written = total - bytes;
+-+
+-+ secs = brasero_burn_common_compute_time_remaining (bytes, (double) speed * CDR_SPEED);
+-+
+-+ brasero_job_action_changed (BRASERO_JOB (wodim),
+-+ BRASERO_BURN_ACTION_WRITING,
+-+ FALSE);
+-+
+-+ if (wodim->priv->tracks_total_bytes > 0) {
+-+ percent = 0.98 * (1.0 - (double) bytes / (double) wodim->priv->tracks_total_bytes);
+-+ }
+-+ else {
+-+ percent = 0.98 * ((double) ((track_num - 1) / (double)wodim->priv->track_count)
+-+ + ((double)mb_written / mb_total) / (double)wodim->priv->track_count);
+-+ }
+-+
+-+ brasero_job_progress_changed (BRASERO_JOB (wodim), percent, secs);
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_stdout_read (BraseroProcess *process, const char *line)
+-+{
+-+ guint track;
+-+ guint speed_1, speed_2;
+-+ BraseroWodim *wodim;
+-+ int mb_written = 0, mb_total = 0, fifo = 0, buf = 0;
+-+
+-+ wodim = BRASERO_WODIM (process);
+-+
+-+ if (sscanf (line, "Track %2u: %d of %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
+-+ &track, &mb_written, &mb_total, &fifo, &buf, &speed_1, &speed_2) == 7) {
+-+ gdouble speed;
+-+
+-+ wodim->priv->fifo = fifo;
+-+ wodim->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
+-+
+-+ wodim->priv->current_track_written = mb_written * 1048576;
+-+ speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
+-+ brasero_wodim_compute (wodim,
+-+ mb_written,
+-+ mb_total,
+-+ speed,
+-+ track);
+-+
+-+ brasero_wodim_check_fifo (wodim, buf);
+-+ }
+-+ else if (sscanf (line, "Track %2u: %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
+-+ &track, &mb_written, &fifo, &buf, &speed_1, &speed_2) == 6) {
+-+ int mb_total;
+-+
+-+ /* this line is printed when wodim writes on the fly */
+-+ wodim->priv->fifo = fifo;
+-+ wodim->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
+-+ wodim->priv->current_track_written = mb_written * 1048576;
+-+
+-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-+ gdouble speed;
+-+
+-+ /* we must ask the imager what is the total size */
+-+ brasero_imager_get_size (BRASERO_IMAGER (wodim->priv->track->contents.imager.obj),
+-+ &wodim->priv->tracks_total_bytes,
+-+ FALSE,
+-+ NULL);
+-+ mb_total = wodim->priv->tracks_total_bytes / 1048576;
+-+ speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
+-+ brasero_wodim_compute (wodim,
+-+ mb_written,
+-+ mb_total,
+-+ speed,
+-+ track);
+-+ }
+-+ else
+-+ brasero_job_action_changed (BRASERO_JOB (wodim),
+-+ BRASERO_BURN_ACTION_WRITING,
+-+ FALSE);
+-+
+-+ brasero_wodim_check_fifo (wodim, buf);
+-+ }
+-+ else if (sscanf (line, "Track %*d: %*s %d MB ", &mb_total) == 1) {
+-+ if (mb_total > 0) {
+-+ wodim->priv->tracks_total_bytes += mb_total * 1048576;
+-+ }
+-+ }
+-+ else if (strstr (line, "Sending CUE sheet")) {
+-+ brasero_job_action_changed (BRASERO_JOB (process),
+-+ BRASERO_BURN_ACTION_WRITING_CD_TEXT,
+-+ FALSE);
+-+ }
+-+ else if (g_str_has_prefix (line, "Re-load disk and hit <CR>")
+-+ || g_str_has_prefix (line, "send SIGUSR1 to continue")) {
+-+ /* NOTE: There seems to be a BUG somewhere when writing raw images
+-+ * with clone mode. After disc has been written and fixated wodim
+-+ * asks the media to be reloaded. So we simply ignore this message
+-+ * and returns that everything went well. Which is indeed the case */
+-+ if (brasero_job_get_current_action (BRASERO_JOB (process)) == BRASERO_BURN_ACTION_FIXATING) {
+-+ brasero_job_finished (BRASERO_JOB (process));
+-+ return BRASERO_BURN_OK;
+-+ }
+-+
+-+ /* This is not supposed to happen since we checked for the cd
+-+ before starting, but we try to handle it anyway, since mmc
+-+ profiling can fail. */
+-+ /* NOTE : nautilus_burn_recorder used to send sigusr1 or return */
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_RELOAD_MEDIA,
+-+ _("The media needs to be reloaded before being recorded")));
+-+ }
+-+ else if (g_str_has_prefix (line, "Fixating...")) {
+-+ brasero_job_progress_changed (BRASERO_JOB (process),
+-+ 0.98,
+-+ -1);
+-+ brasero_job_action_changed (BRASERO_JOB (process),
+-+ BRASERO_BURN_ACTION_FIXATING,
+-+ FALSE);
+-+ }
+-+ else if (g_str_has_prefix (line, "Last chance to quit, ")) {
+-+ brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
+-+ }
+-+ else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
+-+ || strstr (line, "Blanking entire disk")) {
+-+ brasero_job_action_changed (BRASERO_JOB (process),
+-+ BRASERO_BURN_ACTION_BLANKING,
+-+ FALSE);
+-+ }
+-+ else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) {
+-+ brasero_job_error (BRASERO_JOB (process),
+-+ g_error_new (BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("internal error")));
+-+ }
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_argv_record (BraseroWodim *wodim,
+-+ GPtrArray *argv,
+-+ GError **error)
+-+{
+-+ if (!wodim->priv->track)
+-+ return BRASERO_BURN_NOT_READY;
+-+
+-+ if (wodim->priv->immediate) {
+-+ g_ptr_array_add (argv, g_strdup ("-immed"));
+-+ g_ptr_array_add (argv, g_strdup_printf ("minbuf=%i", wodim->priv->minbuf));
+-+ }
+-+
+-+ if (wodim->priv->speed > 0) {
+-+ char *speed_str;
+-+
+-+ speed_str = g_strdup_printf ("speed=%d", wodim->priv->speed);
+-+ g_ptr_array_add (argv, speed_str);
+-+ }
+-+
+-+ if (wodim->priv->dao)
+-+ g_ptr_array_add (argv, g_strdup ("-dao"));
+-+ if (wodim->priv->overburn)
+-+ g_ptr_array_add (argv, g_strdup ("-overburn"));
+-+ if (wodim->priv->burnproof)
+-+ g_ptr_array_add (argv, g_strdup ("driveropts=burnfree"));
+-+ if (wodim->priv->multi)
+-+ g_ptr_array_add (argv, g_strdup ("-multi"));
+-+
+-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-+ BraseroTrackSourceType track_type;
+-+ BraseroBurnResult result;
+-+ BraseroImager *imager;
+-+ int buffer_size;
+-+ gint64 sectors;
+-+
+-+ imager = wodim->priv->track->contents.imager.obj;
+-+
+-+ /* we need to know what is the type of the track (audio / data) */
+-+ result = brasero_imager_get_track_type (imager, &track_type);
+-+ if (result != BRASERO_BURN_OK) {
+-+ g_set_error (error,
+-+ BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("imager doesn't seem to be ready"));
+-+ return BRASERO_BURN_ERR;
+-+ }
+-+
+-+ /* ask the size */
+-+ result = brasero_imager_get_size (imager, §ors, TRUE, error);
+-+ if (result != BRASERO_BURN_OK) {
+-+ if (!error)
+-+ g_set_error (error,
+-+ BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("imager doesn't seem to be ready"));
+-+ return BRASERO_BURN_ERR;
+-+ }
+-+
+-+ /* we create a buffer depending on the size
+-+ * buffer 4m> < 64m and is 1/25th of size otherwise */
+-+ buffer_size = sectors * 2352 / 1024 / 1024 / 25;
+-+ if (buffer_size > 32)
+-+ buffer_size = 32;
+-+ else if (buffer_size < 4)
+-+ buffer_size = 4;
+-+
+-+ g_ptr_array_add (argv, g_strdup_printf ("fs=%im", buffer_size));
+-+
+-+ if (track_type == BRASERO_TRACK_SOURCE_ISO
+-+ || track_type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
+-+ g_ptr_array_add (argv, g_strdup_printf ("tsize=%Lis", sectors));
+-+
+-+ g_ptr_array_add (argv, g_strdup ("-data"));
+-+ g_ptr_array_add (argv, g_strdup ("-nopad"));
+-+ g_ptr_array_add (argv, g_strdup ("-"));
+-+
+-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
+-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else if (track_type == BRASERO_TRACK_SOURCE_RAW) {
+-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-+ g_ptr_array_add (argv, g_strdup ("-raw96r"));
+-+ g_ptr_array_add (argv, g_strdup ("-clone"));
+-+
+-+ /* we need to generate the toc first */
+-+ if (result != BRASERO_BURN_OK)
+-+ return result;
+-+
+-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
+-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else if (track_type == BRASERO_TRACK_SOURCE_AUDIO) {
+-+ GSList *iter;
+-+
+-+ /* we need to get the inf first */
+-+ result = brasero_imager_set_output_type (imager,
+-+ BRASERO_TRACK_SOURCE_INF,
+-+ error);
+-+ if (result != BRASERO_BURN_OK)
+-+ return result;
+-+
+-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
+-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), TRUE);
+-+
+-+ result = brasero_imager_get_track (imager,
+-+ &wodim->priv->inf,
+-+ error);
+-+
+-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
+-+
+-+ if (result != BRASERO_BURN_OK)
+-+ return result;
+-+
+-+ result = brasero_imager_set_output_type (imager,
+-+ BRASERO_TRACK_SOURCE_AUDIO,
+-+ error);
+-+ if (result != BRASERO_BURN_OK)
+-+ return result;
+-+
+-+ /* now we set the rate of the slave slightly above the speed */
+-+ brasero_job_set_rate (BRASERO_JOB (imager),
+-+ (wodim->priv->speed + 1) * CDR_SPEED);
+-+
+-+ /* now set the rest of the arguments */
+-+ g_ptr_array_add (argv, g_strdup ("-dao"));
+-+ g_ptr_array_add (argv, g_strdup ("-audio"));
+-+ g_ptr_array_add (argv, g_strdup ("-useinfo"));
+-+ g_ptr_array_add (argv, g_strdup ("-text"));
+-+
+-+ for (iter = wodim->priv->inf->contents.inf.files; iter; iter = iter->next) {
+-+ gchar *arg;
+-+
+-+ arg = g_strdup (iter->data);
+-+ g_ptr_array_add (argv, arg);
+-+ }
+-+ }
+-+ else
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), TRUE);
+-+ }
+-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_AUDIO) {
+-+ GSList *iter;
+-+
+-+ /* CD-text cannot be written in tao mode (which is the default) */
+-+ g_ptr_array_add (argv, g_strdup ("-dao"));
+-+
+-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-+ g_ptr_array_add (argv, g_strdup ("-audio"));
+-+ g_ptr_array_add (argv, g_strdup ("-pad"));
+-+ g_ptr_array_add (argv, g_strdup ("-useinfo"));
+-+ g_ptr_array_add (argv, g_strdup ("-text"));
+-+
+-+ for (iter = wodim->priv->track->contents.audio.files; iter; iter = iter->next) {
+-+ gchar *arg;
+-+
+-+ arg = g_strdup (iter->data);
+-+ g_ptr_array_add (argv, arg);
+-+ }
+-+
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_ISO
+-+ || wodim->priv->track->type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
+-+ gchar *isopath;
+-+
+-+ isopath = brasero_track_source_get_iso_localpath (wodim->priv->track);
+-+ if (!isopath)
+-+ return BRASERO_BURN_ERR;
+-+
+-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-+ g_ptr_array_add (argv, g_strdup ("-data"));
+-+ g_ptr_array_add (argv, g_strdup ("-nopad"));
+-+ g_ptr_array_add (argv, isopath);
+-+
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_RAW) {
+-+ gchar *rawpath;
+-+
+-+ rawpath = brasero_track_source_get_raw_localpath (wodim->priv->track);
+-+ if (!rawpath)
+-+ return BRASERO_BURN_ERR;
+-+
+-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-+ g_ptr_array_add (argv, g_strdup ("-raw96r"));
+-+ g_ptr_array_add (argv, g_strdup ("-clone"));
+-+ g_ptr_array_add (argv, rawpath);
+-+
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_CUE) {
+-+ gchar *cue_str;
+-+ gchar *cuepath;
+-+
+-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
+-+ g_ptr_array_add (argv, g_strdup ("-dao"));
+-+
+-+ cuepath = brasero_track_source_get_cue_localpath (wodim->priv->track);
+-+ if (!cuepath)
+-+ return BRASERO_BURN_ERR;
+-+
+-+ cue_str = g_strdup_printf ("cuefile=%s", cuepath);
+-+ g_free (cuepath);
+-+
+-+ g_ptr_array_add (argv, cue_str);
+-+
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
+-+ }
+-+ else
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_argv_blank (BraseroWodim *wodim, GPtrArray *argv)
+-+{
+-+ char *blank_str;
+-+
+-+ blank_str = g_strdup_printf ("blank=%s", wodim->priv->blank_fast ? "fast" : "all");
+-+ g_ptr_array_add (argv, blank_str);
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_argv (BraseroProcess *process,
+-+ GPtrArray *argv,
+-+ gboolean has_master,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+ BraseroBurnResult result;
+-+ char *dev_str;
+-+
+-+ wodim = BRASERO_WODIM (process);
+-+
+-+ if (has_master)
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ if (!wodim->priv->drive)
+-+ return BRASERO_BURN_NOT_READY;
+-+
+-+ g_ptr_array_add (argv, g_strdup ("wodim"));
+-+ g_ptr_array_add (argv, g_strdup ("-v"));
+-+
+-+ dev_str = g_strdup_printf ("dev=%s",
+-+ NCB_DRIVE_GET_DEVICE (wodim->priv->drive));
+-+
+-+ g_ptr_array_add (argv, dev_str);
+-+
+-+ if (wodim->priv->dummy)
+-+ g_ptr_array_add (argv, g_strdup ("-dummy"));
+-+
+-+ if (wodim->priv->nograce)
+-+ g_ptr_array_add (argv, g_strdup ("gracetime=0"));
+-+
+-+ if (wodim->priv->action == BRASERO_WODIM_ACTION_RECORD)
+-+ result = brasero_wodim_set_argv_record (wodim, argv, error);
+-+ else if (wodim->priv->action == BRASERO_WODIM_ACTION_BLANK)
+-+ result = brasero_wodim_set_argv_blank (wodim, argv);
+-+ else
+-+ return BRASERO_BURN_NOT_READY;
+-+
+-+ if (result == BRASERO_BURN_OK || result == BRASERO_BURN_CANCEL) {
+-+ brasero_job_action_changed (BRASERO_JOB (wodim),
+-+ BRASERO_BURN_ACTION_PREPARING,
+-+ FALSE);
+-+ brasero_job_progress_changed (BRASERO_JOB (wodim), 0, -1);
+-+ }
+-+
+-+ return result;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_drive (BraseroRecorder *recorder,
+-+ NautilusBurnDrive *drive,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+ NautilusBurnMediaType media;
+-+
+-+ media = nautilus_burn_drive_get_media_type (drive);
+-+ if (media > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ wodim = BRASERO_WODIM (recorder);
+-+
+-+ if (wodim->priv->drive) {
+-+ nautilus_burn_drive_unref (wodim->priv->drive);
+-+ wodim->priv->drive = NULL;
+-+ }
+-+
+-+ wodim->priv->drive = drive;
+-+ nautilus_burn_drive_ref (drive);
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_source (BraseroJob *job,
+-+ const BraseroTrackSource *track,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ wodim = BRASERO_WODIM (job);
+-+
+-+ if (track->type != BRASERO_TRACK_SOURCE_AUDIO
+-+ && track->type != BRASERO_TRACK_SOURCE_CUE
+-+ && track->type != BRASERO_TRACK_SOURCE_RAW
+-+ && track->type != BRASERO_TRACK_SOURCE_ISO
+-+ && track->type != BRASERO_TRACK_SOURCE_ISO_JOLIET
+-+ && track->type != BRASERO_TRACK_SOURCE_IMAGER)
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ if (wodim->priv->inf) {
+-+ brasero_track_source_free (wodim->priv->inf);
+-+ wodim->priv->inf = NULL;
+-+ }
+-+
+-+ if (wodim->priv->track)
+-+ brasero_track_source_free (wodim->priv->track);
+-+
+-+ wodim->priv->track = brasero_track_source_copy (track);
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_flags (BraseroRecorder *recorder,
+-+ BraseroRecorderFlag flags,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ wodim = BRASERO_WODIM (recorder);
+-+
+-+ wodim->priv->dummy = (flags & BRASERO_RECORDER_FLAG_DUMMY) != 0;
+-+ wodim->priv->dao = (flags & BRASERO_RECORDER_FLAG_DAO) != 0;
+-+ wodim->priv->nograce = (flags & BRASERO_RECORDER_FLAG_NOGRACE) != 0;
+-+ wodim->priv->burnproof = (flags & BRASERO_RECORDER_FLAG_BURNPROOF) != 0;
+-+ wodim->priv->overburn = (flags & BRASERO_RECORDER_FLAG_OVERBURN) != 0;
+-+ wodim->priv->blank_fast = (flags & BRASERO_RECORDER_FLAG_FAST_BLANK) != 0;
+-+ wodim->priv->multi = (flags & BRASERO_RECORDER_FLAG_MULTI) != 0;
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_set_rate (BraseroJob *job,
+-+ gint64 speed)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ if (brasero_job_is_running (job))
+-+ return BRASERO_BURN_RUNNING;
+-+
+-+ wodim = BRASERO_WODIM (job);
+-+ wodim->priv->speed = speed / CDR_SPEED;
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_blank (BraseroRecorder *recorder,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+ BraseroBurnResult result;
+-+
+-+ wodim = BRASERO_WODIM (recorder);
+-+
+-+ if (!nautilus_burn_drive_can_rewrite (wodim->priv->drive)) {
+-+ g_set_error (error,
+-+ BRASERO_BURN_ERROR,
+-+ BRASERO_BURN_ERROR_GENERAL,
+-+ _("the drive cannot rewrite CDs or DVDs"));
+-+ return BRASERO_BURN_ERR;
+-+ }
+-+
+-+ wodim->priv->action = BRASERO_WODIM_ACTION_BLANK;
+-+ result = brasero_job_run (BRASERO_JOB (wodim), error);
+-+ wodim->priv->action = BRASERO_WODIM_ACTION_NONE;
+-+
+-+ brasero_job_action_changed (BRASERO_JOB (wodim),
+-+ BRASERO_BURN_ACTION_NONE,
+-+ FALSE);
+-+
+-+ return result;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_record (BraseroRecorder *recorder,
+-+ GError **error)
+-+{
+-+ BraseroWodim *wodim;
+-+ BraseroBurnResult result;
+-+
+-+ wodim = BRASERO_WODIM (recorder);
+-+
+-+ if (!wodim->priv->track)
+-+ return BRASERO_BURN_NOT_READY;
+-+
+-+ wodim->priv->action = BRASERO_WODIM_ACTION_RECORD;
+-+
+-+ /* set as slave if track is an imager (on the fly burning) */
+-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
+-+ BraseroJob *slave;
+-+
+-+ slave = BRASERO_JOB (wodim->priv->track->contents.imager.obj);
+-+ brasero_job_set_slave (BRASERO_JOB (wodim), slave);
+-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), TRUE);
+-+ }
+-+ else
+-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
+-+
+-+ result = brasero_job_run (BRASERO_JOB (wodim), error);
+-+ brasero_job_set_slave (BRASERO_JOB (wodim), NULL);
+-+ wodim->priv->action = BRASERO_WODIM_ACTION_NONE;
+-+ return result;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_rate (BraseroJob *job,
+-+ gint64 *rate)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ wodim = BRASERO_WODIM (job);
+-+
+-+ if (rate)
+-+ *rate = wodim->priv->cur_speed;
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_written (BraseroJob *job,
+-+ gint64 *written)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ wodim = BRASERO_WODIM (job);
+-+
+-+ if (written)
+-+ *written = wodim->priv->b_written;
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_fifo (BraseroRecorder *recorder,
+-+ gint *fifo)
+-+{
+-+ BraseroWodim *wodim;
+-+
+-+ wodim = BRASERO_WODIM (recorder);
+-+
+-+ if (fifo)
+-+ *fifo = wodim->priv->fifo;
+-+
+-+ return BRASERO_BURN_OK;
+-+}
+-+
+-+static BraseroBurnResult
+-+brasero_wodim_get_action_string (BraseroJob *job,
+-+ BraseroBurnAction action,
+-+ char **string)
+-+{
+-+ job = brasero_job_get_slave (job);
+-+ if (!job)
+-+ return BRASERO_BURN_NOT_SUPPORTED;
+-+
+-+ return brasero_job_get_action_string (job, action, string);
+-+}
+-+
+-+void
+-+brasero_wodim_set_immediate (BraseroWodim *wodim, gint minbuf)
+-+{
+-+ g_return_if_fail (BRASERO_IS_WODIM (wodim));
+-+
+-+ if (minbuf > 95 || minbuf < 25)
+-+ minbuf = 30;
+-+
+-+ wodim->priv->immediate = 1;
+-+ wodim->priv->minbuf = minbuf;
+-+}
+-diff -urN brasero-0.4.4.orig/src/burn-wodim.h brasero-0.4.4/src/burn-wodim.h
+---- brasero-0.4.4.orig/src/burn-wodim.h 1970-01-01 01:00:00.000000000 +0100
+-+++ brasero-0.4.4/src/burn-wodim.h 2006-10-23 10:41:18.000000000 +0200
+-@@ -0,0 +1,59 @@
+-+/***************************************************************************
+-+ * wodim.h
+-+ *
+-+ * dim jan 22 15:22:52 2006
+-+ * Copyright 2006 Rouquier Philippe
+-+ * brasero-app at wanadoo.fr
+-+ ***************************************************************************/
+-+
+-+/*
+-+ * 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 WODIM_H
+-+#define WODIM_H
+-+
+-+#include <glib.h>
+-+#include <glib-object.h>
+-+
+-+#include "burn-process.h"
+-+
+-+G_BEGIN_DECLS
+-+
+-+#define BRASERO_TYPE_WODIM (brasero_wodim_get_type ())
+-+#define BRASERO_WODIM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), BRASERO_TYPE_WODIM, BraseroWodim))
+-+#define BRASERO_WODIM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), BRASERO_TYPE_WODIM, BraseroWodimClass))
+-+#define BRASERO_IS_WODIM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), BRASERO_TYPE_WODIM))
+-+#define BRASERO_IS_WODIM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), BRASERO_TYPE_WODIM))
+-+#define BRASERO_WODIM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), BRASERO_TYPE_WODIM, BraseroWodimClass))
+-+
+-+typedef struct BraseroWodimPrivate BraseroWodimPrivate;
+-+
+-+typedef struct {
+-+ BraseroProcess parent;
+-+ BraseroWodimPrivate *priv;
+-+} BraseroWodim;
+-+
+-+typedef struct {
+-+ BraseroProcessClass parent_class;
+-+} BraseroWodimClass;
+-+
+-+GType brasero_wodim_get_type ();
+-+BraseroWodim *brasero_wodim_new ();
+-+
+-+void
+-+brasero_wodim_set_immediate (BraseroWodim *wodim, gint minbuf);
+-+
+-+#endif /* WODIM_H */
+-diff -urN brasero-0.4.4.orig/src/Makefile.am brasero-0.4.4/src/Makefile.am
+---- brasero-0.4.4.orig/src/Makefile.am 2006-09-07 17:47:40.000000000 +0200
+-+++ brasero-0.4.4/src/Makefile.am 2006-10-23 10:42:15.000000000 +0200
+-@@ -103,8 +103,8 @@
+- burn-imager.h \
+- burn-mkisofs.c \
+- burn-mkisofs.h \
+-- burn-cdrecord.c \
+-- burn-cdrecord.h \
+-+ burn-wodim.c \
+-+ burn-wodim.h \
+- burn-cdrdao.c \
+- burn-cdrdao.h \
+- burn-growisofs.c \
+-diff -urN brasero-0.4.4.orig/src/Makefile.in brasero-0.4.4/src/Makefile.in
+---- brasero-0.4.4.orig/src/Makefile.in 2006-09-07 17:48:00.000000000 +0200
+-+++ brasero-0.4.4/src/Makefile.in 2006-10-23 10:42:08.000000000 +0200
+-@@ -64,7 +64,7 @@
+- eggtrayicon.$(OBJEXT) tray.$(OBJEXT) burn.$(OBJEXT) \
+- burn-job.$(OBJEXT) burn-process.$(OBJEXT) \
+- burn-recorder.$(OBJEXT) burn-imager.$(OBJEXT) \
+-- burn-mkisofs.$(OBJEXT) burn-cdrecord.$(OBJEXT) \
+-+ burn-mkisofs.$(OBJEXT) burn-wodim.$(OBJEXT) \
+- burn-cdrdao.$(OBJEXT) burn-growisofs.$(OBJEXT) \
+- burn-readcd.$(OBJEXT) burn-mkisofs-base.$(OBJEXT) \
+- burn-dvd-rw-format.$(OBJEXT) burn-transcode.$(OBJEXT) \
+-@@ -367,8 +367,8 @@
+- burn-imager.h \
+- burn-mkisofs.c \
+- burn-mkisofs.h \
+-- burn-cdrecord.c \
+-- burn-cdrecord.h \
+-+ burn-wodim.c \
+-+ burn-wodim.h \
+- burn-cdrdao.c \
+- burn-cdrdao.h \
+- burn-growisofs.c \
+-@@ -486,7 +486,7 @@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-basics.Po at am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-caps.Po at am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-cdrdao.Po at am__quote@
+-- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-cdrecord.Po at am__quote@
+-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-wodim.Po at am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-common.Po at am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-dialog.Po at am__quote@
+- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-dvd-rw-format.Po at am__quote@
+diff -Nur brasero-0.5.2-ORIG/src/burn-cdrecord.c brasero-0.5.2/src/burn-cdrecord.c
+--- brasero-0.5.2-ORIG/src/burn-cdrecord.c 2007-06-01 17:07:38.000000000 -0300
++++ brasero-0.5.2/src/burn-cdrecord.c 2007-06-01 17:24:03.000000000 -0300
+@@ -1102,7 +1102,7 @@
+ if (!cdrecord->priv->drive)
+ BRASERO_JOB_NOT_READY (cdrecord);
- /* FIXME: extension
-- gboolean cdrecord_02 => no on the fly
-- gboolean cdrecord_02_1 => no the fly for audio
-+ gboolean wodim_02 => no on the fly
-+ gboolean wodim_02_1 => no the fly for audio
- gboolean dvdrecord
- */
-
-@@ -176,7 +176,7 @@
+- g_ptr_array_add (argv, g_strdup ("cdrecord"));
++ g_ptr_array_add (argv, g_strdup ("wodim"));
+ g_ptr_array_add (argv, g_strdup ("-v"));
- /* This is for a bug in fedora 5 that prevents from sending
- * SCSI commands as a normal user through cdrdao. There is a
-- * fallback fortunately with cdrecord and raw images but no
-+ * fallback fortunately with wodim and raw images but no
- * on_the_fly burning */
- caps->priv->cdrdao_disabled = 1;
-
-@@ -489,10 +489,10 @@
- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_GROWISOFS, NULL));
- else
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- }
- else if (BRASERO_IS_TRANSCODE (source->contents.imager.obj)) {
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- }
- else if (BRASERO_IS_GROWISOFS (source->contents.imager.obj)) {
- obj = BRASERO_RECORDER (source->contents.imager.obj);
-@@ -508,7 +508,7 @@
- g_object_ref (obj);
- }
- else if (BRASERO_IS_MKISOFS (source->contents.imager.obj))
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- else
- return BRASERO_BURN_NOT_SUPPORTED;
-
-@@ -518,7 +518,7 @@
- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
- return BRASERO_BURN_NOT_SUPPORTED;
-
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- break;
-
- case BRASERO_TRACK_SOURCE_ISO:
-@@ -526,27 +526,27 @@
- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_GROWISOFS, NULL));
- else
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- break;
-
- case BRASERO_TRACK_SOURCE_CUE:
- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
- return BRASERO_BURN_NOT_SUPPORTED;
-
-- /* here we have to solution either cdrdao or cdrecord but we'll
-+ /* here we have to solution either cdrdao or wodim but we'll
- * use cdrdao only as a fallback except for on the fly burning
- * see above in IMAGERS */
- if (!caps->priv->cdrdao_disabled)
- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CDRDAO, NULL));
- else
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- break;
-
- case BRASERO_TRACK_SOURCE_RAW:
- if (media_type > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
- return BRASERO_BURN_NOT_SUPPORTED;
-
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- break;
-
- default:
-@@ -554,8 +554,8 @@
- }
-
- /* This is for certain type of screwed up setup */
-- if (BRASERO_IS_CD_RECORD (obj) && caps->priv->immediate)
-- brasero_cdrecord_set_immediate (BRASERO_CD_RECORD (obj),
-+ if (BRASERO_IS_WODIM (obj) && caps->priv->immediate)
-+ brasero_wodim_set_immediate (BRASERO_WODIM (obj),
- caps->priv->minbuf);
-
- *recorder = obj;
-@@ -584,7 +584,7 @@
- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_DVD_RW_FORMAT, NULL));
- }
- else if (type == NAUTILUS_BURN_MEDIA_TYPE_CDRW)
-- obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_CD_RECORD, NULL));
-+ obj = BRASERO_RECORDER (g_object_new (BRASERO_TYPE_WODIM, NULL));
- else
- return BRASERO_BURN_NOT_SUPPORTED;
-
-@@ -690,7 +690,7 @@
- if (type <= NAUTILUS_BURN_MEDIA_TYPE_CDRW) {
- /* with CDs there are two possible default:
- * - if cdrdao is working => copy on the fly
-- * - readcd -clone => image => cdrecord */
-+ * - readcd -clone => image => wodim */
- if (!caps->priv->cdrdao_disabled)
- return BRASERO_TRACK_SOURCE_CUE;
- else
-diff -urN brasero-0.4.4.orig/src/burn-cdrecord.c brasero-0.4.4/src/burn-cdrecord.c
---- brasero-0.4.4.orig/src/burn-cdrecord.c 2006-09-07 17:47:40.000000000 +0200
-+++ brasero-0.4.4/src/burn-cdrecord.c 1970-01-01 01:00:00.000000000 +0100
-@@ -1,1042 +0,0 @@
--/***************************************************************************
-- * cdrecord.c
-- *
-- * dim jan 22 15:22:52 2006
-- * Copyright 2006 Rouquier Philippe
-- * brasero-app at wanadoo.fr
-- ***************************************************************************/
--
--/*
-- * 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
--
--#include <string.h>
--#include <math.h>
--
--#include <glib.h>
--#include <glib-object.h>
--#include <glib/gi18n-lib.h>
--#include <glib/gstdio.h>
--
--#include <nautilus-burn-drive.h>
--
--#include "burn-basics.h"
--#include "burn-common.h"
--#include "burn-cdrecord.h"
--#include "burn-process.h"
--#include "burn-recorder.h"
--#include "burn-imager.h"
--#include "brasero-ncb.h"
--
--static void brasero_cdrecord_class_init (BraseroCDRecordClass *klass);
--static void brasero_cdrecord_init (BraseroCDRecord *sp);
--static void brasero_cdrecord_finalize (GObject *object);
--static void brasero_cdrecord_iface_init_record (BraseroRecorderIFace *iface);
--
--static BraseroBurnResult
--brasero_cdrecord_stderr_read (BraseroProcess *process,
-- const char *line);
--static BraseroBurnResult
--brasero_cdrecord_stdout_read (BraseroProcess *process,
-- const char *line);
--static BraseroBurnResult
--brasero_cdrecord_set_argv (BraseroProcess *process,
-- GPtrArray *argv,
-- gboolean has_master,
-- GError **error);
--
--static BraseroBurnResult
--brasero_cdrecord_get_rate (BraseroJob *job,
-- gint64 *rate);
--static BraseroBurnResult
--brasero_cdrecord_get_written (BraseroJob *job,
-- gint64 *written);
--static BraseroBurnResult
--brasero_cdrecord_get_fifo (BraseroRecorder *recorder,
-- gint *fifo);
--
--static BraseroBurnResult
--brasero_cdrecord_set_drive (BraseroRecorder *recorder,
-- NautilusBurnDrive *drive,
-- GError **error);
--static BraseroBurnResult
--brasero_cdrecord_set_source (BraseroJob *job,
-- const BraseroTrackSource *track,
-- GError **error);
--static BraseroBurnResult
--brasero_cdrecord_set_flags (BraseroRecorder *recorder,
-- BraseroRecorderFlag flags,
-- GError **error);
--static BraseroBurnResult
--brasero_cdrecord_set_rate (BraseroJob *job,
-- gint64 speed);
--
--static BraseroBurnResult
--brasero_cdrecord_record (BraseroRecorder *recorder,
-- GError **error);
--static BraseroBurnResult
--brasero_cdrecord_blank (BraseroRecorder *recorder,
-- GError **error);
--
--static BraseroBurnResult
--brasero_cdrecord_get_action_string (BraseroJob *job,
-- BraseroBurnAction action,
-- char **string);
--
--typedef enum {
-- BRASERO_CD_RECORD_ACTION_NONE,
-- BRASERO_CD_RECORD_ACTION_BLANK,
-- BRASERO_CD_RECORD_ACTION_RECORD
--} BraseroCDRecordAction;
--
--struct BraseroCDRecordPrivate {
-- BraseroCDRecordAction action;
--
-- NautilusBurnDrive *drive;
-- BraseroTrackSource *track;
-- BraseroTrackSource *inf;
-- int speed;
--
-- gint64 current_track_end_pos;
-- gint64 current_track_written;
-- gint64 tracks_total_bytes;
-- gint64 b_written;
--
-- int current_track_num;
-- int track_count;
--
-- int fifo;
-- gint64 cur_speed;
--
-- int minbuf;
--
-- int dao:1;
-- int dummy:1;
-- int multi:1;
-- int nograce:1;
-- int overburn:1;
-- int immediate:1;
-- int burnproof:1;
--
-- int blank_fast:1;
--};
--
--static GObjectClass *parent_class = NULL;
--
--GType
--brasero_cdrecord_get_type ()
--{
-- static GType type = 0;
--
-- if(type == 0) {
-- static const GTypeInfo our_info = {
-- sizeof (BraseroCDRecordClass),
-- NULL,
-- NULL,
-- (GClassInitFunc)brasero_cdrecord_class_init,
-- NULL,
-- NULL,
-- sizeof (BraseroCDRecord),
-- 0,
-- (GInstanceInitFunc)brasero_cdrecord_init,
-- };
--
-- static const GInterfaceInfo recorder_info =
-- {
-- (GInterfaceInitFunc) brasero_cdrecord_iface_init_record,
-- NULL,
-- NULL
-- };
--
-- type = g_type_register_static (BRASERO_TYPE_PROCESS,
-- "BraseroCDRecord",
-- &our_info,
-- 0);
-- g_type_add_interface_static (type,
-- BRASERO_TYPE_RECORDER,
-- &recorder_info);
-- }
--
-- return type;
--}
--
--static void
--brasero_cdrecord_class_init (BraseroCDRecordClass *klass)
--{
-- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-- BraseroJobClass *job_class = BRASERO_JOB_CLASS (klass);
-- BraseroProcessClass *process_class = BRASERO_PROCESS_CLASS (klass);
--
-- parent_class = g_type_class_peek_parent(klass);
-- object_class->finalize = brasero_cdrecord_finalize;
--
-- job_class->get_action_string = brasero_cdrecord_get_action_string;
-- job_class->get_written = brasero_cdrecord_get_written;
-- job_class->set_source = brasero_cdrecord_set_source;
-- job_class->set_rate = brasero_cdrecord_set_rate;
-- job_class->get_rate = brasero_cdrecord_get_rate;
--
-- process_class->stderr_func = brasero_cdrecord_stderr_read;
-- process_class->stdout_func = brasero_cdrecord_stdout_read;
-- process_class->set_argv = brasero_cdrecord_set_argv;
--}
--
--static void
--brasero_cdrecord_iface_init_record (BraseroRecorderIFace *iface)
--{
-- iface->blank = brasero_cdrecord_blank;
-- iface->record = brasero_cdrecord_record;
-- iface->set_drive = brasero_cdrecord_set_drive;
-- iface->set_flags = brasero_cdrecord_set_flags;
-- iface->get_fifo = brasero_cdrecord_get_fifo;
--}
--
--static void
--brasero_cdrecord_init (BraseroCDRecord *obj)
--{
-- obj->priv = g_new0 (BraseroCDRecordPrivate, 1);
--}
--
--static void
--brasero_cdrecord_finalize (GObject *object)
--{
-- BraseroCDRecord *cobj;
-- cobj = BRASERO_CD_RECORD(object);
--
-- if (cobj->priv->drive) {
-- nautilus_burn_drive_unref (cobj->priv->drive);
-- cobj->priv->drive = NULL;
-- }
--
-- if (cobj->priv->track) {
-- brasero_track_source_free (cobj->priv->track);
-- cobj->priv->track = NULL;
-- }
--
-- if (cobj->priv->inf) {
-- brasero_track_source_free (cobj->priv->inf);
-- cobj->priv->inf = NULL;
-- }
--
-- g_free(cobj->priv);
-- G_OBJECT_CLASS(parent_class)->finalize(object);
--}
--
--BraseroCDRecord *
--brasero_cdrecord_new ()
--{
-- BraseroCDRecord *obj;
--
-- obj = BRASERO_CD_RECORD(g_object_new(BRASERO_TYPE_CD_RECORD, NULL));
--
-- return obj;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_stderr_read (BraseroProcess *process, const char *line)
--{
-- BraseroCDRecord *cdrecord = BRASERO_CD_RECORD (process);
--
-- if (strstr (line, "Cannot open SCSI driver.")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_PERMISSION,
-- _("You don't seem to have the required permission to use this drive")));
-- }
-- else if (strstr (line, "No disk / Wrong disk!") != NULL) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_MEDIA_NONE,
-- _("There doesn't seem to be a disc in the drive")));
-- }
-- else if (strstr (line, "This means that we are checking recorded media.") != NULL) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_MEDIA_NOT_WRITABLE,
-- _("The CD has already been recorded")));
-- }
-- else if (strstr (line, "Cannot blank disk, aborting.") != NULL) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_MEDIA_NOT_REWRITABLE,
-- _("The CD cannot be blanked")));
-- }
-- else if (!cdrecord->priv->overburn
-- && strstr (line, "Data may not fit on current disk")) {
-- /* we don't error out if overburn was chosen */
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_MEDIA_SPACE,
-- _("The files selected did not fit on the CD")));
-- }
-- else if (strstr (line ,"cdrecord: A write error occured")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("an unknown error occured.")));
-- /* FIXME: future message if overburn is activated.
-- * a write error occured which was likely due to overburning the
-- * disc */
-- }
-- else if (strstr (line, "Inappropriate audio coding")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
-- _("All audio files must be stereo, 16-bit digital audio with 44100Hz samples")));
-- }
-- else if (strstr (line, "cannot write medium - incompatible format") != NULL) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
-- _("The image does not seem to be a proper iso9660 file system")));
-- }
-- else if (strstr (line, "DMA speed too slow") != NULL) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_SLOW_DMA,
-- _("The system is too slow to write the CD at this speed. Try a lower speed")));
-- }
-- else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_SCSI_IOCTL,
-- _("You don't seem to have the required permission to use this drive")));
-- }
-- else if (strstr (line, "Device or resource busy")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_BUSY_DRIVE,
-- _("The drive seems to be busy (maybe check you have proper permissions to use it)")));
-- }
-- else if (strstr (line, "Illegal write mode for this drive")) {
-- /* NOTE : when it happened I had to unlock the
-- * drive with cdrdao and eject it. Should we ? */
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_BUSY_DRIVE,
-- _("The drive seems to be busy (maybe you should reload the media)")));
-- }
-- else if (strstr (line, "cdrecord: No such file or directory. Cannot open")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("the image file cannot be found")));
-- }
-- else if (strstr (line, "Bad file descriptor. read error on input file")
-- || strstr (line, "No tracks specified. Need at least one.")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("internal error")));
-- }
-- else if (strstr (line, "Could not write Lead-in")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("the cd information could not be written")));
-- }
-- else if (strstr (line, "Cannot fixate disk")) {
-- /* FIXME: replace error message with
-- * "the disc could not be closed" */
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("internal error")));
-- }
--
-- return BRASERO_BURN_OK;
--}
--
--static void
--brasero_cdrecord_check_fifo (BraseroCDRecord *cdrecord, int buf)
--{
-- BraseroJob *slave;
-- gint64 rate = (cdrecord->priv->speed + 1) * CDR_SPEED;
--
-- slave = brasero_job_get_slave (BRASERO_JOB (cdrecord));
-- if (!slave)
-- return;
--
-- if (cdrecord->priv->fifo < 50) {
-- /* we try to raise the rate */
-- rate = (cdrecord->priv->speed * 2) * CDR_SPEED;
-- }
-- else if (cdrecord->priv->fifo > 95) {
-- /* we try to lower the rate */
-- if (buf < 90)
-- rate = (cdrecord->priv->speed * 1.5) * CDR_SPEED;
-- }
--
-- brasero_job_debug_message (BRASERO_JOB (cdrecord),
-- "setting rate to %" G_GINT64_FORMAT,
-- rate);
-- brasero_job_set_rate (slave, rate);
--}
--
--static void
--brasero_cdrecord_compute (BraseroCDRecord *cdrecord,
-- int mb_written,
-- int mb_total,
-- gdouble speed,
-- int track_num)
--{
-- double percent;
-- gint64 bytes;
-- gint64 this_remain;
-- gint64 total;
-- long secs;
--
-- if (cdrecord->priv->tracks_total_bytes > 0)
-- total = cdrecord->priv->tracks_total_bytes;
-- else
-- total = mb_total * 1048576;
--
-- if (track_num > cdrecord->priv->current_track_num) {
-- cdrecord->priv->current_track_num = track_num;
-- cdrecord->priv->current_track_end_pos += mb_total * 1048576;
-- }
--
-- this_remain = (mb_total - mb_written) * 1048576;
-- bytes = (total - cdrecord->priv->current_track_end_pos) + this_remain;
-- cdrecord->priv->b_written = total - bytes;
--
-- secs = brasero_burn_common_compute_time_remaining (bytes, (double) speed * CDR_SPEED);
--
-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
-- BRASERO_BURN_ACTION_WRITING,
-- FALSE);
--
-- if (cdrecord->priv->tracks_total_bytes > 0) {
-- percent = 0.98 * (1.0 - (double) bytes / (double) cdrecord->priv->tracks_total_bytes);
-- }
-- else {
-- percent = 0.98 * ((double) ((track_num - 1) / (double)cdrecord->priv->track_count)
-- + ((double)mb_written / mb_total) / (double)cdrecord->priv->track_count);
-- }
--
-- brasero_job_progress_changed (BRASERO_JOB (cdrecord), percent, secs);
--}
--
--static BraseroBurnResult
--brasero_cdrecord_stdout_read (BraseroProcess *process, const char *line)
--{
-- guint track;
-- guint speed_1, speed_2;
-- BraseroCDRecord *cdrecord;
-- int mb_written = 0, mb_total = 0, fifo = 0, buf = 0;
--
-- cdrecord = BRASERO_CD_RECORD (process);
--
-- if (sscanf (line, "Track %2u: %d of %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
-- &track, &mb_written, &mb_total, &fifo, &buf, &speed_1, &speed_2) == 7) {
-- gdouble speed;
--
-- cdrecord->priv->fifo = fifo;
-- cdrecord->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
--
-- cdrecord->priv->current_track_written = mb_written * 1048576;
-- speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
-- brasero_cdrecord_compute (cdrecord,
-- mb_written,
-- mb_total,
-- speed,
-- track);
--
-- brasero_cdrecord_check_fifo (cdrecord, buf);
-- }
-- else if (sscanf (line, "Track %2u: %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
-- &track, &mb_written, &fifo, &buf, &speed_1, &speed_2) == 6) {
-- int mb_total;
--
-- /* this line is printed when cdrecord writes on the fly */
-- cdrecord->priv->fifo = fifo;
-- cdrecord->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
-- cdrecord->priv->current_track_written = mb_written * 1048576;
--
-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-- gdouble speed;
--
-- /* we must ask the imager what is the total size */
-- brasero_imager_get_size (BRASERO_IMAGER (cdrecord->priv->track->contents.imager.obj),
-- &cdrecord->priv->tracks_total_bytes,
-- FALSE,
-- NULL);
-- mb_total = cdrecord->priv->tracks_total_bytes / 1048576;
-- speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
-- brasero_cdrecord_compute (cdrecord,
-- mb_written,
-- mb_total,
-- speed,
-- track);
-- }
-- else
-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
-- BRASERO_BURN_ACTION_WRITING,
-- FALSE);
--
-- brasero_cdrecord_check_fifo (cdrecord, buf);
-- }
-- else if (sscanf (line, "Track %*d: %*s %d MB ", &mb_total) == 1) {
-- if (mb_total > 0) {
-- cdrecord->priv->tracks_total_bytes += mb_total * 1048576;
-- }
-- }
-- else if (strstr (line, "Sending CUE sheet")) {
-- brasero_job_action_changed (BRASERO_JOB (process),
-- BRASERO_BURN_ACTION_WRITING_CD_TEXT,
-- FALSE);
-- }
-- else if (g_str_has_prefix (line, "Re-load disk and hit <CR>")
-- || g_str_has_prefix (line, "send SIGUSR1 to continue")) {
-- /* NOTE: There seems to be a BUG somewhere when writing raw images
-- * with clone mode. After disc has been written and fixated cdrecord
-- * asks the media to be reloaded. So we simply ignore this message
-- * and returns that everything went well. Which is indeed the case */
-- if (brasero_job_get_current_action (BRASERO_JOB (process)) == BRASERO_BURN_ACTION_FIXATING) {
-- brasero_job_finished (BRASERO_JOB (process));
-- return BRASERO_BURN_OK;
-- }
--
-- /* This is not supposed to happen since we checked for the cd
-- before starting, but we try to handle it anyway, since mmc
-- profiling can fail. */
-- /* NOTE : nautilus_burn_recorder used to send sigusr1 or return */
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_RELOAD_MEDIA,
-- _("The media needs to be reloaded before being recorded")));
-- }
-- else if (g_str_has_prefix (line, "Fixating...")) {
-- brasero_job_progress_changed (BRASERO_JOB (process),
-- 0.98,
-- -1);
-- brasero_job_action_changed (BRASERO_JOB (process),
-- BRASERO_BURN_ACTION_FIXATING,
-- FALSE);
-- }
-- else if (g_str_has_prefix (line, "Last chance to quit, ")) {
-- brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
-- }
-- else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
-- || strstr (line, "Blanking entire disk")) {
-- brasero_job_action_changed (BRASERO_JOB (process),
-- BRASERO_BURN_ACTION_BLANKING,
-- FALSE);
-- }
-- else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) {
-- brasero_job_error (BRASERO_JOB (process),
-- g_error_new (BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("internal error")));
-- }
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_argv_record (BraseroCDRecord *cdrecord,
-- GPtrArray *argv,
-- GError **error)
--{
-- if (!cdrecord->priv->track)
-- return BRASERO_BURN_NOT_READY;
--
-- if (cdrecord->priv->immediate) {
-- g_ptr_array_add (argv, g_strdup ("-immed"));
-- g_ptr_array_add (argv, g_strdup_printf ("minbuf=%i", cdrecord->priv->minbuf));
-- }
--
-- if (cdrecord->priv->speed > 0) {
-- char *speed_str;
--
-- speed_str = g_strdup_printf ("speed=%d", cdrecord->priv->speed);
-- g_ptr_array_add (argv, speed_str);
-- }
--
-- if (cdrecord->priv->dao)
-- g_ptr_array_add (argv, g_strdup ("-dao"));
-- if (cdrecord->priv->overburn)
-- g_ptr_array_add (argv, g_strdup ("-overburn"));
-- if (cdrecord->priv->burnproof)
-- g_ptr_array_add (argv, g_strdup ("driveropts=burnfree"));
-- if (cdrecord->priv->multi)
-- g_ptr_array_add (argv, g_strdup ("-multi"));
--
-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-- BraseroTrackSourceType track_type;
-- BraseroBurnResult result;
-- BraseroImager *imager;
-- int buffer_size;
-- gint64 sectors;
--
-- imager = cdrecord->priv->track->contents.imager.obj;
--
-- /* we need to know what is the type of the track (audio / data) */
-- result = brasero_imager_get_track_type (imager, &track_type);
-- if (result != BRASERO_BURN_OK) {
-- g_set_error (error,
-- BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("imager doesn't seem to be ready"));
-- return BRASERO_BURN_ERR;
-- }
--
-- /* ask the size */
-- result = brasero_imager_get_size (imager, §ors, TRUE, error);
-- if (result != BRASERO_BURN_OK) {
-- if (!error)
-- g_set_error (error,
-- BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("imager doesn't seem to be ready"));
-- return BRASERO_BURN_ERR;
-- }
--
-- /* we create a buffer depending on the size
-- * buffer 4m> < 64m and is 1/25th of size otherwise */
-- buffer_size = sectors * 2352 / 1024 / 1024 / 25;
-- if (buffer_size > 32)
-- buffer_size = 32;
-- else if (buffer_size < 4)
-- buffer_size = 4;
--
-- g_ptr_array_add (argv, g_strdup_printf ("fs=%im", buffer_size));
--
-- if (track_type == BRASERO_TRACK_SOURCE_ISO
-- || track_type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
-- g_ptr_array_add (argv, g_strdup_printf ("tsize=%Lis", sectors));
--
-- g_ptr_array_add (argv, g_strdup ("-data"));
-- g_ptr_array_add (argv, g_strdup ("-nopad"));
-- g_ptr_array_add (argv, g_strdup ("-"));
--
-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else if (track_type == BRASERO_TRACK_SOURCE_RAW) {
-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
-- g_ptr_array_add (argv, g_strdup ("-raw96r"));
-- g_ptr_array_add (argv, g_strdup ("-clone"));
--
-- /* we need to generate the toc first */
-- if (result != BRASERO_BURN_OK)
-- return result;
--
-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else if (track_type == BRASERO_TRACK_SOURCE_AUDIO) {
-- GSList *iter;
--
-- /* we need to get the inf first */
-- result = brasero_imager_set_output_type (imager,
-- BRASERO_TRACK_SOURCE_INF,
-- error);
-- if (result != BRASERO_BURN_OK)
-- return result;
--
-- brasero_job_set_slave (BRASERO_JOB (cdrecord), BRASERO_JOB (imager));
-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), TRUE);
--
-- result = brasero_imager_get_track (imager,
-- &cdrecord->priv->inf,
-- error);
--
-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
--
-- if (result != BRASERO_BURN_OK)
-- return result;
--
-- result = brasero_imager_set_output_type (imager,
-- BRASERO_TRACK_SOURCE_AUDIO,
-- error);
-- if (result != BRASERO_BURN_OK)
-- return result;
--
-- /* now we set the rate of the slave slightly above the speed */
-- brasero_job_set_rate (BRASERO_JOB (imager),
-- (cdrecord->priv->speed + 1) * CDR_SPEED);
--
-- /* now set the rest of the arguments */
-- g_ptr_array_add (argv, g_strdup ("-dao"));
-- g_ptr_array_add (argv, g_strdup ("-audio"));
-- g_ptr_array_add (argv, g_strdup ("-useinfo"));
-- g_ptr_array_add (argv, g_strdup ("-text"));
--
-- for (iter = cdrecord->priv->inf->contents.inf.files; iter; iter = iter->next) {
-- gchar *arg;
--
-- arg = g_strdup (iter->data);
-- g_ptr_array_add (argv, arg);
-- }
-- }
-- else
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), TRUE);
-- }
-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_AUDIO) {
-- GSList *iter;
--
-- /* CD-text cannot be written in tao mode (which is the default) */
-- g_ptr_array_add (argv, g_strdup ("-dao"));
--
-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
-- g_ptr_array_add (argv, g_strdup ("-audio"));
-- g_ptr_array_add (argv, g_strdup ("-pad"));
-- g_ptr_array_add (argv, g_strdup ("-useinfo"));
-- g_ptr_array_add (argv, g_strdup ("-text"));
--
-- for (iter = cdrecord->priv->track->contents.audio.files; iter; iter = iter->next) {
-- gchar *arg;
--
-- arg = g_strdup (iter->data);
-- g_ptr_array_add (argv, arg);
-- }
--
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_ISO
-- || cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
-- gchar *isopath;
--
-- isopath = brasero_track_source_get_iso_localpath (cdrecord->priv->track);
-- if (!isopath)
-- return BRASERO_BURN_ERR;
--
-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
-- g_ptr_array_add (argv, g_strdup ("-data"));
-- g_ptr_array_add (argv, g_strdup ("-nopad"));
-- g_ptr_array_add (argv, isopath);
--
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_RAW) {
-- gchar *rawpath;
--
-- rawpath = brasero_track_source_get_raw_localpath (cdrecord->priv->track);
-- if (!rawpath)
-- return BRASERO_BURN_ERR;
--
-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
-- g_ptr_array_add (argv, g_strdup ("-raw96r"));
-- g_ptr_array_add (argv, g_strdup ("-clone"));
-- g_ptr_array_add (argv, rawpath);
--
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_CUE) {
-- gchar *cue_str;
-- gchar *cuepath;
--
-- g_ptr_array_add (argv, g_strdup ("fs=16m"));
-- g_ptr_array_add (argv, g_strdup ("-dao"));
--
-- cuepath = brasero_track_source_get_cue_localpath (cdrecord->priv->track);
-- if (!cuepath)
-- return BRASERO_BURN_ERR;
--
-- cue_str = g_strdup_printf ("cuefile=%s", cuepath);
-- g_free (cuepath);
--
-- g_ptr_array_add (argv, cue_str);
--
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
-- }
-- else
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_argv_blank (BraseroCDRecord *cdrecord, GPtrArray *argv)
--{
-- char *blank_str;
--
-- blank_str = g_strdup_printf ("blank=%s", cdrecord->priv->blank_fast ? "fast" : "all");
-- g_ptr_array_add (argv, blank_str);
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_argv (BraseroProcess *process,
-- GPtrArray *argv,
-- gboolean has_master,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
-- BraseroBurnResult result;
-- char *dev_str;
--
-- cdrecord = BRASERO_CD_RECORD (process);
--
-- if (has_master)
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- if (!cdrecord->priv->drive)
-- return BRASERO_BURN_NOT_READY;
--
-- g_ptr_array_add (argv, g_strdup ("cdrecord"));
-- g_ptr_array_add (argv, g_strdup ("-v"));
--
-- dev_str = g_strdup_printf ("dev=%s",
-- NCB_DRIVE_GET_DEVICE (cdrecord->priv->drive));
--
-- g_ptr_array_add (argv, dev_str);
--
-- if (cdrecord->priv->dummy)
-- g_ptr_array_add (argv, g_strdup ("-dummy"));
--
-- if (cdrecord->priv->nograce)
-- g_ptr_array_add (argv, g_strdup ("gracetime=0"));
--
-- if (cdrecord->priv->action == BRASERO_CD_RECORD_ACTION_RECORD)
-- result = brasero_cdrecord_set_argv_record (cdrecord, argv, error);
-- else if (cdrecord->priv->action == BRASERO_CD_RECORD_ACTION_BLANK)
-- result = brasero_cdrecord_set_argv_blank (cdrecord, argv);
-- else
-- return BRASERO_BURN_NOT_READY;
--
-- if (result == BRASERO_BURN_OK || result == BRASERO_BURN_CANCEL) {
-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
-- BRASERO_BURN_ACTION_PREPARING,
-- FALSE);
-- brasero_job_progress_changed (BRASERO_JOB (cdrecord), 0, -1);
-- }
--
-- return result;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_drive (BraseroRecorder *recorder,
-- NautilusBurnDrive *drive,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
-- NautilusBurnMediaType media;
--
-- media = nautilus_burn_drive_get_media_type (drive);
-- if (media > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- cdrecord = BRASERO_CD_RECORD (recorder);
--
-- if (cdrecord->priv->drive) {
-- nautilus_burn_drive_unref (cdrecord->priv->drive);
-- cdrecord->priv->drive = NULL;
-- }
--
-- cdrecord->priv->drive = drive;
-- nautilus_burn_drive_ref (drive);
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_source (BraseroJob *job,
-- const BraseroTrackSource *track,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
--
-- cdrecord = BRASERO_CD_RECORD (job);
--
-- if (track->type != BRASERO_TRACK_SOURCE_AUDIO
-- && track->type != BRASERO_TRACK_SOURCE_CUE
-- && track->type != BRASERO_TRACK_SOURCE_RAW
-- && track->type != BRASERO_TRACK_SOURCE_ISO
-- && track->type != BRASERO_TRACK_SOURCE_ISO_JOLIET
-- && track->type != BRASERO_TRACK_SOURCE_IMAGER)
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- if (cdrecord->priv->inf) {
-- brasero_track_source_free (cdrecord->priv->inf);
-- cdrecord->priv->inf = NULL;
-- }
--
-- if (cdrecord->priv->track)
-- brasero_track_source_free (cdrecord->priv->track);
--
-- cdrecord->priv->track = brasero_track_source_copy (track);
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_flags (BraseroRecorder *recorder,
-- BraseroRecorderFlag flags,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
--
-- cdrecord = BRASERO_CD_RECORD (recorder);
--
-- cdrecord->priv->dummy = (flags & BRASERO_RECORDER_FLAG_DUMMY) != 0;
-- cdrecord->priv->dao = (flags & BRASERO_RECORDER_FLAG_DAO) != 0;
-- cdrecord->priv->nograce = (flags & BRASERO_RECORDER_FLAG_NOGRACE) != 0;
-- cdrecord->priv->burnproof = (flags & BRASERO_RECORDER_FLAG_BURNPROOF) != 0;
-- cdrecord->priv->overburn = (flags & BRASERO_RECORDER_FLAG_OVERBURN) != 0;
-- cdrecord->priv->blank_fast = (flags & BRASERO_RECORDER_FLAG_FAST_BLANK) != 0;
-- cdrecord->priv->multi = (flags & BRASERO_RECORDER_FLAG_MULTI) != 0;
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_set_rate (BraseroJob *job,
-- gint64 speed)
--{
-- BraseroCDRecord *cdrecord;
--
-- if (brasero_job_is_running (job))
-- return BRASERO_BURN_RUNNING;
--
-- cdrecord = BRASERO_CD_RECORD (job);
-- cdrecord->priv->speed = speed / CDR_SPEED;
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_blank (BraseroRecorder *recorder,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
-- BraseroBurnResult result;
--
-- cdrecord = BRASERO_CD_RECORD (recorder);
--
-- if (!nautilus_burn_drive_can_rewrite (cdrecord->priv->drive)) {
-- g_set_error (error,
-- BRASERO_BURN_ERROR,
-- BRASERO_BURN_ERROR_GENERAL,
-- _("the drive cannot rewrite CDs or DVDs"));
-- return BRASERO_BURN_ERR;
-- }
--
-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_BLANK;
-- result = brasero_job_run (BRASERO_JOB (cdrecord), error);
-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_NONE;
--
-- brasero_job_action_changed (BRASERO_JOB (cdrecord),
-- BRASERO_BURN_ACTION_NONE,
-- FALSE);
--
-- return result;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_record (BraseroRecorder *recorder,
-- GError **error)
--{
-- BraseroCDRecord *cdrecord;
-- BraseroBurnResult result;
--
-- cdrecord = BRASERO_CD_RECORD (recorder);
--
-- if (!cdrecord->priv->track)
-- return BRASERO_BURN_NOT_READY;
--
-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_RECORD;
--
-- /* set as slave if track is an imager (on the fly burning) */
-- if (cdrecord->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-- BraseroJob *slave;
--
-- slave = BRASERO_JOB (cdrecord->priv->track->contents.imager.obj);
-- brasero_job_set_slave (BRASERO_JOB (cdrecord), slave);
-- brasero_job_set_relay_slave_signals (BRASERO_JOB (cdrecord), FALSE);
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), TRUE);
-- }
-- else
-- brasero_job_set_run_slave (BRASERO_JOB (cdrecord), FALSE);
--
-- result = brasero_job_run (BRASERO_JOB (cdrecord), error);
-- brasero_job_set_slave (BRASERO_JOB (cdrecord), NULL);
-- cdrecord->priv->action = BRASERO_CD_RECORD_ACTION_NONE;
-- return result;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_get_rate (BraseroJob *job,
-- gint64 *rate)
--{
-- BraseroCDRecord *cdrecord;
--
-- cdrecord = BRASERO_CD_RECORD (job);
--
-- if (rate)
-- *rate = cdrecord->priv->cur_speed;
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_get_written (BraseroJob *job,
-- gint64 *written)
--{
-- BraseroCDRecord *cdrecord;
--
-- cdrecord = BRASERO_CD_RECORD (job);
--
-- if (written)
-- *written = cdrecord->priv->b_written;
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_get_fifo (BraseroRecorder *recorder,
-- gint *fifo)
--{
-- BraseroCDRecord *cdrecord;
--
-- cdrecord = BRASERO_CD_RECORD (recorder);
--
-- if (fifo)
-- *fifo = cdrecord->priv->fifo;
--
-- return BRASERO_BURN_OK;
--}
--
--static BraseroBurnResult
--brasero_cdrecord_get_action_string (BraseroJob *job,
-- BraseroBurnAction action,
-- char **string)
--{
-- job = brasero_job_get_slave (job);
-- if (!job)
-- return BRASERO_BURN_NOT_SUPPORTED;
--
-- return brasero_job_get_action_string (job, action, string);
--}
--
--void
--brasero_cdrecord_set_immediate (BraseroCDRecord *cdrecord, gint minbuf)
--{
-- g_return_if_fail (BRASERO_IS_CD_RECORD (cdrecord));
--
-- if (minbuf > 95 || minbuf < 25)
-- minbuf = 30;
--
-- cdrecord->priv->immediate = 1;
-- cdrecord->priv->minbuf = minbuf;
--}
-diff -urN brasero-0.4.4.orig/src/burn-cdrecord.h brasero-0.4.4/src/burn-cdrecord.h
---- brasero-0.4.4.orig/src/burn-cdrecord.h 2006-09-07 17:47:40.000000000 +0200
-+++ brasero-0.4.4/src/burn-cdrecord.h 1970-01-01 01:00:00.000000000 +0100
-@@ -1,59 +0,0 @@
--/***************************************************************************
-- * cdrecord.h
-- *
-- * dim jan 22 15:22:52 2006
-- * Copyright 2006 Rouquier Philippe
-- * brasero-app at wanadoo.fr
-- ***************************************************************************/
--
--/*
-- * 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 CDRECORD_H
--#define CDRECORD_H
--
--#include <glib.h>
--#include <glib-object.h>
--
--#include "burn-process.h"
--
--G_BEGIN_DECLS
--
--#define BRASERO_TYPE_CD_RECORD (brasero_cdrecord_get_type ())
--#define BRASERO_CD_RECORD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), BRASERO_TYPE_CD_RECORD, BraseroCDRecord))
--#define BRASERO_CD_RECORD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), BRASERO_TYPE_CD_RECORD, BraseroCDRecordClass))
--#define BRASERO_IS_CD_RECORD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), BRASERO_TYPE_CD_RECORD))
--#define BRASERO_IS_CD_RECORD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), BRASERO_TYPE_CD_RECORD))
--#define BRASERO_CD_RECORD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), BRASERO_TYPE_CD_RECORD, BraseroCDRecordClass))
--
--typedef struct BraseroCDRecordPrivate BraseroCDRecordPrivate;
--
--typedef struct {
-- BraseroProcess parent;
-- BraseroCDRecordPrivate *priv;
--} BraseroCDRecord;
--
--typedef struct {
-- BraseroProcessClass parent_class;
--} BraseroCDRecordClass;
--
--GType brasero_cdrecord_get_type ();
--BraseroCDRecord *brasero_cdrecord_new ();
--
--void
--brasero_cdrecord_set_immediate (BraseroCDRecord *cdrecord, gint minbuf);
--
--#endif /* CDRECORD_H */
-diff -urN brasero-0.4.4.orig/src/burn-mkisofs.c brasero-0.4.4/src/burn-mkisofs.c
---- brasero-0.4.4.orig/src/burn-mkisofs.c 2006-09-07 17:47:40.000000000 +0200
-+++ brasero-0.4.4/src/burn-mkisofs.c 2006-10-23 10:42:44.000000000 +0200
-@@ -704,7 +704,7 @@
+ dev_str = g_strdup_printf ("dev=%s",
+diff -Nur brasero-0.5.2-ORIG/src/burn-mkisofs.c brasero-0.5.2/src/burn-mkisofs.c
+--- brasero-0.5.2-ORIG/src/burn-mkisofs.c 2007-06-01 17:07:38.000000000 -0300
++++ brasero-0.5.2/src/burn-mkisofs.c 2007-06-01 17:08:56.000000000 -0300
+@@ -705,7 +705,7 @@
gboolean res;
- int tmp;
+ gint tmp;
- command = g_strdup_printf ("cdrecord -msinfo dev=%s",
+ command = g_strdup_printf ("wodim -msinfo dev=%s",
NCB_DRIVE_GET_DEVICE (mkisofs->priv->drive));
res = g_spawn_command_line_sync (command,
-diff -urN brasero-0.4.4.orig/src/burn-wodim.c brasero-0.4.4/src/burn-wodim.c
---- brasero-0.4.4.orig/src/burn-wodim.c 1970-01-01 01:00:00.000000000 +0100
-+++ brasero-0.4.4/src/burn-wodim.c 2006-10-23 10:41:33.000000000 +0200
-@@ -0,0 +1,1042 @@
-+/***************************************************************************
-+ * wodim.c
-+ *
-+ * dim jan 22 15:22:52 2006
-+ * Copyright 2006 Rouquier Philippe
-+ * brasero-app at wanadoo.fr
-+ ***************************************************************************/
-+
-+/*
-+ * 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
-+
-+#include <string.h>
-+#include <math.h>
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+#include <glib/gi18n-lib.h>
-+#include <glib/gstdio.h>
-+
-+#include <nautilus-burn-drive.h>
-+
-+#include "burn-basics.h"
-+#include "burn-common.h"
-+#include "burn-wodim.h"
-+#include "burn-process.h"
-+#include "burn-recorder.h"
-+#include "burn-imager.h"
-+#include "brasero-ncb.h"
-+
-+static void brasero_wodim_class_init (BraseroWodimClass *klass);
-+static void brasero_wodim_init (BraseroWodim *sp);
-+static void brasero_wodim_finalize (GObject *object);
-+static void brasero_wodim_iface_init_record (BraseroRecorderIFace *iface);
-+
-+static BraseroBurnResult
-+brasero_wodim_stderr_read (BraseroProcess *process,
-+ const char *line);
-+static BraseroBurnResult
-+brasero_wodim_stdout_read (BraseroProcess *process,
-+ const char *line);
-+static BraseroBurnResult
-+brasero_wodim_set_argv (BraseroProcess *process,
-+ GPtrArray *argv,
-+ gboolean has_master,
-+ GError **error);
-+
-+static BraseroBurnResult
-+brasero_wodim_get_rate (BraseroJob *job,
-+ gint64 *rate);
-+static BraseroBurnResult
-+brasero_wodim_get_written (BraseroJob *job,
-+ gint64 *written);
-+static BraseroBurnResult
-+brasero_wodim_get_fifo (BraseroRecorder *recorder,
-+ gint *fifo);
-+
-+static BraseroBurnResult
-+brasero_wodim_set_drive (BraseroRecorder *recorder,
-+ NautilusBurnDrive *drive,
-+ GError **error);
-+static BraseroBurnResult
-+brasero_wodim_set_source (BraseroJob *job,
-+ const BraseroTrackSource *track,
-+ GError **error);
-+static BraseroBurnResult
-+brasero_wodim_set_flags (BraseroRecorder *recorder,
-+ BraseroRecorderFlag flags,
-+ GError **error);
-+static BraseroBurnResult
-+brasero_wodim_set_rate (BraseroJob *job,
-+ gint64 speed);
-+
-+static BraseroBurnResult
-+brasero_wodim_record (BraseroRecorder *recorder,
-+ GError **error);
-+static BraseroBurnResult
-+brasero_wodim_blank (BraseroRecorder *recorder,
-+ GError **error);
-+
-+static BraseroBurnResult
-+brasero_wodim_get_action_string (BraseroJob *job,
-+ BraseroBurnAction action,
-+ char **string);
-+
-+typedef enum {
-+ BRASERO_WODIM_ACTION_NONE,
-+ BRASERO_WODIM_ACTION_BLANK,
-+ BRASERO_WODIM_ACTION_RECORD
-+} BraseroWodimAction;
-+
-+struct BraseroWodimPrivate {
-+ BraseroWodimAction action;
-+
-+ NautilusBurnDrive *drive;
-+ BraseroTrackSource *track;
-+ BraseroTrackSource *inf;
-+ int speed;
-+
-+ gint64 current_track_end_pos;
-+ gint64 current_track_written;
-+ gint64 tracks_total_bytes;
-+ gint64 b_written;
-+
-+ int current_track_num;
-+ int track_count;
-+
-+ int fifo;
-+ gint64 cur_speed;
-+
-+ int minbuf;
-+
-+ int dao:1;
-+ int dummy:1;
-+ int multi:1;
-+ int nograce:1;
-+ int overburn:1;
-+ int immediate:1;
-+ int burnproof:1;
-+
-+ int blank_fast:1;
-+};
-+
-+static GObjectClass *parent_class = NULL;
-+
-+GType
-+brasero_wodim_get_type ()
-+{
-+ static GType type = 0;
-+
-+ if(type == 0) {
-+ static const GTypeInfo our_info = {
-+ sizeof (BraseroWodimClass),
-+ NULL,
-+ NULL,
-+ (GClassInitFunc)brasero_wodim_class_init,
-+ NULL,
-+ NULL,
-+ sizeof (BraseroWodim),
-+ 0,
-+ (GInstanceInitFunc)brasero_wodim_init,
-+ };
-+
-+ static const GInterfaceInfo recorder_info =
-+ {
-+ (GInterfaceInitFunc) brasero_wodim_iface_init_record,
-+ NULL,
-+ NULL
-+ };
-+
-+ type = g_type_register_static (BRASERO_TYPE_PROCESS,
-+ "BraseroWodim",
-+ &our_info,
-+ 0);
-+ g_type_add_interface_static (type,
-+ BRASERO_TYPE_RECORDER,
-+ &recorder_info);
-+ }
-+
-+ return type;
-+}
-+
-+static void
-+brasero_wodim_class_init (BraseroWodimClass *klass)
-+{
-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+ BraseroJobClass *job_class = BRASERO_JOB_CLASS (klass);
-+ BraseroProcessClass *process_class = BRASERO_PROCESS_CLASS (klass);
-+
-+ parent_class = g_type_class_peek_parent(klass);
-+ object_class->finalize = brasero_wodim_finalize;
-+
-+ job_class->get_action_string = brasero_wodim_get_action_string;
-+ job_class->get_written = brasero_wodim_get_written;
-+ job_class->set_source = brasero_wodim_set_source;
-+ job_class->set_rate = brasero_wodim_set_rate;
-+ job_class->get_rate = brasero_wodim_get_rate;
-+
-+ process_class->stderr_func = brasero_wodim_stderr_read;
-+ process_class->stdout_func = brasero_wodim_stdout_read;
-+ process_class->set_argv = brasero_wodim_set_argv;
-+}
-+
-+static void
-+brasero_wodim_iface_init_record (BraseroRecorderIFace *iface)
-+{
-+ iface->blank = brasero_wodim_blank;
-+ iface->record = brasero_wodim_record;
-+ iface->set_drive = brasero_wodim_set_drive;
-+ iface->set_flags = brasero_wodim_set_flags;
-+ iface->get_fifo = brasero_wodim_get_fifo;
-+}
-+
-+static void
-+brasero_wodim_init (BraseroWodim *obj)
-+{
-+ obj->priv = g_new0 (BraseroWodimPrivate, 1);
-+}
-+
-+static void
-+brasero_wodim_finalize (GObject *object)
-+{
-+ BraseroWodim *cobj;
-+ cobj = BRASERO_WODIM(object);
-+
-+ if (cobj->priv->drive) {
-+ nautilus_burn_drive_unref (cobj->priv->drive);
-+ cobj->priv->drive = NULL;
-+ }
-+
-+ if (cobj->priv->track) {
-+ brasero_track_source_free (cobj->priv->track);
-+ cobj->priv->track = NULL;
-+ }
-+
-+ if (cobj->priv->inf) {
-+ brasero_track_source_free (cobj->priv->inf);
-+ cobj->priv->inf = NULL;
-+ }
-+
-+ g_free(cobj->priv);
-+ G_OBJECT_CLASS(parent_class)->finalize(object);
-+}
-+
-+BraseroWodim *
-+brasero_wodim_new ()
-+{
-+ BraseroWodim *obj;
-+
-+ obj = BRASERO_WODIM(g_object_new(BRASERO_TYPE_WODIM, NULL));
-+
-+ return obj;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_stderr_read (BraseroProcess *process, const char *line)
-+{
-+ BraseroWodim *wodim = BRASERO_WODIM (process);
-+
-+ if (strstr (line, "Cannot open SCSI driver.")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_PERMISSION,
-+ _("You don't seem to have the required permission to use this drive")));
-+ }
-+ else if (strstr (line, "No disk / Wrong disk!") != NULL) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_MEDIA_NONE,
-+ _("There doesn't seem to be a disc in the drive")));
-+ }
-+ else if (strstr (line, "This means that we are checking recorded media.") != NULL) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_MEDIA_NOT_WRITABLE,
-+ _("The CD has already been recorded")));
-+ }
-+ else if (strstr (line, "Cannot blank disk, aborting.") != NULL) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_MEDIA_NOT_REWRITABLE,
-+ _("The CD cannot be blanked")));
-+ }
-+ else if (!wodim->priv->overburn
-+ && strstr (line, "Data may not fit on current disk")) {
-+ /* we don't error out if overburn was chosen */
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_MEDIA_SPACE,
-+ _("The files selected did not fit on the CD")));
-+ }
-+ else if (strstr (line ,"wodim: A write error occured")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("an unknown error occured.")));
-+ /* FIXME: future message if overburn is activated.
-+ * a write error occured which was likely due to overburning the
-+ * disc */
-+ }
-+ else if (strstr (line, "Inappropriate audio coding")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
-+ _("All audio files must be stereo, 16-bit digital audio with 44100Hz samples")));
-+ }
-+ else if (strstr (line, "cannot write medium - incompatible format") != NULL) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_INCOMPATIBLE_FORMAT,
-+ _("The image does not seem to be a proper iso9660 file system")));
-+ }
-+ else if (strstr (line, "DMA speed too slow") != NULL) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_SLOW_DMA,
-+ _("The system is too slow to write the CD at this speed. Try a lower speed")));
-+ }
-+ else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_SCSI_IOCTL,
-+ _("You don't seem to have the required permission to use this drive")));
-+ }
-+ else if (strstr (line, "Device or resource busy")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_BUSY_DRIVE,
-+ _("The drive seems to be busy (maybe check you have proper permissions to use it)")));
-+ }
-+ else if (strstr (line, "Illegal write mode for this drive")) {
-+ /* NOTE : when it happened I had to unlock the
-+ * drive with cdrdao and eject it. Should we ? */
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_BUSY_DRIVE,
-+ _("The drive seems to be busy (maybe you should reload the media)")));
-+ }
-+ else if (strstr (line, "wodim: No such file or directory. Cannot open")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("the image file cannot be found")));
-+ }
-+ else if (strstr (line, "Bad file descriptor. read error on input file")
-+ || strstr (line, "No tracks specified. Need at least one.")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("internal error")));
-+ }
-+ else if (strstr (line, "Could not write Lead-in")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("the cd information could not be written")));
-+ }
-+ else if (strstr (line, "Cannot fixate disk")) {
-+ /* FIXME: replace error message with
-+ * "the disc could not be closed" */
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("internal error")));
-+ }
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static void
-+brasero_wodim_check_fifo (BraseroWodim *wodim, int buf)
-+{
-+ BraseroJob *slave;
-+ gint64 rate = (wodim->priv->speed + 1) * CDR_SPEED;
-+
-+ slave = brasero_job_get_slave (BRASERO_JOB (wodim));
-+ if (!slave)
-+ return;
-+
-+ if (wodim->priv->fifo < 50) {
-+ /* we try to raise the rate */
-+ rate = (wodim->priv->speed * 2) * CDR_SPEED;
-+ }
-+ else if (wodim->priv->fifo > 95) {
-+ /* we try to lower the rate */
-+ if (buf < 90)
-+ rate = (wodim->priv->speed * 1.5) * CDR_SPEED;
-+ }
-+
-+ brasero_job_debug_message (BRASERO_JOB (wodim),
-+ "setting rate to %" G_GINT64_FORMAT,
-+ rate);
-+ brasero_job_set_rate (slave, rate);
-+}
-+
-+static void
-+brasero_wodim_compute (BraseroWodim *wodim,
-+ int mb_written,
-+ int mb_total,
-+ gdouble speed,
-+ int track_num)
-+{
-+ double percent;
-+ gint64 bytes;
-+ gint64 this_remain;
-+ gint64 total;
-+ long secs;
-+
-+ if (wodim->priv->tracks_total_bytes > 0)
-+ total = wodim->priv->tracks_total_bytes;
-+ else
-+ total = mb_total * 1048576;
-+
-+ if (track_num > wodim->priv->current_track_num) {
-+ wodim->priv->current_track_num = track_num;
-+ wodim->priv->current_track_end_pos += mb_total * 1048576;
-+ }
-+
-+ this_remain = (mb_total - mb_written) * 1048576;
-+ bytes = (total - wodim->priv->current_track_end_pos) + this_remain;
-+ wodim->priv->b_written = total - bytes;
-+
-+ secs = brasero_burn_common_compute_time_remaining (bytes, (double) speed * CDR_SPEED);
-+
-+ brasero_job_action_changed (BRASERO_JOB (wodim),
-+ BRASERO_BURN_ACTION_WRITING,
-+ FALSE);
-+
-+ if (wodim->priv->tracks_total_bytes > 0) {
-+ percent = 0.98 * (1.0 - (double) bytes / (double) wodim->priv->tracks_total_bytes);
-+ }
-+ else {
-+ percent = 0.98 * ((double) ((track_num - 1) / (double)wodim->priv->track_count)
-+ + ((double)mb_written / mb_total) / (double)wodim->priv->track_count);
-+ }
-+
-+ brasero_job_progress_changed (BRASERO_JOB (wodim), percent, secs);
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_stdout_read (BraseroProcess *process, const char *line)
-+{
-+ guint track;
-+ guint speed_1, speed_2;
-+ BraseroWodim *wodim;
-+ int mb_written = 0, mb_total = 0, fifo = 0, buf = 0;
-+
-+ wodim = BRASERO_WODIM (process);
-+
-+ if (sscanf (line, "Track %2u: %d of %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
-+ &track, &mb_written, &mb_total, &fifo, &buf, &speed_1, &speed_2) == 7) {
-+ gdouble speed;
-+
-+ wodim->priv->fifo = fifo;
-+ wodim->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
-+
-+ wodim->priv->current_track_written = mb_written * 1048576;
-+ speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
-+ brasero_wodim_compute (wodim,
-+ mb_written,
-+ mb_total,
-+ speed,
-+ track);
-+
-+ brasero_wodim_check_fifo (wodim, buf);
-+ }
-+ else if (sscanf (line, "Track %2u: %d MB written (fifo %d%%) [buf %d%%] %d.%dx.",
-+ &track, &mb_written, &fifo, &buf, &speed_1, &speed_2) == 6) {
-+ int mb_total;
-+
-+ /* this line is printed when wodim writes on the fly */
-+ wodim->priv->fifo = fifo;
-+ wodim->priv->cur_speed = speed_1 * CDR_SPEED + speed_2 * CDR_SPEED / 10;
-+ wodim->priv->current_track_written = mb_written * 1048576;
-+
-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-+ gdouble speed;
-+
-+ /* we must ask the imager what is the total size */
-+ brasero_imager_get_size (BRASERO_IMAGER (wodim->priv->track->contents.imager.obj),
-+ &wodim->priv->tracks_total_bytes,
-+ FALSE,
-+ NULL);
-+ mb_total = wodim->priv->tracks_total_bytes / 1048576;
-+ speed = (gdouble) speed_1 + (gdouble) speed_2 / 10.0;
-+ brasero_wodim_compute (wodim,
-+ mb_written,
-+ mb_total,
-+ speed,
-+ track);
-+ }
-+ else
-+ brasero_job_action_changed (BRASERO_JOB (wodim),
-+ BRASERO_BURN_ACTION_WRITING,
-+ FALSE);
-+
-+ brasero_wodim_check_fifo (wodim, buf);
-+ }
-+ else if (sscanf (line, "Track %*d: %*s %d MB ", &mb_total) == 1) {
-+ if (mb_total > 0) {
-+ wodim->priv->tracks_total_bytes += mb_total * 1048576;
-+ }
-+ }
-+ else if (strstr (line, "Sending CUE sheet")) {
-+ brasero_job_action_changed (BRASERO_JOB (process),
-+ BRASERO_BURN_ACTION_WRITING_CD_TEXT,
-+ FALSE);
-+ }
-+ else if (g_str_has_prefix (line, "Re-load disk and hit <CR>")
-+ || g_str_has_prefix (line, "send SIGUSR1 to continue")) {
-+ /* NOTE: There seems to be a BUG somewhere when writing raw images
-+ * with clone mode. After disc has been written and fixated wodim
-+ * asks the media to be reloaded. So we simply ignore this message
-+ * and returns that everything went well. Which is indeed the case */
-+ if (brasero_job_get_current_action (BRASERO_JOB (process)) == BRASERO_BURN_ACTION_FIXATING) {
-+ brasero_job_finished (BRASERO_JOB (process));
-+ return BRASERO_BURN_OK;
-+ }
-+
-+ /* This is not supposed to happen since we checked for the cd
-+ before starting, but we try to handle it anyway, since mmc
-+ profiling can fail. */
-+ /* NOTE : nautilus_burn_recorder used to send sigusr1 or return */
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_RELOAD_MEDIA,
-+ _("The media needs to be reloaded before being recorded")));
-+ }
-+ else if (g_str_has_prefix (line, "Fixating...")) {
-+ brasero_job_progress_changed (BRASERO_JOB (process),
-+ 0.98,
-+ -1);
-+ brasero_job_action_changed (BRASERO_JOB (process),
-+ BRASERO_BURN_ACTION_FIXATING,
-+ FALSE);
-+ }
-+ else if (g_str_has_prefix (line, "Last chance to quit, ")) {
-+ brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
-+ }
-+ else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
-+ || strstr (line, "Blanking entire disk")) {
-+ brasero_job_action_changed (BRASERO_JOB (process),
-+ BRASERO_BURN_ACTION_BLANKING,
-+ FALSE);
-+ }
-+ else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) {
-+ brasero_job_error (BRASERO_JOB (process),
-+ g_error_new (BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("internal error")));
-+ }
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_argv_record (BraseroWodim *wodim,
-+ GPtrArray *argv,
-+ GError **error)
-+{
-+ if (!wodim->priv->track)
-+ return BRASERO_BURN_NOT_READY;
-+
-+ if (wodim->priv->immediate) {
-+ g_ptr_array_add (argv, g_strdup ("-immed"));
-+ g_ptr_array_add (argv, g_strdup_printf ("minbuf=%i", wodim->priv->minbuf));
-+ }
-+
-+ if (wodim->priv->speed > 0) {
-+ char *speed_str;
-+
-+ speed_str = g_strdup_printf ("speed=%d", wodim->priv->speed);
-+ g_ptr_array_add (argv, speed_str);
-+ }
-+
-+ if (wodim->priv->dao)
-+ g_ptr_array_add (argv, g_strdup ("-dao"));
-+ if (wodim->priv->overburn)
-+ g_ptr_array_add (argv, g_strdup ("-overburn"));
-+ if (wodim->priv->burnproof)
-+ g_ptr_array_add (argv, g_strdup ("driveropts=burnfree"));
-+ if (wodim->priv->multi)
-+ g_ptr_array_add (argv, g_strdup ("-multi"));
-+
-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-+ BraseroTrackSourceType track_type;
-+ BraseroBurnResult result;
-+ BraseroImager *imager;
-+ int buffer_size;
-+ gint64 sectors;
-+
-+ imager = wodim->priv->track->contents.imager.obj;
-+
-+ /* we need to know what is the type of the track (audio / data) */
-+ result = brasero_imager_get_track_type (imager, &track_type);
-+ if (result != BRASERO_BURN_OK) {
-+ g_set_error (error,
-+ BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("imager doesn't seem to be ready"));
-+ return BRASERO_BURN_ERR;
-+ }
-+
-+ /* ask the size */
-+ result = brasero_imager_get_size (imager, §ors, TRUE, error);
-+ if (result != BRASERO_BURN_OK) {
-+ if (!error)
-+ g_set_error (error,
-+ BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("imager doesn't seem to be ready"));
-+ return BRASERO_BURN_ERR;
-+ }
-+
-+ /* we create a buffer depending on the size
-+ * buffer 4m> < 64m and is 1/25th of size otherwise */
-+ buffer_size = sectors * 2352 / 1024 / 1024 / 25;
-+ if (buffer_size > 32)
-+ buffer_size = 32;
-+ else if (buffer_size < 4)
-+ buffer_size = 4;
-+
-+ g_ptr_array_add (argv, g_strdup_printf ("fs=%im", buffer_size));
-+
-+ if (track_type == BRASERO_TRACK_SOURCE_ISO
-+ || track_type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
-+ g_ptr_array_add (argv, g_strdup_printf ("tsize=%Lis", sectors));
-+
-+ g_ptr_array_add (argv, g_strdup ("-data"));
-+ g_ptr_array_add (argv, g_strdup ("-nopad"));
-+ g_ptr_array_add (argv, g_strdup ("-"));
-+
-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else if (track_type == BRASERO_TRACK_SOURCE_RAW) {
-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
-+ g_ptr_array_add (argv, g_strdup ("-raw96r"));
-+ g_ptr_array_add (argv, g_strdup ("-clone"));
-+
-+ /* we need to generate the toc first */
-+ if (result != BRASERO_BURN_OK)
-+ return result;
-+
-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else if (track_type == BRASERO_TRACK_SOURCE_AUDIO) {
-+ GSList *iter;
-+
-+ /* we need to get the inf first */
-+ result = brasero_imager_set_output_type (imager,
-+ BRASERO_TRACK_SOURCE_INF,
-+ error);
-+ if (result != BRASERO_BURN_OK)
-+ return result;
-+
-+ brasero_job_set_slave (BRASERO_JOB (wodim), BRASERO_JOB (imager));
-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), TRUE);
-+
-+ result = brasero_imager_get_track (imager,
-+ &wodim->priv->inf,
-+ error);
-+
-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
-+
-+ if (result != BRASERO_BURN_OK)
-+ return result;
-+
-+ result = brasero_imager_set_output_type (imager,
-+ BRASERO_TRACK_SOURCE_AUDIO,
-+ error);
-+ if (result != BRASERO_BURN_OK)
-+ return result;
-+
-+ /* now we set the rate of the slave slightly above the speed */
-+ brasero_job_set_rate (BRASERO_JOB (imager),
-+ (wodim->priv->speed + 1) * CDR_SPEED);
-+
-+ /* now set the rest of the arguments */
-+ g_ptr_array_add (argv, g_strdup ("-dao"));
-+ g_ptr_array_add (argv, g_strdup ("-audio"));
-+ g_ptr_array_add (argv, g_strdup ("-useinfo"));
-+ g_ptr_array_add (argv, g_strdup ("-text"));
-+
-+ for (iter = wodim->priv->inf->contents.inf.files; iter; iter = iter->next) {
-+ gchar *arg;
-+
-+ arg = g_strdup (iter->data);
-+ g_ptr_array_add (argv, arg);
-+ }
-+ }
-+ else
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), TRUE);
-+ }
-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_AUDIO) {
-+ GSList *iter;
-+
-+ /* CD-text cannot be written in tao mode (which is the default) */
-+ g_ptr_array_add (argv, g_strdup ("-dao"));
-+
-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
-+ g_ptr_array_add (argv, g_strdup ("-audio"));
-+ g_ptr_array_add (argv, g_strdup ("-pad"));
-+ g_ptr_array_add (argv, g_strdup ("-useinfo"));
-+ g_ptr_array_add (argv, g_strdup ("-text"));
-+
-+ for (iter = wodim->priv->track->contents.audio.files; iter; iter = iter->next) {
-+ gchar *arg;
-+
-+ arg = g_strdup (iter->data);
-+ g_ptr_array_add (argv, arg);
-+ }
-+
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_ISO
-+ || wodim->priv->track->type == BRASERO_TRACK_SOURCE_ISO_JOLIET) {
-+ gchar *isopath;
-+
-+ isopath = brasero_track_source_get_iso_localpath (wodim->priv->track);
-+ if (!isopath)
-+ return BRASERO_BURN_ERR;
-+
-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
-+ g_ptr_array_add (argv, g_strdup ("-data"));
-+ g_ptr_array_add (argv, g_strdup ("-nopad"));
-+ g_ptr_array_add (argv, isopath);
-+
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_RAW) {
-+ gchar *rawpath;
-+
-+ rawpath = brasero_track_source_get_raw_localpath (wodim->priv->track);
-+ if (!rawpath)
-+ return BRASERO_BURN_ERR;
-+
-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
-+ g_ptr_array_add (argv, g_strdup ("-raw96r"));
-+ g_ptr_array_add (argv, g_strdup ("-clone"));
-+ g_ptr_array_add (argv, rawpath);
-+
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_CUE) {
-+ gchar *cue_str;
-+ gchar *cuepath;
-+
-+ g_ptr_array_add (argv, g_strdup ("fs=16m"));
-+ g_ptr_array_add (argv, g_strdup ("-dao"));
-+
-+ cuepath = brasero_track_source_get_cue_localpath (wodim->priv->track);
-+ if (!cuepath)
-+ return BRASERO_BURN_ERR;
-+
-+ cue_str = g_strdup_printf ("cuefile=%s", cuepath);
-+ g_free (cuepath);
-+
-+ g_ptr_array_add (argv, cue_str);
-+
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
-+ }
-+ else
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_argv_blank (BraseroWodim *wodim, GPtrArray *argv)
-+{
-+ char *blank_str;
-+
-+ blank_str = g_strdup_printf ("blank=%s", wodim->priv->blank_fast ? "fast" : "all");
-+ g_ptr_array_add (argv, blank_str);
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_argv (BraseroProcess *process,
-+ GPtrArray *argv,
-+ gboolean has_master,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+ BraseroBurnResult result;
-+ char *dev_str;
-+
-+ wodim = BRASERO_WODIM (process);
-+
-+ if (has_master)
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ if (!wodim->priv->drive)
-+ return BRASERO_BURN_NOT_READY;
-+
-+ g_ptr_array_add (argv, g_strdup ("wodim"));
-+ g_ptr_array_add (argv, g_strdup ("-v"));
-+
-+ dev_str = g_strdup_printf ("dev=%s",
-+ NCB_DRIVE_GET_DEVICE (wodim->priv->drive));
-+
-+ g_ptr_array_add (argv, dev_str);
-+
-+ if (wodim->priv->dummy)
-+ g_ptr_array_add (argv, g_strdup ("-dummy"));
-+
-+ if (wodim->priv->nograce)
-+ g_ptr_array_add (argv, g_strdup ("gracetime=0"));
-+
-+ if (wodim->priv->action == BRASERO_WODIM_ACTION_RECORD)
-+ result = brasero_wodim_set_argv_record (wodim, argv, error);
-+ else if (wodim->priv->action == BRASERO_WODIM_ACTION_BLANK)
-+ result = brasero_wodim_set_argv_blank (wodim, argv);
-+ else
-+ return BRASERO_BURN_NOT_READY;
-+
-+ if (result == BRASERO_BURN_OK || result == BRASERO_BURN_CANCEL) {
-+ brasero_job_action_changed (BRASERO_JOB (wodim),
-+ BRASERO_BURN_ACTION_PREPARING,
-+ FALSE);
-+ brasero_job_progress_changed (BRASERO_JOB (wodim), 0, -1);
-+ }
-+
-+ return result;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_drive (BraseroRecorder *recorder,
-+ NautilusBurnDrive *drive,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+ NautilusBurnMediaType media;
-+
-+ media = nautilus_burn_drive_get_media_type (drive);
-+ if (media > NAUTILUS_BURN_MEDIA_TYPE_CDRW)
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ wodim = BRASERO_WODIM (recorder);
-+
-+ if (wodim->priv->drive) {
-+ nautilus_burn_drive_unref (wodim->priv->drive);
-+ wodim->priv->drive = NULL;
-+ }
-+
-+ wodim->priv->drive = drive;
-+ nautilus_burn_drive_ref (drive);
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_source (BraseroJob *job,
-+ const BraseroTrackSource *track,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+
-+ wodim = BRASERO_WODIM (job);
-+
-+ if (track->type != BRASERO_TRACK_SOURCE_AUDIO
-+ && track->type != BRASERO_TRACK_SOURCE_CUE
-+ && track->type != BRASERO_TRACK_SOURCE_RAW
-+ && track->type != BRASERO_TRACK_SOURCE_ISO
-+ && track->type != BRASERO_TRACK_SOURCE_ISO_JOLIET
-+ && track->type != BRASERO_TRACK_SOURCE_IMAGER)
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ if (wodim->priv->inf) {
-+ brasero_track_source_free (wodim->priv->inf);
-+ wodim->priv->inf = NULL;
-+ }
-+
-+ if (wodim->priv->track)
-+ brasero_track_source_free (wodim->priv->track);
-+
-+ wodim->priv->track = brasero_track_source_copy (track);
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_flags (BraseroRecorder *recorder,
-+ BraseroRecorderFlag flags,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+
-+ wodim = BRASERO_WODIM (recorder);
-+
-+ wodim->priv->dummy = (flags & BRASERO_RECORDER_FLAG_DUMMY) != 0;
-+ wodim->priv->dao = (flags & BRASERO_RECORDER_FLAG_DAO) != 0;
-+ wodim->priv->nograce = (flags & BRASERO_RECORDER_FLAG_NOGRACE) != 0;
-+ wodim->priv->burnproof = (flags & BRASERO_RECORDER_FLAG_BURNPROOF) != 0;
-+ wodim->priv->overburn = (flags & BRASERO_RECORDER_FLAG_OVERBURN) != 0;
-+ wodim->priv->blank_fast = (flags & BRASERO_RECORDER_FLAG_FAST_BLANK) != 0;
-+ wodim->priv->multi = (flags & BRASERO_RECORDER_FLAG_MULTI) != 0;
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_set_rate (BraseroJob *job,
-+ gint64 speed)
-+{
-+ BraseroWodim *wodim;
-+
-+ if (brasero_job_is_running (job))
-+ return BRASERO_BURN_RUNNING;
-+
-+ wodim = BRASERO_WODIM (job);
-+ wodim->priv->speed = speed / CDR_SPEED;
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_blank (BraseroRecorder *recorder,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+ BraseroBurnResult result;
-+
-+ wodim = BRASERO_WODIM (recorder);
-+
-+ if (!nautilus_burn_drive_can_rewrite (wodim->priv->drive)) {
-+ g_set_error (error,
-+ BRASERO_BURN_ERROR,
-+ BRASERO_BURN_ERROR_GENERAL,
-+ _("the drive cannot rewrite CDs or DVDs"));
-+ return BRASERO_BURN_ERR;
-+ }
-+
-+ wodim->priv->action = BRASERO_WODIM_ACTION_BLANK;
-+ result = brasero_job_run (BRASERO_JOB (wodim), error);
-+ wodim->priv->action = BRASERO_WODIM_ACTION_NONE;
-+
-+ brasero_job_action_changed (BRASERO_JOB (wodim),
-+ BRASERO_BURN_ACTION_NONE,
-+ FALSE);
-+
-+ return result;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_record (BraseroRecorder *recorder,
-+ GError **error)
-+{
-+ BraseroWodim *wodim;
-+ BraseroBurnResult result;
-+
-+ wodim = BRASERO_WODIM (recorder);
-+
-+ if (!wodim->priv->track)
-+ return BRASERO_BURN_NOT_READY;
-+
-+ wodim->priv->action = BRASERO_WODIM_ACTION_RECORD;
-+
-+ /* set as slave if track is an imager (on the fly burning) */
-+ if (wodim->priv->track->type == BRASERO_TRACK_SOURCE_IMAGER) {
-+ BraseroJob *slave;
-+
-+ slave = BRASERO_JOB (wodim->priv->track->contents.imager.obj);
-+ brasero_job_set_slave (BRASERO_JOB (wodim), slave);
-+ brasero_job_set_relay_slave_signals (BRASERO_JOB (wodim), FALSE);
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), TRUE);
-+ }
-+ else
-+ brasero_job_set_run_slave (BRASERO_JOB (wodim), FALSE);
-+
-+ result = brasero_job_run (BRASERO_JOB (wodim), error);
-+ brasero_job_set_slave (BRASERO_JOB (wodim), NULL);
-+ wodim->priv->action = BRASERO_WODIM_ACTION_NONE;
-+ return result;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_get_rate (BraseroJob *job,
-+ gint64 *rate)
-+{
-+ BraseroWodim *wodim;
-+
-+ wodim = BRASERO_WODIM (job);
-+
-+ if (rate)
-+ *rate = wodim->priv->cur_speed;
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_get_written (BraseroJob *job,
-+ gint64 *written)
-+{
-+ BraseroWodim *wodim;
-+
-+ wodim = BRASERO_WODIM (job);
-+
-+ if (written)
-+ *written = wodim->priv->b_written;
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_get_fifo (BraseroRecorder *recorder,
-+ gint *fifo)
-+{
-+ BraseroWodim *wodim;
-+
-+ wodim = BRASERO_WODIM (recorder);
-+
-+ if (fifo)
-+ *fifo = wodim->priv->fifo;
-+
-+ return BRASERO_BURN_OK;
-+}
-+
-+static BraseroBurnResult
-+brasero_wodim_get_action_string (BraseroJob *job,
-+ BraseroBurnAction action,
-+ char **string)
-+{
-+ job = brasero_job_get_slave (job);
-+ if (!job)
-+ return BRASERO_BURN_NOT_SUPPORTED;
-+
-+ return brasero_job_get_action_string (job, action, string);
-+}
-+
-+void
-+brasero_wodim_set_immediate (BraseroWodim *wodim, gint minbuf)
-+{
-+ g_return_if_fail (BRASERO_IS_WODIM (wodim));
-+
-+ if (minbuf > 95 || minbuf < 25)
-+ minbuf = 30;
-+
-+ wodim->priv->immediate = 1;
-+ wodim->priv->minbuf = minbuf;
-+}
-diff -urN brasero-0.4.4.orig/src/burn-wodim.h brasero-0.4.4/src/burn-wodim.h
---- brasero-0.4.4.orig/src/burn-wodim.h 1970-01-01 01:00:00.000000000 +0100
-+++ brasero-0.4.4/src/burn-wodim.h 2006-10-23 10:41:18.000000000 +0200
-@@ -0,0 +1,59 @@
-+/***************************************************************************
-+ * wodim.h
-+ *
-+ * dim jan 22 15:22:52 2006
-+ * Copyright 2006 Rouquier Philippe
-+ * brasero-app at wanadoo.fr
-+ ***************************************************************************/
-+
-+/*
-+ * 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 WODIM_H
-+#define WODIM_H
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+#include "burn-process.h"
-+
-+G_BEGIN_DECLS
-+
-+#define BRASERO_TYPE_WODIM (brasero_wodim_get_type ())
-+#define BRASERO_WODIM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), BRASERO_TYPE_WODIM, BraseroWodim))
-+#define BRASERO_WODIM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), BRASERO_TYPE_WODIM, BraseroWodimClass))
-+#define BRASERO_IS_WODIM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), BRASERO_TYPE_WODIM))
-+#define BRASERO_IS_WODIM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), BRASERO_TYPE_WODIM))
-+#define BRASERO_WODIM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), BRASERO_TYPE_WODIM, BraseroWodimClass))
-+
-+typedef struct BraseroWodimPrivate BraseroWodimPrivate;
-+
-+typedef struct {
-+ BraseroProcess parent;
-+ BraseroWodimPrivate *priv;
-+} BraseroWodim;
-+
-+typedef struct {
-+ BraseroProcessClass parent_class;
-+} BraseroWodimClass;
-+
-+GType brasero_wodim_get_type ();
-+BraseroWodim *brasero_wodim_new ();
-+
-+void
-+brasero_wodim_set_immediate (BraseroWodim *wodim, gint minbuf);
-+
-+#endif /* WODIM_H */
-diff -urN brasero-0.4.4.orig/src/Makefile.am brasero-0.4.4/src/Makefile.am
---- brasero-0.4.4.orig/src/Makefile.am 2006-09-07 17:47:40.000000000 +0200
-+++ brasero-0.4.4/src/Makefile.am 2006-10-23 10:42:15.000000000 +0200
-@@ -103,8 +103,8 @@
- burn-imager.h \
- burn-mkisofs.c \
- burn-mkisofs.h \
-- burn-cdrecord.c \
-- burn-cdrecord.h \
-+ burn-wodim.c \
-+ burn-wodim.h \
- burn-cdrdao.c \
- burn-cdrdao.h \
- burn-growisofs.c \
-diff -urN brasero-0.4.4.orig/src/Makefile.in brasero-0.4.4/src/Makefile.in
---- brasero-0.4.4.orig/src/Makefile.in 2006-09-07 17:48:00.000000000 +0200
-+++ brasero-0.4.4/src/Makefile.in 2006-10-23 10:42:08.000000000 +0200
-@@ -64,7 +64,7 @@
- eggtrayicon.$(OBJEXT) tray.$(OBJEXT) burn.$(OBJEXT) \
- burn-job.$(OBJEXT) burn-process.$(OBJEXT) \
- burn-recorder.$(OBJEXT) burn-imager.$(OBJEXT) \
-- burn-mkisofs.$(OBJEXT) burn-cdrecord.$(OBJEXT) \
-+ burn-mkisofs.$(OBJEXT) burn-wodim.$(OBJEXT) \
- burn-cdrdao.$(OBJEXT) burn-growisofs.$(OBJEXT) \
- burn-readcd.$(OBJEXT) burn-mkisofs-base.$(OBJEXT) \
- burn-dvd-rw-format.$(OBJEXT) burn-transcode.$(OBJEXT) \
-@@ -367,8 +367,8 @@
- burn-imager.h \
- burn-mkisofs.c \
- burn-mkisofs.h \
-- burn-cdrecord.c \
-- burn-cdrecord.h \
-+ burn-wodim.c \
-+ burn-wodim.h \
- burn-cdrdao.c \
- burn-cdrdao.h \
- burn-growisofs.c \
-@@ -486,7 +486,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-basics.Po at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-caps.Po at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-cdrdao.Po at am__quote@
-- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-cdrecord.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-wodim.Po at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-common.Po at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-dialog.Po at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/burn-dvd-rw-format.Po at am__quote@
+diff -Nur brasero-0.5.2-ORIG/src/burn-readcd.c brasero-0.5.2/src/burn-readcd.c
+--- brasero-0.5.2-ORIG/src/burn-readcd.c 2007-06-01 17:07:38.000000000 -0300
++++ brasero-0.5.2/src/burn-readcd.c 2007-06-01 17:23:13.000000000 -0300
+@@ -613,7 +613,7 @@
+ if (!readcd->priv->source)
+ BRASERO_JOB_NOT_READY (readcd);
+
+- g_ptr_array_add (argv, g_strdup ("readcd"));
++ g_ptr_array_add (argv, g_strdup ("readom"));
+
+ drive = readcd->priv->source->contents.drive.disc;
+ if (NCB_DRIVE_GET_DEVICE (drive))
More information about the pkg-gnome-commits
mailing list