private async void OnStartup(object sender, StartupEventArgs e) { BaseDispatcher = Dispatcher.CurrentDispatcher; BaseDispatcher.Thread.Name = "Main"; TccMessageBox.Create(); //Create it here in STA thread if (IsRunning()) { TccMessageBox.Show("Another instance of TCC is already running. Shutting down.", MessageBoxType.Information); Current.Shutdown(); return; } Loading = true; var v = Assembly.GetExecutingAssembly().GetName().Version; AppVersion = $"TCC v{v.Major}.{v.Minor}.{v.Build}{(Experimental ? "-e" : "")}"; InitSplashScreen(); AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler.HandleGlobalException; TryDeleteUpdater(); SplashScreen.SetText("Checking for application updates..."); await UpdateManager.CheckAppVersion(); SplashScreen.SetText("Checking for database updates..."); await UpdateManager.CheckIconsVersion(); SplashScreen.SetText("Loading settings..."); var sr = new SettingsReader(); sr.LoadWindowSettings(); sr.LoadSettings(); Process.GetCurrentProcess().PriorityClass = SettingsHolder.HighPriority ? ProcessPriorityClass.High : ProcessPriorityClass.Normal; if (SettingsHolder.ForceSoftwareRendering) { RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; } SplashScreen.SetText("Pre-loading databases..."); UpdateManager.CheckDatabaseHash(); SessionManager.InitDatabasesAsync(string.IsNullOrEmpty(SettingsHolder.LastLanguage) ? "EU-EN" : SettingsHolder.LastLanguage == "EU" ? "EU-EN" : SettingsHolder.LastLanguage); UpdateManager.CheckServersFile(); SplashScreen.SetText("Initializing windows..."); WindowManager.Init(); SplashScreen.SetText("Initializing packet processor..."); PacketAnalyzer.InitAsync(); SplashScreen.SetText("Starting"); TimeManager.Instance.SetServerTimeZone(SettingsHolder.LastLanguage); ChatWindowManager.Instance.AddTccMessage(AppVersion); SplashScreen.CloseWindowSafe(); UpdateManager.StartPeriodicCheck(); if (!Experimental && SettingsHolder.ExperimentalNotification && UpdateManager.IsExperimentalNewer()) { WindowManager.FloatingButton.NotifyExtended("TCC experimental", "An experimental version of TCC is available. Open System settings to download it or disable this notification.", NotificationType.Success, 10000); } Loading = false; }
private static async Task Setup() { TccUtils.SetAlignment(); NoticeChecker.Init(); TccSplashScreen.InitOnNewThread(); if (!ToolboxMode) { UpdateManager.TryDeleteUpdater(); SplashScreen.VM.BottomText = "Checking for application updates..."; await UpdateManager.CheckAppVersion(); } // ---------------------------- SplashScreen.VM.Progress = 10; SplashScreen.VM.BottomText = "Loading settings..."; Settings = SettingsContainer.Load(); WindowManager.InitSettingsWindow(); // need it in case language is not correct SplashScreen.VM.Progress = 20; Process.GetCurrentProcess().PriorityClass = Settings.HighPriority ? ProcessPriorityClass.High : ProcessPriorityClass.Normal; if (Settings.ForceSoftwareRendering) { RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; } // ---------------------------- SplashScreen.VM.Progress = 30; SplashScreen.VM.BottomText = "Pre-loading databases..."; UpdateManager.CheckDatabaseHash(); SplashScreen.VM.Progress = 40; await Game.InitAsync(); // ---------------------------- SplashScreen.VM.Progress = 50; SplashScreen.VM.BottomText = "Initializing widgets..."; await WindowManager.Init(); SplashScreen.VM.Progress = 60; StartDispatcherWatcher(); // ---------------------------- SplashScreen.VM.Progress = 70; SplashScreen.VM.BottomText = "Checking for icon database updates..."; _ = Task.Run(() => new IconsUpdater().CheckForUpdates()); // ---------------------------- SplashScreen.VM.BottomText = "Initializing packet processor..."; SplashScreen.VM.Progress = 80; PacketAnalyzer.ProcessorReady += LoadModules; await PacketAnalyzer.InitAsync(); // ---------------------------- SplashScreen.VM.Progress = 90; SplashScreen.VM.BottomText = "Starting"; GameEventManager.Instance.SetServerTimeZone(Settings.LastLanguage); UpdateManager.StartPeriodicCheck(); SplashScreen.VM.Progress = 100; SplashScreen.CloseWindowSafe(); // ---------------------------- Log.Chat($"{AppVersion} ready."); ReadyEvent?.Invoke(); if (!Beta && Settings.BetaNotification && UpdateManager.IsBetaNewer()) { Log.N("TCC beta available", SR.BetaAvailable, NotificationType.Success, 10000); } }