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/configuration.h

356 lines
9.3 KiB

#ifndef CONFIG_H
#define CONFIG_H
#include "formatinfoloader.h"
#include "conversionoptions.h"
#include <tqobject.h>
#include <tqvaluelist.h>
#include <tqstringlist.h>
#include <tqmap.h>
class Logger;
class ConvertPlugin;
//class ConvertPluginLoader;
class ReplayGainPlugin;
//class ReplayGainPluginLoader;
class RipperPlugin;
struct ProfileData;
/**
* @short Format items for the format list
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class FormatItem
{
public:
/**
* Constructor
*/
FormatItem();
/**
* Destructor
*/
virtual ~FormatItem();
TQStringList mime_types;
TQStringList extensions; // for easy use
TQStringList correction_file_mime_types;
TQStringList correction_file_extensions; // for easy use
TQString description;
FormatInfo::CompressionType compressionType;
int compressionLevel; // the value from the config dialog
bool internalReplayGain;
int size;
TQValueList<ConvertPlugin*> encoders;
TQValueList<ConvertPlugin*> decoders;
TQValueList<ReplayGainPlugin*> replaygains;
//TQValueList<RepairerPlugin*> repairers;
ConvertPlugin* encoder;
ConvertPlugin* decoder;
ReplayGainPlugin* replaygain;
//RepairerPlugin* repairer;
};
/**
* @short Configuration class
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class Config : public TQObject
{
TQ_OBJECT
public:
/**
* Constructor
*/
Config( Logger* );
/**
* Destructor
*/
virtual ~Config();
/**
* Read the preferences from the configuration file
*/
void read();
/**
* Write the preferences to the configuration file
*/
void write( bool sync = true );
/**
* Read the profiles from the profiles file
*/
void readProfiles();
/**
* Write the profiles to the profiles file
*/
void writeProfiles();
/**
* Get the encoder for a given file format (mime type or extension)
*/
ConvertPlugin* encoderForFormat( const TQString &format );
/**
* Get the decoder for a given file format (mime type or extension)
*/
ConvertPlugin* decoderForFormat( const TQString &format );
/**
* Get the decoder for a given file format (mime type or extension)
*/
ReplayGainPlugin* replaygainForFormat( const TQString &format );
/**
* Get the format information for a given file format (mime type or extension)
*/
FormatItem* getFormatItem( const TQString &format );
/**
* Get the current ripper
*/
RipperPlugin* getCurrentRipper() { return currentRipper; }
/**
* Set the current ripper
*/
void setCurrentRipper( RipperPlugin* ripper ) { currentRipper = ripper; }
/**
* Returns a list of all loaded rippers
*/
TQValueList<RipperPlugin*> allRippers() { return rippers; }
/**
* Returns a list of all loaded converters
*/
TQValueList<ConvertPlugin*> allConverters() { return converters; }
/**
* Returns a list of all loaded replaygains
*/
TQValueList<ReplayGainPlugin*> allReplayGains() { return replaygains; }
/**
* Returns a list of all known file formats
*/
TQStringList allFormats();
/**
* Returns a list of all known encodeable file formats
*/
TQStringList allEncodableFormats();
/**
* Returns a list of all known lossy encodeable file formats
*/
TQStringList allLossyEncodableFormats();
/**
* Returns a list of all known lossless encodeable file formats
*/
TQStringList allLosslessEncodableFormats();
/**
* Returns a list of all known hybrid encodeable file formats
*/
TQStringList allHybridEncodableFormats();
/**
* Returns the extension of the correction file format for the given format
* If there is nor correction file format, the returned string is empty
*/
TQString getCorrectionExtension( const TQString &format );
/**
* Returns a localized description for the given format
*/
TQString getFormatDescription( const TQString &format );
/**
* Add a new profile
*/
void addProfile( const TQString &name, const ConversionOptions& profile );
/**
* Remove a new profile
*/
void removeProfile( const TQString &name );
/**
* Returns the conversion options for a profile
*/
ConversionOptions getProfile( const TQString &name );
/**
* Returns the name of the profile with conversion options @p options
*/
TQString getProfileName( const ConversionOptions& options );
/**
* Returns a list of all user defined profiles
*/
TQStringList getAllProfiles();
/**
* Returns true if the @p file can be added to the conversion list (can be decoded)
*/
bool acceptFile( const TQString& format );
/**
* Returns true if the @p file can be added to the replay gain tool
*/
bool acceptReplayGainFile( const TQString& format );
/**
* Returns a file filter suitable for the file open dialog
*/
TQString fileFilter( bool wav = true );
/**
* Returns a string list of supported file formats
*/
TQStringList fileTypes( bool wav = true );
/**
* Returns a file filter suitable for the file open dialog for the replay gain scanner
*/
TQString replayGainFilter();
/**
* Returns a string list of Replay Gain supported file formats
*/
TQStringList replayGainFileTypes();
struct Data {
struct General {
int startTab;
int lastTab;
TQString defaultProfile;
TQString defaultFormat;
// TQString defaultOutputDirectory;
TQString specifyOutputDirectory;
TQString metaDataOutputDirectory;
TQString copyStructureOutputDirectory;
int priority;
bool useVFATNames;
int conflictHandling;
int numFiles;
int updateDelay;
bool askForNewOptions;
bool executeUserScript;
bool showToolBar;
} general;
struct Plugins {
bool checkForUpdates;
} plugins;
struct Environment {
TQStringList directories;
TQStringList foundPrograms;
} environment;
struct App {
int configVersion;
} app;
} data;
bool onlinePluginsChanged;
bool backendsChanged;
TQMap<TQString, TQString> binaries;
private:
struct PluginMapData {
int version;
TQString filename;
TQString type;
};
Logger* logger;
/** holds all known formats */
TQValueList<FormatItem> formats;
/** holds all known rippers */
TQValueList<RipperPlugin*> rippers;
RipperPlugin* currentRipper;
/** holds all known converters */
TQValueList<ConvertPlugin*> converters;
/** holds all known replaygain apps */
TQValueList<ReplayGainPlugin*> replaygains;
/* holds all known file repairing apps */
// TQValueList<RepairerItem> repairer;
//ConvertPluginLoader* convertPluginLoader;
//ReplayGainPluginLoader* replaygainPluginLoader;
/** holds all user defined profiles */
TQValueList<ProfileData> profiles;
/**
* Load the files with the file infos (format descriptions, file size, etc.)
*/
void loadFileInfos();
/**
* Load all plugins that can be found
*/
void loadPlugins();
/**
* A plugin wants to register it's features for a file format
* @p binary The binary name of the app that wants to register it's features
* @p extension The file name extension for that is wants to register
* @p features The features of the app for that extension
*/
void registerFormatFeatures( const TQString &mime_type,
ConvertPlugin* encoder = 0, ConvertPlugin* decoder = 0,
ReplayGainPlugin* replaygain = 0/*, RepairPlugin* repairer = 0*/,
const TQString &correction_file_mime_type = TQString() );
/**
* Generate the service menu
*/
void writeServiceMenu();
/**
* Copy the amarok script
*/
void writeAmarokScript();
/*
* We have new inforamtion for a file format
* @p extension The file name extension for that is wants to register
* @p newSynonym Register a new synonym for this file format?
* @p newMimeType Register a new mime type for this file format?
* @p newDescription Register a new description for this file format?
* @p newSize Register a new size for this file format for calculating the progress?
*/
/*void registerFileFormat( const TQString &extension, const TQString &newSynonym = TQString(),
const TQString &newMimeType = TQString(),
const TQString &newDescription = TQString(),
int newSize = 0, FormatInfo::CompressionType newCompressionType = FormatInfo::lossy );*/
//void registerFileFormat( const TQString &mime_type, const TQString &option, const TQString &value );
// NOTE this function is obsolete.
// after loading all plugins and creating all neccessary file format items,
// sk will search for format info files and update the items.
signals:
void configChanged();
};
#endif // CONFIG_H