summaryrefslogtreecommitdiffstats
path: root/libk3b/projects/k3bdvdrecordwriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libk3b/projects/k3bdvdrecordwriter.cpp')
-rw-r--r--libk3b/projects/k3bdvdrecordwriter.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/libk3b/projects/k3bdvdrecordwriter.cpp b/libk3b/projects/k3bdvdrecordwriter.cpp
new file mode 100644
index 0000000..0910d4a
--- /dev/null
+++ b/libk3b/projects/k3bdvdrecordwriter.cpp
@@ -0,0 +1,119 @@
+/*
+ *
+ * $Id: k3bdvdrecordwriter.cpp 619556 2007-01-03 17:38:12Z trueg $
+ * Copyright (C) 2003 Sebastian Trueg <[email protected]>
+ *
+ * This file is part of the K3b project.
+ * Copyright (C) 1998-2007 Sebastian Trueg <[email protected]>
+ *
+ * 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.
+ * See the file "COPYING" for the exact licensing terms.
+ */
+
+#include "k3bdvdrecordwriter.h"
+
+#include <k3bcore.h>
+#include <k3bexternalbinmanager.h>
+#include <k3bprocess.h>
+#include <k3bdevice.h>
+#include <k3bdevicemanager.h>
+#include <k3bglobals.h>
+#include <k3bglobalsettings.h>
+
+#include <klocale.h>
+
+
+K3bDvdrecordWriter::K3bDvdrecordWriter( K3bDevice::Device* dev, QObject* parent, const char* name )
+ : K3bCdrecordWriter( dev, parent, name )
+{
+}
+
+
+K3bDvdrecordWriter::~K3bDvdrecordWriter()
+{
+}
+
+void K3bDvdrecordWriter::prepareProcess()
+{
+ if( m_process ) delete m_process; // kdelibs want this!
+ m_process = new K3bProcess();
+ m_process->setRunPrivileged(true);
+ m_process->setSplitStdout(true);
+ connect( m_process, SIGNAL(stdoutLine(const QString&)), this, SLOT(slotStdLine(const QString&)) );
+ connect( m_process, SIGNAL(stderrLine(const QString&)), this, SLOT(slotStdLine(const QString&)) );
+ connect( m_process, SIGNAL(processExited(KProcess*)), this, SLOT(slotProcessExited(KProcess*)) );
+ connect( m_process, SIGNAL(wroteStdin(KProcess*)), this, SIGNAL(dataWritten()) );
+
+// if( k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "dvd-patch" ) )
+// m_cdrecordBinObject = k3bcore->externalBinManager()->binObject("cdrecord");
+// else
+ m_cdrecordBinObject = k3bcore->externalBinManager()->binObject("dvdrecord");
+
+ if( !m_cdrecordBinObject )
+ return;
+
+ *m_process << m_cdrecordBinObject->path;
+
+ // display progress
+ *m_process << "-v";
+
+ if( m_cdrecordBinObject->hasFeature( "delay") )
+ *m_process << "-delay" << "0";
+ else if( m_cdrecordBinObject->hasFeature( "gracetime") )
+ *m_process << "gracetime=2"; // 2 is the lowest allowed value (Joerg, why do you do this to us?)
+
+ // Again we assume the device to be set!
+ *m_process << QString("dev=%1").arg(K3b::externalBinDeviceParameter(burnDevice(), m_cdrecordBinObject));
+ *m_process << QString("speed=%1").arg(burnSpeed());
+
+ // DVDs are only written in DAO mode (and Packet, but we do not support that since it does not
+ // make much sense here)
+ *m_process << "-dao";
+ setWritingMode( K3b::DAO ); // just to make sure the CdrecordWriter emits the correct messages
+
+ if( simulate() )
+ *m_process << "-dummy";
+
+ if( burnproof() ) {
+ if( burnDevice()->burnproof() ) {
+ // with cdrecord 1.11a02 burnproof was renamed to burnfree
+ // what about dvdrecord??
+ if( m_cdrecordBinObject->version < K3bVersion( "1.11a02" ) )
+ *m_process << "driveropts=burnproof";
+ else
+ *m_process << "driveropts=burnfree";
+ }
+ else
+ emit infoMessage( i18n("Writer does not support buffer underrun free recording (BURNPROOF)"), INFO );
+ }
+
+ if( k3bcore->globalSettings()->ejectMedia() )
+ *m_process << "-eject";
+
+ bool manualBufferSize = k3bcore->globalSettings()->manualBufferSize();
+ if( manualBufferSize ) {
+ *m_process << QString("fs=%1m").arg( k3bcore->globalSettings()->writingBuffer() );
+ }
+
+ bool overburn = k3bcore->globalSettings()->overburn();
+ if( overburn )
+ if( m_cdrecordBinObject->hasFeature("overburn") )
+ *m_process << "-overburn";
+ else
+ emit infoMessage( i18n("Cdrecord %1 does not support overburning.").arg(m_cdrecordBinObject->version), INFO );
+
+ // additional user parameters from config
+ const QStringList& params = m_cdrecordBinObject->userParameters();
+ for( QStringList::const_iterator it = params.begin(); it != params.end(); ++it )
+ *m_process << *it;
+
+ // add the user parameters
+ for( QStringList::const_iterator it = m_arguments.begin(); it != m_arguments.end(); ++it )
+ *m_process << *it;
+}
+
+#include "k3bdvdrecordwriter.moc"
+