diff --git a/CHANGELIST.md b/CHANGELIST.md index 9de5e52c..9e96ec6c 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -20,6 +20,7 @@ - Make some methods required for override - Remove dcdumper until further notice - Invert using statement in dump environment +- Make options internal to dump environment ### 3.1.9a (2024-05-21) diff --git a/MPF.Core/DumpEnvironment.cs b/MPF.Core/DumpEnvironment.cs index 16bfe183..47d5e75f 100644 --- a/MPF.Core/DumpEnvironment.cs +++ b/MPF.Core/DumpEnvironment.cs @@ -50,11 +50,6 @@ namespace MPF.Core /// public InternalProgram InternalProgram { get; private set; } - /// - /// Options object representing user-defined options - /// - public Data.Options Options { get; private set; } - /// /// ExecutionContext object representing how to invoke the internal program /// @@ -65,6 +60,11 @@ namespace MPF.Core /// public BaseProcessor? Processor { get; private set; } + /// + /// Options object representing user-defined options + /// + private readonly Data.Options _options; + #endregion #region Event Handlers @@ -122,7 +122,7 @@ namespace MPF.Core string? parameters) { // Set options object - Options = options; + _options = options; // Output paths OutputPath = InfoTool.NormalizeOutputPaths(outputPath, false); @@ -138,7 +138,7 @@ namespace MPF.Core SetProcessor(); } - #region Public Functionality + #region Internal Program Management /// /// Set the parameters object based on the internal program and parameters string @@ -148,9 +148,9 @@ namespace MPF.Core { ExecutionContext = InternalProgram switch { - InternalProgram.Aaru => new ExecutionContexts.Aaru.ExecutionContext(parameters) { ExecutablePath = Options.AaruPath }, - InternalProgram.DiscImageCreator => new ExecutionContexts.DiscImageCreator.ExecutionContext(parameters) { ExecutablePath = Options.DiscImageCreatorPath }, - InternalProgram.Redumper => new ExecutionContexts.Redumper.ExecutionContext(parameters) { ExecutablePath = Options.RedumperPath }, + InternalProgram.Aaru => new ExecutionContexts.Aaru.ExecutionContext(parameters) { ExecutablePath = _options.AaruPath }, + InternalProgram.DiscImageCreator => new ExecutionContexts.DiscImageCreator.ExecutionContext(parameters) { ExecutablePath = _options.DiscImageCreatorPath }, + InternalProgram.Redumper => new ExecutionContexts.Redumper.ExecutionContext(parameters) { ExecutablePath = _options.RedumperPath }, // If no dumping program found, set to null InternalProgram.NONE => null, @@ -203,9 +203,9 @@ namespace MPF.Core // Set the proper parameters ExecutionContext = InternalProgram switch { - InternalProgram.Aaru => new ExecutionContexts.Aaru.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, Options), - InternalProgram.DiscImageCreator => new ExecutionContexts.DiscImageCreator.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, Options), - InternalProgram.Redumper => new ExecutionContexts.Redumper.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, Options), + InternalProgram.Aaru => new ExecutionContexts.Aaru.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, _options), + InternalProgram.DiscImageCreator => new ExecutionContexts.DiscImageCreator.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, _options), + InternalProgram.Redumper => new ExecutionContexts.Redumper.ExecutionContext(System, Type, Drive.Name, OutputPath, driveSpeed, _options), // If no dumping program found, set to null InternalProgram.NONE => null, @@ -260,7 +260,7 @@ namespace MPF.Core return result; // Invoke output processing, if needed - if (!Options.ToolsInSeparateWindow) + if (!_options.ToolsInSeparateWindow) { outputQueue = new ProcessingQueue(ProcessOutputs); if (ExecutionContext.ReportStatus != null) @@ -268,22 +268,22 @@ namespace MPF.Core } // Execute internal tool - progress?.Report(Result.Success($"Executing {InternalProgram}... {(Options.ToolsInSeparateWindow ? "please wait!" : "see log for output!")}")); + progress?.Report(Result.Success($"Executing {InternalProgram}... {(_options.ToolsInSeparateWindow ? "please wait!" : "see log for output!")}")); var directoryName = Path.GetDirectoryName(OutputPath); if (!string.IsNullOrEmpty(directoryName)) Directory.CreateDirectory(directoryName); #if NET40 - var executeTask = Task.Factory.StartNew(() => ExecutionContext.ExecuteInternalProgram(Options.ToolsInSeparateWindow)); + var executeTask = Task.Factory.StartNew(() => ExecutionContext.ExecuteInternalProgram(_options.ToolsInSeparateWindow)); executeTask.Wait(); #else - await Task.Run(() => ExecutionContext.ExecuteInternalProgram(Options.ToolsInSeparateWindow)); + await Task.Run(() => ExecutionContext.ExecuteInternalProgram(_options.ToolsInSeparateWindow)); #endif progress?.Report(Result.Success($"{InternalProgram} has finished!")); // Remove event handler if needed - if (!Options.ToolsInSeparateWindow) + if (!_options.ToolsInSeparateWindow) { outputQueue?.Dispose(); ExecutionContext.ReportStatus -= OutputToLog; @@ -330,7 +330,7 @@ namespace MPF.Core Drive, System, Type, - Options, + _options, ExecutionContext, Processor, resultProgress, @@ -346,21 +346,21 @@ namespace MPF.Core } // Eject the disc automatically if configured to - if (Options.EjectAfterDump == true) + if (_options.EjectAfterDump == true) { resultProgress?.Report(Result.Success($"Ejecting disc in drive {Drive?.Name}")); await EjectDisc(); } // Reset the drive automatically if configured to - if (InternalProgram == InternalProgram.DiscImageCreator && Options.DICResetDriveAfterDump) + if (InternalProgram == InternalProgram.DiscImageCreator && _options.DICResetDriveAfterDump) { resultProgress?.Report(Result.Success($"Resetting drive {Drive?.Name}")); await ResetDrive(); } // Get user-modifiable information if confugured to - if (Options.PromptForDiscInformation && processUserInfo != null) + if (_options.PromptForDiscInformation && processUserInfo != null) { resultProgress?.Report(Result.Success("Waiting for additional disc information...")); @@ -380,14 +380,14 @@ namespace MPF.Core // Format the information for the text output resultProgress?.Report(Result.Success("Formatting information...")); - (var formattedValues, var formatResult) = Formatter.FormatOutputData(submissionInfo, Options.EnableRedumpCompatibility); + (var formattedValues, var formatResult) = Formatter.FormatOutputData(submissionInfo, _options.EnableRedumpCompatibility); if (formattedValues == null) resultProgress?.Report(Result.Failure(formatResult)); else resultProgress?.Report(Result.Success(formatResult)); // Get the filename suffix for auto-generated files - var filenameSuffix = Options.AddFilenameSuffix ? Path.GetFileNameWithoutExtension(outputFilename) : null; + var filenameSuffix = _options.AddFilenameSuffix ? Path.GetFileNameWithoutExtension(outputFilename) : null; // Write the text output resultProgress?.Report(Result.Success("Writing information to !submissionInfo.txt...")); @@ -400,10 +400,10 @@ namespace MPF.Core // Write the copy protection output if (submissionInfo?.CopyProtection?.FullProtections != null && submissionInfo.CopyProtection.FullProtections.Any()) { - if (Options.ScanForProtection && Options.OutputSeparateProtectionFile) + if (_options.ScanForProtection && _options.OutputSeparateProtectionFile) { resultProgress?.Report(Result.Success("Writing protection to !protectionInfo.txt...")); - bool scanSuccess = InfoTool.WriteProtectionData(outputDirectory, filenameSuffix, submissionInfo, Options.HideDriveLetters); + bool scanSuccess = InfoTool.WriteProtectionData(outputDirectory, filenameSuffix, submissionInfo, _options.HideDriveLetters); if (scanSuccess) resultProgress?.Report(Result.Success("Writing complete!")); else @@ -412,10 +412,10 @@ namespace MPF.Core } // Write the JSON output, if required - if (Options.OutputSubmissionJSON) + if (_options.OutputSubmissionJSON) { - resultProgress?.Report(Result.Success($"Writing information to !submissionInfo.json{(Options.IncludeArtifacts ? ".gz" : string.Empty)}...")); - bool jsonSuccess = InfoTool.WriteOutputData(outputDirectory, filenameSuffix, submissionInfo, Options.IncludeArtifacts); + resultProgress?.Report(Result.Success($"Writing information to !submissionInfo.json{(_options.IncludeArtifacts ? ".gz" : string.Empty)}...")); + bool jsonSuccess = InfoTool.WriteOutputData(outputDirectory, filenameSuffix, submissionInfo, _options.IncludeArtifacts); if (jsonSuccess) resultProgress?.Report(Result.Success("Writing complete!")); else @@ -423,7 +423,7 @@ namespace MPF.Core } // Compress the logs, if required - if (Options.CompressLogFiles) + if (_options.CompressLogFiles) { resultProgress?.Report(Result.Success("Compressing log files...")); (bool compressSuccess, string compressResult) = InfoTool.CompressLogFiles(outputDirectory, filenameSuffix, outputFilename, Processor); @@ -434,7 +434,7 @@ namespace MPF.Core } // Delete unnecessary files, if required - if (Options.DeleteUnnecessaryFiles) + if (_options.DeleteUnnecessaryFiles) { resultProgress?.Report(Result.Success("Deleting unnecessary files...")); (bool deleteSuccess, string deleteResult) = InfoTool.DeleteUnnecessaryFiles(outputDirectory, outputFilename, Processor); @@ -445,7 +445,7 @@ namespace MPF.Core } // Create PS3 IRD, if required - if (Options.CreateIRDAfterDumping && System == RedumpSystem.SonyPlayStation3 && Type == MediaType.BluRay) + if (_options.CreateIRDAfterDumping && System == RedumpSystem.SonyPlayStation3 && Type == MediaType.BluRay) { resultProgress?.Report(Result.Success("Creating IRD... please wait!")); (bool deleteSuccess, string deleteResult) = await InfoTool.WriteIRD(OutputPath, submissionInfo?.Extras?.DiscKey, submissionInfo?.Extras?.DiscID, submissionInfo?.Extras?.PIC, submissionInfo?.SizeAndChecksums?.Layerbreak, submissionInfo?.SizeAndChecksums?.CRC32); @@ -557,11 +557,11 @@ namespace MPF.Core private bool RequiredProgramsExist() { // Validate that the path is configured - if (string.IsNullOrEmpty(Options.DiscImageCreatorPath)) + if (string.IsNullOrEmpty(_options.DiscImageCreatorPath)) return false; // Validate that the required program exists - if (!File.Exists(Options.DiscImageCreatorPath)) + if (!File.Exists(_options.DiscImageCreatorPath)) return false; return true; @@ -588,7 +588,7 @@ namespace MPF.Core { BaseCommand = command, DrivePath = Drive.Name, - ExecutablePath = Options.DiscImageCreatorPath, + ExecutablePath = _options.DiscImageCreatorPath, }; return await ExecuteInternalProgram(parameters); diff --git a/MPF.Core/UI/ViewModels/MainViewModel.cs b/MPF.Core/UI/ViewModels/MainViewModel.cs index 183e46ef..3c884001 100644 --- a/MPF.Core/UI/ViewModels/MainViewModel.cs +++ b/MPF.Core/UI/ViewModels/MainViewModel.cs @@ -950,7 +950,7 @@ namespace MPF.Core.UI.ViewModels _environment?.CancelDumping(); this.CopyProtectScanButtonEnabled = true; - if (_environment != null && _environment.Options.EjectAfterDump) + if (_environment != null && this.Options.EjectAfterDump) { VerboseLogLn($"Ejecting disc in drive {_environment.Drive?.Name}"); await _environment.EjectDisc(); @@ -1471,7 +1471,8 @@ namespace MPF.Core.UI.ViewModels public void ProcessCustomParameters() { _environment?.SetExecutionContext(this.Parameters); - if (_environment?.ExecutionContext == null) + _environment?.SetProcessor(); + if (_environment?.ExecutionContext == null || _environment.Processor == null) return; // Catch this in case there's an input path issue