private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                await GameScanner.InitializeFromCelesteManifest();

                var progress    = new Progress <ScanProgress>();
                var subProgress = new Progress <ScanSubProgress>();

                progress.ProgressChanged    += ProgressChanged;
                subProgress.ProgressChanged += SubProgressChanged;

                if (await Task.Run(async() => await GameScanner.ScanAndRepair(progress, subProgress, _useParallelDownloader ? 4 : 1)))
                {
                    CurrentFileLabel.Content  = string.Empty;
                    MainProgressLabel.Content = Properties.Resources.GameScannerDoneLabel;
                    FileProgress.ProgressBar.IsIndeterminate = false;
                    GenericMessageDialog.Show(Properties.Resources.GameScannerDoneMessage, DialogIcon.None, DialogOptions.Ok);
                    DialogResult = true;
                }
                else
                {
                    FailGameScan(Properties.Resources.GameScannerDidNotPass);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex, ex.Message);
                FailGameScan(Properties.Resources.GameScannerFailed);
            }
        }
Example #2
0
        static async Task <int> Main(string[] args)
        {
            var rootCommand = new RootCommand
            {
                new Option <string>(
                    "--game-dir",
                    description: "Path to the directory where Spartan.exe is located")
                {
                    IsRequired = true
                },
                new Option <bool>(
                    "--is-steam",
                    description: "Enabled for installations that are launchable through Steam"),
                new Option <bool>(
                    "--verbose-mode",
                    getDefaultValue: () => false,
                    description: "Write more detailed log about progress"),
            };

            rootCommand.Handler = CommandHandler.Create <string, bool, bool>(async(gameDir, isSteam, verboseMode) =>
            {
                Console.WriteLine($"Starting game scan towards {gameDir}");

                var gameScannner = new GameScannerManager(gameDir, isSteam);

                Console.WriteLine("Fetching manifest data");
                await gameScannner.InitializeFromCelesteManifest();

                Console.WriteLine("Scanning game files");
                var progress    = new Progress <ScanProgress>();
                var subProgress = new Progress <ScanSubProgress>();

                if (verboseMode)
                {
                    subProgress.ProgressChanged += SubProgress_ProgressChanged;
                    progress.ProgressChanged    += Progress_ProgressChanged;
                }

                if (!await gameScannner.ScanAndRepair(progress, subProgress))
                {
                    Console.WriteLine("Scan completed: No game files were updated, everything up to date");
                    return(0);
                }
                else
                {
                    Console.WriteLine("Gamescan has completed and updated game files");
                    return(0);
                }
            });

            return(await rootCommand.InvokeAsync(args));
        }
        private async void GameScanProgressForm_Shown(object sender, EventArgs e)
        {
            var progress = new Progress <ScanProgress>();

            progress.ProgressChanged += ProgressChanged;
            var subProgress = new Progress <ScanSubProgress>();

            subProgress.ProgressChanged += SubProgressChanged;
            try
            {
                await _gameScanner.InitializeFromCelesteManifest();

                if (await _gameScanner.ScanAndRepair(progress, subProgress, _concurrentDownload))
                {
                    MsgBox.ShowMessage(@"Game scan completed with success.",
                                       @"Celeste Fan Project",
                                       MessageBoxButtons.OK, MessageBoxIcon.Information);

                    DialogResult = DialogResult.OK;
                }
                else
                {
                    throw new Exception("Game scan failed");
                }
            }
            catch (Exception ex)
            {
                _gameScanner?.Abort();
                _gameScanner?.Dispose();
                _gameScanner = null;

                MsgBox.ShowMessage("Exception:\r\n" + ex.Message,
                                   @"Celeste Fan Project",
                                   MessageBoxButtons.OK, MessageBoxIcon.Error);

                DialogResult = DialogResult.Cancel;
            }
        }