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.NoProxy, ref KunosApiProvider.OptionNoProxy);
var proxy = AppArguments.Get(AppFlag.Proxy);
if (!string.IsNullOrWhiteSpace(proxy))
{
try {
var s = proxy.Split(':');
WebRequest.DefaultWebProxy = new WebProxy(s[0], FlexibleParser.ParseInt(s.ElementAtOrDefault(1), 1080));
} catch (Exception e) {
Logging.Error(e);
}
}
// TODO: AppArguments.Set(AppFlag.ScanPingTimeout, ref RecentManagerOld.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.DirectRequestTimeout, ref KunosApiProvider.OptionDirectRequestTimeout);
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);
AppArguments.Set(AppFlag.AutoConnectPeriod, ref OnlineServer.OptionAutoConnectPeriod);
LimitedSpace.Initialize();
LimitedStorage.Initialize();
DataProvider.Initialize();
CountryIdToImageConverter.Initialize(
FilesStorage.Instance.GetDirectory(FilesStorage.DataDirName, ContentCategory.CountryFlags),
FilesStorage.Instance.GetDirectory(FilesStorage.DataUserDirName, ContentCategory.CountryFlags));
FilesStorage.Instance.Watcher(ContentCategory.CountryFlags).Update += (sender, args) => {
CountryIdToImageConverter.ResetCache();
};
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);
if (!AppKeyHolder.IsAllRight)
{
AppAppearanceManager.OptionCustomThemes = false;
}
else
{
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());
}
{
var onlineMainListFile = FilesStorage.Instance.GetFilename("Online Servers", "Main List.txt");
var onlineFavouritesFile = FilesStorage.Instance.GetFilename("Online Servers", "Favourites.txt");
if (File.Exists(onlineMainListFile) && !File.Exists(onlineFavouritesFile))
{
Directory.Move(onlineMainListFile, onlineFavouritesFile);
}
}
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;
BbCodeBlock.OptionEmojiProvider = InternalUtils.GetEmojiProvider();
BbCodeBlock.OptionImageCacheDirectory = FilesStorage.Instance.GetTemporaryFilename("Images");
BbCodeBlock.OptionEmojiCacheDirectory = FilesStorage.Instance.GetTemporaryFilename("Emoji");
AppArguments.SetSize(AppFlag.ImagesCacheLimit, ref BetterImage.OptionCacheTotalSize);
AppArguments.Set(AppFlag.ImagesMarkCached, ref BetterImage.OptionMarkCached);
AppArguments.Set(AppFlag.UseVlcForAnimatedBackground, ref DynamicBackground.OptionUseVlc);
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();
AppArguments.Set(AppFlag.SharedMemoryLiveReadingInterval, ref AcSharedMemory.OptionLiveReadingInterval);
AcSharedMemory.Initialize();
AppArguments.Set(AppFlag.RunRaceInformationWebserver, ref PlayerStatsManager.OptionRunStatsWebserver);
AppArguments.Set(AppFlag.RaceInformationWebserverFile, ref PlayerStatsManager.OptionWebserverFilename);
PlayerStatsManager.Instance.SetListener();
AppArguments.Set(AppFlag.RhmKeepAlive, ref RhmService.OptionKeepRunning);
RhmService.Instance.SetListener();
_hibernator = new AppHibernator();
_hibernator.SetListener();
AppArguments.Set(AppFlag.TrackMapGeneratorMaxSize, ref TrackMapRenderer.OptionMaxSize);
CommonFixes.Initialize();
// TODO: rearrange code!
CmPreviewsSettings.SelectCarDialog = SelectCarDialog.Show;
CmPreviewsTools.MissingShowroomHelper = new CarUpdatePreviewsDialog.MissingShowroomHelper();
}