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