private async void CheckMirrorStatus()
        {
            _checkedMirrorStatus = true;
            Status status;

            while ((status = Status.GetStatus()).MirrorStatus == MirrorStatus.ProcNotFound)
            {
                await Task.Delay(1000);
            }
            Log.Info($"Mirror status: {status.MirrorStatus}");
            if (status.MirrorStatus != MirrorStatus.Error)
            {
                return;
            }
            Log.Error(status.Exception);
            if (!(status.Exception is Win32Exception))
            {
                Log.Info("Not a Win32Exception - Process probably exited. Checking again later.");
                _checkedMirrorStatus = false;
                return;
            }
            Influx.OnUnevenPermissions();
            LogReaderManager.Stop(true).Forget();
            Core.MainWindow.ActivateWindow();
            while (Core.MainWindow.Visibility != Visibility.Visible || Core.MainWindow.WindowState == WindowState.Minimized)
            {
                await Task.Delay(100);
            }
            await Core.MainWindow.ShowMessage("Uneven permissions",
                                              "It appears that Hearthstone (Battle.net) and HDT do not have the same permissions.\n\nPlease run both as administrator or local user.\n\nIf you don't know what any of this means, just run HDT as administrator.");
        }
Example #2
0
        public MainWindow()
        {
            InitializeComponent();
            Trace.Listeners.Add(new TextBoxTraceListener(Options.OptionsTrackerLogging.TextBoxLog));
            EnableMenuItems(false);
            TagControlEdit.StackPanelFilterOptions.Visibility       = Collapsed;
            TagControlEdit.GroupBoxSortingAllConstructed.Visibility = Collapsed;
            TagControlEdit.GroupBoxSortingArena.Visibility          = Collapsed;
            SortFilterDecksFlyout.HideStuffToCreateNewTag();
            FlyoutNotes.ClosingFinished += (sender, args) => DeckNotesEditor.SaveDeck();
            WarningFlyout.OnComplete    += () =>
            {
                FlyoutWarnings.IsOpen = false;
                Config.Instance.CheckConfigWarnings();
            };
#if (DEBUG)
            Title += " [DEBUG]";
#endif
#if (DEV)
            StatusBarDev.Visibility = Visible;
#endif
            Config.Instance.OnConfigWarning += warning =>
            {
                WarningFlyout.SetConfigWarning(warning);
                FlyoutWarnings.IsOpen = true;
            };
            Config.Instance.CheckConfigWarnings();

            HsReplayDecks.OnLoaded += () =>
            {
                DeckPickerList.RefreshDisplayedDecks();
                OnPropertyChanged(nameof(HsReplayButtonVisibility));
                Influx.OnHsReplayDataLoaded();
            };
        }
        public static async Task <bool> Upload(string[] logLines, GameMetaData gameMetaData, GameStats game)
        {
            var log  = string.Join(Environment.NewLine, logLines);
            var item = new UploaderItem(log.GetHashCode());

            if (InProgress.Contains(item))
            {
                Log.Info($"{item.Hash} already in progress. Waiting for it to complete...");
                InProgress.Add(item);
                return(await item.Success);
            }
            InProgress.Add(item);
            Log.Info($"Uploading {item.Hash}...");
            var success = false;

            try
            {
                success = await TryUpload(logLines, gameMetaData, game, true);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Influx.OnGameUploadFailed();
            }
            Log.Info($"{item.Hash} complete. Success={success}");
            foreach (var waiting in InProgress.Where(x => x.Hash == item.Hash))
            {
                waiting.Complete(success);
            }
            InProgress.RemoveAll(x => x.Hash == item.Hash);
            return(success);
        }
 private void RemovableBanner_OnClose(object sender, EventArgs e)
 {
     Influx.OnCollectionSyncingBannerClosed();
     Config.Instance.HideCollectionSyncingBanner = CollectionBannerId;
     Config.Save();
     OnPropertyChanged(nameof(CollectionSyncingBannerVisbiility));
 }
 private void MainWindow_OnActivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowActivated();
     UITheme.RefreshWindowsAccent();
     if (Options.TwitchExtensionMenuSelected && Options.OptionsStreamingTwitchExtension.AwaitingTwitchAccountConnection)
     {
         Options.OptionsStreamingTwitchExtension.RefreshTwitchAccounts();
     }
 }
 internal void HideMulliganPanel(bool wasClicked)
 {
     if (_mulliganToastVisible)
     {
         _mulliganToastVisible = false;
         Influx.OnMulliganToastClose(wasClicked, MulliganNotificationPanel.HasData);
     }
     _mulliganNotificationBehavior.Hide();
 }
        public MainWindow()
        {
            InitializeComponent();
            TagControlEdit.StackPanelFilterOptions.Visibility       = Collapsed;
            TagControlEdit.GroupBoxSortingAllConstructed.Visibility = Collapsed;
            TagControlEdit.GroupBoxSortingArena.Visibility          = Collapsed;
            SortFilterDecksFlyout.HideStuffToCreateNewTag();
            FlyoutNotes.ClosingFinished += (sender, args) => DeckNotesEditor.SaveDeck();
            WarningFlyout.OnComplete    += () =>
            {
                FlyoutWarnings.IsOpen = false;
                Config.Instance.CheckConfigWarnings();
            };
#if (DEBUG)
            Title += " [DEBUG]";
#endif
#if (DEV)
            StatusBarDev.Visibility = Visible;
#endif
            Config.Instance.OnConfigWarning += warning =>
            {
                WarningFlyout.SetConfigWarning(warning);
                FlyoutWarnings.IsOpen = true;
            };
            Config.Instance.CheckConfigWarnings();

            HsReplayDataManager.Decks.OnLoaded += () =>
            {
                DeckPickerList.RefreshDisplayedDecks();
                OnPropertyChanged(nameof(HsReplayButtonVisibility));
                Influx.OnHsReplayDataLoaded();
            };

            HSReplayNetOAuth.Authenticated += ActivateWindow;

            RemoteConfig.Instance.Loaded += data =>
            {
                OnPropertyChanged(nameof(CollectionSyncingBannerVisbiility));
                OnPropertyChanged(nameof(CollectionSyncingBannerRemovable));
            };

            HSReplayNetHelper.CollectionUploaded += () =>
            {
                OnPropertyChanged(nameof(CollectionSyncingBannerRemovable));
            };

            HSReplayNetOAuth.LoggedOut += () =>
            {
                OnPropertyChanged(nameof(CollectionSyncingBannerVisbiility));
                OnPropertyChanged(nameof(CollectionSyncingBannerRemovable));
            };
        }
Example #8
0
 public static async void Run()
 {
     while (true)
     {
         var mem = Process.GetCurrentProcess().PrivateMemorySize64 >> 20;
         if (mem > 1024)
         {
             Log.Warn($"High memory usage: {mem} MB");
             Influx.OnHighMemoryUsage(mem);
             return;
         }
         await Task.Delay(60000);
     }
 }
 private void CheckboxRunCombatSimulations_Checked(object sender, RoutedEventArgs e)
 {
     if (!_initialized)
     {
         return;
     }
     Config.Instance.RunBobsBuddy = true;
     CheckboxShowResultsDuringCombat.IsEnabled   = true;
     CheckboxShowResultsDuringShopping.IsEnabled = true;
     SaveConfig(true);
     if (Core.Game.CurrentGameMode == Enums.GameMode.Battlegrounds)
     {
         Core.Overlay.ShowBobsBuddyPanel();
     }
     Influx.OnBobsBuddyEnabledChanged(true);
 }
 private void CheckboxRunCombatSimulations_Unchecked(object sender, RoutedEventArgs e)
 {
     if (!_initialized)
     {
         return;
     }
     Config.Instance.RunBobsBuddy = false;
     CheckboxShowResultsDuringCombat.IsEnabled   = false;
     CheckboxShowResultsDuringShopping.IsEnabled = false;
     SaveConfig(true);
     if (Core.Game.IsBattlegroundsMatch)
     {
         Core.Overlay.HideBobsBuddyPanel();
     }
     Influx.OnBobsBuddyEnabledChanged(false);
 }
        private static async Task <bool> TryUpload(string[] logLines, GameMetaData gameMetaData, GameStats game, bool submitFailure)
        {
            try
            {
                game?.HsReplay.UploadTry();
                Influx.OnGameUpload(game?.HsReplay.UploadTries ?? 1);
                var lines    = logLines.SkipWhile(x => !x.Contains("CREATE_GAME")).ToArray();
                var metaData = UploadMetaDataGenerator.Generate(lines, gameMetaData, game);
                Log.Info("Creating upload request...");
                var uploadRequest = await ApiWrapper.CreateUploadRequest(metaData);

                Log.Info("Upload Id: " + uploadRequest.ShortId);
                await ApiWrapper.UploadLog(uploadRequest, lines);

                Log.Info("Upload complete");
                if (game != null)
                {
                    game.HsReplay.UploadId  = uploadRequest.ShortId;
                    game.HsReplay.ReplayUrl = uploadRequest.ReplayUrl;
                    if (DefaultDeckStats.Instance.DeckStats.Any(x => x.DeckId == game.DeckId))
                    {
                        DefaultDeckStats.Save();
                    }
                    else
                    {
                        DeckStatsList.Save();
                    }
                }
                return(true);
            }
            catch (WebException ex)
            {
                Log.Error(ex);
                if (submitFailure)
                {
                    Influx.OnGameUploadFailed(ex.Status);
                }
                return(false);
            }
        }
        private void RemovableBanner_OnClick(object sender, EventArgs e)
        {
            var authenticated    = HSReplayNetOAuth.IsFullyAuthenticated;
            var collectionSynced = Account.Instance.CollectionState.Any();

            Influx.OnCollectionSyncingBannerClicked(authenticated, collectionSynced);
            if (!authenticated || !collectionSynced)
            {
                Options.TreeViewItemHSReplayCollection.IsSelected = true;
                FlyoutOptions.IsOpen = true;
                if (!authenticated)
                {
                    var successUrl = Helper.BuildHsReplayNetUrl("decks", "collection_syncing_banner",
                                                                new[] { "modal=collection" });
                    HSReplayNetHelper.TryAuthenticate(successUrl).Forget();
                }
            }
            else
            {
                HSReplayNetHelper.OpenDecksUrlWithCollection("collection_syncing_banner");
            }
        }
Example #13
0
        private async Task SaveReplays()
        {
            if (!_savedReplay && _game.CurrentGameStats != null)
            {
                _savedReplay = true;
                await LogIsComplete();

                var powerLog = new List <string>();
                foreach (var stored in _game.StoredPowerLogs.Where(x => x.Item1 == _game.MetaData.ServerInfo.GameHandle))
                {
                    powerLog.AddRange(stored.Item2);
                }
                powerLog.AddRange(_game.PowerLog);

                var createGameCount = 0;
                powerLog = powerLog.TakeWhile(x => !(x.Contains("CREATE_GAME") && createGameCount++ == 1)).ToList();

                if (Config.Instance.RecordReplays && RecordCurrentGameMode && _game.Entities.Count > 0 && !_game.SavedReplay &&
                    _game.CurrentGameStats.ReplayFile == null)
                {
                    _game.CurrentGameStats.ReplayFile = ReplayMaker.SaveToDisk(_game.CurrentGameStats, powerLog);
                }

                if (Config.Instance.HsReplayAutoUpload && UploadCurrentGameMode)
                {
                    var log = powerLog.ToArray();
                    var validationResult = LogValidator.Validate(log);
                    if (validationResult.IsValid)
                    {
                        LogUploader.Upload(log, (GameMetaData)_game.MetaData.Clone(), _game.CurrentGameStats).Forget();
                    }
                    else
                    {
                        Log.Error("Invalid log: " + validationResult.Reason);
                        Influx.OnEndOfGameUploadError(validationResult.Reason);
                    }
                }
            }
        }
 static HSReplayNetHelper()
 {
     CollectionSyncLimiter = new RateLimiter(6, TimeSpan.FromMinutes(2));
     ConfigWrapper.CollectionSyncingChanged += () => SyncCollection().Forget();
     CollectionHelper.OnCollectionChanged   += () => SyncCollection().Forget();
     CollectionUploaded += () =>
     {
         ToastManager.ShowCollectionUpdatedToast();
         Influx.OnCollectionSynced(true);
     };
     CollectionUploadError  += () => Influx.OnCollectionSynced(false);
     BlizzardAccountClaimed += Influx.OnBlizzardAccountClaimed;
     AuthenticationError    += Influx.OnOAuthLoginComplete;
     Authenticating         += authenticating =>
     {
         if (authenticating)
         {
             Influx.OnOAuthLoginInitiated();
         }
     };
     HSReplayNetOAuth.LoggedOut     += Influx.OnOAuthLogout;
     HSReplayNetOAuth.Authenticated += () => Influx.OnOAuthLoginComplete(AuthenticationErrorType.None);
 }
        private async void CheckMirrorStatus()
        {
            _checkedMirrorStatus = true;
            Status status;

            while ((status = Status.GetStatus()).MirrorStatus == MirrorStatus.ProcNotFound)
            {
                await Task.Delay(1000);
            }
            Log.Info($"Mirror status: {status.MirrorStatus}");
            if (status.MirrorStatus != MirrorStatus.Error)
            {
                return;
            }
            Log.Error(status.Exception);
            if (!(status.Exception is Win32Exception))
            {
                Log.Info("Not a Win32Exception - Process probably exited. Checking again later.");
                _checkedMirrorStatus = false;
                return;
            }
            Influx.OnUnevenPermissions();
            OnHearthMirrorCheckFailed?.Invoke();
        }
 private void MainWindow_OnDeactivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowDeactivated();
 }
        private async void Window_Closing(object sender, CancelEventArgs e)
        {
            try
            {
                Log.Info("Shutting down...");
                Influx.OnAppExit(Helper.GetCurrentVersion());
                Core.UpdateOverlay = false;
                Core.Update        = false;

                //wait for update to finish, might otherwise crash when overlay gets disposed
                for (var i = 0; i < 100; i++)
                {
                    if (Core.CanShutdown)
                    {
                        break;
                    }
                    await Task.Delay(50);
                }

                Config.Instance.SelectedTags = Config.Instance.SelectedTags.Distinct().ToList();
                //Config.Instance.ShowAllDecks = DeckPickerList.ShowAll;
                Config.Instance.SelectedDeckPickerClasses = DeckPickerList.SelectedClasses.ToArray();

                Config.Instance.WindowWidth       = (int)(Width - (GridNewDeck.Visibility == Visible ? GridNewDeck.ActualWidth : 0));
                Config.Instance.WindowHeight      = (int)(Height - _heightChangeDueToSearchBox);
                Config.Instance.TrackerWindowTop  = (int)Top;
                Config.Instance.TrackerWindowLeft = (int)(Left + (MovedLeft ?? 0));

                //position of add. windows is NaN if they were never opened.
                if (!double.IsNaN(Core.Windows.PlayerWindow.Left))
                {
                    Config.Instance.PlayerWindowLeft = (int)Core.Windows.PlayerWindow.Left;
                }
                if (!double.IsNaN(Core.Windows.PlayerWindow.Top))
                {
                    Config.Instance.PlayerWindowTop = (int)Core.Windows.PlayerWindow.Top;
                }
                Config.Instance.PlayerWindowHeight = (int)Core.Windows.PlayerWindow.Height;

                if (!double.IsNaN(Core.Windows.OpponentWindow.Left))
                {
                    Config.Instance.OpponentWindowLeft = (int)Core.Windows.OpponentWindow.Left;
                }
                if (!double.IsNaN(Core.Windows.OpponentWindow.Top))
                {
                    Config.Instance.OpponentWindowTop = (int)Core.Windows.OpponentWindow.Top;
                }
                Config.Instance.OpponentWindowHeight = (int)Core.Windows.OpponentWindow.Height;

                if (!double.IsNaN(Core.Windows.TimerWindow.Left))
                {
                    Config.Instance.TimerWindowLeft = (int)Core.Windows.TimerWindow.Left;
                }
                if (!double.IsNaN(Core.Windows.TimerWindow.Top))
                {
                    Config.Instance.TimerWindowTop = (int)Core.Windows.TimerWindow.Top;
                }
                Config.Instance.TimerWindowHeight = (int)Core.Windows.TimerWindow.Height;
                Config.Instance.TimerWindowWidth  = (int)Core.Windows.TimerWindow.Width;

                Core.TrayIcon.NotifyIcon.Visible = false;
                Core.Overlay.Close();
                await Core.StopLogWacher();

                Core.Windows.TimerWindow.Shutdown();
                Core.Windows.PlayerWindow.Shutdown();
                Core.Windows.OpponentWindow.Shutdown();
                Config.Save();
                DeckList.Save();
                DeckStatsList.Save();
                PluginManager.SavePluginsSettings();
                PluginManager.Instance.UnloadPlugins();
            }
            catch (Exception)
            {
                //doesnt matter
            }
            finally
            {
                Application.Current.Shutdown();
            }
        }
Example #18
0
#pragma warning disable 1998
        public static async void Initialize()
#pragma warning restore 1998
        {
            LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo("en-US");
            _startUpTime = DateTime.UtcNow;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            Config.Load();
            Log.Info($"HDT: {Helper.GetCurrentVersion()}, Operating System: {Helper.GetWindowsVersion()}, .NET Framework: {Helper.GetInstalledDotNetVersion()}");
            var splashScreenWindow = new SplashScreenWindow();

#if (SQUIRREL)
            if (Config.Instance.CheckForUpdates)
            {
                var updateCheck = Updater.StartupUpdateCheck(splashScreenWindow);
                while (!updateCheck.IsCompleted)
                {
                    await Task.Delay(500);

                    if (splashScreenWindow.SkipUpdate)
                    {
                        break;
                    }
                }
            }
#endif
            splashScreenWindow.ShowConditional();
            Log.Initialize();
            ConfigManager.Run();
            LocUtil.UpdateCultureInfo();
            var newUser = ConfigManager.PreviousVersion == null;
            LogConfigUpdater.Run().Forget();
            LogConfigWatcher.Start();
            UITheme.InitializeTheme();
            ThemeManager.Run();
            ResourceMonitor.Run();
            Game = new GameV2();
            Game.SecretsManager.OnSecretsChanged += cards => Overlay.ShowSecrets(cards);
            MainWindow = new MainWindow();
            MainWindow.LoadConfigSettings();
            MainWindow.Show();
            splashScreenWindow.Close();

            if (Config.Instance.DisplayHsReplayNoteLive && ConfigManager.PreviousVersion != null && ConfigManager.PreviousVersion < new Version(1, 1, 0))
            {
                MainWindow.FlyoutHsReplayNote.IsOpen = true;
            }

            if (ConfigManager.UpdatedVersion != null)
            {
#if (!SQUIRREL)
                Updater.Cleanup();
#endif
                MainWindow.FlyoutUpdateNotes.IsOpen = true;
                MainWindow.UpdateNotesControl.SetHighlight(ConfigManager.PreviousVersion);
#if (SQUIRREL && !DEV)
                if (Config.Instance.CheckForDevUpdates && !Config.Instance.AllowDevUpdates.HasValue)
                {
                    MainWindow.ShowDevUpdatesMessage();
                }
#endif
            }
            NetDeck.CheckForChromeExtention();
            DataIssueResolver.Run();

#if (!SQUIRREL)
            Helper.CopyReplayFiles();
#endif
            BackupManager.Run();

            if (Config.Instance.PlayerWindowOnStart)
            {
                Windows.PlayerWindow.Show();
            }
            if (Config.Instance.OpponentWindowOnStart)
            {
                Windows.OpponentWindow.Show();
            }
            if (Config.Instance.TimerWindowOnStartup)
            {
                Windows.TimerWindow.Show();
            }

            PluginManager.Instance.LoadPluginsFromDefaultPath();
            MainWindow.Options.OptionsTrackerPlugins.Load();
            PluginManager.Instance.StartUpdateAsync();

            UpdateOverlayAsync();

            if (Config.Instance.ShowCapturableOverlay)
            {
                Windows.CapturableOverlay = new CapturableOverlayWindow();
                Windows.CapturableOverlay.Show();
            }

            if (LogConfigUpdater.LogConfigUpdateFailed)
            {
                MainWindow.ShowLogConfigUpdateFailedMessage().Forget();
            }
            else if (LogConfigUpdater.LogConfigUpdated && Game.IsRunning)
            {
                MainWindow.ShowMessageAsync("Hearthstone restart required", "The log.config file has been updated. HDT may not work properly until Hearthstone has been restarted.").Forget();
                Overlay.ShowRestartRequiredWarning();
            }
            LogWatcherManger.Start(Game).Forget();

            NewsManager.LoadNews();
            HotKeyManager.Load();

            if (Helper.HearthstoneDirExists && Config.Instance.StartHearthstoneWithHDT && !Game.IsRunning)
            {
                Helper.StartHearthstoneAsync().Forget();
            }

            ApiWrapper.UpdateAccountStatus().Forget();

            Initialized = true;

            Influx.OnAppStart(
                Helper.GetCurrentVersion(),
                newUser,
                (int)(DateTime.UtcNow - _startUpTime).TotalSeconds,
                PluginManager.Instance.Plugins.Count
                );
        }
Example #19
0
 private void MainWindow_OnActivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowActivated();
     UITheme.RefreshWindowsAccent();
 }
Example #20
0
        public static async void Initialize()
        {
            Log.Info($"Operating System: {Helper.GetWindowsVersion()}, .NET Framework: {Helper.GetInstalledDotNetVersion()}");
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            Config.Load();
            var splashScreenWindow = new SplashScreenWindow();

#if (SQUIRREL)
            if (Config.Instance.CheckForUpdates)
            {
                var updateCheck = Updater.StartupUpdateCheck(splashScreenWindow);
                while (!updateCheck.IsCompleted)
                {
                    await Task.Delay(500);

                    if (splashScreenWindow.SkipUpdate)
                    {
                        break;
                    }
                }
            }
#endif
            splashScreenWindow.ShowConditional();
            Log.Initialize();
            ConfigManager.Run();
            var newUser = ConfigManager.PreviousVersion == null;
            LogConfigUpdater.Run().Forget();
            LogConfigWatcher.Start();
            Helper.UpdateAppTheme();
            ThemeManager.Run();
            ResourceMonitor.Run();
            Game = new GameV2();
            LoginType loginType;
            var       loggedIn = HearthStatsAPI.LoadCredentials();
            if (!loggedIn && Config.Instance.ShowLoginDialog)
            {
                var loginWindow = new LoginWindow();
                splashScreenWindow.Close();
                loginWindow.ShowDialog();
                if (loginWindow.LoginResult == LoginType.None)
                {
                    Application.Current.Shutdown();
                    return;
                }
                loginType          = loginWindow.LoginResult;
                splashScreenWindow = new SplashScreenWindow();
                splashScreenWindow.ShowConditional();
            }
            else
            {
                loginType = loggedIn ? LoginType.AutoLogin : LoginType.AutoGuest;
            }
            MainWindow = new MainWindow();
            MainWindow.LoadConfigSettings();
            if (Config.Instance.ReselectLastDeckUsed)
            {
                MainWindow.SelectLastUsedDeck();
                Config.Instance.ReselectLastDeckUsed = false;
                Config.Save();
            }
            MainWindow.Show();
            splashScreenWindow.Close();

            if (ConfigManager.UpdatedVersion != null)
            {
#if (!SQUIRREL)
                Updater.Cleanup();
#endif
                MainWindow.FlyoutUpdateNotes.IsOpen = true;
                MainWindow.UpdateNotesControl.SetHighlight(ConfigManager.PreviousVersion);
            }
            NetDeck.CheckForChromeExtention();
            DataIssueResolver.Run();

#if (!SQUIRREL)
            Helper.CopyReplayFiles();
#endif
            BackupManager.Run();

            if (Config.Instance.PlayerWindowOnStart)
            {
                Windows.PlayerWindow.Show();
            }
            if (Config.Instance.OpponentWindowOnStart)
            {
                Windows.OpponentWindow.Show();
            }
            if (Config.Instance.TimerWindowOnStartup)
            {
                Windows.TimerWindow.Show();
            }

            if (Config.Instance.HearthStatsSyncOnStart && HearthStatsAPI.IsLoggedIn)
            {
                HearthStatsManager.SyncAsync(background: true);
            }

            PluginManager.Instance.LoadPlugins();
            MainWindow.Options.OptionsTrackerPlugins.Load();
            PluginManager.Instance.StartUpdateAsync();

            UpdateOverlayAsync();

            if (Config.Instance.ShowCapturableOverlay)
            {
                Windows.CapturableOverlay = new CapturableOverlayWindow();
                Windows.CapturableOverlay.Show();
            }

            if (LogConfigUpdater.LogConfigUpdateFailed)
            {
                MainWindow.ShowLogConfigUpdateFailedMessage().Forget();
            }
            else if (LogConfigUpdater.LogConfigUpdated && Game.IsRunning)
            {
                MainWindow.ShowMessageAsync("Hearthstone restart required", "The log.config file has been updated. HDT may not work properly until Hearthstone has been restarted.");
                Overlay.ShowRestartRequiredWarning();
            }
            LogReaderManager.Start(Game).Forget();

            NewsUpdater.UpdateAsync();
            HotKeyManager.Load();

            if (Helper.HearthstoneDirExists && Config.Instance.StartHearthstoneWithHDT && !Game.IsRunning)
            {
                Helper.StartHearthstoneAsync().Forget();
            }

            Initialized = true;

            Influx.OnAppStart(Helper.GetCurrentVersion(), loginType, newUser);
        }
Example #21
0
        public static void Initialize()
        {
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            var newUser = !Directory.Exists(Config.AppDataPath);

            Config.Load();
            Log.Initialize();
            ConfigManager.Run();
            LogConfigUpdater.Run().Forget();
            LogConfigWatcher.Start();
            Helper.UpdateAppTheme();
            ThemeManager.Run();
            var splashScreenWindow = new SplashScreenWindow();

            splashScreenWindow.ShowConditional();
            Game = new GameV2();
            LoginType loginType;
            var       loggedIn = HearthStatsAPI.LoadCredentials();

            if (!loggedIn && Config.Instance.ShowLoginDialog)
            {
                var loginWindow = new LoginWindow();
                splashScreenWindow.Close();
                loginWindow.ShowDialog();
                if (loginWindow.LoginResult == LoginType.None)
                {
                    Application.Current.Shutdown();
                    return;
                }
                loginType          = loginWindow.LoginResult;
                splashScreenWindow = new SplashScreenWindow();
                splashScreenWindow.ShowConditional();
            }
            else
            {
                loginType = loggedIn ? LoginType.AutoLogin : LoginType.AutoGuest;
            }
            MainWindow = new MainWindow();
            MainWindow.LoadConfigSettings();
            if (Config.Instance.ReselectLastDeckUsed)
            {
                MainWindow.SelectLastUsedDeck();
                Config.Instance.ReselectLastDeckUsed = false;
                Config.Save();
            }
            MainWindow.Show();
            splashScreenWindow.Close();

            if (ConfigManager.UpdatedVersion != null)
            {
                Updater.Cleanup();
                MainWindow.FlyoutUpdateNotes.IsOpen = true;
                MainWindow.UpdateNotesControl.SetHighlight(ConfigManager.PreviousVersion);
                MainWindow.UpdateNotesControl.LoadUpdateNotes();
            }
            NetDeck.CheckForChromeExtention();
            DataIssueResolver.Run();

            Helper.CopyReplayFiles();
            BackupManager.Run();

            if (Config.Instance.PlayerWindowOnStart)
            {
                Windows.PlayerWindow.Show();
            }
            if (Config.Instance.OpponentWindowOnStart)
            {
                Windows.OpponentWindow.Show();
            }
            if (Config.Instance.TimerWindowOnStartup)
            {
                Windows.TimerWindow.Show();
            }

            if (Config.Instance.HearthStatsSyncOnStart && HearthStatsAPI.IsLoggedIn)
            {
                HearthStatsManager.SyncAsync(background: true);
            }

            PluginManager.Instance.LoadPlugins();
            MainWindow.Options.OptionsTrackerPlugins.Load();
            PluginManager.Instance.StartUpdateAsync();

            UpdateOverlayAsync();

            if (Config.Instance.ShowCapturableOverlay)
            {
                Windows.CapturableOverlay = new CapturableOverlayWindow();
                Windows.CapturableOverlay.Show();
            }

            if (LogConfigUpdater.LogConfigUpdateFailed)
            {
                MainWindow.ShowLogConfigUpdateFailedMessage().Forget();
            }
            else if (LogConfigUpdater.LogConfigUpdated && Game.IsRunning)
            {
                MainWindow.ShowMessageAsync("Hearthstone restart required", "The log.config file has been updated. HDT may not work properly until Hearthstone has been restarted.");
                Overlay.ShowRestartRequiredWarning();
            }
            LogReaderManager.Start(Game).Forget();

            NewsUpdater.UpdateAsync();
            HotKeyManager.Load();

            if (Helper.HearthstoneDirExists && Config.Instance.StartHearthstoneWithHDT && !Game.IsRunning)
            {
                Helper.StartHearthstoneAsync();
            }

            Initialized = true;

            Influx.OnAppStart(Helper.GetCurrentVersion(), loginType, newUser);
        }