public bool? Run(IInstallStatusUpdate status, CancellationToken token)
        {
            if (!_prompts.BuildFOMODsPrompt())
                return false;

            //+1 (opt)
            status.ItemsTotal++;
            status.CurrentOperation = "Building FOMODs";

            var fomodStatus = new InstallStatus(_installer.ProgressMinorOperation, _installer.Token);
            _fomod.BuildAll(fomodStatus, _installer.DirTTWMain, _installer.DirTTWOptional, _prompts.TTWSavePath);

            return true;
        }
        public bool?Run(IInstallStatusUpdate status, CancellationToken token)
        {
            foreach (var kvp in Game.BuildableBSAs)
            {
                if (token.IsCancellationRequested)
                {
                    return(false);
                }

                //inBSA - KVP.Key
                //outBSA - KVP.Value
                var    outBSA     = kvp.Value;
                string outBSAFile = Path.ChangeExtension(kvp.Value, ".bsa");
                string outBSAPath = Path.Combine(_installer.DirTTWMain, outBSAFile);

                var    inBSA     = kvp.Key;
                string inBSAFile = Path.ChangeExtension(kvp.Key, ".bsa");
                string inBSAPath = Path.Combine(_installer.DirFO3Data, inBSAFile);

                ErrorPromptResult buildResult;
                try
                {
                    status.CurrentOperation = string.Format("Building {0}", outBSA);

                    if (!_prompts.BuildPrompt(outBSA, outBSAPath))
                    {
                        continue;
                    }

                    var bsaInstaller = DependencyRegistry.Container.GetInstance <BsaInstaller>();
                    do
                    {
                        buildResult = bsaInstaller.Patch(bsaInstaller.GetOptionsOrDefault(inBSA), inBSAFile, inBSAPath, outBSAPath);
                    } while (!token.IsCancellationRequested && buildResult == ErrorPromptResult.Retry);
                }
                finally
                {
                    status.Step();
                }

                if (buildResult == ErrorPromptResult.Abort)
                {
                    return(null);
                }
            }

            return(true);
        }
        public bool?Run(IInstallStatusUpdate status, CancellationToken token)
        {
            status.CurrentOperation = Localization.CheckingRequiredFiles;

            if (CheckFiles())
            {
                Log.File("All files found.");
                Log.Display("All files found. Proceeding with installation.");
                return(true);
            }
            else
            {
                Log.File("Missing files detected. Aborting install.");
                Log.Display("The above files were not found. Make sure your Fallout 3 location is accurate and try again.\nInstallation failed.");
                return(false);
            }
        }
        public bool? Run(IInstallStatusUpdate status, CancellationToken token)
        {
            status.CurrentOperation = Localization.CheckingRequiredFiles;

            if (CheckFiles())
            {
                Log.File("All files found.");
                Log.Display("All files found. Proceeding with installation.");
                return true;
            }
            else
            {
                Log.File("Missing files detected. Aborting install.");
                Log.Display("The above files were not found. Make sure your Fallout 3 location is accurate and try again.\nInstallation failed.");
                return false;
            }
        }
        public bool?Run(IInstallStatusUpdate status, CancellationToken token)
        {
            if (!_prompts.BuildFOMODsPrompt())
            {
                return(false);
            }

            //+1 (opt)
            status.ItemsTotal++;
            status.CurrentOperation = "Building FOMODs";

            var fomodStatus = new InstallStatus(_installer.ProgressMinorOperation, _installer.Token);

            _fomod.BuildAll(fomodStatus, _installer.DirTTWMain, _installer.DirTTWOptional, _prompts.TTWSavePath);

            return(true);
        }
        public bool? Run(IInstallStatusUpdate status, CancellationToken token)
        {
            foreach (var kvp in Game.BuildableBSAs)
            {
                if (token.IsCancellationRequested)
                    return false;

                //inBSA - KVP.Key
                //outBSA - KVP.Value
                var outBSA = kvp.Value;
                string outBSAFile = Path.ChangeExtension(kvp.Value, ".bsa");
                string outBSAPath = Path.Combine(_installer.DirTTWMain, outBSAFile);

                var inBSA = kvp.Key;
                string inBSAFile = Path.ChangeExtension(kvp.Key, ".bsa");
                string inBSAPath = Path.Combine(_installer.DirFO3Data, inBSAFile);

                ErrorPromptResult buildResult;
                try
                {
                    status.CurrentOperation = string.Format("Building {0}", outBSA);

                    if (!_prompts.BuildPrompt(outBSA, outBSAPath))
                        continue;

                    var bsaInstaller = DependencyRegistry.Container.GetInstance<BsaInstaller>();
                    do
                    {
                        buildResult = bsaInstaller.Patch(bsaInstaller.GetOptionsOrDefault(inBSA), inBSAFile, inBSAPath, outBSAPath);
                    } while (!token.IsCancellationRequested && buildResult == ErrorPromptResult.Retry);
                }
                finally
                {
                    status.Step();
                }

                if (buildResult == ErrorPromptResult.Abort)
                    return null;
            }

            return true;
        }