From c3bfd02310fdfc360e384ba036cf4d95396af1bc Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 21 May 2024 16:16:39 -0400 Subject: [PATCH] Make some methods required for override --- CHANGELIST.md | 1 + .../Aaru/ExecutionContext.cs | 585 +++++++++--------- .../ExecutionContexts/BaseExecutionContext.cs | 50 +- .../DiscImageCreator/ExecutionContext.cs | 422 ++++++------- .../Redumper/ExecutionContext.cs | 125 ++-- 5 files changed, 595 insertions(+), 588 deletions(-) diff --git a/CHANGELIST.md b/CHANGELIST.md index ace6dc25..0cbc2384 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -17,6 +17,7 @@ - Split some processing code - Remove unnecessary field in execution contexts - Slight tweak to deal with net20 +- Make some methods required for override ### 3.1.9a (2024-05-21) diff --git a/MPF.Core/ExecutionContexts/Aaru/ExecutionContext.cs b/MPF.Core/ExecutionContexts/Aaru/ExecutionContext.cs index 330a2281..caf4a24a 100644 --- a/MPF.Core/ExecutionContexts/Aaru/ExecutionContext.cs +++ b/MPF.Core/ExecutionContexts/Aaru/ExecutionContext.cs @@ -124,6 +124,298 @@ namespace MPF.Core.ExecutionContexts.Aaru #region BaseExecutionContext Implementations + /// + public override Dictionary> GetCommandSupport() + { + return new Dictionary>() + { + #region Archive Family + + [CommandStrings.ArchivePrefixLong + " " + CommandStrings.ArchiveInfo] = [], + + #endregion + + #region Database Family + + [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseStats] = [], + + [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseUpdate] = + [ + FlagStrings.ClearLong, + FlagStrings.ClearAllLong, + ], + + #endregion + + #region Device Family + + [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceInfo] = + [ + FlagStrings.OutputPrefixLong, + ], + + [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceList] = [], + + [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceReport] = + [ + FlagStrings.TrapDiscLong, + ], + + #endregion + + #region Filesystem Family + + [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemExtract] = + [ + FlagStrings.EncodingLong, + FlagStrings.EncodingShort, + FlagStrings.ExtendedAttributesLong, + FlagStrings.ExtendedAttributesShort, + FlagStrings.NamespaceLong, + FlagStrings.NamespaceShort, + FlagStrings.OptionsLong, + FlagStrings.OptionsShort, + ], + + [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemInfo] = + [ + FlagStrings.EncodingLong, + FlagStrings.EncodingShort, + FlagStrings.ExtendedAttributesLong, + FlagStrings.ExtendedAttributesShort, + FlagStrings.NamespaceLong, + FlagStrings.NamespaceShort, + FlagStrings.OptionsLong, + FlagStrings.OptionsShort, + ], + + [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemListLong] = + [ + FlagStrings.EncodingLong, + FlagStrings.EncodingShort, + FlagStrings.FilesystemsLong, + FlagStrings.FilesystemsShort, + FlagStrings.LongFormatLong, + FlagStrings.LongFormatShort, + FlagStrings.PartitionsLong, + FlagStrings.PartitionsShort, + ], + + [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemOptions] = [], + + #endregion + + #region Image Family + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageChecksumLong] = + [ + FlagStrings.Adler32Long, + FlagStrings.Adler32Short, + FlagStrings.CRC16Long, + FlagStrings.CRC32Long, + FlagStrings.CRC32Short, + FlagStrings.CRC64Long, + FlagStrings.Fletcher16Long, + FlagStrings.Fletcher32Long, + FlagStrings.MD5Long, + FlagStrings.MD5Short, + FlagStrings.SeparatedTracksLong, + FlagStrings.SeparatedTracksShort, + FlagStrings.SHA1Long, + FlagStrings.SHA1Short, + FlagStrings.SHA256Long, + FlagStrings.SHA384Long, + FlagStrings.SHA512Long, + FlagStrings.SpamSumLong, + FlagStrings.SpamSumShort, + FlagStrings.WholeDiscLong, + FlagStrings.WholeDiscShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCompareLong] = [], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageConvert] = + [ + FlagStrings.CommentsLong, + FlagStrings.CountLong, + FlagStrings.CountShort, + FlagStrings.CreatorLong, + FlagStrings.DriveManufacturerLong, + FlagStrings.DriveModelLong, + FlagStrings.DriveRevisionLong, + FlagStrings.DriveSerialLong, + FlagStrings.FixSubchannelLong, + FlagStrings.FixSubchannelCrcLong, + FlagStrings.FixSubchannelPositionLong, + FlagStrings.ForceLong, + FlagStrings.ForceShort, + FlagStrings.FormatConvertLong, + FlagStrings.FormatConvertShort, + FlagStrings.GenerateSubchannelsLong, + FlagStrings.GeometryLong, + FlagStrings.GeometryShort, + FlagStrings.MediaBarcodeLong, + FlagStrings.MediaLastSequenceLong, + FlagStrings.MediaManufacturerLong, + FlagStrings.MediaModelLong, + FlagStrings.MediaPartNumberLong, + FlagStrings.MediaSequenceLong, + FlagStrings.MediaSerialLong, + FlagStrings.MediaTitleLong, + FlagStrings.OptionsLong, + FlagStrings.OptionsShort, + FlagStrings.ResumeFileLong, + FlagStrings.ResumeFileShort, + FlagStrings.XMLSidecarLong, + FlagStrings.XMLSidecarShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCreateSidecar] = + [ + FlagStrings.BlockSizeLong, + FlagStrings.BlockSizeShort, + FlagStrings.EncodingLong, + FlagStrings.EncodingShort, + FlagStrings.TapeLong, + FlagStrings.TapeShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageDecode] = + [ + FlagStrings.DiskTagsLong, + FlagStrings.DiskTagsShort, + FlagStrings.LengthLong, + FlagStrings.LengthShort, + FlagStrings.SectorTagsLong, + FlagStrings.SectorTagsShort, + FlagStrings.StartLong, + FlagStrings.StartShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageEntropy] = + [ + FlagStrings.DuplicatedSectorsLong, + FlagStrings.DuplicatedSectorsShort, + FlagStrings.SeparatedTracksLong, + FlagStrings.SeparatedTracksShort, + FlagStrings.WholeDiscLong, + FlagStrings.WholeDiscShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageInfo] = [], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageOptions] = [], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImagePrint] = + [ + FlagStrings.LengthLong, + FlagStrings.LengthShort, + FlagStrings.LongSectorsLong, + FlagStrings.LongSectorsShort, + FlagStrings.StartLong, + FlagStrings.StartShort, + FlagStrings.WidthLong, + FlagStrings.WidthShort, + ], + + [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageVerify] = + [ + FlagStrings.VerifyDiscLong, + FlagStrings.VerifyDiscShort, + FlagStrings.VerifySectorsLong, + FlagStrings.VerifySectorsShort, + ], + + #endregion + + #region Media Family + + [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaDump] = + [ + FlagStrings.EjectLong, + FlagStrings.EncodingLong, + FlagStrings.EncodingShort, + FlagStrings.FirstPregapLong, + FlagStrings.FixOffsetLong, + FlagStrings.FixSubchannelLong, + FlagStrings.FixSubchannelCrcLong, + FlagStrings.FixSubchannelPositionLong, + FlagStrings.ForceLong, + FlagStrings.ForceShort, + FlagStrings.FormatConvertLong, + FlagStrings.FormatConvertShort, + FlagStrings.GenerateSubchannelsLong, + FlagStrings.MaxBlocksLong, + FlagStrings.MetadataLong, + FlagStrings.OptionsLong, + FlagStrings.OptionsShort, + FlagStrings.PersistentLong, + FlagStrings.PrivateLong, + FlagStrings.ResumeLong, + FlagStrings.ResumeShort, + FlagStrings.RetryPassesLong, + FlagStrings.RetryPassesShort, + FlagStrings.RetrySubchannelLong, + FlagStrings.SkipLong, + FlagStrings.SkipShort, + FlagStrings.SkipCdiReadyHoleLong, + FlagStrings.SpeedLong, + FlagStrings.StopOnErrorLong, + FlagStrings.StopOnErrorShort, + FlagStrings.StoreEncryptedLong, + FlagStrings.SubchannelLong, + FlagStrings.TitleKeysLong, + FlagStrings.TrimLong, + FlagStrings.UseBufferedReadsLong, + FlagStrings.XMLSidecarLong, + FlagStrings.XMLSidecarShort, + ], + + [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaInfo] = + [ + FlagStrings.OutputPrefixLong, + FlagStrings.OutputPrefixShort, + ], + + [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaScan] = + [ + FlagStrings.ImgBurnLogLong, + FlagStrings.ImgBurnLogShort, + FlagStrings.MHDDLogLong, + FlagStrings.MHDDLogShort, + FlagStrings.UseBufferedReadsLong, + ], + + #endregion + + #region Standalone Commands + + [CommandStrings.NONE] = + [ + FlagStrings.DebugLong, + FlagStrings.DebugShort, + FlagStrings.HelpLong, + FlagStrings.HelpShort, + FlagStrings.HelpShortAlt, + FlagStrings.VerboseLong, + FlagStrings.VerboseShort, + FlagStrings.VersionLong, + ], + + [CommandStrings.Configure] = [], + + [CommandStrings.Formats] = [], + + [CommandStrings.ListEncodings] = [], + + [CommandStrings.ListNamespaces] = [], + + [CommandStrings.Remote] = [], + + #endregion + }; + } + /// public override string? GenerateParameters() { @@ -836,299 +1128,10 @@ namespace MPF.Core.ExecutionContexts.Aaru } /// - public override Dictionary> GetCommandSupport() - { - return new Dictionary>() - { - #region Archive Family - - [CommandStrings.ArchivePrefixLong + " " + CommandStrings.ArchiveInfo] = [], - - #endregion - - #region Database Family - - [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseStats] = [], - - [CommandStrings.DatabasePrefixLong + " " + CommandStrings.DatabaseUpdate] = - [ - FlagStrings.ClearLong, - FlagStrings.ClearAllLong, - ], - - #endregion - - #region Device Family - - [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceInfo] = - [ - FlagStrings.OutputPrefixLong, - ], - - [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceList] = [], - - [CommandStrings.DevicePrefixLong + " " + CommandStrings.DeviceReport] = - [ - FlagStrings.TrapDiscLong, - ], - - #endregion - - #region Filesystem Family - - [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemExtract] = - [ - FlagStrings.EncodingLong, - FlagStrings.EncodingShort, - FlagStrings.ExtendedAttributesLong, - FlagStrings.ExtendedAttributesShort, - FlagStrings.NamespaceLong, - FlagStrings.NamespaceShort, - FlagStrings.OptionsLong, - FlagStrings.OptionsShort, - ], - - [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemInfo] = - [ - FlagStrings.EncodingLong, - FlagStrings.EncodingShort, - FlagStrings.ExtendedAttributesLong, - FlagStrings.ExtendedAttributesShort, - FlagStrings.NamespaceLong, - FlagStrings.NamespaceShort, - FlagStrings.OptionsLong, - FlagStrings.OptionsShort, - ], - - [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemListLong] = - [ - FlagStrings.EncodingLong, - FlagStrings.EncodingShort, - FlagStrings.FilesystemsLong, - FlagStrings.FilesystemsShort, - FlagStrings.LongFormatLong, - FlagStrings.LongFormatShort, - FlagStrings.PartitionsLong, - FlagStrings.PartitionsShort, - ], - - [CommandStrings.FilesystemPrefixLong + " " + CommandStrings.FilesystemOptions] = [], - - #endregion - - #region Image Family - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageChecksumLong] = - [ - FlagStrings.Adler32Long, - FlagStrings.Adler32Short, - FlagStrings.CRC16Long, - FlagStrings.CRC32Long, - FlagStrings.CRC32Short, - FlagStrings.CRC64Long, - FlagStrings.Fletcher16Long, - FlagStrings.Fletcher32Long, - FlagStrings.MD5Long, - FlagStrings.MD5Short, - FlagStrings.SeparatedTracksLong, - FlagStrings.SeparatedTracksShort, - FlagStrings.SHA1Long, - FlagStrings.SHA1Short, - FlagStrings.SHA256Long, - FlagStrings.SHA384Long, - FlagStrings.SHA512Long, - FlagStrings.SpamSumLong, - FlagStrings.SpamSumShort, - FlagStrings.WholeDiscLong, - FlagStrings.WholeDiscShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCompareLong] = [], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageConvert] = - [ - FlagStrings.CommentsLong, - FlagStrings.CountLong, - FlagStrings.CountShort, - FlagStrings.CreatorLong, - FlagStrings.DriveManufacturerLong, - FlagStrings.DriveModelLong, - FlagStrings.DriveRevisionLong, - FlagStrings.DriveSerialLong, - FlagStrings.FixSubchannelLong, - FlagStrings.FixSubchannelCrcLong, - FlagStrings.FixSubchannelPositionLong, - FlagStrings.ForceLong, - FlagStrings.ForceShort, - FlagStrings.FormatConvertLong, - FlagStrings.FormatConvertShort, - FlagStrings.GenerateSubchannelsLong, - FlagStrings.GeometryLong, - FlagStrings.GeometryShort, - FlagStrings.MediaBarcodeLong, - FlagStrings.MediaLastSequenceLong, - FlagStrings.MediaManufacturerLong, - FlagStrings.MediaModelLong, - FlagStrings.MediaPartNumberLong, - FlagStrings.MediaSequenceLong, - FlagStrings.MediaSerialLong, - FlagStrings.MediaTitleLong, - FlagStrings.OptionsLong, - FlagStrings.OptionsShort, - FlagStrings.ResumeFileLong, - FlagStrings.ResumeFileShort, - FlagStrings.XMLSidecarLong, - FlagStrings.XMLSidecarShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageCreateSidecar] = - [ - FlagStrings.BlockSizeLong, - FlagStrings.BlockSizeShort, - FlagStrings.EncodingLong, - FlagStrings.EncodingShort, - FlagStrings.TapeLong, - FlagStrings.TapeShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageDecode] = - [ - FlagStrings.DiskTagsLong, - FlagStrings.DiskTagsShort, - FlagStrings.LengthLong, - FlagStrings.LengthShort, - FlagStrings.SectorTagsLong, - FlagStrings.SectorTagsShort, - FlagStrings.StartLong, - FlagStrings.StartShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageEntropy] = - [ - FlagStrings.DuplicatedSectorsLong, - FlagStrings.DuplicatedSectorsShort, - FlagStrings.SeparatedTracksLong, - FlagStrings.SeparatedTracksShort, - FlagStrings.WholeDiscLong, - FlagStrings.WholeDiscShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageInfo] = [], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageOptions] = [], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImagePrint] = - [ - FlagStrings.LengthLong, - FlagStrings.LengthShort, - FlagStrings.LongSectorsLong, - FlagStrings.LongSectorsShort, - FlagStrings.StartLong, - FlagStrings.StartShort, - FlagStrings.WidthLong, - FlagStrings.WidthShort, - ], - - [CommandStrings.ImagePrefixLong + " " + CommandStrings.ImageVerify] = - [ - FlagStrings.VerifyDiscLong, - FlagStrings.VerifyDiscShort, - FlagStrings.VerifySectorsLong, - FlagStrings.VerifySectorsShort, - ], - - #endregion - - #region Media Family - - [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaDump] = - [ - FlagStrings.EjectLong, - FlagStrings.EncodingLong, - FlagStrings.EncodingShort, - FlagStrings.FirstPregapLong, - FlagStrings.FixOffsetLong, - FlagStrings.FixSubchannelLong, - FlagStrings.FixSubchannelCrcLong, - FlagStrings.FixSubchannelPositionLong, - FlagStrings.ForceLong, - FlagStrings.ForceShort, - FlagStrings.FormatConvertLong, - FlagStrings.FormatConvertShort, - FlagStrings.GenerateSubchannelsLong, - FlagStrings.MaxBlocksLong, - FlagStrings.MetadataLong, - FlagStrings.OptionsLong, - FlagStrings.OptionsShort, - FlagStrings.PersistentLong, - FlagStrings.PrivateLong, - FlagStrings.ResumeLong, - FlagStrings.ResumeShort, - FlagStrings.RetryPassesLong, - FlagStrings.RetryPassesShort, - FlagStrings.RetrySubchannelLong, - FlagStrings.SkipLong, - FlagStrings.SkipShort, - FlagStrings.SkipCdiReadyHoleLong, - FlagStrings.SpeedLong, - FlagStrings.StopOnErrorLong, - FlagStrings.StopOnErrorShort, - FlagStrings.StoreEncryptedLong, - FlagStrings.SubchannelLong, - FlagStrings.TitleKeysLong, - FlagStrings.TrimLong, - FlagStrings.UseBufferedReadsLong, - FlagStrings.XMLSidecarLong, - FlagStrings.XMLSidecarShort, - ], - - [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaInfo] = - [ - FlagStrings.OutputPrefixLong, - FlagStrings.OutputPrefixShort, - ], - - [CommandStrings.MediaPrefixLong + " " + CommandStrings.MediaScan] = - [ - FlagStrings.ImgBurnLogLong, - FlagStrings.ImgBurnLogShort, - FlagStrings.MHDDLogLong, - FlagStrings.MHDDLogShort, - FlagStrings.UseBufferedReadsLong, - ], - - #endregion - - #region Standalone Commands - - [CommandStrings.NONE] = - [ - FlagStrings.DebugLong, - FlagStrings.DebugShort, - FlagStrings.HelpLong, - FlagStrings.HelpShort, - FlagStrings.HelpShortAlt, - FlagStrings.VerboseLong, - FlagStrings.VerboseShort, - FlagStrings.VersionLong, - ], - - [CommandStrings.Configure] = [], - - [CommandStrings.Formats] = [], - - [CommandStrings.ListEncodings] = [], - - [CommandStrings.ListNamespaces] = [], - - [CommandStrings.Remote] = [], - - #endregion - }; - } + public override string GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType); /// - public override string GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType); + public override MediaType? GetMediaType() => null; /// public override bool IsDumpingCommand() diff --git a/MPF.Core/ExecutionContexts/BaseExecutionContext.cs b/MPF.Core/ExecutionContexts/BaseExecutionContext.cs index 0a5ef03b..a92c4262 100644 --- a/MPF.Core/ExecutionContexts/BaseExecutionContext.cs +++ b/MPF.Core/ExecutionContexts/BaseExecutionContext.cs @@ -148,54 +148,38 @@ namespace MPF.Core.ExecutionContexts SetDefaultParameters(drivePath, filename, driveSpeed, options); } - #region Virtual Methods + #region Abstract Methods /// /// Get all commands mapped to the supported flags /// /// Mappings from command to supported flags - public virtual Dictionary>? GetCommandSupport() => null; + public abstract Dictionary>? GetCommandSupport(); /// /// Blindly generate a parameter string based on the inputs /// /// Parameter string for invocation, null on error - public virtual string? GenerateParameters() => null; + public abstract string? GenerateParameters(); /// /// Get the default extension for a given media type /// /// MediaType value to check /// String representing the media type, null on error - public virtual string? GetDefaultExtension(MediaType? mediaType) => null; + public abstract string? GetDefaultExtension(MediaType? mediaType); /// /// Get the MediaType from the current set of parameters /// /// MediaType value if successful, null on error - public virtual MediaType? GetMediaType() => null; + public abstract MediaType? GetMediaType(); /// /// Gets if the current command is considered a dumping command or not /// /// True if it's a dumping command, false otherwise - public virtual bool IsDumpingCommand() => true; - - /// - /// Gets if the flag is supported by the current command - /// - /// Flag value to check - /// True if the flag value is supported, false otherwise - public virtual bool IsFlagSupported(string flag) - { - if (CommandSupport == null) - return false; - if (this.BaseCommand == null) - return false; - if (!CommandSupport.TryGetValue(this.BaseCommand, out var supported)) - return false; - return supported.Contains(flag); - } + public abstract bool IsDumpingCommand(); /// /// Returns if the current Parameter object is valid @@ -206,7 +190,7 @@ namespace MPF.Core.ExecutionContexts /// /// Reset all special variables to have default values /// - protected virtual void ResetValues() { } + protected abstract void ResetValues(); /// /// Set default parameters for a given system and media type @@ -215,14 +199,14 @@ namespace MPF.Core.ExecutionContexts /// Filename to use /// Drive speed to use /// Options object containing all settings that may be used for setting parameters - protected virtual void SetDefaultParameters(string? drivePath, string filename, int? driveSpeed, Options options) { } + protected abstract void SetDefaultParameters(string? drivePath, string filename, int? driveSpeed, Options options); /// /// Scan a possible parameter string and populate whatever possible /// /// String possibly representing parameters /// True if the parameters were set correctly, false otherwise - protected virtual bool ValidateAndSetParameters(string? parameters) => !string.IsNullOrEmpty(parameters); + protected abstract bool ValidateAndSetParameters(string? parameters); #endregion @@ -332,6 +316,22 @@ namespace MPF.Core.ExecutionContexts return File.ReadAllText(filename); } + /// + /// Gets if the flag is supported by the current command + /// + /// Flag value to check + /// True if the flag value is supported, false otherwise + protected bool IsFlagSupported(string flag) + { + if (CommandSupport == null) + return false; + if (this.BaseCommand == null) + return false; + if (!CommandSupport.TryGetValue(this.BaseCommand, out var supported)) + return false; + return supported.Contains(flag); + } + /// /// Returns whether a string is a valid drive letter /// diff --git a/MPF.Core/ExecutionContexts/DiscImageCreator/ExecutionContext.cs b/MPF.Core/ExecutionContexts/DiscImageCreator/ExecutionContext.cs index 84ba9b7d..7456128b 100644 --- a/MPF.Core/ExecutionContexts/DiscImageCreator/ExecutionContext.cs +++ b/MPF.Core/ExecutionContexts/DiscImageCreator/ExecutionContext.cs @@ -174,6 +174,217 @@ namespace MPF.Core.ExecutionContexts.DiscImageCreator #region BaseExecutionContext Implementations + /// + public override Dictionary> GetCommandSupport() + { + return new Dictionary>() + { + [CommandStrings.Audio] = + [ + FlagStrings.BEOpcode, + FlagStrings.C2Opcode, + FlagStrings.D8Opcode, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoFixSubP, + FlagStrings.NoFixSubQ, + FlagStrings.NoFixSubRtoW, + FlagStrings.Reverse, + FlagStrings.ScanAntiMod, + FlagStrings.ScanFileProtect, + FlagStrings.ScanSectorProtect, + FlagStrings.SkipSector, + FlagStrings.SubchannelReadLevel, + FlagStrings.Tages, + ], + + [CommandStrings.BluRay] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.DVDReread, + FlagStrings.ForceUnitAccess, + FlagStrings.UseAnchorVolumeDescriptorPointer, + ], + + [CommandStrings.Close] = [], + + [CommandStrings.CompactDisc] = + [ + FlagStrings.AddOffset, + FlagStrings.AMSF, + FlagStrings.AtariJaguar, + FlagStrings.BEOpcode, + FlagStrings.C2Opcode, + FlagStrings.D8Opcode, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ExtractMicroSoftCabFile, + FlagStrings.ForceUnitAccess, + FlagStrings.MultiSectorRead, + FlagStrings.NoFixSubP, + FlagStrings.NoFixSubQ, + FlagStrings.NoFixSubQLibCrypt, + FlagStrings.NoFixSubQSecuROM, + FlagStrings.NoFixSubRtoW, + FlagStrings.ScanAntiMod, + FlagStrings.ScanFileProtect, + FlagStrings.ScanSectorProtect, + FlagStrings.SeventyFour, + FlagStrings.SubchannelReadLevel, + FlagStrings.VideoNow, + FlagStrings.VideoNowColor, + FlagStrings.VideoNowXP, + ], + + [CommandStrings.Data] = + [ + FlagStrings.BEOpcode, + FlagStrings.C2Opcode, + FlagStrings.D8Opcode, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoFixSubP, + FlagStrings.NoFixSubQ, + FlagStrings.NoFixSubRtoW, + FlagStrings.Reverse, + FlagStrings.ScanAntiMod, + FlagStrings.ScanFileProtect, + FlagStrings.ScanSectorProtect, + FlagStrings.SkipSector, + FlagStrings.SubchannelReadLevel, + FlagStrings.Tages, + ], + + [CommandStrings.DigitalVideoDisc] = + [ + FlagStrings.CopyrightManagementInformation, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.DVDReread, + FlagStrings.Fix, + FlagStrings.ForceUnitAccess, + FlagStrings.PadSector, + FlagStrings.Range, + FlagStrings.Raw, + FlagStrings.Resume, + FlagStrings.Reverse, + FlagStrings.ScanFileProtect, + FlagStrings.SkipSector, + FlagStrings.UseAnchorVolumeDescriptorPointer, + ], + + [CommandStrings.Disk] = + [ + FlagStrings.DatExpand, + ], + + [CommandStrings.DriveSpeed] = [], + + [CommandStrings.Eject] = [], + + [CommandStrings.Floppy] = + [ + FlagStrings.DatExpand, + ], + + [CommandStrings.GDROM] = + [ + FlagStrings.BEOpcode, + FlagStrings.C2Opcode, + FlagStrings.D8Opcode, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoFixSubP, + FlagStrings.NoFixSubQ, + FlagStrings.NoFixSubRtoW, + FlagStrings.SubchannelReadLevel, + ], + + [CommandStrings.MDS] = [], + + [CommandStrings.Merge] = [], + + [CommandStrings.Reset] = [], + + [CommandStrings.SACD] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + ], + + [CommandStrings.Start] = [], + + [CommandStrings.Stop] = [], + + [CommandStrings.Sub] = [], + + [CommandStrings.Swap] = + [ + FlagStrings.AddOffset, + FlagStrings.BEOpcode, + FlagStrings.C2Opcode, + FlagStrings.D8Opcode, + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoFixSubP, + FlagStrings.NoFixSubQ, + FlagStrings.NoFixSubQLibCrypt, + FlagStrings.NoFixSubQSecuROM, + FlagStrings.NoFixSubRtoW, + FlagStrings.ScanAntiMod, + FlagStrings.ScanFileProtect, + FlagStrings.ScanSectorProtect, + FlagStrings.SeventyFour, + FlagStrings.SubchannelReadLevel, + FlagStrings.VideoNow, + FlagStrings.VideoNowColor, + FlagStrings.VideoNowXP, + ], + + [CommandStrings.Tape] = [], + + [CommandStrings.Version] = [], + + [CommandStrings.XBOX] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.DVDReread, + FlagStrings.ForceUnitAccess, + FlagStrings.NoSkipSS, + ], + + [CommandStrings.XBOXSwap] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoSkipSS, + ], + + [CommandStrings.XGD2Swap] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoSkipSS, + ], + + [CommandStrings.XGD3Swap] = + [ + FlagStrings.DatExpand, + FlagStrings.DisableBeep, + FlagStrings.ForceUnitAccess, + FlagStrings.NoSkipSS, + ], + }; + } + /// public override string? GenerateParameters() { @@ -675,217 +886,6 @@ namespace MPF.Core.ExecutionContexts.DiscImageCreator return string.Join(" ", [.. parameters]); } - /// - public override Dictionary> GetCommandSupport() - { - return new Dictionary>() - { - [CommandStrings.Audio] = - [ - FlagStrings.BEOpcode, - FlagStrings.C2Opcode, - FlagStrings.D8Opcode, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoFixSubP, - FlagStrings.NoFixSubQ, - FlagStrings.NoFixSubRtoW, - FlagStrings.Reverse, - FlagStrings.ScanAntiMod, - FlagStrings.ScanFileProtect, - FlagStrings.ScanSectorProtect, - FlagStrings.SkipSector, - FlagStrings.SubchannelReadLevel, - FlagStrings.Tages, - ], - - [CommandStrings.BluRay] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.DVDReread, - FlagStrings.ForceUnitAccess, - FlagStrings.UseAnchorVolumeDescriptorPointer, - ], - - [CommandStrings.Close] = [], - - [CommandStrings.CompactDisc] = - [ - FlagStrings.AddOffset, - FlagStrings.AMSF, - FlagStrings.AtariJaguar, - FlagStrings.BEOpcode, - FlagStrings.C2Opcode, - FlagStrings.D8Opcode, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ExtractMicroSoftCabFile, - FlagStrings.ForceUnitAccess, - FlagStrings.MultiSectorRead, - FlagStrings.NoFixSubP, - FlagStrings.NoFixSubQ, - FlagStrings.NoFixSubQLibCrypt, - FlagStrings.NoFixSubQSecuROM, - FlagStrings.NoFixSubRtoW, - FlagStrings.ScanAntiMod, - FlagStrings.ScanFileProtect, - FlagStrings.ScanSectorProtect, - FlagStrings.SeventyFour, - FlagStrings.SubchannelReadLevel, - FlagStrings.VideoNow, - FlagStrings.VideoNowColor, - FlagStrings.VideoNowXP, - ], - - [CommandStrings.Data] = - [ - FlagStrings.BEOpcode, - FlagStrings.C2Opcode, - FlagStrings.D8Opcode, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoFixSubP, - FlagStrings.NoFixSubQ, - FlagStrings.NoFixSubRtoW, - FlagStrings.Reverse, - FlagStrings.ScanAntiMod, - FlagStrings.ScanFileProtect, - FlagStrings.ScanSectorProtect, - FlagStrings.SkipSector, - FlagStrings.SubchannelReadLevel, - FlagStrings.Tages, - ], - - [CommandStrings.DigitalVideoDisc] = - [ - FlagStrings.CopyrightManagementInformation, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.DVDReread, - FlagStrings.Fix, - FlagStrings.ForceUnitAccess, - FlagStrings.PadSector, - FlagStrings.Range, - FlagStrings.Raw, - FlagStrings.Resume, - FlagStrings.Reverse, - FlagStrings.ScanFileProtect, - FlagStrings.SkipSector, - FlagStrings.UseAnchorVolumeDescriptorPointer, - ], - - [CommandStrings.Disk] = - [ - FlagStrings.DatExpand, - ], - - [CommandStrings.DriveSpeed] = [], - - [CommandStrings.Eject] = [], - - [CommandStrings.Floppy] = - [ - FlagStrings.DatExpand, - ], - - [CommandStrings.GDROM] = - [ - FlagStrings.BEOpcode, - FlagStrings.C2Opcode, - FlagStrings.D8Opcode, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoFixSubP, - FlagStrings.NoFixSubQ, - FlagStrings.NoFixSubRtoW, - FlagStrings.SubchannelReadLevel, - ], - - [CommandStrings.MDS] = [], - - [CommandStrings.Merge] = [], - - [CommandStrings.Reset] = [], - - [CommandStrings.SACD] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - ], - - [CommandStrings.Start] = [], - - [CommandStrings.Stop] = [], - - [CommandStrings.Sub] = [], - - [CommandStrings.Swap] = - [ - FlagStrings.AddOffset, - FlagStrings.BEOpcode, - FlagStrings.C2Opcode, - FlagStrings.D8Opcode, - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoFixSubP, - FlagStrings.NoFixSubQ, - FlagStrings.NoFixSubQLibCrypt, - FlagStrings.NoFixSubQSecuROM, - FlagStrings.NoFixSubRtoW, - FlagStrings.ScanAntiMod, - FlagStrings.ScanFileProtect, - FlagStrings.ScanSectorProtect, - FlagStrings.SeventyFour, - FlagStrings.SubchannelReadLevel, - FlagStrings.VideoNow, - FlagStrings.VideoNowColor, - FlagStrings.VideoNowXP, - ], - - [CommandStrings.Tape] = [], - - [CommandStrings.Version] = [], - - [CommandStrings.XBOX] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.DVDReread, - FlagStrings.ForceUnitAccess, - FlagStrings.NoSkipSS, - ], - - [CommandStrings.XBOXSwap] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoSkipSS, - ], - - [CommandStrings.XGD2Swap] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoSkipSS, - ], - - [CommandStrings.XGD3Swap] = - [ - FlagStrings.DatExpand, - FlagStrings.DisableBeep, - FlagStrings.ForceUnitAccess, - FlagStrings.NoSkipSS, - ], - }; - } - /// public override string? GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType); diff --git a/MPF.Core/ExecutionContexts/Redumper/ExecutionContext.cs b/MPF.Core/ExecutionContexts/Redumper/ExecutionContext.cs index 468b1718..329ef991 100644 --- a/MPF.Core/ExecutionContexts/Redumper/ExecutionContext.cs +++ b/MPF.Core/ExecutionContexts/Redumper/ExecutionContext.cs @@ -166,6 +166,68 @@ namespace MPF.Core.ExecutionContexts.Redumper #region BaseExecutionContext Implementations + /// + /// Command support is irrelevant for redumper + public override Dictionary> GetCommandSupport() + { + return new Dictionary>() + { + [CommandStrings.NONE] = + [ + // General + FlagStrings.HelpLong, + FlagStrings.HelpShort, + FlagStrings.Version, + FlagStrings.Verbose, + FlagStrings.Debug, + FlagStrings.Drive, + FlagStrings.Speed, + FlagStrings.Retries, + FlagStrings.ImagePath, + FlagStrings.ImageName, + FlagStrings.Overwrite, + + // Drive Configuration + FlagStrings.DriveType, + FlagStrings.DriveReadOffset, + FlagStrings.DriveC2Shift, + FlagStrings.DrivePregapStart, + FlagStrings.DriveReadMethod, + FlagStrings.DriveSectorOrder, + + // Drive Specific + FlagStrings.PlextorSkipLeadin, + FlagStrings.PlextorLeadinRetries, + FlagStrings.AsusSkipLeadout, + + // Offset + FlagStrings.ForceOffset, + FlagStrings.AudioSilenceThreshold, + FlagStrings.CorrectOffsetShift, + FlagStrings.OffsetShiftRelocate, + + // Split + FlagStrings.ForceSplit, + FlagStrings.LeaveUnchanged, + FlagStrings.ForceQTOC, + FlagStrings.SkipFill, + FlagStrings.ISO9660Trim, + + // Miscellaneous + FlagStrings.LBAStart, + FlagStrings.LBAEnd, + FlagStrings.RefineSubchannel, + FlagStrings.Skip, + FlagStrings.DumpWriteOffset, + FlagStrings.DumpReadSize, + FlagStrings.OverreadLeadout, + FlagStrings.ForceUnscrambled, + FlagStrings.LegacySubs, + FlagStrings.DisableCDText, + ], + }; + } + /// /// /// Redumper is unique in that the base command can be multiple @@ -421,69 +483,10 @@ namespace MPF.Core.ExecutionContexts.Redumper } /// - /// Command support is irrelevant for redumper - public override Dictionary> GetCommandSupport() - { - return new Dictionary>() - { - [CommandStrings.NONE] = - [ - // General - FlagStrings.HelpLong, - FlagStrings.HelpShort, - FlagStrings.Version, - FlagStrings.Verbose, - FlagStrings.Debug, - FlagStrings.Drive, - FlagStrings.Speed, - FlagStrings.Retries, - FlagStrings.ImagePath, - FlagStrings.ImageName, - FlagStrings.Overwrite, - - // Drive Configuration - FlagStrings.DriveType, - FlagStrings.DriveReadOffset, - FlagStrings.DriveC2Shift, - FlagStrings.DrivePregapStart, - FlagStrings.DriveReadMethod, - FlagStrings.DriveSectorOrder, - - // Drive Specific - FlagStrings.PlextorSkipLeadin, - FlagStrings.PlextorLeadinRetries, - FlagStrings.AsusSkipLeadout, - - // Offset - FlagStrings.ForceOffset, - FlagStrings.AudioSilenceThreshold, - FlagStrings.CorrectOffsetShift, - FlagStrings.OffsetShiftRelocate, - - // Split - FlagStrings.ForceSplit, - FlagStrings.LeaveUnchanged, - FlagStrings.ForceQTOC, - FlagStrings.SkipFill, - FlagStrings.ISO9660Trim, - - // Miscellaneous - FlagStrings.LBAStart, - FlagStrings.LBAEnd, - FlagStrings.RefineSubchannel, - FlagStrings.Skip, - FlagStrings.DumpWriteOffset, - FlagStrings.DumpReadSize, - FlagStrings.OverreadLeadout, - FlagStrings.ForceUnscrambled, - FlagStrings.LegacySubs, - FlagStrings.DisableCDText, - ], - }; - } + public override string? GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType); /// - public override string? GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType); + public override MediaType? GetMediaType() => null; /// public override bool IsDumpingCommand()