private App() {
AppArguments.Set(AppFlag.SyncNavigation, ref ModernFrame.OptionUseSyncNavigation);
AppArguments.Set(AppFlag.DisableTransitionAnimation, ref ModernFrame.OptionDisableTransitionAnimation);
AppArguments.Set(AppFlag.RecentlyClosedQueueSize, ref LinkGroupFilterable.OptionRecentlyClosedQueueSize);
AppArguments.Set(AppFlag.ForceSteamId, ref SteamIdHelper.OptionForceValue);
AppArguments.Set(AppFlag.IgnoreSystemProxy, ref KunosApiProvider.OptionIgnoreSystemProxy);
AppArguments.Set(AppFlag.ScanPingTimeout, ref RecentManager.OptionScanPingTimeout);
AppArguments.Set(AppFlag.LanSocketTimeout, ref KunosApiProvider.OptionLanSocketTimeout);
AppArguments.Set(AppFlag.LanPollTimeout, ref KunosApiProvider.OptionLanPollTimeout);
AppArguments.Set(AppFlag.WebRequestTimeout, ref KunosApiProvider.OptionWebRequestTimeout);
AppArguments.Set(AppFlag.CommandTimeout, ref GameCommandExecutorBase.OptionCommandTimeout);
AppArguments.Set(AppFlag.DisableAcRootChecking, ref AcRootDirectory.OptionDisableChecking);
AppArguments.Set(AppFlag.AcObjectsLoadingConcurrency, ref BaseAcManagerNew.OptionAcObjectsLoadingConcurrency);
AppArguments.Set(AppFlag.SkinsLoadingConcurrency, ref CarObject.OptionSkinsLoadingConcurrency);
AppArguments.Set(AppFlag.KunosCareerIgnoreSkippedEvents, ref KunosCareerEventsManager.OptionIgnoreSkippedEvents);
AppArguments.Set(AppFlag.IgnoreMissingSkinsInKunosEvents, ref KunosEventObjectBase.OptionIgnoreMissingSkins);
AppArguments.Set(AppFlag.ForceToastFallbackMode, ref Toast.OptionFallbackMode);
AppArguments.Set(AppFlag.SmartPresetsChangedHandling, ref UserPresetsControl.OptionSmartChangedHandling);
AppArguments.Set(AppFlag.EnableRaceIniRestoration, ref Game.OptionEnableRaceIniRestoration);
AppArguments.Set(AppFlag.EnableRaceIniTestMode, ref Game.OptionRaceIniTestMode);
AppArguments.Set(AppFlag.RaceOutDebug, ref Game.OptionDebugMode);
AppArguments.Set(AppFlag.LiteStartupModeSupported, ref Pages.Windows.MainWindow.OptionLiteModeSupported);
AppArguments.Set(AppFlag.NfsPorscheTribute, ref RaceGridViewModel.OptionNfsPorscheNames);
AppArguments.Set(AppFlag.KeepIniComments, ref IniFile.OptionKeepComments);
LimitedSpace.Initialize();
LimitedStorage.Initialize();
DataProvider.Initialize();
TestKey();
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
if (!AppArguments.GetBool(AppFlag.PreventDisableWebBrowserEmulationMode) && (
ValuesStorage.GetInt(WebBrowserEmulationModeDisabledKey) < WebBrowserHelper.EmulationModeDisablingVersion ||
AppArguments.GetBool(AppFlag.ForceDisableWebBrowserEmulationMode))) {
try {
WebBrowserHelper.DisableBrowserEmulationMode();
ValuesStorage.Set(WebBrowserEmulationModeDisabledKey, WebBrowserHelper.EmulationModeDisablingVersion);
} catch (Exception e) {
Logging.Warning("Can’t disable emulation mode: " + e);
}
}
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
Formatting = Formatting.None,
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Include,
Culture = CultureInfo.InvariantCulture
};
AcToolsLogging.Logger = (s, m, p, l) => Logging.Write($"{s} (AcTools)", m, p, l);
var ignoreControls = AppArguments.Get(AppFlag.IgnoreControls);
if (!string.IsNullOrWhiteSpace(ignoreControls)) {
ControlsSettings.OptionIgnoreControlsFilter = Filter.Create(new StringTester(), ignoreControls);
}
var sseStart = AppArguments.Get(AppFlag.SseName);
if (!string.IsNullOrWhiteSpace(sseStart)) {
SseStarter.OptionStartName = sseStart;
}
FancyBackgroundManager.Initialize();
DpiAwareWindow.OptionScale = AppArguments.GetDouble(AppFlag.UiScale, 1d);
AppArguments.Set(AppFlag.CustomThemes, ref AppAppearanceManager.OptionCustomThemes);
AppAppearanceManager.OptionIdealFormattingModeDefaultValue = AppArguments.GetBool(AppFlag.IdealFormattingMode,
!Equals(DpiAwareWindow.OptionScale, 1d));
AppAppearanceManager.Initialize();
AcObjectsUriManager.Register(new UriProvider());
var uiFactory = new GameWrapperUiFactory();
GameWrapper.RegisterFactory(uiFactory);
ServerEntry.RegisterFactory(uiFactory);
GameWrapper.RegisterFactory(new DefaultAssistsFactory());
LapTimesManager.Instance.SetListener();
AcError.RegisterFixer(new AcErrorFixer());
AcError.RegisterSolutionsFactory(new SolutionsFactory());
InitializePresets();
SharingHelper.Initialize();
SharingUiHelper.Initialize();
var addonsDir = FilesStorage.Instance.GetFilename("Addons");
var pluginsDir = FilesStorage.Instance.GetFilename("Plugins");
if (Directory.Exists(addonsDir) && !Directory.Exists(pluginsDir)) {
Directory.Move(addonsDir, pluginsDir);
} else {
pluginsDir = FilesStorage.Instance.GetDirectory("Plugins");
}
PluginsManager.Initialize(pluginsDir);
PluginsWrappers.Initialize(
new MagickPluginWrapper(),
new AwesomiumPluginWrapper(),
new CefSharpPluginWrapper(),
new StarterPlus());
SteamIdHelper.Initialize(AppArguments.Get(AppFlag.ForceSteamId));
Superintendent.Initialize();
AppArguments.Set(AppFlag.OfflineMode, ref AppKeyDialog.OptionOfflineMode);
PrepareUi();
AppIconService.Initialize(this);
Toast.SetDefaultAction(() => (Current.Windows.OfType<ModernWindow>().FirstOrDefault(x => x.IsActive) ??
Current.MainWindow as ModernWindow)?.BringToFront());
BbCodeBlock.ImageClicked += BbCodeBlock_ImageClicked;
AppArguments.Set(AppFlag.LoadImagesInBackground, ref BetterImage.OptionBackgroundLoading);
Filter.OptionSimpleMatching = SettingsHolder.Content.SimpleFiltering;
StartupUri = new Uri(!Superintendent.Instance.IsReady || AcRootDirectorySelector.IsReviewNeeded() ?
@"Pages/Dialogs/AcRootDirectorySelector.xaml" : @"Pages/Windows/MainWindow.xaml", UriKind.Relative);
InitializeUpdatableStuff();
BackgroundInitialization();
FatalErrorMessage.Register(this);
ImageUtils.SafeMagickWrapper = fn => {
try {
return fn();
} catch (OutOfMemoryException e) {
NonfatalError.Notify(ToolsStrings.MagickNet_CannotLoad, ToolsStrings.MagickNet_CannotLoad_Commentary, e);
} catch (Exception e) {
NonfatalError.Notify(ToolsStrings.MagickNet_CannotLoad, e);
}
return null;
};
AbstractDataFile.ErrorsCatcher = new DataSyntaxErrorCatcher();
AcSharedMemory.Initialize();
AppArguments.Set(AppFlag.RunStatsWebserver, ref PlayerStatsManager.OptionRunStatsWebserver);
PlayerStatsManager.Instance.SetListener();
RhmService.Instance.SetListener();
_hibernator = new AppHibernator();
_hibernator.SetListener();
AppArguments.Set(AppFlag.TrackMapGeneratorMaxSize, ref TrackMapRenderer.OptionMaxSize);
}