merged: Linuxport revisions through to r15292.
[xbmc:xbmc-antiquated.git] / xbmc / Settings.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2008 Team XBMC
4  *      http://xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 // REMOVE ME WHEN WE SWITCH TO SKIN VERSION 2.1
24 #define PRE_SKIN_VERSION_2_1_COMPATIBILITY 1
25 // REMOVE ME WHEN WE SWITCH TO SKIN VERSION 2.1
26
27 #include "settings/VideoSettings.h"
28 #include "StringUtils.h"
29 #include "GUISettings.h"
30 #include "Profile.h"
31 #include "MediaSource.h"
32 #include "ViewState.h"
33
34 #include <vector>
35 #include <map>
36
37 #define CACHE_AUDIO 0
38 #define CACHE_VIDEO 1
39 #define CACHE_VOB   2
40
41 #define VOLUME_MINIMUM -6000  // -60dB
42 #define VOLUME_MAXIMUM 0      // 0dB
43 #define VOLUME_DRC_MINIMUM 0    // 0dB
44 #define VOLUME_DRC_MAXIMUM 3000 // 30dB
45
46 #define VIEW_MODE_NORMAL        0
47 #define VIEW_MODE_ZOOM          1
48 #define VIEW_MODE_STRETCH_4x3   2
49 #define VIEW_MODE_STRETCH_14x9  3
50 #define VIEW_MODE_STRETCH_16x9  4
51 #define VIEW_MODE_ORIGINAL      5
52 #define VIEW_MODE_CUSTOM        6
53
54 #define STACK_NONE          0
55 #define STACK_SIMPLE        1
56 #define STACK_FUZZY         2
57 #define STACK_UNAVAILABLE   4
58
59 #define VIDEO_SHOW_ALL 0
60 #define VIDEO_SHOW_UNWATCHED 1
61 #define VIDEO_SHOW_WATCHED 2
62
63 class CSkinString
64 {
65 public:
66   CStdString name;
67   CStdString value;
68 };
69
70 class CSkinBool
71 {
72 public:
73   CStdString name;
74   bool value;
75 };
76
77 struct VOICE_MASK {
78   float energy;
79   float pitch;
80   float robotic;
81   float whisper;
82 };
83
84 class CSettings
85 {
86 public:
87   CSettings(void);
88   virtual ~CSettings(void);
89
90   bool Load(bool& bXboxMediacenter, bool& bSettings);
91   void Save() const;
92   bool Reset();
93
94   void Clear();
95
96   bool LoadProfile(int index);
97   bool SaveSettingsToProfile(int index);
98   bool DeleteProfile(int index);
99   void CreateProfileFolders();
100
101   VECSOURCES *GetSourcesFromType(const CStdString &type);
102   CStdString GetDefaultSourceFromType(const CStdString &type);
103
104   bool UpdateSource(const CStdString &strType, const CStdString strOldName, const CStdString &strUpdateChild, const CStdString &strUpdateValue);
105   bool DeleteSource(const CStdString &strType, const CStdString strName, const CStdString strPath);
106   bool UpdateShare(const CStdString &type, const CStdString oldName, const CMediaSource &share);
107   bool AddShare(const CStdString &type, const CMediaSource &share);
108
109   int TranslateSkinString(const CStdString &setting);
110   const CStdString &GetSkinString(int setting) const;
111   void SetSkinString(int setting, const CStdString &label);
112
113   int TranslateSkinBool(const CStdString &setting);
114   bool GetSkinBool(int setting) const;
115   void SetSkinBool(int setting, bool set);
116
117   void ResetSkinSetting(const CStdString &setting);
118   void ResetSkinSettings();
119
120   struct AdvancedSettings
121   {
122 public:
123     // multipath testing
124     bool m_useMultipaths;
125     bool m_DisableModChipDetection;
126
127     int m_audioHeadRoom;
128     float m_karaokeSyncDelay;
129
130     float m_videoSubsDelayRange;
131     float m_videoAudioDelayRange;
132     int m_videoSmallStepBackSeconds;
133     int m_videoSmallStepBackTries;
134     int m_videoSmallStepBackDelay;
135     bool m_videoUseTimeSeeking;
136     int m_videoTimeSeekForward;
137     int m_videoTimeSeekBackward;
138     int m_videoTimeSeekForwardBig;
139     int m_videoTimeSeekBackwardBig;
140     int m_videoPercentSeekForward;
141     int m_videoPercentSeekBackward;
142     int m_videoPercentSeekForwardBig;
143     int m_videoPercentSeekBackwardBig;
144     int m_videoBlackBarColour;
145
146     float m_slideshowBlackBarCompensation;
147     float m_slideshowZoomAmount;
148     float m_slideshowPanAmount;
149
150     int m_lcdRows;
151     int m_lcdColumns;
152     int m_lcdAddress1;
153     int m_lcdAddress2;
154     int m_lcdAddress3;
155     int m_lcdAddress4;
156
157     int m_autoDetectPingTime;
158     float m_playCountMinimumPercent;
159
160     int m_songInfoDuration;
161     int m_busyDialogDelay;
162     int m_logLevel;
163     CStdString m_cddbAddress;
164     bool m_usePCDVDROM;
165     bool m_noDVDROM;
166     CStdString m_cachePath;
167     bool m_displayRemoteCodes;
168     CStdStringArray m_videoStackRegExps;
169     CStdStringArray m_tvshowStackRegExps;
170     CStdString m_tvshowMultiPartStackRegExp;
171     CStdStringArray m_pathSubstitutions;
172     int m_remoteRepeat;
173     float m_controllerDeadzone;
174     bool m_FTPShowCache;
175
176     bool m_playlistAsFolders;
177     bool m_detectAsUdf;
178
179     int m_thumbSize;
180
181     int m_sambaclienttimeout;
182     CStdString m_sambadoscodepage;
183     CStdString m_musicThumbs;
184     CStdString m_dvdThumbs;
185
186     bool m_bMusicLibraryHideAllItems;
187     bool m_bMusicLibraryAllItemsOnBottom;
188     bool m_bMusicLibraryHideCompilationArtists;
189     bool m_bMusicLibraryAlbumsSortByArtistThenYear;
190     CStdString m_strMusicLibraryAlbumFormat;
191     CStdString m_strMusicLibraryAlbumFormatRight;
192     bool m_prioritiseAPEv2tags;
193     CStdString m_musicItemSeparator;
194     CStdString m_videoItemSeparator;
195     std::vector<CStdString> m_musicTagsFromFileFilters;
196
197     bool m_bVideoLibraryHideAllItems;
198     bool m_bVideoLibraryAllItemsOnBottom;
199     bool m_bVideoLibraryHideRecentlyAddedItems;
200     bool m_bVideoLibraryHideEmptySeries;
201     bool m_bVideoLibraryCleanOnUpdate;
202
203     bool m_bUseEvilB;
204     std::vector<CStdString> m_vecTokens; // cleaning strings tied to language
205     //TuxBox
206     bool m_bTuxBoxSubMenuSelection;
207     int m_iTuxBoxDefaultSubMenu;
208     int m_iTuxBoxDefaultRootMenu;
209     bool m_bTuxBoxAudioChannelSelection;
210     bool m_bTuxBoxPictureIcon;
211     int m_iTuxBoxEpgRequestTime;
212     int m_iTuxBoxZapWaitTime;
213     bool m_bTuxBoxSendAllAPids;
214
215     int m_curlclienttimeout;
216     int m_playlistRetries;
217     int m_playlistTimeout;
218   };
219   struct stSettings
220   {
221 public:
222     CStdString m_pictureExtensions;
223     CStdString m_musicExtensions;
224     CStdString m_videoExtensions;
225
226     CStdString m_defaultMusicScraper;
227
228     CStdString m_logFolder;
229
230     bool m_bMyMusicSongInfoInVis;
231     bool m_bMyMusicSongThumbInVis;
232
233     CViewState m_viewStateMusicNavArtists;
234     CViewState m_viewStateMusicNavAlbums;
235     CViewState m_viewStateMusicNavSongs;
236     CViewState m_viewStateMusicShoutcast;
237     CViewState m_viewStateMusicLastFM;
238     CViewState m_viewStateVideoNavActors;
239     CViewState m_viewStateVideoNavYears;
240     CViewState m_viewStateVideoNavGenres;
241     CViewState m_viewStateVideoNavTitles;
242     CViewState m_viewStateVideoNavEpisodes;
243     CViewState m_viewStateVideoNavSeasons;
244     CViewState m_viewStateVideoNavTvShows;
245     CViewState m_viewStateVideoNavMusicVideos;
246
247     bool m_bMyMusicPlaylistRepeat;
248     bool m_bMyMusicPlaylistShuffle;
249     int m_iMyMusicStartWindow;
250
251     // for scanning
252     bool m_bMyMusicIsScanning;
253
254     CVideoSettings m_defaultVideoSettings;
255     CVideoSettings m_currentVideoSettings;
256
257     float m_fZoomAmount;      // current zoom amount
258     float m_fPixelRatio;      // current pixel ratio
259
260     int m_iMyVideoWatchMode;
261
262     bool m_bMyVideoPlaylistRepeat;
263     bool m_bMyVideoPlaylistShuffle;
264     bool m_bMyVideoNavFlatten;
265
266     int m_iVideoStartWindow;
267
268     int m_iMyVideoStack;
269     char m_szMyVideoCleanTokens[256];
270     char m_szMyVideoCleanSeparators[32];
271
272     int iAdditionalSubtitleDirectoryChecked;
273
274     char szOnlineArenaPassword[32]; // private arena password
275     char szOnlineArenaDescription[64]; // private arena description
276
277           int m_HttpApiBroadcastPort;
278           int m_HttpApiBroadcastLevel;
279     int m_nVolumeLevel;                     // measured in milliBels -60dB -> 0dB range.
280     int m_dynamicRangeCompressionLevel;     // measured in milliBels  0dB -> 30dB range.
281     int m_iPreMuteVolumeLevel;    // save the m_nVolumeLevel for proper restore
282     bool m_bMute;
283     int m_iSystemTimeTotalUp;    // Uptime in minutes!
284
285     VOICE_MASK m_karaokeVoiceMask[4];
286   };
287
288   std::map<int,std::pair<std::vector<int>,std::vector<std::string> > > m_mapRssUrls;
289   std::map<int, CSkinString> m_skinStrings;
290   std::map<int, CSkinBool> m_skinBools;
291
292   // cache copies of these parsed values, to avoid re-parsing over and over
293   CStdString m_szMyVideoStackSeparatorsString;
294   CStdStringArray m_szMyVideoStackTokensArray;
295   CStdString m_szMyVideoCleanSeparatorsString;
296   CStdStringArray m_szMyVideoCleanTokensArray;
297
298   VECSOURCES m_programSources;
299   VECSOURCES m_pictureSources;
300   VECSOURCES m_fileSources;
301   VECSOURCES m_musicSources;
302   VECSOURCES m_videoSources;
303
304   CStdString m_defaultProgramSource;
305   CStdString m_defaultMusicSource;
306   CStdString m_defaultPictureSource;
307   CStdString m_defaultFileSource;
308   CStdString m_defaultVideoSource;
309   CStdString m_defaultMusicLibSource;
310   CStdString m_defaultVideoLibSource;
311
312   VECSOURCES m_UPnPMusicSources;
313   VECSOURCES m_UPnPVideoSources;
314   VECSOURCES m_UPnPPictureSources;
315
316   CStdString m_UPnPUUID;
317   CStdString m_UPnPUUIDRenderer;
318
319   //VECFILETYPEICONS m_vecIcons;
320   VECPROFILES m_vecProfiles;
321   int m_iLastLoadedProfileIndex;
322   int m_iLastUsedProfileIndex;
323   bool bUseLoginScreen;
324   RESOLUTION_INFO m_ResInfo[10];
325
326   // utility functions for user data folders
327   CStdString GetUserDataItem(const CStdString& strFile) const;
328   CStdString GetProfileUserDataFolder() const;
329   CStdString GetUserDataFolder() const;
330   CStdString GetDatabaseFolder() const;
331   CStdString GetCDDBFolder() const;
332   CStdString GetThumbnailsFolder() const;
333   CStdString GetMusicThumbFolder() const;
334   CStdString GetLastFMThumbFolder() const;
335   CStdString GetMusicArtistThumbFolder() const;
336   CStdString GetVideoThumbFolder() const;
337   CStdString GetBookmarksThumbFolder() const;
338   CStdString GetPicturesThumbFolder() const;
339   CStdString GetProgramsThumbFolder() const;
340   CStdString GetGameSaveThumbFolder() const;
341   CStdString GetProfilesThumbFolder() const;
342   CStdString GetSourcesFile() const;
343   CStdString GetSkinFolder() const;
344   CStdString GetVideoFanartFolder() const;
345
346   CStdString GetSettingsFile() const;
347   CStdString GetAvpackSettingsFile() const;
348
349   bool LoadUPnPXml(const CStdString& strSettingsFile);
350   bool SaveUPnPXml(const CStdString& strSettingsFile) const;
351   
352   bool LoadProfiles(const CStdString& strSettingsFile);
353   bool SaveProfiles(const CStdString& strSettingsFile) const;
354
355   bool SaveSettings(const CStdString& strSettingsFile, CGUISettings *localSettings = NULL) const;
356
357   bool SaveSources();
358
359 protected:
360   // these 3 don't have a default - used for advancedsettings.xml
361   bool GetInteger(const TiXmlElement* pRootElement, const char *strTagName, int& iValue, const int iMin, const int iMax);
362   bool GetFloat(const TiXmlElement* pRootElement, const char *strTagName, float& fValue, const float fMin, const float fMax);
363   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, CStdString& strValue);
364
365   bool GetInteger(const TiXmlElement* pRootElement, const char *strTagName, int& iValue, const int iDefault, const int iMin, const int iMax);
366   bool GetFloat(const TiXmlElement* pRootElement, const char *strTagName, float& fValue, const float fDefault, const float fMin, const float fMax);
367   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, CStdString& strValue, const CStdString& strDefaultValue);
368   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, char *szValue, const CStdString& strDefaultValue);
369   bool GetSource(const CStdString &category, const TiXmlNode *source, CMediaSource &share);
370   void GetSources(const TiXmlElement* pRootElement, const CStdString& strTagName, VECSOURCES& items, CStdString& strDefault);
371   bool SetSources(TiXmlNode *root, const char *section, const VECSOURCES &shares, const char *defaultPath);
372   void GetViewState(const TiXmlElement* pRootElement, const CStdString& strTagName, CViewState &viewState, SORT_METHOD defaultSort = SORT_METHOD_LABEL);
373
374   void ConvertHomeVar(CStdString& strText);
375   // functions for writing xml files
376   void SetString(TiXmlNode* pRootNode, const CStdString& strTagName, const CStdString& strValue) const;
377   void SetInteger(TiXmlNode* pRootNode, const CStdString& strTagName, int iValue) const;
378   void SetFloat(TiXmlNode* pRootNode, const CStdString& strTagName, float fValue) const;
379   void SetBoolean(TiXmlNode* pRootNode, const CStdString& strTagName, bool bValue) const;
380   void SetHex(TiXmlNode* pRootNode, const CStdString& strTagName, DWORD dwHexValue) const;
381   void SetViewState(TiXmlNode* pRootNode, const CStdString& strTagName, const CViewState &viewState) const;
382
383   bool LoadCalibration(const TiXmlElement* pElement, const CStdString& strSettingsFile);
384   bool SaveCalibration(TiXmlNode* pRootNode) const;
385
386   bool LoadSettings(const CStdString& strSettingsFile);
387 //  bool SaveSettings(const CStdString& strSettingsFile) const;
388
389   // skin activated settings
390   void LoadSkinSettings(const TiXmlElement* pElement);
391   void SaveSkinSettings(TiXmlNode *pElement) const;
392
393   // Advanced settings
394   void LoadAdvancedSettings();
395
396   void LoadUserFolderLayout();
397
398   void LoadRSSFeeds();
399
400   bool SaveAvpackXML() const;
401   bool SaveNewAvpackXML() const;
402   bool SaveAvpackSettings(TiXmlNode *io_pRoot) const;
403   bool LoadAvpackXML();
404
405 };
406
407 extern class CSettings g_settings;
408 extern struct CSettings::stSettings g_stSettings;
409 extern struct CSettings::AdvancedSettings g_advancedSettings;