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