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.
soundkonverter/src/convert.h

283 lines
6.6 KiB

#ifndef CONVERT_H
#define CONVERT_H
#include <kio/jobclasses.h>
#include <tqobject.h>
#include <tqvaluelist.h>
#include <kprocess.h>
class Config;
class TagEngine;
class CDManager;
class FileList;
class FileListItem;
class ReplayGain;
class Logger;
class KTempFile;
//class KProcess;
/**
* @short The items for the conversion (for every active file)
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class ConvertItem
{
public:
/**
* A list of flags for knowing what to do
*/
enum Mode {
get = 0x0001, // Copy the file to tmp
get_correction = 0x0002, // Copy the correction file to tmp
rip = 0x0004, // Rip the file
decode = 0x0008, // Decode the file
encode = 0x0010, // Encode the file
replaygain = 0x0020, // Apply replaygain
write_tags = 0x0040, // Write the tags to the file
put = 0x0080, // Move the file to the output directory
put_correction = 0x0100, // Move the correction file to the output directory
execute_userscript= 0x0200 // Run the user script
};
/**
* Default Constructor
*/
ConvertItem();
/**
* Constructor
* @p item A pointer to the file list item
*/
ConvertItem( FileListItem* item );
/**
* Destructor
*/
virtual ~ConvertItem();
/** a reference to the file list item */
FileListItem* fileListItem;
/** for adding replay gain */
ReplayGain* replayGain;
/** if we need to encode, decode, etc. here we have our processes */
KProcess* convertProcess;
/** for moving the file to the temporary or output directory */
KIO::Job* moveJob;
KTempFile* tempInFile;
KTempFile* tempWavFile;
KTempFile* tempOutFile;
TQString correctionInFile;
TQString correctionOutFile;
TQString correctionInputExtension;
TQString correctionOutputExtension;
//TQTime readOutputTimer;
TQTime lastOutputTimer;
/** what shall we do with the file? */
Mode mode;
/** and what are we doing with the file? */
Mode state;
/** the id with that the item is registered at the logger */
int logID;
/** the binary for special treatment */
// TQString binary;
/** the path and the name of the output file (needed for executing a command after conversion) */
TQString outputFilePathName;
/** if it is an audio cd and it should be ripped to one file: the number of tracks on the cd */
int tracks;
/** the current track */
int track;
int lastPercent;
/** the time from the file list item splitted up */
float getTime;
float getCorrectionTime;
float ripTime;
float decodeTime;
float encodeTime;
float replaygainTime;
/** the current conversion progress */
int percent;
};
/**
* @short The conversion engine
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class Convert : public TQObject
{
Q_OBJECT
TQ_OBJECT
public:
/**
* Constructor
*/
Convert( Config*, TagEngine*, CDManager*, FileList*, Logger* );
/**
* Destructor
*/
virtual ~Convert();
void cleanUp();
private:
/**
* Copy the file with the file list item @p item to a temporary directory and download or rip, when necessary
*/
void get( ConvertItem* item );
/**
* Copy the correction file with the file list item @p item to a temporary directory and download or rip, when necessary
*/
void getCorrection( ConvertItem* item );
/**
* Rip the file with the convert item @p item from the CD
*/
void rip( ConvertItem* item );
/**
* Decode the file with the convert item @p item
*/
void decode( ConvertItem* item );
/**
* Encode the file with the convert item @p item
*/
void encode( ConvertItem* item );
/**
* Calculate replaygain tags of the file with the convert item @p item
*/
void replaygain( ConvertItem* item );
/**
* Write the tags of the file with the convert item @p item
*/
void writeTags( ConvertItem* item );
/**
* Copy the file with the convert item @p item to the output directory
*/
void put( ConvertItem* item );
/**
* Copy the correction file with the convert item @p item to the output directory
*/
void putCorrection( ConvertItem* item );
/**
* Run the userscript for the convert item @p item
*/
void executeUserScript( ConvertItem* item );
/**
* Decide, what to do next with out item @p item
*/
void executeNextStep( ConvertItem* item );
/**
* Remove item @p item and emit the state @p state
*/
void remove( ConvertItem* item, int state = 0 );
/** holds all active files */
TQValueList<ConvertItem*> items;
Config* config;
TagEngine* tagEngine;
CDManager* cdManager;
FileList* fileList;
Logger* logger;
TQTimer* tUpdateProgressIndicator;
KProcess notify;
private slots:
/**
* The file is being moved
* @p job The pinter to the job
*/
void moveProgress( KIO::Job* job, unsigned long percent );
/**
* The file has been moved
* @p job The pinter to the job
*/
void moveFinished( KIO::Job* job );
/**
* Get the process' output
* @p proc The pinter to the progess
* @p data The output data
* @p length The length of the data
*/
void processOutput( KProcess *proc, char *data, int length );
/**
* The process has exited
* @p proc The pinter to the progess
*/
void processExit( KProcess *proc );
/**
* Updates the progress indicator
*/
void updateProgressIndicator();
public slots:
/**
* Add a new @p item to the item list and start
*/
void add( FileListItem* item );
/**
* Stop the item with the file list item @p item in the item list and remove it
*/
void stop( FileListItem* item );
/**
* Change the process priorities
*/
// void priorityChanged( int );
signals:
/**
* A job was completed
* The job with the file list item @p item was completed
* And report the finish @p state ( 0 = ok, -1 = error, 1 = aborted )
*/
void finished( FileListItem* item, int state );
/**
* Send the logger a signal
*/
void finishedProcess( int id, int state );
/**
* The next track from @p device can be ripped while the track is being encoded
*/
void rippingFinished( const TQString& device );
void countTime( float );
void uncountTime( float );
void update( float );
};
#endif // CONVERT_H