You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
k3b/libk3b/projects/datacd/k3bisoimager.h

189 lines
4.6 KiB

/*
*
* $Id: k3bisoimager.h 619556 2007-01-03 17:38:12Z trueg $
* Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See the file "COPYING" for the exact licensing terms.
*/
#ifndef K3B_ISO_IMAGER_H
#define K3B_ISO_IMAGER_H
#include <k3bjob.h>
#include "k3bmkisofshandler.h"
#include <qptrqueue.h>
#include <qstringlist.h>
class K3bDataDoc;
class K3bDirItem;
class K3bDataItem;
class K3bFileItem;
class QTextStream;
class K3bProcess;
class KProcess;
class K3bDevice::Device;
class KTempFile;
class K3bIsoImager : public K3bJob, public K3bMkisofsHandler
{
Q_OBJECT
public:
K3bIsoImager( K3bDataDoc*, K3bJobHandler*, QObject* parent = 0, const char* name = 0 );
virtual ~K3bIsoImager();
virtual bool active() const;
int size() const { return m_mkisofsPrintSizeResult; }
virtual bool hasBeenCanceled() const;
/**
* Get the checksum calculated during the creation of the image.
*/
QCString checksum() const;
public slots:
/**
* Starts the actual image creation. Always run init()
* before starting the image creation
*/
virtual void start();
virtual void cancel();
/**
* Initialize the image creator. This calculates the image size and performs
* some checks on the project.
*
* The initialization process also finishes with the finished() signal just
* like a normal job operation. Get the calculated image size via size()
*/
virtual void init();
/**
* Only calculates the size of the image without the additional checks in
* init()
*
* Use this if you need to recalculate the image size for example if the
* multisession info changed.
*/
virtual void calculateSize();
/**
* lets the isoimager write directly into fd instead of writing
* to an image file.
* Be aware that this only makes sense before starting the job.
* To disable just set @p fd to -1
*/
void writeToFd( int fd );
void writeToImageFile( const QString& path );
/**
* If dev == 0 K3bIsoImager will ignore the data in the previous session.
* This is usable for CD-Extra.
*/
void setMultiSessionInfo( const QString&, K3bDevice::Device* dev = 0 );
K3bDevice::Device* device() const { return m_device; }
K3bDataDoc* doc() const { return m_doc; }
protected:
virtual void handleMkisofsProgress( int );
virtual void handleMkisofsInfoMessage( const QString&, int );
virtual bool addMkisofsParameters( bool printSize = false );
/**
* calls writePathSpec, writeRRHideFile, and writeJolietHideFile
*/
bool prepareMkisofsFiles();
/**
* The dummy dir is used to create dirs on the iso-filesystem.
*
* @return an empty dummy dir for use with K3bDirItems.
*/
QString dummyDir( K3bDirItem* );
void outputData();
void initVariables();
virtual void cleanup();
void clearDummyDirs();
/**
* @returns The number of entries written or -1 on error
*/
virtual int writePathSpec();
bool writeRRHideFile();
bool writeJolietHideFile();
bool writeSortWeightFile();
// used by writePathSpec
virtual int writePathSpecForDir( K3bDirItem* dirItem, QTextStream& stream );
virtual void writePathSpecForFile( K3bFileItem*, QTextStream& stream );
QString escapeGraftPoint( const QString& str );
KTempFile* m_pathSpecFile;
KTempFile* m_rrHideFile;
KTempFile* m_jolietHideFile;
KTempFile* m_sortWeightFile;
K3bProcess* m_process;
bool m_processExited;
bool m_canceled;
protected slots:
virtual void slotReceivedStderr( const QString& );
virtual void slotProcessExited( KProcess* );
private slots:
void slotCollectMkisofsPrintSizeStderr(KProcess*, char*, int);
void slotCollectMkisofsPrintSizeStdout( const QString& );
void slotMkisofsPrintSizeFinished();
void slotDataPreparationDone( bool success );
private:
void startSizeCalculation();
class Private;
Private* d;
K3bDataDoc* m_doc;
bool m_noDeepDirectoryRelocation;
bool m_importSession;
QString m_multiSessionInfo;
K3bDevice::Device* m_device;
// used for mkisofs -print-size parsing
QString m_collectedMkisofsPrintSizeStdout;
QString m_collectedMkisofsPrintSizeStderr;
int m_mkisofsPrintSizeResult;
QStringList m_tempFiles;
int m_fdToWriteTo;
bool m_containsFilesWithMultibleBackslashes;
// used to create a unique session id
static int s_imagerSessionCounter;
int m_sessionNumber;
};
#endif