/* * * $Id: k3bdvdrecordwriter.cpp 619556 2007-01-03 17:38:12Z trueg $ * Copyright (C) 2003 Sebastian Trueg * * This file is part of the K3b project. * Copyright (C) 1998-2007 Sebastian Trueg * * 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 #include #include #include #include #include #include #include K3bDvdrecordWriter::K3bDvdrecordWriter( K3bDevice::Device* dev, TQObject* 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, TQT_SIGNAL(stdoutLine(const TQString&)), this, TQT_SLOT(slotStdLine(const TQString&)) ); connect( m_process, TQT_SIGNAL(stderrLine(const TQString&)), this, TQT_SLOT(slotStdLine(const TQString&)) ); connect( m_process, TQT_SIGNAL(processExited(KProcess*)), this, TQT_SLOT(slotProcessExited(KProcess*)) ); connect( m_process, TQT_SIGNAL(wroteStdin(KProcess*)), this, TQT_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 << TQString("dev=%1").tqarg(K3b::externalBinDeviceParameter(burnDevice(), m_cdrecordBinObject)); *m_process << TQString("speed=%1").tqarg(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 << TQString("fs=%1m").tqarg( 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.").tqarg(m_cdrecordBinObject->version), INFO ); // additional user parameters from config const TQStringList& params = m_cdrecordBinObject->userParameters(); for( TQStringList::const_iterator it = params.begin(); it != params.end(); ++it ) *m_process << *it; // add the user parameters for( TQStringList::const_iterator it = m_arguments.begin(); it != m_arguments.end(); ++it ) *m_process << *it; } #include "k3bdvdrecordwriter.moc"