Make some methods required for override

This commit is contained in:
Matt Nadareski
2024-05-21 16:16:39 -04:00
parent d688fc6975
commit c3bfd02310
5 changed files with 595 additions and 588 deletions

View File

@@ -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)

View File

@@ -124,6 +124,298 @@ namespace MPF.Core.ExecutionContexts.Aaru
#region BaseExecutionContext Implementations
/// <inheritdoc/>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
#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
};
}
/// <inheritdoc/>
public override string? GenerateParameters()
{
@@ -836,299 +1128,10 @@ namespace MPF.Core.ExecutionContexts.Aaru
}
/// <inheritdoc/>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
#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);
/// <inheritdoc/>
public override string GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType);
public override MediaType? GetMediaType() => null;
/// <inheritdoc/>
public override bool IsDumpingCommand()

View File

@@ -148,54 +148,38 @@ namespace MPF.Core.ExecutionContexts
SetDefaultParameters(drivePath, filename, driveSpeed, options);
}
#region Virtual Methods
#region Abstract Methods
/// <summary>
/// Get all commands mapped to the supported flags
/// </summary>
/// <returns>Mappings from command to supported flags</returns>
public virtual Dictionary<string, List<string>>? GetCommandSupport() => null;
public abstract Dictionary<string, List<string>>? GetCommandSupport();
/// <summary>
/// Blindly generate a parameter string based on the inputs
/// </summary>
/// <returns>Parameter string for invocation, null on error</returns>
public virtual string? GenerateParameters() => null;
public abstract string? GenerateParameters();
/// <summary>
/// Get the default extension for a given media type
/// </summary>
/// <param name="mediaType">MediaType value to check</param>
/// <returns>String representing the media type, null on error</returns>
public virtual string? GetDefaultExtension(MediaType? mediaType) => null;
public abstract string? GetDefaultExtension(MediaType? mediaType);
/// <summary>
/// Get the MediaType from the current set of parameters
/// </summary>
/// <returns>MediaType value if successful, null on error</returns>
public virtual MediaType? GetMediaType() => null;
public abstract MediaType? GetMediaType();
/// <summary>
/// Gets if the current command is considered a dumping command or not
/// </summary>
/// <returns>True if it's a dumping command, false otherwise</returns>
public virtual bool IsDumpingCommand() => true;
/// <summary>
/// Gets if the flag is supported by the current command
/// </summary>
/// <param name="flag">Flag value to check</param>
/// <returns>True if the flag value is supported, false otherwise</returns>
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();
/// <summary>
/// Returns if the current Parameter object is valid
@@ -206,7 +190,7 @@ namespace MPF.Core.ExecutionContexts
/// <summary>
/// Reset all special variables to have default values
/// </summary>
protected virtual void ResetValues() { }
protected abstract void ResetValues();
/// <summary>
/// Set default parameters for a given system and media type
@@ -215,14 +199,14 @@ namespace MPF.Core.ExecutionContexts
/// <param name="filename">Filename to use</param>
/// <param name="driveSpeed">Drive speed to use</param>
/// <param name="options">Options object containing all settings that may be used for setting parameters</param>
protected virtual void SetDefaultParameters(string? drivePath, string filename, int? driveSpeed, Options options) { }
protected abstract void SetDefaultParameters(string? drivePath, string filename, int? driveSpeed, Options options);
/// <summary>
/// Scan a possible parameter string and populate whatever possible
/// </summary>
/// <param name="parameters">String possibly representing parameters</param>
/// <returns>True if the parameters were set correctly, false otherwise</returns>
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);
}
/// <summary>
/// Gets if the flag is supported by the current command
/// </summary>
/// <param name="flag">Flag value to check</param>
/// <returns>True if the flag value is supported, false otherwise</returns>
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);
}
/// <summary>
/// Returns whether a string is a valid drive letter
/// </summary>

View File

@@ -174,6 +174,217 @@ namespace MPF.Core.ExecutionContexts.DiscImageCreator
#region BaseExecutionContext Implementations
/// <inheritdoc/>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
[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,
],
};
}
/// <inheritdoc/>
public override string? GenerateParameters()
{
@@ -675,217 +886,6 @@ namespace MPF.Core.ExecutionContexts.DiscImageCreator
return string.Join(" ", [.. parameters]);
}
/// <inheritdoc/>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
[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,
],
};
}
/// <inheritdoc/>
public override string? GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType);

View File

@@ -166,6 +166,68 @@ namespace MPF.Core.ExecutionContexts.Redumper
#region BaseExecutionContext Implementations
/// <inheritdoc/>
/// <remarks>Command support is irrelevant for redumper</remarks>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
[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,
],
};
}
/// <inheritdoc/>
/// <remarks>
/// Redumper is unique in that the base command can be multiple
@@ -421,69 +483,10 @@ namespace MPF.Core.ExecutionContexts.Redumper
}
/// <inheritdoc/>
/// <remarks>Command support is irrelevant for redumper</remarks>
public override Dictionary<string, List<string>> GetCommandSupport()
{
return new Dictionary<string, List<string>>()
{
[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);
/// <inheritdoc/>
public override string? GetDefaultExtension(MediaType? mediaType) => Converters.Extension(mediaType);
public override MediaType? GetMediaType() => null;
/// <inheritdoc/>
public override bool IsDumpingCommand()