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