コード例 #1
0
        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.");
        }
コード例 #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();
            };
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 private void RemovableBanner_OnClose(object sender, EventArgs e)
 {
     Influx.OnCollectionSyncingBannerClosed();
     Config.Instance.HideCollectionSyncingBanner = CollectionBannerId;
     Config.Save();
     OnPropertyChanged(nameof(CollectionSyncingBannerVisbiility));
 }
コード例 #5
0
 private void MainWindow_OnActivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowActivated();
     UITheme.RefreshWindowsAccent();
     if (Options.TwitchExtensionMenuSelected && Options.OptionsStreamingTwitchExtension.AwaitingTwitchAccountConnection)
     {
         Options.OptionsStreamingTwitchExtension.RefreshTwitchAccounts();
     }
 }
コード例 #6
0
 internal void HideMulliganPanel(bool wasClicked)
 {
     if (_mulliganToastVisible)
     {
         _mulliganToastVisible = false;
         Influx.OnMulliganToastClose(wasClicked, MulliganNotificationPanel.HasData);
     }
     _mulliganNotificationBehavior.Hide();
 }
コード例 #7
0
        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));
            };
        }
コード例 #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);
     }
 }
コード例 #9
0
 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);
 }
コード例 #10
0
 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);
 }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
        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");
            }
        }
コード例 #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);
                    }
                }
            }
        }
コード例 #14
0
 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);
 }
コード例 #15
0
        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();
        }
コード例 #16
0
 private void MainWindow_OnDeactivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowDeactivated();
 }
コード例 #17
0
        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();
            }
        }
コード例 #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
                );
        }
コード例 #19
0
 private void MainWindow_OnActivated(object sender, EventArgs e)
 {
     Influx.OnMainWindowActivated();
     UITheme.RefreshWindowsAccent();
 }
コード例 #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);
        }
コード例 #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);
        }