1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9 #include "Settings.h"
10 #include "Application.h"
11 #include "Autorun.h"
12 #include "LangInfo.h"
13 #include "Util.h"
14 #include "addons/AddonSystemSettings.h"
15 #include "addons/Skin.h"
16 #include "cores/VideoPlayer/VideoRenderers/BaseRenderer.h"
17 #include "filesystem/File.h"
18 #include "guilib/GUIFontManager.h"
19 #include "guilib/StereoscopicsManager.h"
20 #include "GUIPassword.h"
21 #include "input/KeyboardLayoutManager.h"
22 #if defined(TARGET_POSIX)
23 #include "platform/posix/PosixTimezone.h"
24 #endif // defined(TARGET_POSIX)
25 #include "network/upnp/UPnPSettings.h"
26 #include "network/WakeOnAccess.h"
27 #if defined(TARGET_DARWIN_OSX)
28 #include "platform/darwin/osx/XBMCHelper.h"
29 #endif // defined(TARGET_DARWIN_OSX)
30 #if defined(TARGET_DARWIN_TVOS)
31 #include "platform/darwin/tvos/TVOSSettingsHandler.h"
32 #endif // defined(TARGET_DARWIN_TVOS)
33 #if defined(TARGET_DARWIN_EMBEDDED)
34 #include "SettingAddon.h"
35 #endif
36 #include "powermanagement/PowerTypes.h"
37 #include "profiles/ProfileManager.h"
38 #include "ServiceBroker.h"
39 #include "settings/DisplaySettings.h"
40 #include "settings/MediaSettings.h"
41 #include "settings/MediaSourceSettings.h"
42 #include "settings/SettingsComponent.h"
43 #include "settings/SettingConditions.h"
44 #include "settings/SkinSettings.h"
45 #include "settings/lib/SettingsManager.h"
46 #include "threads/SingleLock.h"
47 #include "utils/CharsetConverter.h"
48 #include "utils/log.h"
49 #include "utils/RssManager.h"
50 #include "utils/StringUtils.h"
51 #include "utils/SystemInfo.h"
52 #include "utils/XBMCTinyXML.h"
53 #include "SeekHandler.h"
54 #include "utils/Variant.h"
55 #include "view/ViewStateSettings.h"
56 #include "DiscSettings.h"
57
58 #define SETTINGS_XML_FOLDER "special://xbmc/system/settings/"
59
60 using namespace KODI;
61 using namespace XFILE;
62
63 //! @todo: remove in c++17
64 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SKIN;
65 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SKINSETTINGS;
66 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SKINTHEME;
67 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SKINCOLORS;
68 constexpr const char* CSettings::SETTING_LOOKANDFEEL_FONT;
69 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SKINZOOM;
70 constexpr const char* CSettings::SETTING_LOOKANDFEEL_STARTUPACTION;
71 constexpr const char* CSettings::SETTING_LOOKANDFEEL_STARTUPWINDOW;
72 constexpr const char* CSettings::SETTING_LOOKANDFEEL_SOUNDSKIN;
73 constexpr const char* CSettings::SETTING_LOOKANDFEEL_ENABLERSSFEEDS;
74 constexpr const char* CSettings::SETTING_LOOKANDFEEL_RSSEDIT;
75 constexpr const char* CSettings::SETTING_LOOKANDFEEL_STEREOSTRENGTH;
76 constexpr const char* CSettings::SETTING_LOCALE_LANGUAGE;
77 constexpr const char* CSettings::SETTING_LOCALE_COUNTRY;
78 constexpr const char* CSettings::SETTING_LOCALE_CHARSET;
79 constexpr const char* CSettings::SETTING_LOCALE_KEYBOARDLAYOUTS;
80 constexpr const char* CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT;
81 constexpr const char* CSettings::SETTING_LOCALE_TIMEZONECOUNTRY;
82 constexpr const char* CSettings::SETTING_LOCALE_TIMEZONE;
83 constexpr const char* CSettings::SETTING_LOCALE_SHORTDATEFORMAT;
84 constexpr const char* CSettings::SETTING_LOCALE_LONGDATEFORMAT;
85 constexpr const char* CSettings::SETTING_LOCALE_TIMEFORMAT;
86 constexpr const char* CSettings::SETTING_LOCALE_USE24HOURCLOCK;
87 constexpr const char* CSettings::SETTING_LOCALE_TEMPERATUREUNIT;
88 constexpr const char* CSettings::SETTING_LOCALE_SPEEDUNIT;
89 constexpr const char* CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS;
90 constexpr const char* CSettings::SETTING_FILELISTS_SHOWEXTENSIONS;
91 constexpr const char* CSettings::SETTING_FILELISTS_IGNORETHEWHENSORTING;
92 constexpr const char* CSettings::SETTING_FILELISTS_ALLOWFILEDELETION;
93 constexpr const char* CSettings::SETTING_FILELISTS_SHOWADDSOURCEBUTTONS;
94 constexpr const char* CSettings::SETTING_FILELISTS_SHOWHIDDEN;
95 constexpr const char* CSettings::SETTING_SCREENSAVER_MODE;
96 constexpr const char* CSettings::SETTING_SCREENSAVER_SETTINGS;
97 constexpr const char* CSettings::SETTING_SCREENSAVER_PREVIEW;
98 constexpr const char* CSettings::SETTING_SCREENSAVER_TIME;
99 constexpr const char* CSettings::SETTING_SCREENSAVER_USEMUSICVISINSTEAD;
100 constexpr const char* CSettings::SETTING_SCREENSAVER_USEDIMONPAUSE;
101 constexpr const char* CSettings::SETTING_WINDOW_WIDTH;
102 constexpr const char* CSettings::SETTING_WINDOW_HEIGHT;
103 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_SHOWUNWATCHEDPLOTS;
104 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_ACTORTHUMBS;
105 constexpr const char* CSettings::SETTING_MYVIDEOS_FLATTEN;
106 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_FLATTENTVSHOWS;
107 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_TVSHOWSSELECTFIRSTUNWATCHEDITEM;
108 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_TVSHOWSINCLUDEALLSEASONSANDSPECIALS;
109 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_SHOWALLITEMS;
110 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_GROUPMOVIESETS;
111 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_GROUPSINGLEITEMSETS;
112 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_UPDATEONSTARTUP;
113 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_BACKGROUNDUPDATE;
114 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_CLEANUP;
115 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_EXPORT;
116 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_IMPORT;
117 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_SHOWEMPTYTVSHOWS;
118 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_MOVIESETSFOLDER;
119 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_ARTWORK_LEVEL;
120 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_MOVIEART_WHITELIST;
121 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_TVSHOWART_WHITELIST;
122 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_EPISODEART_WHITELIST;
123 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_MUSICVIDEOART_WHITELIST;
124 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_ARTSETTINGS_UPDATED;
125 constexpr const char* CSettings::SETTING_VIDEOLIBRARY_SHOWPERFORMERS;
126 constexpr const char* CSettings::SETTING_LOCALE_AUDIOLANGUAGE;
127 constexpr const char* CSettings::SETTING_VIDEOPLAYER_PREFERDEFAULTFLAG;
128 constexpr const char* CSettings::SETTING_VIDEOPLAYER_AUTOPLAYNEXTITEM;
129 constexpr const char* CSettings::SETTING_VIDEOPLAYER_SEEKSTEPS;
130 constexpr const char* CSettings::SETTING_VIDEOPLAYER_SEEKDELAY;
131 constexpr const char* CSettings::SETTING_VIDEOPLAYER_ADJUSTREFRESHRATE;
132 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEDISPLAYASCLOCK;
133 constexpr const char* CSettings::SETTING_VIDEOPLAYER_ERRORINASPECT;
134 constexpr const char* CSettings::SETTING_VIDEOPLAYER_STRETCH43;
135 constexpr const char* CSettings::SETTING_VIDEOPLAYER_TELETEXTENABLED;
136 constexpr const char* CSettings::SETTING_VIDEOPLAYER_TELETEXTSCALE;
137 constexpr const char* CSettings::SETTING_VIDEOPLAYER_STEREOSCOPICPLAYBACKMODE;
138 constexpr const char* CSettings::SETTING_VIDEOPLAYER_QUITSTEREOMODEONSTOP;
139 constexpr const char* CSettings::SETTING_VIDEOPLAYER_RENDERMETHOD;
140 constexpr const char* CSettings::SETTING_VIDEOPLAYER_HQSCALERS;
141 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC;
142 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE;
143 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVDPAU;
144 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVDPAUMIXER;
145 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVDPAUMPEG2;
146 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVDPAUMPEG4;
147 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVDPAUVC1;
148 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEDXVA2;
149 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEVTB;
150 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USEPRIMEDECODER;
151 constexpr const char* CSettings::SETTING_VIDEOPLAYER_USESTAGEFRIGHT;
152 constexpr const char* CSettings::SETTING_VIDEOPLAYER_LIMITGUIUPDATE;
153 constexpr const char* CSettings::SETTING_VIDEOPLAYER_SUPPORTMVC;
154 constexpr const char* CSettings::SETTING_MYVIDEOS_SELECTACTION;
155 constexpr const char* CSettings::SETTING_MYVIDEOS_USETAGS;
156 constexpr const char* CSettings::SETTING_MYVIDEOS_EXTRACTFLAGS;
157 constexpr const char* CSettings::SETTING_MYVIDEOS_EXTRACTCHAPTERTHUMBS;
158 constexpr const char* CSettings::SETTING_MYVIDEOS_REPLACELABELS;
159 constexpr const char* CSettings::SETTING_MYVIDEOS_EXTRACTTHUMB;
160 constexpr const char* CSettings::SETTING_MYVIDEOS_STACKVIDEOS;
161 constexpr const char* CSettings::SETTING_LOCALE_SUBTITLELANGUAGE;
162 constexpr const char* CSettings::SETTING_SUBTITLES_PARSECAPTIONS;
163 constexpr const char* CSettings::SETTING_SUBTITLES_ALIGN;
164 constexpr const char* CSettings::SETTING_SUBTITLES_STEREOSCOPICDEPTH;
165 constexpr const char* CSettings::SETTING_SUBTITLES_FONT;
166 constexpr const char* CSettings::SETTING_SUBTITLES_HEIGHT;
167 constexpr const char* CSettings::SETTING_SUBTITLES_STYLE;
168 constexpr const char* CSettings::SETTING_SUBTITLES_COLOR;
169 constexpr const char* CSettings::SETTING_SUBTITLES_BGCOLOR;
170 constexpr const char* CSettings::SETTING_SUBTITLES_BGOPACITY;
171 constexpr const char* CSettings::SETTING_SUBTITLES_CHARSET;
172 constexpr const char* CSettings::SETTING_SUBTITLES_OVERRIDEASSFONTS;
173 constexpr const char* CSettings::SETTING_SUBTITLES_LANGUAGES;
174 constexpr const char* CSettings::SETTING_SUBTITLES_STORAGEMODE;
175 constexpr const char* CSettings::SETTING_SUBTITLES_CUSTOMPATH;
176 constexpr const char* CSettings::SETTING_SUBTITLES_PAUSEONSEARCH;
177 constexpr const char* CSettings::SETTING_SUBTITLES_DOWNLOADFIRST;
178 constexpr const char* CSettings::SETTING_SUBTITLES_TV;
179 constexpr const char* CSettings::SETTING_SUBTITLES_MOVIE;
180 constexpr const char* CSettings::SETTING_DVDS_AUTORUN;
181 constexpr const char* CSettings::SETTING_DVDS_PLAYERREGION;
182 constexpr const char* CSettings::SETTING_DVDS_AUTOMENU;
183 constexpr const char* CSettings::SETTING_DISC_PLAYBACK;
184 constexpr const char* CSettings::SETTING_BLURAY_PLAYERREGION;
185 constexpr const char* CSettings::SETTING_ACCESSIBILITY_AUDIOVISUAL;
186 constexpr const char* CSettings::SETTING_ACCESSIBILITY_AUDIOHEARING;
187 constexpr const char* CSettings::SETTING_ACCESSIBILITY_SUBHEARING;
188 constexpr const char* CSettings::SETTING_SCRAPERS_MOVIESDEFAULT;
189 constexpr const char* CSettings::SETTING_SCRAPERS_TVSHOWSDEFAULT;
190 constexpr const char* CSettings::SETTING_SCRAPERS_MUSICVIDEOSDEFAULT;
191 constexpr const char* CSettings::SETTING_PVRMANAGER_PRESELECTPLAYINGCHANNEL;
192 constexpr const char* CSettings::SETTING_PVRMANAGER_SYNCCHANNELGROUPS;
193 constexpr const char* CSettings::SETTING_PVRMANAGER_BACKENDCHANNELORDER;
194 constexpr const char* CSettings::SETTING_PVRMANAGER_USEBACKENDCHANNELNUMBERS;
195 constexpr const char* CSettings::SETTING_PVRMANAGER_USEBACKENDCHANNELNUMBERSALWAYS;
196 constexpr const char* CSettings::SETTING_PVRMANAGER_STARTGROUPCHANNELNUMBERSFROMONE;
197 constexpr const char* CSettings::SETTING_PVRMANAGER_CLIENTPRIORITIES;
198 constexpr const char* CSettings::SETTING_PVRMANAGER_CHANNELMANAGER;
199 constexpr const char* CSettings::SETTING_PVRMANAGER_GROUPMANAGER;
200 constexpr const char* CSettings::SETTING_PVRMANAGER_CHANNELSCAN;
201 constexpr const char* CSettings::SETTING_PVRMANAGER_RESETDB;
202 constexpr const char* CSettings::SETTING_PVRMENU_DISPLAYCHANNELINFO;
203 constexpr const char* CSettings::SETTING_PVRMENU_CLOSECHANNELOSDONSWITCH;
204 constexpr const char* CSettings::SETTING_PVRMENU_ICONPATH;
205 constexpr const char* CSettings::SETTING_PVRMENU_SEARCHICONS;
206 constexpr const char* CSettings::SETTING_EPG_PAST_DAYSTODISPLAY;
207 constexpr const char* CSettings::SETTING_EPG_FUTURE_DAYSTODISPLAY;
208 constexpr const char* CSettings::SETTING_EPG_SELECTACTION;
209 constexpr const char* CSettings::SETTING_EPG_HIDENOINFOAVAILABLE;
210 constexpr const char* CSettings::SETTING_EPG_EPGUPDATE;
211 constexpr const char* CSettings::SETTING_EPG_PREVENTUPDATESWHILEPLAYINGTV;
212 constexpr const char* CSettings::SETTING_EPG_RESETEPG;
213 constexpr const char* CSettings::SETTING_PVRPLAYBACK_SWITCHTOFULLSCREENCHANNELTYPES;
214 constexpr const char* CSettings::SETTING_PVRPLAYBACK_SIGNALQUALITY;
215 constexpr const char* CSettings::SETTING_PVRPLAYBACK_CONFIRMCHANNELSWITCH;
216 constexpr const char* CSettings::SETTING_PVRPLAYBACK_CHANNELENTRYTIMEOUT;
217 constexpr const char* CSettings::SETTING_PVRPLAYBACK_DELAYMARKLASTWATCHED;
218 constexpr const char* CSettings::SETTING_PVRPLAYBACK_FPS;
219 constexpr const char* CSettings::SETTING_PVRRECORD_INSTANTRECORDACTION;
220 constexpr const char* CSettings::SETTING_PVRRECORD_INSTANTRECORDTIME;
221 constexpr const char* CSettings::SETTING_PVRRECORD_MARGINSTART;
222 constexpr const char* CSettings::SETTING_PVRRECORD_MARGINEND;
223 constexpr const char* CSettings::SETTING_PVRRECORD_TIMERNOTIFICATIONS;
224 constexpr const char* CSettings::SETTING_PVRRECORD_GROUPRECORDINGS;
225 constexpr const char* CSettings::SETTING_PVRREMINDERS_AUTOCLOSEDELAY;
226 constexpr const char* CSettings::SETTING_PVRREMINDERS_AUTORECORD;
227 constexpr const char* CSettings::SETTING_PVRREMINDERS_AUTOSWITCH;
228 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_ENABLED;
229 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_BACKENDIDLETIME;
230 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_SETWAKEUPCMD;
231 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_PREWAKEUP;
232 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUP;
233 constexpr const char* CSettings::SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUPTIME;
234 constexpr const char* CSettings::SETTING_PVRPARENTAL_ENABLED;
235 constexpr const char* CSettings::SETTING_PVRPARENTAL_PIN;
236 constexpr const char* CSettings::SETTING_PVRPARENTAL_DURATION;
237 constexpr const char* CSettings::SETTING_PVRCLIENT_MENUHOOK;
238 constexpr const char* CSettings::SETTING_PVRTIMERS_HIDEDISABLEDTIMERS;
239 constexpr const char* CSettings::SETTING_MUSICLIBRARY_SHOWCOMPILATIONARTISTS;
240 constexpr const char* CSettings::SETTING_MUSICLIBRARY_SHOWDISCS;
241 constexpr const char* CSettings::SETTING_MUSICLIBRARY_USEORIGINALDATE;
242 constexpr const char* CSettings::SETTING_MUSICLIBRARY_USEARTISTSORTNAME;
243 constexpr const char* CSettings::SETTING_MUSICLIBRARY_DOWNLOADINFO;
244 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ARTISTSFOLDER;
245 constexpr const char* CSettings::SETTING_MUSICLIBRARY_PREFERONLINEALBUMART;
246 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ARTWORKLEVEL;
247 constexpr const char* CSettings::SETTING_MUSICLIBRARY_USEALLLOCALART;
248 constexpr const char* CSettings::SETTING_MUSICLIBRARY_USEALLREMOTEART;
249 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ARTISTART_WHITELIST;
250 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ALBUMART_WHITELIST;
251 constexpr const char* CSettings::SETTING_MUSICLIBRARY_MUSICTHUMBS;
252 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ARTSETTINGS_UPDATED;
253 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ALBUMSSCRAPER;
254 constexpr const char* CSettings::SETTING_MUSICLIBRARY_ARTISTSSCRAPER;
255 constexpr const char* CSettings::SETTING_MUSICLIBRARY_OVERRIDETAGS;
256 constexpr const char* CSettings::SETTING_MUSICLIBRARY_SHOWALLITEMS;
257 constexpr const char* CSettings::SETTING_MUSICLIBRARY_UPDATEONSTARTUP;
258 constexpr const char* CSettings::SETTING_MUSICLIBRARY_BACKGROUNDUPDATE;
259 constexpr const char* CSettings::SETTING_MUSICLIBRARY_CLEANUP;
260 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT;
261 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_FILETYPE;
262 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_FOLDER;
263 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_ITEMS;
264 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_UNSCRAPED;
265 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_OVERWRITE;
266 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_ARTWORK;
267 constexpr const char* CSettings::SETTING_MUSICLIBRARY_EXPORT_SKIPNFO;
268 constexpr const char* CSettings::SETTING_MUSICLIBRARY_IMPORT;
269 constexpr const char* CSettings::SETTING_MUSICPLAYER_AUTOPLAYNEXTITEM;
270 constexpr const char* CSettings::SETTING_MUSICPLAYER_QUEUEBYDEFAULT;
271 constexpr const char* CSettings::SETTING_MUSICPLAYER_SEEKSTEPS;
272 constexpr const char* CSettings::SETTING_MUSICPLAYER_SEEKDELAY;
273 constexpr const char* CSettings::SETTING_MUSICPLAYER_REPLAYGAINTYPE;
274 constexpr const char* CSettings::SETTING_MUSICPLAYER_REPLAYGAINPREAMP;
275 constexpr const char* CSettings::SETTING_MUSICPLAYER_REPLAYGAINNOGAINPREAMP;
276 constexpr const char* CSettings::SETTING_MUSICPLAYER_REPLAYGAINAVOIDCLIPPING;
277 constexpr const char* CSettings::SETTING_MUSICPLAYER_CROSSFADE;
278 constexpr const char* CSettings::SETTING_MUSICPLAYER_CROSSFADEALBUMTRACKS;
279 constexpr const char* CSettings::SETTING_MUSICPLAYER_VISUALISATION;
280 constexpr const char* CSettings::SETTING_MUSICFILES_SELECTACTION;
281 constexpr const char* CSettings::SETTING_MUSICFILES_USETAGS;
282 constexpr const char* CSettings::SETTING_MUSICFILES_TRACKFORMAT;
283 constexpr const char* CSettings::SETTING_MUSICFILES_NOWPLAYINGTRACKFORMAT;
284 constexpr const char* CSettings::SETTING_MUSICFILES_LIBRARYTRACKFORMAT;
285 constexpr const char* CSettings::SETTING_MUSICFILES_FINDREMOTETHUMBS;
286 constexpr const char* CSettings::SETTING_AUDIOCDS_AUTOACTION;
287 constexpr const char* CSettings::SETTING_AUDIOCDS_USECDDB;
288 constexpr const char* CSettings::SETTING_AUDIOCDS_RECORDINGPATH;
289 constexpr const char* CSettings::SETTING_AUDIOCDS_TRACKPATHFORMAT;
290 constexpr const char* CSettings::SETTING_AUDIOCDS_ENCODER;
291 constexpr const char* CSettings::SETTING_AUDIOCDS_SETTINGS;
292 constexpr const char* CSettings::SETTING_AUDIOCDS_EJECTONRIP;
293 constexpr const char* CSettings::SETTING_MYMUSIC_SONGTHUMBINVIS;
294 constexpr const char* CSettings::SETTING_MYMUSIC_DEFAULTLIBVIEW;
295 constexpr const char* CSettings::SETTING_PICTURES_USETAGS;
296 constexpr const char* CSettings::SETTING_PICTURES_GENERATETHUMBS;
297 constexpr const char* CSettings::SETTING_PICTURES_SHOWVIDEOS;
298 constexpr const char* CSettings::SETTING_PICTURES_DISPLAYRESOLUTION;
299 constexpr const char* CSettings::SETTING_SLIDESHOW_STAYTIME;
300 constexpr const char* CSettings::SETTING_SLIDESHOW_DISPLAYEFFECTS;
301 constexpr const char* CSettings::SETTING_SLIDESHOW_SHUFFLE;
302 constexpr const char* CSettings::SETTING_SLIDESHOW_HIGHQUALITYDOWNSCALING;
303 constexpr const char* CSettings::SETTING_WEATHER_CURRENTLOCATION;
304 constexpr const char* CSettings::SETTING_WEATHER_ADDON;
305 constexpr const char* CSettings::SETTING_WEATHER_ADDONSETTINGS;
306 constexpr const char* CSettings::SETTING_SERVICES_DEVICENAME;
307 constexpr const char* CSettings::SETTING_SERVICES_DEVICEUUID;
308 constexpr const char* CSettings::SETTING_SERVICES_UPNP;
309 constexpr const char* CSettings::SETTING_SERVICES_UPNPSERVER;
310 constexpr const char* CSettings::SETTING_SERVICES_UPNPANNOUNCE;
311 constexpr const char* CSettings::SETTING_SERVICES_UPNPLOOKFOREXTERNALSUBTITLES;
312 constexpr const char* CSettings::SETTING_SERVICES_UPNPCONTROLLER;
313 constexpr const char* CSettings::SETTING_SERVICES_UPNPRENDERER;
314 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVER;
315 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVERPORT;
316 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVERAUTHENTICATION;
317 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVERUSERNAME;
318 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVERPASSWORD;
319 constexpr const char* CSettings::SETTING_SERVICES_WEBSERVERSSL;
320 constexpr const char* CSettings::SETTING_SERVICES_WEBSKIN;
321 constexpr const char* CSettings::SETTING_SERVICES_ESENABLED;
322 constexpr const char* CSettings::SETTING_SERVICES_ESPORT;
323 constexpr const char* CSettings::SETTING_SERVICES_ESPORTRANGE;
324 constexpr const char* CSettings::SETTING_SERVICES_ESMAXCLIENTS;
325 constexpr const char* CSettings::SETTING_SERVICES_ESALLINTERFACES;
326 constexpr const char* CSettings::SETTING_SERVICES_ESINITIALDELAY;
327 constexpr const char* CSettings::SETTING_SERVICES_ESCONTINUOUSDELAY;
328 constexpr const char* CSettings::SETTING_SERVICES_ZEROCONF;
329 constexpr const char* CSettings::SETTING_SERVICES_AIRPLAY;
330 constexpr const char* CSettings::SETTING_SERVICES_AIRPLAYVOLUMECONTROL;
331 constexpr const char* CSettings::SETTING_SERVICES_USEAIRPLAYPASSWORD;
332 constexpr const char* CSettings::SETTING_SERVICES_AIRPLAYPASSWORD;
333 constexpr const char* CSettings::SETTING_SERVICES_AIRPLAYVIDEOSUPPORT;
334 constexpr const char* CSettings::SETTING_SMB_WINSSERVER;
335 constexpr const char* CSettings::SETTING_SMB_WORKGROUP;
336 constexpr const char* CSettings::SETTING_SMB_MINPROTOCOL;
337 constexpr const char* CSettings::SETTING_SMB_MAXPROTOCOL;
338 constexpr const char* CSettings::SETTING_SMB_LEGACYSECURITY;
339 constexpr const char* CSettings::SETTING_VIDEOSCREEN_MONITOR;
340 constexpr const char* CSettings::SETTING_VIDEOSCREEN_SCREEN;
341 constexpr const char* CSettings::SETTING_VIDEOSCREEN_WHITELIST;
342 constexpr const char* CSettings::SETTING_VIDEOSCREEN_RESOLUTION;
343 constexpr const char* CSettings::SETTING_VIDEOSCREEN_SCREENMODE;
344 constexpr const char* CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN;
345 constexpr const char* CSettings::SETTING_VIDEOSCREEN_BLANKDISPLAYS;
346 constexpr const char* CSettings::SETTING_VIDEOSCREEN_STEREOSCOPICMODE;
347 constexpr const char* CSettings::SETTING_VIDEOSCREEN_PREFEREDSTEREOSCOPICMODE;
348 constexpr const char* CSettings::SETTING_VIDEOSCREEN_NOOFBUFFERS;
349 constexpr const char* CSettings::SETTING_VIDEOSCREEN_3DLUT;
350 constexpr const char* CSettings::SETTING_VIDEOSCREEN_DISPLAYPROFILE;
351 constexpr const char* CSettings::SETTING_VIDEOSCREEN_GUICALIBRATION;
352 constexpr const char* CSettings::SETTING_VIDEOSCREEN_TESTPATTERN;
353 constexpr const char* CSettings::SETTING_VIDEOSCREEN_LIMITEDRANGE;
354 constexpr const char* CSettings::SETTING_VIDEOSCREEN_FRAMEPACKING;
355 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_AUDIODEVICE;
356 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_CHANNELS;
357 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_CONFIG;
358 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_SAMPLERATE;
359 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_STEREOUPMIX;
360 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_MAINTAINORIGINALVOLUME;
361 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_PROCESSQUALITY;
362 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_ATEMPOTHRESHOLD;
363 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_STREAMSILENCE;
364 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_STREAMNOISE;
365 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_GUISOUNDMODE;
366 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_PASSTHROUGH;
367 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_PASSTHROUGHDEVICE;
368 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_AC3PASSTHROUGH;
369 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_AC3TRANSCODE;
370 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_EAC3PASSTHROUGH;
371 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_DTSPASSTHROUGH;
372 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_TRUEHDPASSTHROUGH;
373 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_DTSHDPASSTHROUGH;
374 constexpr const char* CSettings::SETTING_AUDIOOUTPUT_VOLUMESTEPS;
375 constexpr const char* CSettings::SETTING_INPUT_PERIPHERALS;
376 constexpr const char* CSettings::SETTING_INPUT_PERIPHERALLIBRARIES;
377 constexpr const char* CSettings::SETTING_INPUT_ENABLEMOUSE;
378 constexpr const char* CSettings::SETTING_INPUT_ASKNEWCONTROLLERS;
379 constexpr const char* CSettings::SETTING_INPUT_CONTROLLERCONFIG;
380 constexpr const char* CSettings::SETTING_INPUT_RUMBLENOTIFY;
381 constexpr const char* CSettings::SETTING_INPUT_TESTRUMBLE;
382 constexpr const char* CSettings::SETTING_INPUT_CONTROLLERPOWEROFF;
383 constexpr const char* CSettings::SETTING_INPUT_APPLEREMOTEMODE;
384 constexpr const char* CSettings::SETTING_INPUT_APPLEREMOTEALWAYSON;
385 constexpr const char* CSettings::SETTING_INPUT_APPLEREMOTESEQUENCETIME;
386 constexpr const char* CSettings::SETTING_INPUT_APPLESIRI;
387 constexpr const char* CSettings::SETTING_INPUT_APPLESIRITIMEOUT;
388 constexpr const char* CSettings::SETTING_INPUT_APPLESIRITIMEOUTENABLED;
389 constexpr const char* CSettings::SETTING_INPUT_APPLEUSEKODIKEYBOARD;
390 constexpr const char* CSettings::SETTING_NETWORK_USEHTTPPROXY;
391 constexpr const char* CSettings::SETTING_NETWORK_HTTPPROXYTYPE;
392 constexpr const char* CSettings::SETTING_NETWORK_HTTPPROXYSERVER;
393 constexpr const char* CSettings::SETTING_NETWORK_HTTPPROXYPORT;
394 constexpr const char* CSettings::SETTING_NETWORK_HTTPPROXYUSERNAME;
395 constexpr const char* CSettings::SETTING_NETWORK_HTTPPROXYPASSWORD;
396 constexpr const char* CSettings::SETTING_NETWORK_BANDWIDTH;
397 constexpr const char* CSettings::SETTING_POWERMANAGEMENT_DISPLAYSOFF;
398 constexpr const char* CSettings::SETTING_POWERMANAGEMENT_SHUTDOWNTIME;
399 constexpr const char* CSettings::SETTING_POWERMANAGEMENT_SHUTDOWNSTATE;
400 constexpr const char* CSettings::SETTING_POWERMANAGEMENT_WAKEONACCESS;
401 constexpr const char* CSettings::SETTING_POWERMANAGEMENT_WAITFORNETWORK;
402 constexpr const char* CSettings::SETTING_DEBUG_SHOWLOGINFO;
403 constexpr const char* CSettings::SETTING_DEBUG_EXTRALOGGING;
404 constexpr const char* CSettings::SETTING_DEBUG_SETEXTRALOGLEVEL;
405 constexpr const char* CSettings::SETTING_DEBUG_SCREENSHOTPATH;
406 constexpr const char* CSettings::SETTING_DEBUG_SHARE_LOG;
407 constexpr const char* CSettings::SETTING_EVENTLOG_ENABLED;
408 constexpr const char* CSettings::SETTING_EVENTLOG_ENABLED_NOTIFICATIONS;
409 constexpr const char* CSettings::SETTING_EVENTLOG_SHOW;
410 constexpr const char* CSettings::SETTING_MASTERLOCK_LOCKCODE;
411 constexpr const char* CSettings::SETTING_MASTERLOCK_STARTUPLOCK;
412 constexpr const char* CSettings::SETTING_MASTERLOCK_MAXRETRIES;
413 constexpr const char* CSettings::SETTING_CACHE_HARDDISK;
414 constexpr const char* CSettings::SETTING_CACHEVIDEO_DVDROM;
415 constexpr const char* CSettings::SETTING_CACHEVIDEO_LAN;
416 constexpr const char* CSettings::SETTING_CACHEVIDEO_INTERNET;
417 constexpr const char* CSettings::SETTING_CACHEAUDIO_DVDROM;
418 constexpr const char* CSettings::SETTING_CACHEAUDIO_LAN;
419 constexpr const char* CSettings::SETTING_CACHEAUDIO_INTERNET;
420 constexpr const char* CSettings::SETTING_CACHEDVD_DVDROM;
421 constexpr const char* CSettings::SETTING_CACHEDVD_LAN;
422 constexpr const char* CSettings::SETTING_CACHEUNKNOWN_INTERNET;
423 constexpr const char* CSettings::SETTING_SYSTEM_PLAYLISTSPATH;
424 constexpr const char* CSettings::SETTING_ADDONS_AUTOUPDATES;
425 constexpr const char* CSettings::SETTING_ADDONS_NOTIFICATIONS;
426 constexpr const char* CSettings::SETTING_ADDONS_SHOW_RUNNING;
427 constexpr const char* CSettings::SETTING_ADDONS_ALLOW_UNKNOWN_SOURCES;
428 constexpr const char* CSettings::SETTING_ADDONS_UPDATEMODE;
429 constexpr const char* CSettings::SETTING_ADDONS_MANAGE_DEPENDENCIES;
430 constexpr const char* CSettings::SETTING_GENERAL_ADDONFOREIGNFILTER;
431 constexpr const char* CSettings::SETTING_GENERAL_ADDONBROKENFILTER;
432 constexpr const char* CSettings::SETTING_SOURCE_VIDEOS;
433 constexpr const char* CSettings::SETTING_SOURCE_MUSIC;
434 constexpr const char* CSettings::SETTING_SOURCE_PICTURES;
435 //! @todo: remove in c++17
436
Initialize()437 bool CSettings::Initialize()
438 {
439 CSingleLock lock(m_critical);
440 if (m_initialized)
441 return false;
442
443 // register custom setting types
444 InitializeSettingTypes();
445 // register custom setting controls
446 InitializeControls();
447
448 // option fillers and conditions need to be
449 // initialized before the setting definitions
450 InitializeOptionFillers();
451 InitializeConditions();
452
453 // load the settings definitions
454 if (!InitializeDefinitions())
455 return false;
456
457 GetSettingsManager()->SetInitialized();
458
459 InitializeISettingsHandlers();
460 InitializeISubSettings();
461 InitializeISettingCallbacks();
462
463 m_initialized = true;
464
465 return true;
466 }
467
RegisterSubSettings(ISubSettings * subSettings)468 void CSettings::RegisterSubSettings(ISubSettings* subSettings)
469 {
470 if (subSettings == nullptr)
471 return;
472
473 CSingleLock lock(m_critical);
474 m_subSettings.insert(subSettings);
475 }
476
UnregisterSubSettings(ISubSettings * subSettings)477 void CSettings::UnregisterSubSettings(ISubSettings* subSettings)
478 {
479 if (subSettings == nullptr)
480 return;
481
482 CSingleLock lock(m_critical);
483 m_subSettings.erase(subSettings);
484 }
485
Load()486 bool CSettings::Load()
487 {
488 const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager();
489
490 return Load(profileManager->GetSettingsFile());
491 }
492
Load(const std::string & file)493 bool CSettings::Load(const std::string &file)
494 {
495 CXBMCTinyXML xmlDoc;
496 bool updated = false;
497 if (!XFILE::CFile::Exists(file) || !xmlDoc.LoadFile(file) ||
498 !Load(xmlDoc.RootElement(), updated))
499 {
500 CLog::Log(LOGERROR, "CSettings: unable to load settings from %s, creating new default settings", file.c_str());
501 if (!Reset())
502 return false;
503
504 if (!Load(file))
505 return false;
506 }
507 // if the settings had to be updated, we need to save the changes
508 else if (updated)
509 return Save(file);
510
511 return true;
512 }
513
Load(const TiXmlElement * root)514 bool CSettings::Load(const TiXmlElement* root)
515 {
516 bool updated = false;
517 return Load(root, updated);
518 }
519
Save()520 bool CSettings::Save()
521 {
522 const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager();
523
524 return Save(profileManager->GetSettingsFile());
525 }
526
Save(const std::string & file)527 bool CSettings::Save(const std::string &file)
528 {
529 CXBMCTinyXML xmlDoc;
530 if (!SaveValuesToXml(xmlDoc))
531 return false;
532
533 TiXmlElement* root = xmlDoc.RootElement();
534 if (root == nullptr)
535 return false;
536
537 if (!Save(root))
538 return false;
539
540 return xmlDoc.SaveFile(file);
541 }
542
Save(TiXmlNode * root) const543 bool CSettings::Save(TiXmlNode* root) const
544 {
545 CSingleLock lock(m_critical);
546 // save any ISubSettings implementations
547 for (const auto& subSetting : m_subSettings)
548 {
549 if (!subSetting->Save(root))
550 return false;
551 }
552
553 return true;
554 }
555
LoadSetting(const TiXmlNode * node,const std::string & settingId)556 bool CSettings::LoadSetting(const TiXmlNode *node, const std::string &settingId)
557 {
558 return GetSettingsManager()->LoadSetting(node, settingId);
559 }
560
GetBool(const std::string & id) const561 bool CSettings::GetBool(const std::string& id) const
562 {
563 // Backward compatibility (skins use this setting)
564 if (StringUtils::EqualsNoCase(id, "lookandfeel.enablemouse"))
565 return CSettingsBase::GetBool(CSettings::SETTING_INPUT_ENABLEMOUSE);
566
567 return CSettingsBase::GetBool(id);
568 }
569
Clear()570 void CSettings::Clear()
571 {
572 CSingleLock lock(m_critical);
573 if (!m_initialized)
574 return;
575
576 GetSettingsManager()->Clear();
577
578 for (auto& subSetting : m_subSettings)
579 subSetting->Clear();
580
581 m_initialized = false;
582 }
583
Load(const TiXmlElement * root,bool & updated)584 bool CSettings::Load(const TiXmlElement* root, bool& updated)
585 {
586 if (root == nullptr)
587 return false;
588
589 if (!CSettingsBase::LoadValuesFromXml(root, updated))
590 return false;
591
592 return Load(static_cast<const TiXmlNode*>(root));
593 }
594
Load(const TiXmlNode * settings)595 bool CSettings::Load(const TiXmlNode* settings)
596 {
597 bool ok = true;
598 CSingleLock lock(m_critical);
599 for (const auto& subSetting : m_subSettings)
600 ok &= subSetting->Load(settings);
601
602 return ok;
603 }
604
Initialize(const std::string & file)605 bool CSettings::Initialize(const std::string &file)
606 {
607 CXBMCTinyXML xmlDoc;
608 if (!xmlDoc.LoadFile(file.c_str()))
609 {
610 CLog::Log(LOGERROR, "CSettings: error loading settings definition from %s, Line %d\n%s", file.c_str(), xmlDoc.ErrorRow(), xmlDoc.ErrorDesc());
611 return false;
612 }
613
614 CLog::Log(LOGDEBUG, "CSettings: loaded settings definition from %s", file.c_str());
615
616 return InitializeDefinitionsFromXml(xmlDoc);
617 }
618
InitializeDefinitions()619 bool CSettings::InitializeDefinitions()
620 {
621 if (!Initialize(SETTINGS_XML_FOLDER "settings.xml"))
622 {
623 CLog::Log(LOGFATAL, "Unable to load settings definitions");
624 return false;
625 }
626 #if defined(TARGET_WINDOWS)
627 if (CFile::Exists(SETTINGS_XML_FOLDER "windows.xml") && !Initialize(SETTINGS_XML_FOLDER "windows.xml"))
628 CLog::Log(LOGFATAL, "Unable to load windows-specific settings definitions");
629 #if defined(TARGET_WINDOWS_DESKTOP)
630 if (CFile::Exists(SETTINGS_XML_FOLDER "win32.xml") && !Initialize(SETTINGS_XML_FOLDER "win32.xml"))
631 CLog::Log(LOGFATAL, "Unable to load win32-specific settings definitions");
632 #elif defined(TARGET_WINDOWS_STORE)
633 if (CFile::Exists(SETTINGS_XML_FOLDER "win10.xml") && !Initialize(SETTINGS_XML_FOLDER "win10.xml"))
634 CLog::Log(LOGFATAL, "Unable to load win10-specific settings definitions");
635 #endif
636 #elif defined(TARGET_ANDROID)
637 if (CFile::Exists(SETTINGS_XML_FOLDER "android.xml") && !Initialize(SETTINGS_XML_FOLDER "android.xml"))
638 CLog::Log(LOGFATAL, "Unable to load android-specific settings definitions");
639 #elif defined(TARGET_FREEBSD)
640 if (CFile::Exists(SETTINGS_XML_FOLDER "freebsd.xml") && !Initialize(SETTINGS_XML_FOLDER "freebsd.xml"))
641 CLog::Log(LOGFATAL, "Unable to load freebsd-specific settings definitions");
642 #elif defined(TARGET_DRAGONFLY)
643 if (CFile::Exists(SETTINGS_XML_FOLDER "dragonfly.xml") && !Initialize(SETTINGS_XML_FOLDER "dragonfly.xml"))
644 CLog::Log(LOGFATAL, "Unable to load dragonfly-specific settings definitions");
645 #elif defined(TARGET_LINUX)
646 if (CFile::Exists(SETTINGS_XML_FOLDER "linux.xml") && !Initialize(SETTINGS_XML_FOLDER "linux.xml"))
647 CLog::Log(LOGFATAL, "Unable to load linux-specific settings definitions");
648 #elif defined(TARGET_DARWIN)
649 if (CFile::Exists(SETTINGS_XML_FOLDER "darwin.xml") && !Initialize(SETTINGS_XML_FOLDER "darwin.xml"))
650 CLog::Log(LOGFATAL, "Unable to load darwin-specific settings definitions");
651 #if defined(TARGET_DARWIN_OSX)
652 if (CFile::Exists(SETTINGS_XML_FOLDER "darwin_osx.xml") && !Initialize(SETTINGS_XML_FOLDER "darwin_osx.xml"))
653 CLog::Log(LOGFATAL, "Unable to load osx-specific settings definitions");
654 #elif defined(TARGET_DARWIN_IOS)
655 if (CFile::Exists(SETTINGS_XML_FOLDER "darwin_ios.xml") && !Initialize(SETTINGS_XML_FOLDER "darwin_ios.xml"))
656 CLog::Log(LOGFATAL, "Unable to load ios-specific settings definitions");
657 #elif defined(TARGET_DARWIN_TVOS)
658 if (CFile::Exists(SETTINGS_XML_FOLDER "darwin_tvos.xml") &&
659 !Initialize(SETTINGS_XML_FOLDER "darwin_tvos.xml"))
660 CLog::Log(LOGFATAL, "Unable to load tvos-specific settings definitions");
661 #endif
662 #endif
663
664 #if defined(PLATFORM_SETTINGS_FILE)
665 if (CFile::Exists(SETTINGS_XML_FOLDER DEF_TO_STR_VALUE(PLATFORM_SETTINGS_FILE)) && !Initialize(SETTINGS_XML_FOLDER DEF_TO_STR_VALUE(PLATFORM_SETTINGS_FILE)))
666 CLog::Log(LOGFATAL, "Unable to load platform-specific settings definitions (%s)", DEF_TO_STR_VALUE(PLATFORM_SETTINGS_FILE));
667 #endif
668
669 // load any custom visibility and default values before loading the special
670 // appliance.xml so that appliances are able to overwrite even those values
671 InitializeVisibility();
672 InitializeDefaults();
673
674 if (CFile::Exists(SETTINGS_XML_FOLDER "appliance.xml") && !Initialize(SETTINGS_XML_FOLDER "appliance.xml"))
675 CLog::Log(LOGFATAL, "Unable to load appliance-specific settings definitions");
676
677 return true;
678 }
679
InitializeSettingTypes()680 void CSettings::InitializeSettingTypes()
681 {
682 GetSettingsManager()->RegisterSettingType("addon", this);
683 GetSettingsManager()->RegisterSettingType("date", this);
684 GetSettingsManager()->RegisterSettingType("path", this);
685 GetSettingsManager()->RegisterSettingType("time", this);
686 }
687
InitializeControls()688 void CSettings::InitializeControls()
689 {
690 GetSettingsManager()->RegisterSettingControl("toggle", this);
691 GetSettingsManager()->RegisterSettingControl("spinner", this);
692 GetSettingsManager()->RegisterSettingControl("edit", this);
693 GetSettingsManager()->RegisterSettingControl("button", this);
694 GetSettingsManager()->RegisterSettingControl("list", this);
695 GetSettingsManager()->RegisterSettingControl("slider", this);
696 GetSettingsManager()->RegisterSettingControl("range", this);
697 GetSettingsManager()->RegisterSettingControl("title", this);
698 }
699
InitializeVisibility()700 void CSettings::InitializeVisibility()
701 {
702 // hide some settings if necessary
703 #if defined(TARGET_DARWIN_EMBEDDED)
704 std::shared_ptr<CSettingString> timezonecountry = std::static_pointer_cast<CSettingString>(GetSettingsManager()->GetSetting(CSettings::SETTING_LOCALE_TIMEZONECOUNTRY));
705 std::shared_ptr<CSettingString> timezone = std::static_pointer_cast<CSettingString>(GetSettingsManager()->GetSetting(CSettings::SETTING_LOCALE_TIMEZONE));
706
707 timezonecountry->SetRequirementsMet(false);
708 timezone->SetRequirementsMet(false);
709 #endif
710 }
711
InitializeDefaults()712 void CSettings::InitializeDefaults()
713 {
714 // set some default values if necessary
715 #if defined(TARGET_POSIX)
716 std::shared_ptr<CSettingString> timezonecountry = std::static_pointer_cast<CSettingString>(GetSettingsManager()->GetSetting(CSettings::SETTING_LOCALE_TIMEZONECOUNTRY));
717 std::shared_ptr<CSettingString> timezone = std::static_pointer_cast<CSettingString>(GetSettingsManager()->GetSetting(CSettings::SETTING_LOCALE_TIMEZONE));
718
719 if (timezonecountry->IsVisible())
720 timezonecountry->SetDefault(g_timezone.GetCountryByTimezone(g_timezone.GetOSConfiguredTimezone()));
721 if (timezone->IsVisible())
722 timezone->SetDefault(g_timezone.GetOSConfiguredTimezone());
723 #endif // defined(TARGET_POSIX)
724
725 #if defined(TARGET_WINDOWS)
726 // We prefer a fake fullscreen mode (window covering the screen rather than dedicated fullscreen)
727 // as it works nicer with switching to other applications. However on some systems vsync is broken
728 // when we do this (eg non-Aero on ATI in particular) and on others (AppleTV) we can't get XBMC to
729 // the front
730 if (g_sysinfo.IsAeroDisabled())
731 {
732 auto setting = GetSettingsManager()->GetSetting(CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN);
733 if (!setting)
734 CLog::Log(LOGERROR, "Failed to load setting for: {}",
735 CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN);
736 else
737 std::static_pointer_cast<CSettingBool>(setting)->SetDefault(false);
738 }
739 #endif
740
741 if (g_application.IsStandAlone())
742 {
743 auto setting =
744 GetSettingsManager()->GetSetting(CSettings::SETTING_POWERMANAGEMENT_SHUTDOWNSTATE);
745 if (!setting)
746 CLog::Log(LOGERROR, "Failed to load setting for: {}",
747 CSettings::SETTING_POWERMANAGEMENT_SHUTDOWNSTATE);
748 else
749 std::static_pointer_cast<CSettingInt>(setting)->SetDefault(POWERSTATE_SHUTDOWN);
750 }
751
752 // Initialize deviceUUID if not already set, used in zeroconf advertisements.
753 std::shared_ptr<CSettingString> deviceUUID = std::static_pointer_cast<CSettingString>(GetSettingsManager()->GetSetting(CSettings::SETTING_SERVICES_DEVICEUUID));
754 if (deviceUUID->GetValue().empty())
755 {
756 const std::string& uuid = StringUtils::CreateUUID();
757 auto setting = GetSettingsManager()->GetSetting(CSettings::SETTING_SERVICES_DEVICEUUID);
758 if (!setting)
759 CLog::Log(LOGERROR, "Failed to load setting for: {}", CSettings::SETTING_SERVICES_DEVICEUUID);
760 else
761 std::static_pointer_cast<CSettingString>(setting)->SetValue(uuid);
762 }
763 }
764
InitializeOptionFillers()765 void CSettings::InitializeOptionFillers()
766 {
767 // register setting option fillers
768 #ifdef HAS_DVD_DRIVE
769 GetSettingsManager()->RegisterSettingOptionsFiller("audiocdactions", MEDIA_DETECT::CAutorun::SettingOptionAudioCdActionsFiller);
770 #endif
771 GetSettingsManager()->RegisterSettingOptionsFiller("charsets", CCharsetConverter::SettingOptionsCharsetsFiller);
772 GetSettingsManager()->RegisterSettingOptionsFiller("fonts", GUIFontManager::SettingOptionsFontsFiller);
773 GetSettingsManager()->RegisterSettingOptionsFiller("languagenames", CLangInfo::SettingOptionsLanguageNamesFiller);
774 GetSettingsManager()->RegisterSettingOptionsFiller("refreshchangedelays", CDisplaySettings::SettingOptionsRefreshChangeDelaysFiller);
775 GetSettingsManager()->RegisterSettingOptionsFiller("refreshrates", CDisplaySettings::SettingOptionsRefreshRatesFiller);
776 GetSettingsManager()->RegisterSettingOptionsFiller("regions", CLangInfo::SettingOptionsRegionsFiller);
777 GetSettingsManager()->RegisterSettingOptionsFiller("shortdateformats", CLangInfo::SettingOptionsShortDateFormatsFiller);
778 GetSettingsManager()->RegisterSettingOptionsFiller("longdateformats", CLangInfo::SettingOptionsLongDateFormatsFiller);
779 GetSettingsManager()->RegisterSettingOptionsFiller("timeformats", CLangInfo::SettingOptionsTimeFormatsFiller);
780 GetSettingsManager()->RegisterSettingOptionsFiller("24hourclockformats", CLangInfo::SettingOptions24HourClockFormatsFiller);
781 GetSettingsManager()->RegisterSettingOptionsFiller("speedunits", CLangInfo::SettingOptionsSpeedUnitsFiller);
782 GetSettingsManager()->RegisterSettingOptionsFiller("temperatureunits", CLangInfo::SettingOptionsTemperatureUnitsFiller);
783 GetSettingsManager()->RegisterSettingOptionsFiller("rendermethods", CBaseRenderer::SettingOptionsRenderMethodsFiller);
784 GetSettingsManager()->RegisterSettingOptionsFiller("modes", CDisplaySettings::SettingOptionsModesFiller);
785 GetSettingsManager()->RegisterSettingOptionsFiller("resolutions", CDisplaySettings::SettingOptionsResolutionsFiller);
786 GetSettingsManager()->RegisterSettingOptionsFiller("screens", CDisplaySettings::SettingOptionsDispModeFiller);
787 GetSettingsManager()->RegisterSettingOptionsFiller("stereoscopicmodes", CDisplaySettings::SettingOptionsStereoscopicModesFiller);
788 GetSettingsManager()->RegisterSettingOptionsFiller("preferedstereoscopicviewmodes", CDisplaySettings::SettingOptionsPreferredStereoscopicViewModesFiller);
789 GetSettingsManager()->RegisterSettingOptionsFiller("monitors", CDisplaySettings::SettingOptionsMonitorsFiller);
790 GetSettingsManager()->RegisterSettingOptionsFiller("cmsmodes", CDisplaySettings::SettingOptionsCmsModesFiller);
791 GetSettingsManager()->RegisterSettingOptionsFiller("cmswhitepoints", CDisplaySettings::SettingOptionsCmsWhitepointsFiller);
792 GetSettingsManager()->RegisterSettingOptionsFiller("cmsprimaries", CDisplaySettings::SettingOptionsCmsPrimariesFiller);
793 GetSettingsManager()->RegisterSettingOptionsFiller("cmsgammamodes", CDisplaySettings::SettingOptionsCmsGammaModesFiller);
794 GetSettingsManager()->RegisterSettingOptionsFiller("videoseeksteps", CSeekHandler::SettingOptionsSeekStepsFiller);
795 GetSettingsManager()->RegisterSettingOptionsFiller("startupwindows", ADDON::CSkinInfo::SettingOptionsStartupWindowsFiller);
796 GetSettingsManager()->RegisterSettingOptionsFiller("audiostreamlanguages", CLangInfo::SettingOptionsAudioStreamLanguagesFiller);
797 GetSettingsManager()->RegisterSettingOptionsFiller("subtitlestreamlanguages", CLangInfo::SettingOptionsSubtitleStreamLanguagesFiller);
798 GetSettingsManager()->RegisterSettingOptionsFiller("subtitledownloadlanguages", CLangInfo::SettingOptionsSubtitleDownloadlanguagesFiller);
799 GetSettingsManager()->RegisterSettingOptionsFiller("iso6391languages", CLangInfo::SettingOptionsISO6391LanguagesFiller);
800 GetSettingsManager()->RegisterSettingOptionsFiller("skincolors", ADDON::CSkinInfo::SettingOptionsSkinColorsFiller);
801 GetSettingsManager()->RegisterSettingOptionsFiller("skinfonts", ADDON::CSkinInfo::SettingOptionsSkinFontsFiller);
802 GetSettingsManager()->RegisterSettingOptionsFiller("skinthemes", ADDON::CSkinInfo::SettingOptionsSkinThemesFiller);
803 #ifdef TARGET_LINUX
804 GetSettingsManager()->RegisterSettingOptionsFiller("timezonecountries", CPosixTimezone::SettingOptionsTimezoneCountriesFiller);
805 GetSettingsManager()->RegisterSettingOptionsFiller("timezones", CPosixTimezone::SettingOptionsTimezonesFiller);
806 #endif
807 GetSettingsManager()->RegisterSettingOptionsFiller("keyboardlayouts", CKeyboardLayoutManager::SettingOptionsKeyboardLayoutsFiller);
808 }
809
UninitializeOptionFillers()810 void CSettings::UninitializeOptionFillers()
811 {
812 GetSettingsManager()->UnregisterSettingOptionsFiller("audiocdactions");
813 GetSettingsManager()->UnregisterSettingOptionsFiller("audiocdencoders");
814 GetSettingsManager()->UnregisterSettingOptionsFiller("charsets");
815 GetSettingsManager()->UnregisterSettingOptionsFiller("fontheights");
816 GetSettingsManager()->UnregisterSettingOptionsFiller("fonts");
817 GetSettingsManager()->UnregisterSettingOptionsFiller("languagenames");
818 GetSettingsManager()->UnregisterSettingOptionsFiller("refreshchangedelays");
819 GetSettingsManager()->UnregisterSettingOptionsFiller("refreshrates");
820 GetSettingsManager()->UnregisterSettingOptionsFiller("regions");
821 GetSettingsManager()->UnregisterSettingOptionsFiller("shortdateformats");
822 GetSettingsManager()->UnregisterSettingOptionsFiller("longdateformats");
823 GetSettingsManager()->UnregisterSettingOptionsFiller("timeformats");
824 GetSettingsManager()->UnregisterSettingOptionsFiller("24hourclockformats");
825 GetSettingsManager()->UnregisterSettingOptionsFiller("speedunits");
826 GetSettingsManager()->UnregisterSettingOptionsFiller("temperatureunits");
827 GetSettingsManager()->UnregisterSettingOptionsFiller("rendermethods");
828 GetSettingsManager()->UnregisterSettingOptionsFiller("resolutions");
829 GetSettingsManager()->UnregisterSettingOptionsFiller("screens");
830 GetSettingsManager()->UnregisterSettingOptionsFiller("stereoscopicmodes");
831 GetSettingsManager()->UnregisterSettingOptionsFiller("preferedstereoscopicviewmodes");
832 GetSettingsManager()->UnregisterSettingOptionsFiller("monitors");
833 GetSettingsManager()->UnregisterSettingOptionsFiller("cmsmodes");
834 GetSettingsManager()->UnregisterSettingOptionsFiller("cmswhitepoints");
835 GetSettingsManager()->UnregisterSettingOptionsFiller("cmsprimaries");
836 GetSettingsManager()->UnregisterSettingOptionsFiller("cmsgammamodes");
837 GetSettingsManager()->UnregisterSettingOptionsFiller("videoseeksteps");
838 GetSettingsManager()->UnregisterSettingOptionsFiller("shutdownstates");
839 GetSettingsManager()->UnregisterSettingOptionsFiller("startupwindows");
840 GetSettingsManager()->UnregisterSettingOptionsFiller("audiostreamlanguages");
841 GetSettingsManager()->UnregisterSettingOptionsFiller("subtitlestreamlanguages");
842 GetSettingsManager()->UnregisterSettingOptionsFiller("subtitledownloadlanguages");
843 GetSettingsManager()->UnregisterSettingOptionsFiller("iso6391languages");
844 GetSettingsManager()->UnregisterSettingOptionsFiller("skincolors");
845 GetSettingsManager()->UnregisterSettingOptionsFiller("skinfonts");
846 GetSettingsManager()->UnregisterSettingOptionsFiller("skinthemes");
847 #if defined(TARGET_LINUX)
848 GetSettingsManager()->UnregisterSettingOptionsFiller("timezonecountries");
849 GetSettingsManager()->UnregisterSettingOptionsFiller("timezones");
850 #endif // defined(TARGET_LINUX)
851 GetSettingsManager()->UnregisterSettingOptionsFiller("verticalsyncs");
852 GetSettingsManager()->UnregisterSettingOptionsFiller("keyboardlayouts");
853 }
854
InitializeConditions()855 void CSettings::InitializeConditions()
856 {
857 CSettingConditions::Initialize();
858
859 // add basic conditions
860 const std::set<std::string> &simpleConditions = CSettingConditions::GetSimpleConditions();
861 for (std::set<std::string>::const_iterator itCondition = simpleConditions.begin(); itCondition != simpleConditions.end(); ++itCondition)
862 GetSettingsManager()->AddCondition(*itCondition);
863
864 // add more complex conditions
865 const std::map<std::string, SettingConditionCheck> &complexConditions = CSettingConditions::GetComplexConditions();
866 for (std::map<std::string, SettingConditionCheck>::const_iterator itCondition = complexConditions.begin(); itCondition != complexConditions.end(); ++itCondition)
867 GetSettingsManager()->AddDynamicCondition(itCondition->first, itCondition->second);
868 }
869
UninitializeConditions()870 void CSettings::UninitializeConditions()
871 {
872 CSettingConditions::Deinitialize();
873 }
874
InitializeISettingsHandlers()875 void CSettings::InitializeISettingsHandlers()
876 {
877 // register ISettingsHandler implementations
878 // The order of these matters! Handlers are processed in the order they were registered.
879 GetSettingsManager()->RegisterSettingsHandler(&CMediaSourceSettings::GetInstance());
880 #ifdef HAS_UPNP
881 GetSettingsManager()->RegisterSettingsHandler(&CUPnPSettings::GetInstance());
882 #endif
883 GetSettingsManager()->RegisterSettingsHandler(&CWakeOnAccess::GetInstance());
884 GetSettingsManager()->RegisterSettingsHandler(&CRssManager::GetInstance());
885 GetSettingsManager()->RegisterSettingsHandler(&g_langInfo);
886 GetSettingsManager()->RegisterSettingsHandler(&g_application);
887 #if defined(TARGET_LINUX) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
888 GetSettingsManager()->RegisterSettingsHandler(&g_timezone);
889 #endif
890 GetSettingsManager()->RegisterSettingsHandler(&CMediaSettings::GetInstance());
891 }
892
UninitializeISettingsHandlers()893 void CSettings::UninitializeISettingsHandlers()
894 {
895 // unregister ISettingsHandler implementations
896 GetSettingsManager()->UnregisterSettingsHandler(&CMediaSettings::GetInstance());
897 #if defined(TARGET_LINUX)
898 GetSettingsManager()->UnregisterSettingsHandler(&g_timezone);
899 #endif // defined(TARGET_LINUX)
900 GetSettingsManager()->UnregisterSettingsHandler(&g_application);
901 GetSettingsManager()->UnregisterSettingsHandler(&g_langInfo);
902 GetSettingsManager()->UnregisterSettingsHandler(&CRssManager::GetInstance());
903 GetSettingsManager()->UnregisterSettingsHandler(&CWakeOnAccess::GetInstance());
904 #ifdef HAS_UPNP
905 GetSettingsManager()->UnregisterSettingsHandler(&CUPnPSettings::GetInstance());
906 #endif
907 GetSettingsManager()->UnregisterSettingsHandler(&CMediaSourceSettings::GetInstance());
908 }
909
InitializeISubSettings()910 void CSettings::InitializeISubSettings()
911 {
912 // register ISubSettings implementations
913 RegisterSubSettings(&g_application);
914 RegisterSubSettings(&CDisplaySettings::GetInstance());
915 RegisterSubSettings(&CMediaSettings::GetInstance());
916 RegisterSubSettings(&CSkinSettings::GetInstance());
917 RegisterSubSettings(&g_sysinfo);
918 RegisterSubSettings(&CViewStateSettings::GetInstance());
919 }
920
UninitializeISubSettings()921 void CSettings::UninitializeISubSettings()
922 {
923 // unregister ISubSettings implementations
924 UnregisterSubSettings(&g_application);
925 UnregisterSubSettings(&CDisplaySettings::GetInstance());
926 UnregisterSubSettings(&CMediaSettings::GetInstance());
927 UnregisterSubSettings(&CSkinSettings::GetInstance());
928 UnregisterSubSettings(&g_sysinfo);
929 UnregisterSubSettings(&CViewStateSettings::GetInstance());
930 }
931
InitializeISettingCallbacks()932 void CSettings::InitializeISettingCallbacks()
933 {
934 // register any ISettingCallback implementations
935 std::set<std::string> settingSet;
936 settingSet.insert(CSettings::SETTING_MUSICLIBRARY_CLEANUP);
937 settingSet.insert(CSettings::SETTING_MUSICLIBRARY_EXPORT);
938 settingSet.insert(CSettings::SETTING_MUSICLIBRARY_IMPORT);
939 settingSet.insert(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
940 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_FLATTENTVSHOWS);
941 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_GROUPMOVIESETS);
942 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_CLEANUP);
943 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_IMPORT);
944 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_EXPORT);
945 settingSet.insert(CSettings::SETTING_VIDEOLIBRARY_SHOWUNWATCHEDPLOTS);
946 GetSettingsManager()->RegisterCallback(&CMediaSettings::GetInstance(), settingSet);
947
948 settingSet.clear();
949 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_SCREEN);
950 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_RESOLUTION);
951 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_SCREENMODE);
952 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_MONITOR);
953 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_PREFEREDSTEREOSCOPICMODE);
954 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_3DLUT);
955 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_DISPLAYPROFILE);
956 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_BLANKDISPLAYS);
957 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_WHITELIST);
958 GetSettingsManager()->RegisterCallback(&CDisplaySettings::GetInstance(), settingSet);
959
960 settingSet.clear();
961 settingSet.insert(CSettings::SETTING_VIDEOPLAYER_SEEKDELAY);
962 settingSet.insert(CSettings::SETTING_VIDEOPLAYER_SEEKSTEPS);
963 settingSet.insert(CSettings::SETTING_MUSICPLAYER_SEEKDELAY);
964 settingSet.insert(CSettings::SETTING_MUSICPLAYER_SEEKSTEPS);
965 GetSettingsManager()->RegisterCallback(&g_application.GetAppPlayer().GetSeekHandler(), settingSet);
966
967 settingSet.clear();
968 settingSet.insert(CSettings::SETTING_AUDIOOUTPUT_PASSTHROUGH);
969 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_SKIN);
970 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_SKINSETTINGS);
971 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_FONT);
972 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_SKINTHEME);
973 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_SKINCOLORS);
974 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_SKINZOOM);
975 settingSet.insert(CSettings::SETTING_MUSICPLAYER_REPLAYGAINPREAMP);
976 settingSet.insert(CSettings::SETTING_MUSICPLAYER_REPLAYGAINNOGAINPREAMP);
977 settingSet.insert(CSettings::SETTING_MUSICPLAYER_REPLAYGAINTYPE);
978 settingSet.insert(CSettings::SETTING_MUSICPLAYER_REPLAYGAINAVOIDCLIPPING);
979 settingSet.insert(CSettings::SETTING_SCRAPERS_MUSICVIDEOSDEFAULT);
980 settingSet.insert(CSettings::SETTING_SCREENSAVER_MODE);
981 settingSet.insert(CSettings::SETTING_SCREENSAVER_PREVIEW);
982 settingSet.insert(CSettings::SETTING_SCREENSAVER_SETTINGS);
983 settingSet.insert(CSettings::SETTING_AUDIOCDS_SETTINGS);
984 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_GUICALIBRATION);
985 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_TESTPATTERN);
986 settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODEC);
987 settingSet.insert(CSettings::SETTING_VIDEOPLAYER_USEMEDIACODECSURFACE);
988 settingSet.insert(CSettings::SETTING_AUDIOOUTPUT_VOLUMESTEPS);
989 settingSet.insert(CSettings::SETTING_SOURCE_VIDEOS);
990 settingSet.insert(CSettings::SETTING_SOURCE_MUSIC);
991 settingSet.insert(CSettings::SETTING_SOURCE_PICTURES);
992 settingSet.insert(CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN);
993 GetSettingsManager()->RegisterCallback(&g_application, settingSet);
994
995 settingSet.clear();
996 settingSet.insert(CSettings::SETTING_SUBTITLES_CHARSET);
997 settingSet.insert(CSettings::SETTING_LOCALE_CHARSET);
998 GetSettingsManager()->RegisterCallback(&g_charsetConverter, settingSet);
999
1000 settingSet.clear();
1001 settingSet.insert(CSettings::SETTING_LOCALE_AUDIOLANGUAGE);
1002 settingSet.insert(CSettings::SETTING_LOCALE_SUBTITLELANGUAGE);
1003 settingSet.insert(CSettings::SETTING_LOCALE_LANGUAGE);
1004 settingSet.insert(CSettings::SETTING_LOCALE_COUNTRY);
1005 settingSet.insert(CSettings::SETTING_LOCALE_SHORTDATEFORMAT);
1006 settingSet.insert(CSettings::SETTING_LOCALE_LONGDATEFORMAT);
1007 settingSet.insert(CSettings::SETTING_LOCALE_TIMEFORMAT);
1008 settingSet.insert(CSettings::SETTING_LOCALE_USE24HOURCLOCK);
1009 settingSet.insert(CSettings::SETTING_LOCALE_TEMPERATUREUNIT);
1010 settingSet.insert(CSettings::SETTING_LOCALE_SPEEDUNIT);
1011 GetSettingsManager()->RegisterCallback(&g_langInfo, settingSet);
1012
1013 settingSet.clear();
1014 settingSet.insert(CSettings::SETTING_MASTERLOCK_LOCKCODE);
1015 GetSettingsManager()->RegisterCallback(&g_passwordManager, settingSet);
1016
1017 settingSet.clear();
1018 settingSet.insert(CSettings::SETTING_LOOKANDFEEL_RSSEDIT);
1019 GetSettingsManager()->RegisterCallback(&CRssManager::GetInstance(), settingSet);
1020
1021 #if defined(TARGET_LINUX)
1022 settingSet.clear();
1023 settingSet.insert(CSettings::SETTING_LOCALE_TIMEZONE);
1024 settingSet.insert(CSettings::SETTING_LOCALE_TIMEZONECOUNTRY);
1025 GetSettingsManager()->RegisterCallback(&g_timezone, settingSet);
1026 #endif
1027
1028 #if defined(TARGET_DARWIN_OSX)
1029 settingSet.clear();
1030 settingSet.insert(CSettings::SETTING_INPUT_APPLEREMOTEMODE);
1031 settingSet.insert(CSettings::SETTING_INPUT_APPLEREMOTEALWAYSON);
1032 GetSettingsManager()->RegisterCallback(&XBMCHelper::GetInstance(), settingSet);
1033 #endif
1034
1035 #if defined(TARGET_DARWIN_TVOS)
1036 settingSet.clear();
1037 settingSet.insert(CSettings::SETTING_INPUT_APPLESIRI);
1038 settingSet.insert(CSettings::SETTING_INPUT_APPLESIRITIMEOUT);
1039 settingSet.insert(CSettings::SETTING_INPUT_APPLESIRITIMEOUTENABLED);
1040 GetSettingsManager()->RegisterCallback(&CTVOSInputSettings::GetInstance(), settingSet);
1041 #endif
1042
1043 settingSet.clear();
1044 settingSet.insert(CSettings::SETTING_ADDONS_SHOW_RUNNING);
1045 settingSet.insert(CSettings::SETTING_ADDONS_MANAGE_DEPENDENCIES);
1046 settingSet.insert(CSettings::SETTING_ADDONS_ALLOW_UNKNOWN_SOURCES);
1047 GetSettingsManager()->RegisterCallback(&ADDON::CAddonSystemSettings::GetInstance(), settingSet);
1048
1049 settingSet.clear();
1050 settingSet.insert(CSettings::SETTING_POWERMANAGEMENT_WAKEONACCESS);
1051 GetSettingsManager()->RegisterCallback(&CWakeOnAccess::GetInstance(), settingSet);
1052
1053 #ifdef HAVE_LIBBLURAY
1054 settingSet.clear();
1055 settingSet.insert(CSettings::SETTING_DISC_PLAYBACK);
1056 GetSettingsManager()->RegisterCallback(&CDiscSettings::GetInstance(), settingSet);
1057 #endif
1058 }
1059
UninitializeISettingCallbacks()1060 void CSettings::UninitializeISettingCallbacks()
1061 {
1062 GetSettingsManager()->UnregisterCallback(&CMediaSettings::GetInstance());
1063 GetSettingsManager()->UnregisterCallback(&CDisplaySettings::GetInstance());
1064 GetSettingsManager()->UnregisterCallback(&g_application.GetAppPlayer().GetSeekHandler());
1065 GetSettingsManager()->UnregisterCallback(&g_application);
1066 GetSettingsManager()->UnregisterCallback(&g_charsetConverter);
1067 GetSettingsManager()->UnregisterCallback(&g_langInfo);
1068 GetSettingsManager()->UnregisterCallback(&g_passwordManager);
1069 GetSettingsManager()->UnregisterCallback(&CRssManager::GetInstance());
1070 #if defined(TARGET_LINUX)
1071 GetSettingsManager()->UnregisterCallback(&g_timezone);
1072 #endif // defined(TARGET_LINUX)
1073 #if defined(TARGET_DARWIN_OSX)
1074 GetSettingsManager()->UnregisterCallback(&XBMCHelper::GetInstance());
1075 #endif
1076 GetSettingsManager()->UnregisterCallback(&CWakeOnAccess::GetInstance());
1077 #ifdef HAVE_LIBBLURAY
1078 GetSettingsManager()->UnregisterCallback(&CDiscSettings::GetInstance());
1079 #endif
1080 }
1081
Reset()1082 bool CSettings::Reset()
1083 {
1084 const std::shared_ptr<CProfileManager> profileManager = CServiceBroker::GetSettingsComponent()->GetProfileManager();
1085
1086 const std::string settingsFile = profileManager->GetSettingsFile();
1087
1088 // try to delete the settings file
1089 if (XFILE::CFile::Exists(settingsFile, false) && !XFILE::CFile::Delete(settingsFile))
1090 CLog::Log(LOGWARNING, "Unable to delete old settings file at %s", settingsFile.c_str());
1091
1092 // unload any loaded settings
1093 Unload();
1094
1095 // try to save the default settings
1096 if (!Save())
1097 {
1098 CLog::Log(LOGWARNING, "Failed to save the default settings to %s", settingsFile.c_str());
1099 return false;
1100 }
1101
1102 return true;
1103 }
1104