File indexing completed on 2024-05-12 04:51:07

0001 /*
0002     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef K3BMIXEDJOB_H
0007 #define K3BMIXEDJOB_H
0008 
0009 #include "k3bjob.h"
0010 
0011 class QTemporaryFile;
0012 
0013 namespace K3b {
0014     
0015     namespace Device {
0016         class DeviceHandler;
0017     }
0018     class MixedDoc;
0019     class IsoImager;
0020     class AudioImager;
0021     class AbstractWriter;
0022     class WaveFileWriter;
0023     class CdrecordWriter;
0024     class MsInfoFetcher;
0025     class AudioNormalizeJob;
0026     class AudioJobTempData;
0027     class Doc;
0028 
0029     class MixedJob : public BurnJob
0030     {
0031         Q_OBJECT
0032 
0033     public:
0034         MixedJob( MixedDoc*, JobHandler*, QObject* parent = 0 );
0035         ~MixedJob() override;
0036 
0037         Doc* doc() const;
0038         Device::Device* writer() const override;
0039 
0040         QString jobDescription() const override;
0041         QString jobDetails() const override;
0042 
0043     public Q_SLOTS:
0044         void cancel() override;
0045         void start() override;
0046 
0047     protected Q_SLOTS:
0048         // iso imager slots
0049         void slotIsoImagerFinished( bool success );
0050         void slotIsoImagerPercent(int);
0051 
0052         // ms info fetcher slots
0053         void slotMsInfoFetched(bool);
0054 
0055         // audio decoder slots
0056         void slotAudioDecoderFinished( bool );
0057         void slotAudioDecoderNextTrack( int, int );
0058         void slotAudioDecoderPercent(int);
0059         void slotAudioDecoderSubPercent( int );
0060 
0061         // writer slots
0062         void slotWriterFinished( bool success );
0063         void slotWriterNextTrack(int, int);
0064         void slotWriterJobPercent(int);
0065 
0066         // normalizing slots
0067         void slotNormalizeJobFinished( bool );
0068         void slotNormalizeProgress( int );
0069         void slotNormalizeSubProgress( int );
0070 
0071         // misc slots
0072         void slotMediaReloadedForSecondSession( K3b::Device::DeviceHandler* dh );
0073         void slotMaxSpeedJobFinished( bool );
0074 
0075     private:
0076         bool prepareWriter();
0077         bool writeTocFile();
0078         bool writeInfFiles();
0079         bool startWriting();
0080         void startFirstCopy();
0081         void startSecondSession();
0082         void addAudioTracks( CdrecordWriter* writer );
0083         void addDataTrack( CdrecordWriter* writer );
0084         void cleanupAfterError();
0085         void removeBufferFiles();
0086         void createIsoImage();
0087         void determineWritingMode();
0088         void normalizeFiles();
0089         void prepareProgressInformation();
0090         void writeNextCopy();
0091         void determinePreliminaryDataImageSize();
0092 
0093         MixedDoc* m_doc;
0094         IsoImager* m_isoImager;
0095         AudioImager* m_audioImager;
0096         AudioJobTempData* m_tempData;
0097         WaveFileWriter* m_waveFileWriter;
0098         AbstractWriter* m_writer;
0099         MsInfoFetcher* m_msInfoFetcher;
0100         AudioNormalizeJob* m_normalizeJob;
0101 
0102         QString m_isoImageFilePath;
0103 
0104         QTemporaryFile* m_tocFile;
0105 
0106         enum Action { INITIALIZING_IMAGER,
0107                       PREPARING_DATA,
0108                       CREATING_ISO_IMAGE,
0109                       CREATING_AUDIO_IMAGE,
0110                       WRITING_ISO_IMAGE,
0111                       WRITING_AUDIO_IMAGE,
0112                       FETCHING_MSMessageInfo };
0113 
0114         int m_currentAction;
0115         double m_audioDocPartOfProcess;
0116 
0117         bool m_canceled;
0118         bool m_errorOccuredAndAlreadyReported;
0119 
0120         int m_usedDataMode;
0121         WritingApp m_usedDataWritingApp;
0122         WritingApp m_usedAudioWritingApp;
0123         WritingMode m_usedDataWritingMode;
0124         WritingMode m_usedAudioWritingMode;
0125 
0126         QString m_tempFilePrefix;
0127 
0128         Msf m_projectSize;
0129 
0130         class Private;
0131         Private* d;
0132     };
0133 }
0134 
0135 #endif