[XBOX] Merged: Linuxport revisions
[xbmc:xbmc-antiquated.git] / xbmc / Settings.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2009 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 #define PRE_SKIN_VERSION_9_10_COMPATIBILITY 1
24
25 #define DEFAULT_SKIN "Project Mayhem III"
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
57 #define VIDEO_SHOW_ALL 0
58 #define VIDEO_SHOW_UNWATCHED 1
59 #define VIDEO_SHOW_WATCHED 2
60
61 /* FIXME: eventually the profile should dictate where special://masterprofile/ is but for now it
62    makes sense to leave all the profile settings in a user writeable location
63    like special://masterprofile/ */
64 #define PROFILES_FILE "special://masterprofile/profiles.xml"
65
66 struct TVShowRegexp
67 {
68   bool byDate;
69   CStdString regexp;
70   TVShowRegexp(bool d, const CStdString& r)
71   {
72     byDate = d;
73     regexp = r;
74   }
75 };
76
77 typedef std::vector<TVShowRegexp> SETTINGS_TVSHOWLIST;
78
79 class CSkinString
80 {
81 public:
82   CStdString name;
83   CStdString value;
84 };
85
86 class CSkinBool
87 {
88 public:
89   CStdString name;
90   bool value;
91 };
92
93 struct VOICE_MASK {
94   float energy;
95   float pitch;
96   float robotic;
97   float whisper;
98 };
99
100 class CSettings
101 {
102 public:
103   CSettings(void);
104   virtual ~CSettings(void);
105
106   void Initialize();
107
108   bool Load(bool& bXboxMediacenter, bool& bSettings);
109   void Save() const;
110   bool Reset();
111
112   void Clear();
113
114   bool LoadProfile(int index);
115   bool SaveSettingsToProfile(int index);
116   bool DeleteProfile(int index);
117   void CreateProfileFolders();
118
119   VECSOURCES *GetSourcesFromType(const CStdString &type);
120   CStdString GetDefaultSourceFromType(const CStdString &type);
121
122   bool UpdateSource(const CStdString &strType, const CStdString strOldName, const CStdString &strUpdateChild, const CStdString &strUpdateValue);
123   bool DeleteSource(const CStdString &strType, const CStdString strName, const CStdString strPath);
124   bool UpdateShare(const CStdString &type, const CStdString oldName, const CMediaSource &share);
125   bool AddShare(const CStdString &type, const CMediaSource &share);
126
127   int TranslateSkinString(const CStdString &setting);
128   const CStdString &GetSkinString(int setting) const;
129   void SetSkinString(int setting, const CStdString &label);
130
131   int TranslateSkinBool(const CStdString &setting);
132   bool GetSkinBool(int setting) const;
133   void SetSkinBool(int setting, bool set);
134
135   void ResetSkinSetting(const CStdString &setting);
136   void ResetSkinSettings();
137
138   struct AdvancedSettings
139   {
140 public:
141     // multipath testing
142     bool m_useMultipaths;
143     bool m_DisableModChipDetection;
144
145     int m_audioHeadRoom;
146     float m_karaokeSyncDelay;
147     float m_ac3Gain;
148     CStdString m_audioDefaultPlayer;
149     float m_audioPlayCountMinimumPercent;
150
151     float m_videoSubsDelayRange;
152     float m_videoAudioDelayRange;
153     int m_videoSmallStepBackSeconds;
154     int m_videoSmallStepBackTries;
155     int m_videoSmallStepBackDelay;
156     bool m_videoUseTimeSeeking;
157     int m_videoTimeSeekForward;
158     int m_videoTimeSeekBackward;
159     int m_videoTimeSeekForwardBig;
160     int m_videoTimeSeekBackwardBig;
161     int m_videoPercentSeekForward;
162     int m_videoPercentSeekBackward;
163     int m_videoPercentSeekForwardBig;
164     int m_videoPercentSeekBackwardBig;
165     CStdString m_videoPPFFmpegType;
166
167     bool m_musicUseTimeSeeking;
168     int m_musicTimeSeekForward;
169     int m_musicTimeSeekBackward;
170     int m_musicTimeSeekForwardBig;
171     int m_musicTimeSeekBackwardBig;
172     int m_musicPercentSeekForward;
173     int m_musicPercentSeekBackward;
174     int m_musicPercentSeekForwardBig;
175     int m_musicPercentSeekBackwardBig;
176     int m_musicResample;
177     int m_videoBlackBarColour;
178     int m_videoIgnoreAtStart;
179     int m_videoIgnoreAtEnd;
180
181     CStdString m_videoDefaultPlayer;
182
183     float m_videoPlayCountMinimumPercent;
184
185     int m_cacheMemBufferSize;
186
187     float m_slideshowBlackBarCompensation;
188     float m_slideshowZoomAmount;
189     float m_slideshowPanAmount;
190
191     int m_lcdRows;
192     int m_lcdColumns;
193     int m_lcdAddress1;
194     int m_lcdAddress2;
195     int m_lcdAddress3;
196     int m_lcdAddress4;
197
198     int m_autoDetectPingTime;
199
200     int m_songInfoDuration;
201     int m_busyDialogDelay;
202     int m_logLevel;
203     CStdString m_cddbAddress;
204     bool m_usePCDVDROM;
205     bool m_noDVDROM;
206     CStdString m_cachePath;
207     bool m_displayRemoteCodes;
208     CStdStringArray m_videoCleanRegExps;
209     CStdStringArray m_videoExcludeFromListingRegExps;
210     CStdStringArray m_moviesExcludeFromScanRegExps;
211     CStdStringArray m_tvshowExcludeFromScanRegExps;
212     CStdStringArray m_audioExcludeFromListingRegExps;
213     CStdStringArray m_audioExcludeFromScanRegExps;
214     CStdStringArray m_pictureExcludeFromListingRegExps;
215     CStdStringArray m_videoStackRegExps;
216     SETTINGS_TVSHOWLIST m_tvshowStackRegExps;
217     CStdString m_tvshowMultiPartStackRegExp;
218     CStdStringArray m_pathSubstitutions;
219     int m_remoteRepeat;
220     float m_controllerDeadzone;
221     bool m_FTPShowCache;
222
223     bool m_playlistAsFolders;
224     bool m_detectAsUdf;
225
226     int m_thumbSize;
227
228     int m_sambaclienttimeout;
229     bool m_sambastatfiles;
230     CStdString m_sambadoscodepage;
231     bool m_bHTTPDirectoryLocalMode;
232     bool m_bHTTPDirectoryStatFilesize;
233
234     CStdString m_musicThumbs;
235     CStdString m_dvdThumbs;
236
237     bool m_bMusicLibraryHideAllItems;
238     bool m_bMusicLibraryAllItemsOnBottom;
239     bool m_bMusicLibraryAlbumsSortByArtistThenYear;
240     CStdString m_strMusicLibraryAlbumFormat;
241     CStdString m_strMusicLibraryAlbumFormatRight;
242     bool m_prioritiseAPEv2tags;
243     CStdString m_musicItemSeparator;
244     CStdString m_videoItemSeparator;
245     std::vector<CStdString> m_musicTagsFromFileFilters;
246
247     bool m_bVideoLibraryHideAllItems;
248     bool m_bVideoLibraryAllItemsOnBottom;
249     bool m_bVideoLibraryHideRecentlyAddedItems;
250     bool m_bVideoLibraryHideEmptySeries;
251     bool m_bVideoLibraryCleanOnUpdate;
252     bool m_bVideoLibraryExportAutoThumbs;
253
254     bool m_bUseEvilB;
255     std::vector<CStdString> m_vecTokens; // cleaning strings tied to language
256     //TuxBox
257     bool m_bTuxBoxSubMenuSelection;
258     int m_iTuxBoxDefaultSubMenu;
259     int m_iTuxBoxDefaultRootMenu;
260     bool m_bTuxBoxAudioChannelSelection;
261     bool m_bTuxBoxPictureIcon;
262     int m_iTuxBoxEpgRequestTime;
263     int m_iTuxBoxZapWaitTime;
264     bool m_bTuxBoxSendAllAPids;
265
266     int m_iMythMovieLength;         // minutes
267     bool m_bFirstLoop;
268     int m_curlconnecttimeout;
269     int m_curllowspeedtime;
270     int m_curlretries;
271
272     int m_playlistRetries;
273     int m_playlistTimeout;
274     int m_iSkipLoopFilter;
275     bool m_bVirtualShares; 
276     bool m_bNavVKeyboard; // if true we navigate the virtual keyboard using cursor keys
277     
278     bool m_bPythonVerbose;
279   };
280   struct stSettings
281   {
282 public:
283     CStdString m_pictureExtensions;
284     CStdString m_musicExtensions;
285     CStdString m_videoExtensions;
286
287     CStdString m_logFolder;
288
289     bool m_bMyMusicSongInfoInVis;
290     bool m_bMyMusicSongThumbInVis;
291
292     CViewState m_viewStateMusicNavArtists;
293     CViewState m_viewStateMusicNavAlbums;
294     CViewState m_viewStateMusicNavSongs;
295     CViewState m_viewStateMusicShoutcast;
296     CViewState m_viewStateMusicLastFM;
297     CViewState m_viewStateVideoNavActors;
298     CViewState m_viewStateVideoNavYears;
299     CViewState m_viewStateVideoNavGenres;
300     CViewState m_viewStateVideoNavTitles;
301     CViewState m_viewStateVideoNavEpisodes;
302     CViewState m_viewStateVideoNavSeasons;
303     CViewState m_viewStateVideoNavTvShows;
304     CViewState m_viewStateVideoNavMusicVideos;
305
306     CViewState m_viewStatePrograms;
307     CViewState m_viewStatePictures;
308     CViewState m_viewStateMusicFiles;
309     CViewState m_viewStateVideoFiles;
310
311     bool m_bMyMusicPlaylistRepeat;
312     bool m_bMyMusicPlaylistShuffle;
313     int m_iMyMusicStartWindow;
314
315     // for scanning
316     bool m_bMyMusicIsScanning;
317
318     CVideoSettings m_defaultVideoSettings;
319     CVideoSettings m_currentVideoSettings;
320
321     float m_fZoomAmount;      // current zoom amount
322     float m_fPixelRatio;      // current pixel ratio
323
324     int m_iMyVideoWatchMode;
325
326     bool m_bMyVideoPlaylistRepeat;
327     bool m_bMyVideoPlaylistShuffle;
328     bool m_bMyVideoNavFlatten;
329
330     int m_iVideoStartWindow;
331
332     int m_iMyVideoStack;
333
334     int iAdditionalSubtitleDirectoryChecked;
335
336     char szOnlineArenaPassword[32]; // private arena password
337     char szOnlineArenaDescription[64]; // private arena description
338
339           int m_HttpApiBroadcastPort;
340           int m_HttpApiBroadcastLevel;
341     int m_nVolumeLevel;                     // measured in milliBels -60dB -> 0dB range.
342     int m_dynamicRangeCompressionLevel;     // measured in milliBels  0dB -> 30dB range.
343     int m_iPreMuteVolumeLevel;    // save the m_nVolumeLevel for proper restore
344     bool m_bMute;
345     int m_iSystemTimeTotalUp;    // Uptime in minutes!
346
347     VOICE_MASK m_karaokeVoiceMask[4];
348   };
349
350   std::map<int,std::pair<std::vector<int>,std::vector<std::string> > > m_mapRssUrls;
351   std::map<int, CSkinString> m_skinStrings;
352   std::map<int, CSkinBool> m_skinBools;
353
354   VECSOURCES m_programSources;
355   VECSOURCES m_pictureSources;
356   VECSOURCES m_fileSources;
357   VECSOURCES m_musicSources;
358   VECSOURCES m_videoSources;
359
360   CStdString m_defaultProgramSource;
361   CStdString m_defaultMusicSource;
362   CStdString m_defaultPictureSource;
363   CStdString m_defaultFileSource;
364   CStdString m_defaultVideoSource;
365   CStdString m_defaultMusicLibSource;
366   CStdString m_defaultVideoLibSource;
367
368   VECSOURCES m_UPnPMusicSources;
369   VECSOURCES m_UPnPVideoSources;
370   VECSOURCES m_UPnPPictureSources;
371
372   CStdString m_UPnPUUIDServer;
373   int        m_UPnPPortServer;
374   int        m_UPnPMaxReturnedItems;
375   CStdString m_UPnPUUIDRenderer;
376   int        m_UPnPPortRenderer;
377
378   //VECFILETYPEICONS m_vecIcons;
379   VECPROFILES m_vecProfiles;
380   int m_iLastLoadedProfileIndex;
381   int m_iLastUsedProfileIndex;
382   bool bUseLoginScreen;
383   RESOLUTION_INFO m_ResInfo[10];
384
385   // utility functions for user data folders
386   CStdString GetUserDataItem(const CStdString& strFile) const;
387   CStdString GetProfileUserDataFolder() const;
388   CStdString GetUserDataFolder() const;
389   CStdString GetDatabaseFolder() const;
390   CStdString GetCDDBFolder() const;
391   CStdString GetThumbnailsFolder() const;
392   CStdString GetMusicThumbFolder() const;
393   CStdString GetLastFMThumbFolder() const;
394   CStdString GetMusicArtistThumbFolder() const;
395   CStdString GetVideoThumbFolder() const;
396   CStdString GetBookmarksThumbFolder() const;
397   CStdString GetPicturesThumbFolder() const;
398   CStdString GetProgramsThumbFolder() const;
399   CStdString GetGameSaveThumbFolder() const;
400   CStdString GetProfilesThumbFolder() const;
401   CStdString GetSourcesFile() const;
402   CStdString GetSkinFolder() const;
403   CStdString GetSkinFolder(const CStdString& skinName) const;
404   CStdString GetScriptsFolder() const;
405   CStdString GetVideoFanartFolder() const;
406   CStdString GetMusicFanartFolder() const;
407
408   CStdString GetSettingsFile() const;
409   CStdString GetAvpackSettingsFile() const;
410
411   bool LoadUPnPXml(const CStdString& strSettingsFile);
412   bool SaveUPnPXml(const CStdString& strSettingsFile) const;
413   
414   bool LoadProfiles(const CStdString& strSettingsFile);
415   bool SaveProfiles(const CStdString& strSettingsFile) const;
416
417   bool SaveSettings(const CStdString& strSettingsFile, CGUISettings *localSettings = NULL) const;
418
419   bool SaveSources();
420
421 protected:
422   void GetCustomRegexps(TiXmlElement *pRootElement, CStdStringArray& settings);
423   void GetCustomTVRegexps(TiXmlElement *pRootElement, SETTINGS_TVSHOWLIST& settings);
424   void GetCustomRegexpReplacers(TiXmlElement *pRootElement, CStdStringArray& settings);
425   void GetCustomExtensions(TiXmlElement *pRootElement, CStdString& extensions);
426
427   bool GetInteger(const TiXmlElement* pRootElement, const char *strTagName, int& iValue, const int iDefault, const int iMin, const int iMax);
428   bool GetFloat(const TiXmlElement* pRootElement, const char *strTagName, float& fValue, const float fDefault, const float fMin, const float fMax);
429   bool GetPath(const TiXmlElement* pRootElement, const char *tagName, CStdString &strValue);
430   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, CStdString& strValue, const CStdString& strDefaultValue);
431   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, char *szValue, const CStdString& strDefaultValue);
432   bool GetSource(const CStdString &category, const TiXmlNode *source, CMediaSource &share);
433   void GetSources(const TiXmlElement* pRootElement, const CStdString& strTagName, VECSOURCES& items, CStdString& strDefault);
434   bool SetSources(TiXmlNode *root, const char *section, const VECSOURCES &shares, const char *defaultPath);
435   void GetViewState(const TiXmlElement* pRootElement, const CStdString& strTagName, CViewState &viewState, SORT_METHOD defaultSort = SORT_METHOD_LABEL, int defaultView = DEFAULT_VIEW_LIST);
436
437   void ConvertHomeVar(CStdString& strText);
438   // functions for writing xml files
439   void SetViewState(TiXmlNode* pRootNode, const CStdString& strTagName, const CViewState &viewState) const;
440
441   bool LoadCalibration(const TiXmlElement* pElement, const CStdString& strSettingsFile);
442   bool SaveCalibration(TiXmlNode* pRootNode) const;
443
444   bool LoadSettings(const CStdString& strSettingsFile);
445 //  bool SaveSettings(const CStdString& strSettingsFile) const;
446
447   // skin activated settings
448   void LoadSkinSettings(const TiXmlElement* pElement);
449   void SaveSkinSettings(TiXmlNode *pElement) const;
450
451   // Advanced settings
452   void LoadAdvancedSettings();
453
454   void LoadUserFolderLayout();
455
456   void LoadRSSFeeds();
457
458   bool SaveAvpackXML() const;
459   bool SaveNewAvpackXML() const;
460   bool SaveAvpackSettings(TiXmlNode *io_pRoot) const;
461   bool LoadAvpackXML();
462
463 };
464
465 extern class CSettings g_settings;
466 extern struct CSettings::stSettings g_stSettings;
467 extern struct CSettings::AdvancedSettings g_advancedSettings;