1 // 2 // C++ Interface: config 3 // 4 5 #ifndef CONFIG_H 6 #define CONFIG_H 7 8 #include <QObject> 9 10 #include "pluginloader.h" 11 #include "metadata/tagengine.h" 12 #include "conversionoptionsmanager.h" 13 #include "codecoptimizations.h" 14 15 #include <QDomDocument> 16 17 #define ConfigUpdateDelay 100 18 19 class Logger; 20 21 22 /** 23 @author Daniel Faust <hessijames@gmail.com> 24 */ 25 class Config : public QObject 26 { 27 Q_OBJECT 28 public: 29 struct CodecData 30 { 31 QString codecName; 32 QStringList encoders; 33 QStringList decoders; 34 QStringList replaygain; 35 }; 36 37 struct ProfileData 38 { 39 QString fileName; 40 QString profileName; 41 QString pluginName; 42 QString codecName; 43 QDomDocument data; 44 }; 45 46 struct Data 47 { 48 struct General 49 { 50 int startTab; 51 int lastTab; 52 QString defaultProfile; 53 QString lastProfile; // may be obsolete 54 QString defaultFormat; 55 QString lastFormat; 56 int lastOutputDirectoryMode; 57 QString specifyOutputDirectory; 58 QString metaDataOutputDirectory; 59 QString copyStructureOutputDirectory; 60 QStringList lastMetaDataOutputDirectoryPaths; 61 QStringList lastNormalOutputDirectoryPaths; 62 // int priority; 63 bool waitForAlbumGain; 64 bool useVFATNames; 65 bool copyIfSameCodec; 66 bool writeLogFiles; 67 enum ConflictHandling 68 { 69 NewFileName = 0, 70 Skip = 1, 71 Overwrite = 2 72 } conflictHandling; 73 int numFiles; 74 int numReplayGainFiles; 75 // bool executeUserScript; 76 // bool showToolBar; 77 // int outputFilePermissions; 78 QStringList actionMenuConvertMimeTypes; 79 QStringList actionMenuReplayGainMimeTypes; 80 enum ReplayGainGrouping 81 { 82 AlbumDirectory = 0, 83 Album = 1, 84 Directory = 2 85 } replayGainGrouping; 86 QString preferredOggVorbisExtension; 87 QString preferredVorbisCommentCommentTag; 88 QString preferredVorbisCommentTrackTotalTag; 89 QString preferredVorbisCommentDiscTotalTag; 90 } general; 91 92 struct Advanced 93 { 94 bool useSharedMemoryForTempFiles; 95 int maxSizeForSharedMemoryTempFiles; // maximum file size for storing in shared memory [MiB] 96 int sharedMemorySize; // the size of the tmpfs [MiB] 97 bool usePipes; 98 bool ejectCdAfterRip; 99 } advanced; 100 101 struct CoverArt 102 { 103 int writeCovers; 104 int writeCoverName; 105 QString writeCoverDefaultName; 106 } coverArt; 107 108 struct Backends 109 { 110 QList<CodecData> codecs; 111 QStringList filters; 112 QStringList enabledFilters; 113 } backends; 114 115 struct BackendOptimizationsIgnoreList 116 { 117 QList<CodecOptimizations::Optimization> optimizationList; 118 } backendOptimizationsIgnoreList; 119 120 struct App 121 { 122 int configVersion; 123 } app; 124 125 QMap<QString,ConversionOptions*> profiles; 126 127 } data; 128 129 Config( Logger *_logger, QObject *parent ); 130 131 ~Config(); 132 133 void load(); 134 void save(); 135 136 /// returns a list of all working custom profiles 137 QStringList customProfiles(); 138 139 /// Check if new backends got installed and the backend settings can be optimized 140 QList<CodecOptimizations::Optimization> getOptimizations( bool includeIgnored = false ); 141 pluginLoader()142 PluginLoader *pluginLoader() { return pPluginLoader; } tagEngine()143 TagEngine *tagEngine() { return pTagEngine; } conversionOptionsManager()144 ConversionOptionsManager *conversionOptionsManager() { return pConversionOptionsManager; } 145 146 public slots: 147 /// Optimize backend settings according to the user input 148 void doOptimizations( const QList<CodecOptimizations::Optimization>& optimizationList ); 149 150 signals: 151 /// connected to logger 152 void updateWriteLogFilesSetting( bool writeLogFiles ); 153 154 private: 155 Logger *logger; 156 157 PluginLoader *pPluginLoader; 158 TagEngine *pTagEngine; 159 ConversionOptionsManager *pConversionOptionsManager; 160 161 void writeServiceMenu(); 162 }; 163 164 #endif 165